1 /* 2 * Side-channel API definitions for CUPS. 3 * 4 * Copyright 2007-2012 by Apple Inc. 5 * Copyright 2006 by Easy Software Products. 6 * 7 * These coded instructions, statements, and computer programs are the 8 * property of Apple Inc. and are protected by Federal copyright 9 * law. Distribution and use rights are outlined in the file "LICENSE.txt" 10 * which should have been included with this file. If this file is 11 * missing or damaged, see the license at "http://www.cups.org/". 12 * 13 * This file is subject to the Apple OS-Developed Software exception. 14 */ 15 16 #ifndef _CUPS_SIDECHANNEL_H_ 17 # define _CUPS_SIDECHANNEL_H_ 18 19 /* 20 * Include necessary headers... 21 */ 22 23 # include "versioning.h" 24 25 26 /* 27 * C++ magic... 28 */ 29 30 # ifdef __cplusplus 31 extern "C" { 32 # endif /* __cplusplus */ 33 34 35 /* 36 * Constants... 37 */ 38 39 #define CUPS_SC_FD 4 /* File descriptor for select/poll */ 40 41 42 /* 43 * Enumerations... 44 */ 45 46 enum cups_sc_bidi_e /**** Bidirectional capability values ****/ 47 { 48 CUPS_SC_BIDI_NOT_SUPPORTED = 0, /* Bidirectional I/O is not supported */ 49 CUPS_SC_BIDI_SUPPORTED = 1 /* Bidirectional I/O is supported */ 50 }; 51 typedef enum cups_sc_bidi_e cups_sc_bidi_t; 52 /**** Bidirectional capabilities ****/ 53 54 enum cups_sc_command_e /**** Request command codes ****/ 55 { 56 CUPS_SC_CMD_NONE = 0, /* No command @private@ */ 57 CUPS_SC_CMD_SOFT_RESET = 1, /* Do a soft reset */ 58 CUPS_SC_CMD_DRAIN_OUTPUT = 2, /* Drain all pending output */ 59 CUPS_SC_CMD_GET_BIDI = 3, /* Return bidirectional capabilities */ 60 CUPS_SC_CMD_GET_DEVICE_ID = 4, /* Return the IEEE-1284 device ID */ 61 CUPS_SC_CMD_GET_STATE = 5, /* Return the device state */ 62 CUPS_SC_CMD_SNMP_GET = 6, /* Query an SNMP OID @since CUPS 1.4/macOS 10.6@ */ 63 CUPS_SC_CMD_SNMP_GET_NEXT = 7, /* Query the next SNMP OID @since CUPS 1.4/macOS 10.6@ */ 64 CUPS_SC_CMD_GET_CONNECTED = 8, /* Return whether the backend is "connected" to the printer @since CUPS 1.5/macOS 10.7@ */ 65 CUPS_SC_CMD_MAX /* End of valid values @private@ */ 66 }; 67 typedef enum cups_sc_command_e cups_sc_command_t; 68 /**** Request command codes ****/ 69 70 enum cups_sc_connected_e /**** Connectivity values ****/ 71 { 72 CUPS_SC_NOT_CONNECTED = 0, /* Backend is not "connected" to printer */ 73 CUPS_SC_CONNECTED = 1 /* Backend is "connected" to printer */ 74 }; 75 typedef enum cups_sc_connected_e cups_sc_connected_t; 76 /**** Connectivity values ****/ 77 78 79 enum cups_sc_state_e /**** Printer state bits ****/ 80 { 81 CUPS_SC_STATE_OFFLINE = 0, /* Device is offline */ 82 CUPS_SC_STATE_ONLINE = 1, /* Device is online */ 83 CUPS_SC_STATE_BUSY = 2, /* Device is busy */ 84 CUPS_SC_STATE_ERROR = 4, /* Other error condition */ 85 CUPS_SC_STATE_MEDIA_LOW = 16, /* Paper low condition */ 86 CUPS_SC_STATE_MEDIA_EMPTY = 32, /* Paper out condition */ 87 CUPS_SC_STATE_MARKER_LOW = 64, /* Toner/ink low condition */ 88 CUPS_SC_STATE_MARKER_EMPTY = 128 /* Toner/ink out condition */ 89 }; 90 typedef enum cups_sc_state_e cups_sc_state_t; 91 /**** Printer state bits ****/ 92 93 enum cups_sc_status_e /**** Response status codes ****/ 94 { 95 CUPS_SC_STATUS_NONE, /* No status */ 96 CUPS_SC_STATUS_OK, /* Operation succeeded */ 97 CUPS_SC_STATUS_IO_ERROR, /* An I/O error occurred */ 98 CUPS_SC_STATUS_TIMEOUT, /* The backend did not respond */ 99 CUPS_SC_STATUS_NO_RESPONSE, /* The device did not respond */ 100 CUPS_SC_STATUS_BAD_MESSAGE, /* The command/response message was invalid */ 101 CUPS_SC_STATUS_TOO_BIG, /* Response too big */ 102 CUPS_SC_STATUS_NOT_IMPLEMENTED /* Command not implemented */ 103 }; 104 typedef enum cups_sc_status_e cups_sc_status_t; 105 /**** Response status codes ****/ 106 107 typedef void (*cups_sc_walk_func_t)(const char *oid, const char *data, 108 int datalen, void *context); 109 /**** SNMP walk callback ****/ 110 111 112 /* 113 * Prototypes... 114 */ 115 116 extern cups_sc_status_t cupsSideChannelDoRequest(cups_sc_command_t command, 117 char *data, int *datalen, 118 double timeout) _CUPS_API_1_3; 119 extern int cupsSideChannelRead(cups_sc_command_t *command, 120 cups_sc_status_t *status, 121 char *data, int *datalen, 122 double timeout) _CUPS_API_1_3; 123 extern int cupsSideChannelWrite(cups_sc_command_t command, 124 cups_sc_status_t status, 125 const char *data, int datalen, 126 double timeout) _CUPS_API_1_3; 127 128 /**** New in CUPS 1.4 ****/ 129 extern cups_sc_status_t cupsSideChannelSNMPGet(const char *oid, char *data, 130 int *datalen, double timeout) 131 _CUPS_API_1_4; 132 extern cups_sc_status_t cupsSideChannelSNMPWalk(const char *oid, double timeout, 133 cups_sc_walk_func_t cb, 134 void *context) _CUPS_API_1_4; 135 136 137 # ifdef __cplusplus 138 } 139 # endif /* __cplusplus */ 140 141 #endif /* !_CUPS_SIDECHANNEL_H_ */ 142