| /* |
| * 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_WPRINT_H__ |
| #define __LIB_WPRINT_H__ |
| |
| #include "wtypes.h" |
| #include "wprint_df_types.h" |
| #include "mime_types.h" |
| #include "printer_capabilities_types.h" |
| #include "wprint_status_types.h" |
| #include "ifc_wprint.h" |
| #include <dlfcn.h> |
| #include <ctype.h> |
| #include <stdlib.h> |
| |
| #define WPRINT_BAD_JOB_HANDLE ((wJob_t) ERROR) |
| |
| #define _INTERFACE_MAJOR_VERSION 1 |
| #define _INTERFACE_MINOR_VERSION 0 |
| |
| #define _PLUGIN_MAJOR_VERSION 1 |
| |
| #define WPRINT_INTERFACE_VERSION ((uint32)((_INTERFACE_MAJOR_VERSION << 16) | \ |
| (_INTERFACE_MINOR_VERSION & 0xffff))) |
| #define WPRINT_PLUGIN_VERSION(X) ((uint32)((_PLUGIN_MAJOR_VERSION << 16) | (X & 0xffff))) |
| |
| #define major_version(X) ((X >> 16) & 0xffff) |
| #define minor_version(X) ((X >> 0) & 0xffff) |
| |
| #define STRIPE_HEIGHT (16) |
| #define BUFFERED_ROWS (STRIPE_HEIGHT * 8) |
| |
| #define MAX_MIME_LENGTH (64) |
| #define MAX_PRINTER_ADDR_LENGTH (64) |
| #define MAX_FILENAME_LENGTH (32) |
| #define MAX_PATHNAME_LENGTH (255) |
| #define MAX_ID_STRING_LENGTH (64) |
| #define MAX_NAME_LENGTH (255) |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif |
| |
| typedef enum { |
| DUPLEX_DRY_TIME_NORMAL, // 18 seconds |
| DUPLEX_DRY_TIME_LOWER, // 10 seconds |
| DUPLEX_DRY_TIME_MINIMUM // 5 seconds |
| } duplex_dry_time_t; |
| |
| typedef enum { |
| PORT_INVALID = -1, |
| PORT_FILE = 0, |
| PORT_IPP = 631, |
| } port_t; |
| |
| typedef enum { |
| PCLNONE, |
| PCLm, |
| PCLJPEG, |
| PCLPWG, |
| |
| PCL_NUM_TYPES |
| } pcl_t; |
| |
| typedef enum { |
| AUTO_ROTATE, |
| CENTER_VERTICAL, |
| CENTER_HORIZONTAL, |
| ROTATE_BACK_PAGE, |
| BACK_PAGE_PREROTATED, |
| AUTO_SCALE, |
| AUTO_FIT, |
| PORTRAIT_MODE, |
| LANDSCAPE_MODE, |
| CENTER_ON_ORIENTATION, |
| DOCUMENT_SCALING, |
| } render_flags_t; |
| |
| #define RENDER_FLAG_AUTO_ROTATE (1 << AUTO_ROTATE) |
| #define RENDER_FLAG_ROTATE_BACK_PAGE (1 << ROTATE_BACK_PAGE) |
| #define RENDER_FLAG_BACK_PAGE_PREROTATED (1 << BACK_PAGE_PREROTATED) |
| #define RENDER_FLAG_CENTER_VERTICAL (1 << CENTER_VERTICAL) |
| #define RENDER_FLAG_CENTER_HORIZONTAL (1 << CENTER_HORIZONTAL) |
| #define RENDER_FLAG_AUTO_SCALE (1 << AUTO_SCALE) |
| #define RENDER_FLAG_AUTO_FIT (1 << AUTO_FIT) |
| #define RENDER_FLAG_PORTRAIT_MODE (1 << PORTRAIT_MODE) |
| #define RENDER_FLAG_LANDSCAPE_MODE (1 << LANDSCAPE_MODE) |
| #define RENDER_FLAG_CENTER_ON_ORIENTATION (1 << CENTER_ON_ORIENTATION) |
| #define RENDER_FLAG_DOCUMENT_SCALING (1 << DOCUMENT_SCALING) |
| |
| #define AUTO_SCALE_RENDER_FLAGS (RENDER_FLAG_AUTO_SCALE | \ |
| RENDER_FLAG_AUTO_ROTATE | \ |
| RENDER_FLAG_CENTER_VERTICAL | \ |
| RENDER_FLAG_CENTER_HORIZONTAL) |
| |
| #define AUTO_FIT_RENDER_FLAGS (RENDER_FLAG_AUTO_FIT | \ |
| RENDER_FLAG_AUTO_ROTATE | \ |
| RENDER_FLAG_CENTER_ON_ORIENTATION) |
| |
| #define ORIENTATION_RENDER_FLAGS (RENDER_FLAG_AUTO_ROTATE | \ |
| RENDER_FLAG_PORTRAIT_MODE | \ |
| RENDER_FLAG_LANDSCAPE_MODE | \ |
| RENDER_FLAG_CENTER_ON_ORIENTATION) |
| |
| typedef void (*wprint_status_cb_t)(wJob_t job_id, void *parm); |
| |
| /* |
| * Parameters describing a job request |
| */ |
| typedef struct { |
| media_size_t media_size; |
| media_type_t media_type; |
| duplex_t duplex; |
| duplex_dry_time_t dry_time; |
| color_space_t color_space; |
| media_tray_t media_tray; |
| unsigned int num_copies; |
| bool borderless; |
| unsigned int render_flags; |
| float job_top_margin; |
| float job_left_margin; |
| float job_right_margin; |
| float job_bottom_margin; |
| |
| bool renderInReverseOrder; |
| |
| // these values are pixels |
| unsigned int print_top_margin; |
| unsigned int print_left_margin; |
| unsigned int print_right_margin; |
| unsigned int print_bottom_margin; |
| |
| // these values are in pixels |
| unsigned int pixel_units; |
| unsigned int width; |
| unsigned int height; |
| unsigned int printable_area_width; |
| unsigned int printable_area_height; |
| unsigned int strip_height; |
| |
| bool cancelled; |
| bool last_page; |
| int page_num; |
| int copy_num; |
| int copy_page_num; |
| int page_corrupted; |
| bool page_printing; |
| bool page_backside; |
| |
| bool media_size_name; |
| |
| // these values are in inches |
| float page_width; |
| float page_height; |
| float page_top_margin; |
| float page_left_margin; |
| float page_right_margin; |
| float page_bottom_margin; |
| |
| const char *print_format; |
| char *page_range; |
| pcl_t pcl_type; |
| void *plugin_data; |
| bool ipp_1_0_supported; |
| bool ipp_2_0_supported; |
| bool epcl_ipp_supported; |
| bool accepts_pclm; |
| bool accepts_pdf; |
| bool copies_supported; |
| int print_quality; |
| const char *useragent; |
| char docCategory[10]; |
| const char *media_default; |
| |
| // Expected certificate if any |
| uint8 *certificate; |
| int certificate_len; |
| |
| // IPP max job-name is 2**31 - 1, we set a shorter limit |
| char job_name[MAX_ID_STRING_LENGTH + 1]; |
| char job_originating_user_name[MAX_NAME_LENGTH + 1]; |
| int pdf_render_resolution; |
| bool accepts_app_name; |
| bool accepts_app_version; |
| bool accepts_os_name; |
| bool accepts_os_version; |
| } wprint_job_params_t; |
| |
| typedef struct wprint_connect_info_st wprint_connect_info_t; |
| |
| /* |
| * Parameters defining how to reach a remote printing service |
| */ |
| struct wprint_connect_info_st { |
| const char *printer_addr; |
| const char *uri_path; |
| const char *uri_scheme; |
| int port_num; |
| /* Timeout per retry in milliseconds */ |
| long timeout; |
| /* Return non-0 if the received certificate is not acceptable. */ |
| int (*validate_certificate)(struct wprint_connect_info_st *connect_info, uint8 *data, int data_len); |
| /* User-supplied data. */ |
| void *user; |
| }; |
| |
| /* |
| * Current state of a queued job |
| */ |
| typedef enum { |
| JOB_QUEUED = 1, |
| JOB_RUNNING, |
| JOB_BLOCKED, |
| JOB_DONE |
| } wprint_job_state_t; |
| |
| typedef struct { |
| wprint_job_state_t state; |
| unsigned int blocked_reasons; |
| int job_done_result; |
| // Certificate received from printer, if any |
| uint8 *certificate; |
| int certificate_len; |
| } wprint_job_callback_params_t; |
| |
| typedef enum { |
| PRIORITY_PASSTHRU = 1, |
| PRIORITY_LOCAL, |
| } wprint_priority_t; |
| |
| /* Forward declaration (actual definition in ifc_print_job.h) */ |
| struct ifc_print_job_st; |
| |
| /* |
| * Defines an interface for delivering print jobs |
| */ |
| typedef struct { |
| uint32 version; |
| wprint_priority_t priority; |
| |
| char const **(*get_mime_types)(void); |
| |
| char const **(*get_print_formats)(void); |
| |
| status_t (*start_job)(wJob_t job_handle, const ifc_wprint_t *wprint_ifc, |
| const struct ifc_print_job_st *job_ifc, wprint_job_params_t *job_params); |
| |
| status_t (*print_page)(wprint_job_params_t *job_params, const char *mime_type, |
| const char *pathname); |
| |
| status_t (*print_blank_page)(wJob_t job_handle, |
| wprint_job_params_t *job_params); |
| |
| status_t (*end_job)(wprint_job_params_t *job_params); |
| } wprint_plugin_t; |
| |
| /* |
| * Initialize the wprint system. Identify and gather capabilities of available plug-ins. |
| * Returns the number of plugins found or ERROR. |
| */ |
| int wprintInit(void); |
| |
| /* |
| * Call to test if wprint is running or has been shut down. |
| */ |
| bool wprintIsRunning(); |
| |
| /* |
| * Gets the capabilities of the specified printer. |
| */ |
| status_t wprintGetCapabilities(const wprint_connect_info_t *connect_info, |
| printer_capabilities_t *printer_cap); |
| |
| /* |
| * Fills in the job params structure with default values. |
| */ |
| status_t wprintGetDefaultJobParams(wprint_job_params_t *job_params); |
| |
| /* |
| * Fills in the job params structure with values in accordance with printer capabilities. |
| */ |
| status_t wprintGetFinalJobParams(wprint_job_params_t *job_param, |
| const printer_capabilities_t *printer_cap); |
| |
| /* |
| * 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 wprintStartJob(const char *printer_addr, port_t port_num, |
| const wprint_job_params_t *job_params, const printer_capabilities_t *printer_cap, |
| const char *mime_type, const char *pathname, wprint_status_cb_t cb_fn, |
| const char *debugDir, const char *scheme); |
| |
| /* |
| * Sent once per job at the end of the job. A current print job must end for the next one |
| * to start. |
| */ |
| status_t wprintEndJob(wJob_t job_handle); |
| |
| /* |
| * Sent once per page of a multi-page job to deliver a page image in a previously |
| * specified MIME type. The page_number must increment from 1. last_page flag is true if it |
| * is the last page of the job. |
| * |
| * top/left/right/bottom margin are the incremental per page margins in pixels |
| * at the current print resolution that are added on top of the physical page |
| * page margins, passing in 0 results in the default page margins being used. |
| */ |
| status_t wprintPage(wJob_t job_handle, int page_number, const char *filename, bool last_page, |
| bool pdf_page, unsigned int top_margin, unsigned int left_margin, |
| unsigned int right_margin, unsigned int bottom_margin); |
| |
| /* |
| * Cancels a spooled or running job. Returns OK or ERROR |
| */ |
| status_t wprintCancelJob(wJob_t job_handle); |
| |
| /* |
| * Exits the print subsystem |
| */ |
| status_t wprintExit(void); |
| |
| /* |
| * Supplies info about the sending application and OS name |
| */ |
| void wprintSetSourceInfo(const char *appName, const char *appVersion, const char *osName); |
| |
| /* Global variables to hold API, application, and OS details */ |
| extern int g_API_version; |
| extern char g_osName[MAX_ID_STRING_LENGTH + 1]; |
| extern char g_appName[MAX_ID_STRING_LENGTH + 1]; |
| extern char g_appVersion[MAX_ID_STRING_LENGTH + 1]; |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // __LIB_WPRINT_H__ |