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.
357 lines
10 KiB
357 lines
10 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_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)
|
|
|
|
#define HTTP_TIMEOUT_MILLIS 30000
|
|
|
|
#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__
|