| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * Copyright (C) 2016 Mopria Alliance, Inc. |
| * Copyright (C) 2013 Hewlett-Packard Development Company, L.P. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef __LIB_PCL_H__ |
| #define __LIB_PCL_H__ |
| |
| #include "ifc_print_job.h" |
| #include "ifc_wprint.h" |
| #include "lib_wprint.h" |
| #include "lib_pclm.h" |
| #include "common_defines.h" |
| |
| #define _WJOBH_NONE 0 |
| #define STANDARD_SCALE_FOR_PDF 72.0 |
| |
| #define SP_GRAY(Yr, Cbg, Crb) (((Yr<<6) + (Cbg*160) + (Crb<<5)) >> 8) |
| |
| #define _START_JOB(JOB_INFO, EXT) \ |
| { \ |
| const ifc_wprint_debug_stream_t* debug_ifc = \ |
| JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ |
| if (debug_ifc) { \ |
| debug_ifc->debug_start_job(JOB_INFO->job_handle, EXT); \ |
| } \ |
| } |
| |
| #define _START_PAGE(JOB_INFO, WIDTH, HEIGHT) \ |
| { \ |
| const ifc_wprint_debug_stream_t* debug_ifc = \ |
| JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ |
| if (debug_ifc) { \ |
| debug_ifc->debug_start_page(JOB_INFO->job_handle, JOB_INFO->page_number + 1, WIDTH, \ |
| HEIGHT); \ |
| } \ |
| } |
| |
| #define _PAGE_DATA(JOB_INFO, BUFF, LEN) \ |
| { \ |
| const ifc_wprint_debug_stream_t* debug_ifc = \ |
| JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ |
| if (debug_ifc) { \ |
| debug_ifc->debug_page_data(JOB_INFO->job_handle, BUFF, LEN); \ |
| } \ |
| } |
| |
| #define _END_PAGE(JOB_INFO) \ |
| { \ |
| const ifc_wprint_debug_stream_t* debug_ifc = \ |
| JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ |
| if (debug_ifc) { \ |
| debug_ifc->debug_end_page(JOB_INFO->job_handle); \ |
| } \ |
| } |
| |
| #define _END_JOB(JOB_INFO) \ |
| { \ |
| const ifc_wprint_debug_stream_t* debug_ifc = \ |
| JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ |
| if (debug_ifc) { \ |
| debug_ifc->debug_end_job(JOB_INFO->job_handle); \ |
| } \ |
| } |
| |
| #define _WRITE(JOB_INFO, BUFF, LEN) \ |
| { \ |
| const ifc_wprint_debug_stream_t* debug_ifc = \ |
| JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ |
| if (debug_ifc) { \ |
| debug_ifc->debug_job_data(JOB_INFO->job_handle, (const unsigned char *)BUFF, LEN); \ |
| } \ |
| JOB_INFO->print_ifc->send_data(JOB_INFO->print_ifc, BUFF, LEN); \ |
| } |
| |
| /* |
| * PCL/PWG job definition |
| */ |
| typedef struct { |
| const ifc_wprint_t *wprint_ifc; |
| const ifc_print_job_t *print_ifc; |
| |
| wJob_t job_handle; |
| uint8 *seed_row, *pcl_buff; |
| uint8 *halftone_row; |
| sint16 *error_buf; |
| int pixel_width, pixel_height; |
| media_size_t media_size; |
| int resolution; |
| int page_number, num_rows; |
| int send_full_row; |
| int rows_to_skip; |
| uint8 monochrome; |
| |
| int num_components; |
| int scan_line_width; |
| float standard_scale; |
| int strip_height; |
| int pclm_scan_line_width; |
| |
| void *pclmgen_obj; |
| PCLmPageSetup pclm_page_info; |
| uint8 *pclm_output_buffer; |
| const char *useragent; |
| } pcl_job_info_t; |
| |
| /* |
| * Interface for PCL and PWG job handling |
| */ |
| typedef struct ifc_pcl_st { |
| /* |
| * Called once per job at the start of the job. Returns a print job handle that is used |
| * in other functions of this library. Returns WPRINT_BAD_JOB_HANDLE for errors. |
| */ |
| wJob_t (*start_job)(wJob_t job_handle, pcl_job_info_t *job_info, media_size_t media_size, |
| media_type_t media_type, int resolution, duplex_t duplex, |
| duplex_dry_time_t dry_time, color_space_t color_space, media_tray_t media_tray, |
| float top_margin, float left_margin); |
| |
| /* |
| * Called once per job at the end of the job. A current print job |
| * must end for the next one to start. Returns OK or ERROR as the case maybe. |
| */ |
| status_t (*end_job)(pcl_job_info_t *job_info); |
| |
| /* |
| * Called once per page of the job to indicate start of the page and page metrics. |
| * Returns running page number starting with 1 or ERROR. |
| */ |
| status_t (*start_page)(pcl_job_info_t *job_info, |
| int pixel_width, |
| int pixel_height); |
| |
| /* |
| * Called once per page of the job to indicate end of the page. Returns OK or ERROR. |
| */ |
| status_t (*end_page)(pcl_job_info_t *job_info, |
| int page_number); |
| |
| /* |
| * Called several times a page to send a rectangular swath of RGB data. The array |
| * rgb_pixels[] must have (num_rows * pixel_width) pixels. bytes_per_row can be used for |
| * 32-bit aligned rows. Returns OK or ERROR. |
| */ |
| status_t (*print_swath)(pcl_job_info_t *job_info, char *rgb_pixels, int start_row, int num_rows, |
| int bytes_per_row); |
| |
| /* |
| * Return true if this interface can cancel a job partway through a page |
| */ |
| bool (*canCancelMidPage)(void); |
| } ifc_pcl_t; |
| |
| /* |
| * Connect to the PCLm plugin, returning its interface |
| */ |
| ifc_pcl_t *pclm_connect(void); |
| |
| /* |
| * Connect to the pwg plugin, returning its interface |
| */ |
| ifc_pcl_t *pwg_connect(void); |
| |
| #endif // __LIB_PCL_H__ |