13bf66744d61d18c66d46f2608de0467ad3df0268Mopria/* 23bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Copyright (C) 2016 The Android Open Source Project 33bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Copyright (C) 2016 Mopria Alliance, Inc. 43bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Copyright (C) 2013 Hewlett-Packard Development Company, L.P. 53bf66744d61d18c66d46f2608de0467ad3df0268Mopria * 63bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Licensed under the Apache License, Version 2.0 (the "License"); 73bf66744d61d18c66d46f2608de0467ad3df0268Mopria * you may not use this file except in compliance with the License. 83bf66744d61d18c66d46f2608de0467ad3df0268Mopria * You may obtain a copy of the License at 93bf66744d61d18c66d46f2608de0467ad3df0268Mopria * 103bf66744d61d18c66d46f2608de0467ad3df0268Mopria * http://www.apache.org/licenses/LICENSE-2.0 113bf66744d61d18c66d46f2608de0467ad3df0268Mopria * 123bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Unless required by applicable law or agreed to in writing, software 133bf66744d61d18c66d46f2608de0467ad3df0268Mopria * distributed under the License is distributed on an "AS IS" BASIS, 143bf66744d61d18c66d46f2608de0467ad3df0268Mopria * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 153bf66744d61d18c66d46f2608de0467ad3df0268Mopria * See the License for the specific language governing permissions and 163bf66744d61d18c66d46f2608de0467ad3df0268Mopria * limitations under the License. 173bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 183bf66744d61d18c66d46f2608de0467ad3df0268Mopria 193bf66744d61d18c66d46f2608de0467ad3df0268Mopria#ifndef __LIB_PCL_H__ 203bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define __LIB_PCL_H__ 213bf66744d61d18c66d46f2608de0467ad3df0268Mopria 223bf66744d61d18c66d46f2608de0467ad3df0268Mopria#include "ifc_print_job.h" 233bf66744d61d18c66d46f2608de0467ad3df0268Mopria#include "ifc_wprint.h" 243bf66744d61d18c66d46f2608de0467ad3df0268Mopria#include "lib_wprint.h" 253bf66744d61d18c66d46f2608de0467ad3df0268Mopria#include "lib_pclm.h" 263bf66744d61d18c66d46f2608de0467ad3df0268Mopria#include "common_defines.h" 273bf66744d61d18c66d46f2608de0467ad3df0268Mopria 283bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define _WJOBH_NONE 0 293bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define STANDARD_SCALE_FOR_PDF 72.0 303bf66744d61d18c66d46f2608de0467ad3df0268Mopria 313bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define SP_GRAY(Yr, Cbg, Crb) (((Yr<<6) + (Cbg*160) + (Crb<<5)) >> 8) 323bf66744d61d18c66d46f2608de0467ad3df0268Mopria 333bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define _START_JOB(JOB_INFO, EXT) \ 343bf66744d61d18c66d46f2608de0467ad3df0268Mopria{ \ 353bf66744d61d18c66d46f2608de0467ad3df0268Mopria const ifc_wprint_debug_stream_t* debug_ifc = \ 363bf66744d61d18c66d46f2608de0467ad3df0268Mopria JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ 373bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (debug_ifc) { \ 383bf66744d61d18c66d46f2608de0467ad3df0268Mopria debug_ifc->debug_start_job(JOB_INFO->job_handle, EXT); \ 393bf66744d61d18c66d46f2608de0467ad3df0268Mopria } \ 403bf66744d61d18c66d46f2608de0467ad3df0268Mopria} 413bf66744d61d18c66d46f2608de0467ad3df0268Mopria 423bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define _START_PAGE(JOB_INFO, WIDTH, HEIGHT) \ 433bf66744d61d18c66d46f2608de0467ad3df0268Mopria{ \ 443bf66744d61d18c66d46f2608de0467ad3df0268Mopria const ifc_wprint_debug_stream_t* debug_ifc = \ 453bf66744d61d18c66d46f2608de0467ad3df0268Mopria JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ 463bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (debug_ifc) { \ 473bf66744d61d18c66d46f2608de0467ad3df0268Mopria debug_ifc->debug_start_page(JOB_INFO->job_handle, JOB_INFO->page_number + 1, WIDTH, \ 483bf66744d61d18c66d46f2608de0467ad3df0268Mopria HEIGHT); \ 493bf66744d61d18c66d46f2608de0467ad3df0268Mopria } \ 503bf66744d61d18c66d46f2608de0467ad3df0268Mopria} 513bf66744d61d18c66d46f2608de0467ad3df0268Mopria 523bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define _PAGE_DATA(JOB_INFO, BUFF, LEN) \ 533bf66744d61d18c66d46f2608de0467ad3df0268Mopria{ \ 543bf66744d61d18c66d46f2608de0467ad3df0268Mopria const ifc_wprint_debug_stream_t* debug_ifc = \ 553bf66744d61d18c66d46f2608de0467ad3df0268Mopria JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ 563bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (debug_ifc) { \ 573bf66744d61d18c66d46f2608de0467ad3df0268Mopria debug_ifc->debug_page_data(JOB_INFO->job_handle, BUFF, LEN); \ 583bf66744d61d18c66d46f2608de0467ad3df0268Mopria } \ 593bf66744d61d18c66d46f2608de0467ad3df0268Mopria} 603bf66744d61d18c66d46f2608de0467ad3df0268Mopria 613bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define _END_PAGE(JOB_INFO) \ 623bf66744d61d18c66d46f2608de0467ad3df0268Mopria{ \ 633bf66744d61d18c66d46f2608de0467ad3df0268Mopria const ifc_wprint_debug_stream_t* debug_ifc = \ 643bf66744d61d18c66d46f2608de0467ad3df0268Mopria JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ 653bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (debug_ifc) { \ 663bf66744d61d18c66d46f2608de0467ad3df0268Mopria debug_ifc->debug_end_page(JOB_INFO->job_handle); \ 673bf66744d61d18c66d46f2608de0467ad3df0268Mopria } \ 683bf66744d61d18c66d46f2608de0467ad3df0268Mopria} 693bf66744d61d18c66d46f2608de0467ad3df0268Mopria 703bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define _END_JOB(JOB_INFO) \ 713bf66744d61d18c66d46f2608de0467ad3df0268Mopria{ \ 723bf66744d61d18c66d46f2608de0467ad3df0268Mopria const ifc_wprint_debug_stream_t* debug_ifc = \ 733bf66744d61d18c66d46f2608de0467ad3df0268Mopria JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ 743bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (debug_ifc) { \ 753bf66744d61d18c66d46f2608de0467ad3df0268Mopria debug_ifc->debug_end_job(JOB_INFO->job_handle); \ 763bf66744d61d18c66d46f2608de0467ad3df0268Mopria } \ 773bf66744d61d18c66d46f2608de0467ad3df0268Mopria} 783bf66744d61d18c66d46f2608de0467ad3df0268Mopria 793bf66744d61d18c66d46f2608de0467ad3df0268Mopria#define _WRITE(JOB_INFO, BUFF, LEN) \ 803bf66744d61d18c66d46f2608de0467ad3df0268Mopria{ \ 813bf66744d61d18c66d46f2608de0467ad3df0268Mopria const ifc_wprint_debug_stream_t* debug_ifc = \ 823bf66744d61d18c66d46f2608de0467ad3df0268Mopria JOB_INFO->wprint_ifc->get_debug_stream_ifc(JOB_INFO->job_handle); \ 833bf66744d61d18c66d46f2608de0467ad3df0268Mopria if (debug_ifc) { \ 843bf66744d61d18c66d46f2608de0467ad3df0268Mopria debug_ifc->debug_job_data(JOB_INFO->job_handle, (const unsigned char *)BUFF, LEN); \ 853bf66744d61d18c66d46f2608de0467ad3df0268Mopria } \ 863bf66744d61d18c66d46f2608de0467ad3df0268Mopria JOB_INFO->print_ifc->send_data(JOB_INFO->print_ifc, BUFF, LEN); \ 873bf66744d61d18c66d46f2608de0467ad3df0268Mopria} 883bf66744d61d18c66d46f2608de0467ad3df0268Mopria 893bf66744d61d18c66d46f2608de0467ad3df0268Mopria/* 903bf66744d61d18c66d46f2608de0467ad3df0268Mopria * PCL/PWG job definition 913bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 923bf66744d61d18c66d46f2608de0467ad3df0268Mopriatypedef struct { 933bf66744d61d18c66d46f2608de0467ad3df0268Mopria const ifc_wprint_t *wprint_ifc; 943bf66744d61d18c66d46f2608de0467ad3df0268Mopria const ifc_print_job_t *print_ifc; 953bf66744d61d18c66d46f2608de0467ad3df0268Mopria 963bf66744d61d18c66d46f2608de0467ad3df0268Mopria wJob_t job_handle; 973bf66744d61d18c66d46f2608de0467ad3df0268Mopria uint8 *seed_row, *pcl_buff; 983bf66744d61d18c66d46f2608de0467ad3df0268Mopria uint8 *halftone_row; 993bf66744d61d18c66d46f2608de0467ad3df0268Mopria sint16 *error_buf; 1003bf66744d61d18c66d46f2608de0467ad3df0268Mopria int pixel_width, pixel_height; 1013bf66744d61d18c66d46f2608de0467ad3df0268Mopria media_size_t media_size; 1023bf66744d61d18c66d46f2608de0467ad3df0268Mopria int resolution; 1033bf66744d61d18c66d46f2608de0467ad3df0268Mopria int page_number, num_rows; 1043bf66744d61d18c66d46f2608de0467ad3df0268Mopria int send_full_row; 1053bf66744d61d18c66d46f2608de0467ad3df0268Mopria int rows_to_skip; 1063bf66744d61d18c66d46f2608de0467ad3df0268Mopria uint8 monochrome; 1073bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1083bf66744d61d18c66d46f2608de0467ad3df0268Mopria int num_components; 1093bf66744d61d18c66d46f2608de0467ad3df0268Mopria int scan_line_width; 1103bf66744d61d18c66d46f2608de0467ad3df0268Mopria float standard_scale; 1113bf66744d61d18c66d46f2608de0467ad3df0268Mopria int strip_height; 1123bf66744d61d18c66d46f2608de0467ad3df0268Mopria int pclm_scan_line_width; 1133bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1143bf66744d61d18c66d46f2608de0467ad3df0268Mopria void *pclmgen_obj; 1153bf66744d61d18c66d46f2608de0467ad3df0268Mopria PCLmPageSetup pclm_page_info; 1163bf66744d61d18c66d46f2608de0467ad3df0268Mopria uint8 *pclm_output_buffer; 1173bf66744d61d18c66d46f2608de0467ad3df0268Mopria const char *useragent; 1183bf66744d61d18c66d46f2608de0467ad3df0268Mopria} pcl_job_info_t; 1193bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1203bf66744d61d18c66d46f2608de0467ad3df0268Mopria/* 1213bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Interface for PCL and PWG job handling 1223bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 1233bf66744d61d18c66d46f2608de0467ad3df0268Mopriatypedef struct ifc_pcl_st { 1243bf66744d61d18c66d46f2608de0467ad3df0268Mopria /* 1253bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Called once per job at the start of the job. Returns a print job handle that is used 1263bf66744d61d18c66d46f2608de0467ad3df0268Mopria * in other functions of this library. Returns WPRINT_BAD_JOB_HANDLE for errors. 1273bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 1283bf66744d61d18c66d46f2608de0467ad3df0268Mopria wJob_t (*start_job)(wJob_t job_handle, pcl_job_info_t *job_info, media_size_t media_size, 1293bf66744d61d18c66d46f2608de0467ad3df0268Mopria media_type_t media_type, int resolution, duplex_t duplex, 1303bf66744d61d18c66d46f2608de0467ad3df0268Mopria duplex_dry_time_t dry_time, color_space_t color_space, media_tray_t media_tray, 1313bf66744d61d18c66d46f2608de0467ad3df0268Mopria float top_margin, float left_margin); 1323bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1333bf66744d61d18c66d46f2608de0467ad3df0268Mopria /* 1343bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Called once per job at the end of the job. A current print job 1353bf66744d61d18c66d46f2608de0467ad3df0268Mopria * must end for the next one to start. Returns OK or ERROR as the case maybe. 1363bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 1373bf66744d61d18c66d46f2608de0467ad3df0268Mopria status_t (*end_job)(pcl_job_info_t *job_info); 1383bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1393bf66744d61d18c66d46f2608de0467ad3df0268Mopria /* 1403bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Called once per page of the job to indicate start of the page and page metrics. 1413bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Returns running page number starting with 1 or ERROR. 1423bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 1433bf66744d61d18c66d46f2608de0467ad3df0268Mopria status_t (*start_page)(pcl_job_info_t *job_info, 1443bf66744d61d18c66d46f2608de0467ad3df0268Mopria int pixel_width, 1453bf66744d61d18c66d46f2608de0467ad3df0268Mopria int pixel_height); 1463bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1473bf66744d61d18c66d46f2608de0467ad3df0268Mopria /* 1483bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Called once per page of the job to indicate end of the page. Returns OK or ERROR. 1493bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 1503bf66744d61d18c66d46f2608de0467ad3df0268Mopria status_t (*end_page)(pcl_job_info_t *job_info, 1513bf66744d61d18c66d46f2608de0467ad3df0268Mopria int page_number); 1523bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1533bf66744d61d18c66d46f2608de0467ad3df0268Mopria /* 1543bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Called several times a page to send a rectangular swath of RGB data. The array 1553bf66744d61d18c66d46f2608de0467ad3df0268Mopria * rgb_pixels[] must have (num_rows * pixel_width) pixels. bytes_per_row can be used for 1563bf66744d61d18c66d46f2608de0467ad3df0268Mopria * 32-bit aligned rows. Returns OK or ERROR. 1573bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 1583bf66744d61d18c66d46f2608de0467ad3df0268Mopria status_t (*print_swath)(pcl_job_info_t *job_info, char *rgb_pixels, int start_row, int num_rows, 1593bf66744d61d18c66d46f2608de0467ad3df0268Mopria int bytes_per_row); 1603bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1613bf66744d61d18c66d46f2608de0467ad3df0268Mopria /* 1623bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Return true if this interface can cancel a job partway through a page 1633bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 1643bf66744d61d18c66d46f2608de0467ad3df0268Mopria bool (*canCancelMidPage)(void); 1653bf66744d61d18c66d46f2608de0467ad3df0268Mopria} ifc_pcl_t; 1663bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1673bf66744d61d18c66d46f2608de0467ad3df0268Mopria/* 1683bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Connect to the PCLm plugin, returning its interface 1693bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 1703bf66744d61d18c66d46f2608de0467ad3df0268Mopriaifc_pcl_t *pclm_connect(void); 1713bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1723bf66744d61d18c66d46f2608de0467ad3df0268Mopria/* 1733bf66744d61d18c66d46f2608de0467ad3df0268Mopria * Connect to the pwg plugin, returning its interface 1743bf66744d61d18c66d46f2608de0467ad3df0268Mopria */ 1753bf66744d61d18c66d46f2608de0467ad3df0268Mopriaifc_pcl_t *pwg_connect(void); 1763bf66744d61d18c66d46f2608de0467ad3df0268Mopria 1773bf66744d61d18c66d46f2608de0467ad3df0268Mopria#endif // __LIB_PCL_H__