blob: 4f02725c64aba8e2ba62129df5c93b1a76b96d03 [file] [log] [blame]
/*
* 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__