You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
5.3 KiB
177 lines
5.3 KiB
/*
|
|
* 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__
|