summaryrefslogtreecommitdiff
path: root/usb_1.1.0/host/class/usb_host_printer.h
diff options
context:
space:
mode:
Diffstat (limited to 'usb_1.1.0/host/class/usb_host_printer.h')
-rw-r--r--usb_1.1.0/host/class/usb_host_printer.h301
1 files changed, 301 insertions, 0 deletions
diff --git a/usb_1.1.0/host/class/usb_host_printer.h b/usb_1.1.0/host/class/usb_host_printer.h
new file mode 100644
index 0000000..371ea80
--- /dev/null
+++ b/usb_1.1.0/host/class/usb_host_printer.h
@@ -0,0 +1,301 @@
+/*
+ * Copyright (c) 2016, Freescale Semiconductor, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * o Redistributions of source code must retain the above copyright notice, this list
+ * of conditions and the following disclaimer.
+ *
+ * o Redistributions in binary form must reproduce the above copyright notice, this
+ * list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __USB_HOST_PRINTER_H__
+#define __USB_HOST_PRINTER_H__
+
+/*******************************************************************************
+ * Definitions
+ ******************************************************************************/
+
+/*!
+ * @addtogroup usb_host_printer_drv
+ * @{
+ */
+
+/*! @brief Printer class code */
+#define USB_HOST_PRINTER_CLASS_CODE (7U)
+/*! @brief Printer sub-class code */
+#define USB_HOST_PRINTER_SUBCLASS_CODE (1U)
+/*! @brief Printer class protocol code (Unidirectional interface) */
+#define USB_HOST_PRINTER_PROTOCOL_UNIDIRECTION (1U)
+/*! @brief Printer class protocol code (Bi-directional interface) */
+#define USB_HOST_PRINTER_PROTOCOL_BIDIRECTION (2U)
+/*! @brief Printer class protocol code (IEEEĀ® 1284.4 compatible bi-directional interface) */
+#define USB_HOST_PRINTER_PROTOCOL_IEEE1284 (3U)
+
+/*! @brief Printer class-specific request (GET_DEVICE_ID) */
+#define USB_HOST_PRINTER_GET_DEVICE_ID (0)
+/*! @brief Printer class-specific request (GET_PORT_STATUS) */
+#define USB_HOST_PRINTER_GET_PORT_STATUS (1)
+/*! @brief Printer class-specific request (SOFT_RESET) */
+#define USB_HOST_PRINTER_SOFT_RESET (2)
+
+/*! @brief Paper empty bit mask for GET_PORT_STATUS */
+#define USB_HOST_PRINTER_PORT_STATUS_PAPER_EMPTRY_MASK (0x20U)
+/*! @brief Select bit mask for GET_PORT_STATUS */
+#define USB_HOST_PRINTER_PORT_STATUS_SELECT_MASK (0x10U)
+/*! @brief Error bit mask for GET_PORT_STATUS */
+#define USB_HOST_PRINTER_PORT_STATUS_NOT_ERROR_MASK (0x08U)
+
+/*! @brief Printer instance structure and printer usb_host_class_handle pointer to this structure */
+typedef struct _usb_host_printer_instance
+{
+ usb_host_handle hostHandle; /*!< This instance's related host handle*/
+ usb_device_handle deviceHandle; /*!< This instance's related device handle*/
+ usb_host_interface_handle interfaceHandle; /*!< This instance's related interface handle*/
+ usb_host_pipe_handle controlPipe; /*!< This instance's related device control pipe*/
+ usb_host_pipe_handle inPipe; /*!< Printer bulk in pipe*/
+ usb_host_pipe_handle outPipe; /*!< Printer bulk out pipe*/
+ transfer_callback_t inCallbackFn; /*!< Printer bulk in transfer callback function pointer*/
+ void *inCallbackParam; /*!< Printer bulk in transfer callback parameter*/
+ transfer_callback_t outCallbackFn; /*!< Printer bulk out transfer callback function pointer*/
+ void *outCallbackParam; /*!< Printer bulk out transfer callback parameter*/
+ transfer_callback_t controlCallbackFn; /*!< Printer control transfer callback function pointer*/
+ void *controlCallbackParam; /*!< Printer control transfer callback parameter*/
+ usb_host_transfer_t *controlTransfer; /*!< Ongoing control transfer*/
+#if ((defined USB_HOST_CONFIG_CLASS_AUTO_CLEAR_STALL) && USB_HOST_CONFIG_CLASS_AUTO_CLEAR_STALL)
+ uint8_t *stallDataBuffer;
+ uint32_t stallDataLength;
+#endif
+
+ uint16_t inPacketSize; /*!< Printer bulk in maximum packet size*/
+ uint16_t outPacketSize; /*!< Printer bulk out maximum packet size*/
+} usb_host_printer_instance_t;
+
+/*******************************************************************************
+ * API
+ ******************************************************************************/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*!
+ * @name USB host printer class APIs
+ * @{
+ */
+
+/*!
+ * @brief Initializes the printer instance.
+ *
+ * This function allocate the resource for the printer instance.
+ *
+ * @param[in] deviceHandle The device handle.
+ * @param[out] classHandle Return class handle.
+ *
+ * @retval kStatus_USB_Success The device is initialized successfully.
+ * @retval kStatus_USB_AllocFail Allocate memory fail.
+ */
+extern usb_status_t USB_HostPrinterInit(usb_device_handle deviceHandle, usb_host_class_handle *classHandle);
+
+/*!
+ * @brief Sets the interface.
+ *
+ * This function binds the interface with the printer instance.
+ *
+ * @param[in] classHandle The class handle.
+ * @param[in] interfaceHandle The interface handle.
+ * @param[in] alternateSetting The alternate setting value.
+ * @param[in] callbackFn This callback is called after this function completes.
+ * @param[in] callbackParam The first parameter in the callback function.
+ *
+ * @retval kStatus_USB_Success The device is initialized successfully.
+ * @retval kStatus_USB_InvalidHandle The classHandle is NULL pointer.
+ * @retval kStatus_USB_Busy There is no idle transfer.
+ * @retval kStatus_USB_Error Send transfer fail. See the USB_HostSendSetup.
+ * @retval kStatus_USB_Busy Callback return status, there is no idle pipe.
+ * @retval kStatus_USB_TransferStall Callback return status, the transfer is stalled by the device.
+ * @retval kStatus_USB_Error Callback return status, open pipe fail. See the USB_HostOpenPipe.
+ */
+extern usb_status_t USB_HostPrinterSetInterface(usb_host_class_handle classHandle,
+ usb_host_interface_handle interfaceHandle,
+ uint8_t alternateSetting,
+ transfer_callback_t callbackFn,
+ void *callbackParam);
+
+/*!
+ * @brief De-initializes the the printer instance.
+ *
+ * This function frees the resources for the printer instance.
+ *
+ * @param[in] deviceHandle The device handle.
+ * @param[in] classHandle The class handle.
+ *
+ * @retval kStatus_USB_Success The device is de-initialized successfully.
+ */
+extern usb_status_t USB_HostPrinterDeinit(usb_device_handle deviceHandle, usb_host_class_handle classHandle);
+
+/*!
+ * @brief Gets the pipe maximum packet size.
+ *
+ * @param[in] classHandle The class handle.
+ * @param[in] pipeType Its value is USB_ENDPOINT_CONTROL, USB_ENDPOINT_ISOCHRONOUS, USB_ENDPOINT_BULK or
+ * USB_ENDPOINT_INTERRUPT.
+ * See the usb_spec.h
+ * @param[in] direction Pipe direction.
+ *
+ * @retval 0 The classHandle is NULL.
+ * @retval Maximum Packet size.
+ */
+extern uint16_t USB_HostPrinterGetPacketsize(usb_host_class_handle classHandle, uint8_t pipeType, uint8_t direction);
+
+/*!
+ * @brief Receives data.
+ *
+ * This function implements the printer receiving data.
+ *
+ * @param[in] classHandle The class handle.
+ * @param[out] buffer The buffer pointer.
+ * @param[in] bufferLength The buffer length.
+ * @param[in] callbackFn This callback is called after this function completes.
+ * @param[in] callbackParam The first parameter in the callback function.
+ *
+ * @retval kStatus_USB_Success Receive request successfully.
+ * @retval kStatus_USB_InvalidHandle The classHandle is NULL pointer.
+ * @retval kStatus_USB_Busy There is no idle transfer.
+ * @retval kStatus_USB_Error Pipe is not initialized.
+ * Or, send transfer fail. See the USB_HostRecv.
+ */
+extern usb_status_t USB_HostPrinterRecv(usb_host_class_handle classHandle,
+ uint8_t *buffer,
+ uint32_t bufferLength,
+ transfer_callback_t callbackFn,
+ void *callbackParam);
+
+/*!
+ * @brief Sends data.
+ *
+ * This function implements the printer sending data.
+ *
+ * @param[in] classHandle The class handle.
+ * @param[in] buffer The buffer pointer.
+ * @param[in] bufferLength The buffer length.
+ * @param[in] callbackFn This callback is called after this function completes.
+ * @param[in] callbackParam The first parameter in the callback function.
+ *
+ * @retval kStatus_USB_Success Send request successfully.
+ * @retval kStatus_USB_InvalidHandle The classHandle is NULL pointer.
+ * @retval kStatus_USB_Busy There is no idle transfer.
+ * @retval kStatus_USB_Error Pipe is not initialized.
+ * Or, send transfer fail. See the USB_HostSend.
+ */
+extern usb_status_t USB_HostPrinterSend(usb_host_class_handle classHandle,
+ uint8_t *buffer,
+ uint32_t bufferLength,
+ transfer_callback_t callbackFn,
+ void *callbackParam);
+
+/*!
+ * @brief Gets the pipe maximum packet size.
+ *
+ * @param[in] classHandle The class handle.
+ * @param[in] pipeType Its value is USB_ENDPOINT_CONTROL, USB_ENDPOINT_ISOCHRONOUS, USB_ENDPOINT_BULK or
+ * USB_ENDPOINT_INTERRUPT. See the usb_spec.h
+ * @param[in] direction Pipe direction.
+ *
+ * @retval 0 The classHandle is NULL.
+ * @retval Maximum Packet size.
+ */
+extern uint16_t USB_HostPrinterGetPacketsize(usb_host_class_handle classHandle, uint8_t pipeType, uint8_t direction);
+
+/*!
+ * @brief Printer get device ID.
+ *
+ * This function implements the printer class-specific request (GET_DEVICE_ID).
+ *
+ * @param[in] classHandle The class handle.
+ * @param[in] interfaceIndex Interface index.
+ * @param[in] alternateSetting Get the alternateSetting's device ID.
+ * @param[out] buffer The buffer pointer.
+ * @param[in] length The buffer length.
+ * @param[in] callbackFn This callback is called after this function completes.
+ * @param[in] callbackParam The first parameter in the callback function.
+ *
+ * @retval kStatus_USB_Success Request successful.
+ * @retval kStatus_USB_InvalidHandle The classHandle is NULL pointer.
+ * @retval kStatus_USB_Busy There is no idle transfer.
+ * @retval kStatus_USB_Error Send transfer fail. See the USB_HostSendSetup.
+ */
+extern usb_status_t USB_HostPrinterGetDeviceId(usb_host_class_handle classHandle,
+ uint8_t interfaceIndex,
+ uint8_t alternateSetting,
+ uint8_t *buffer,
+ uint32_t length,
+ transfer_callback_t callbackFn,
+ void *callbackParam);
+
+/*!
+ * @brief Printer get port status.
+ *
+ * This function implements the printer class-specific request (GET_PORT_STATUS).
+ *
+ * @param[in] classHandle The class handle.
+ * @param[in] portStatus Port status buffer.
+ * @param[in] callbackFn This callback is called after this function completes.
+ * @param[in] callbackParam The first parameter in the callback function.
+ *
+ * @retval kStatus_USB_Success Request successful.
+ * @retval kStatus_USB_InvalidHandle The classHandle is NULL pointer.
+ * @retval kStatus_USB_Busy There is no idle transfer.
+ * @retval kStatus_USB_Error Send transfer fail. See the USB_HostSendSetup.
+ */
+extern usb_status_t USB_HostPrinterGetPortStatus(usb_host_class_handle classHandle,
+ uint8_t *portStatus,
+ transfer_callback_t callbackFn,
+ void *callbackParam);
+
+/*!
+ * @brief Printer soft reset.
+ *
+ * This function implements the printer class-specific request (SOFT_RESET).
+ *
+ * @param[in] classHandle The class handle.
+ * @param[in] portStatus Port status buffer.
+ * @param[in] callbackFn This callback is called after this function completes.
+ * @param[in] callbackParam The first parameter in the callback function.
+ *
+ * @retval kStatus_USB_Success Request successful.
+ * @retval kStatus_USB_InvalidHandle The classHandle is NULL pointer.
+ * @retval kStatus_USB_Busy There is no idle transfer.
+ * @retval kStatus_USB_Error Send transfer fail. See the USB_HostSendSetup.
+ */
+extern usb_status_t USB_HostPrinterSoftReset(usb_host_class_handle classHandle,
+ transfer_callback_t callbackFn,
+ void *callbackParam);
+/*! @}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+/*! @}*/
+
+#endif /* __USB_HOST_PRINTER_H__ */