forked from mfulz_github/qmk_firmware
Added PRNT_Host_SendByte() and PRNT_Host_Flush() functions to the Host mode Printer Class driver.
Modified PRNT_Host_USBTask() to flush the output pipe on each call.
This commit is contained in:
parent
41c1fb3843
commit
12fb68ea1f
|
@ -125,6 +125,11 @@ static uint8_t DCOMP_PRNT_NextPRNTInterfaceEndpoint(void* CurrentDescriptor)
|
||||||
return DESCRIPTOR_SEARCH_NotFound;
|
return DESCRIPTOR_SEARCH_NotFound;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PRNT_Host_USBTask(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)
|
||||||
|
{
|
||||||
|
PRNT_Host_Flush(PRNTInterfaceInfo);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t PRNT_Host_SetBidirectionalMode(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)
|
uint8_t PRNT_Host_SetBidirectionalMode(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)
|
||||||
{
|
{
|
||||||
if (PRNTInterfaceInfo->State.AlternateSetting)
|
if (PRNTInterfaceInfo->State.AlternateSetting)
|
||||||
|
@ -182,6 +187,61 @@ uint8_t PRNT_Host_SoftReset(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)
|
||||||
return USB_Host_SendControlRequest(NULL);
|
return USB_Host_SendControlRequest(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t PRNT_Host_Flush(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)
|
||||||
|
{
|
||||||
|
if ((USB_HostState != HOST_STATE_Configured) || !(PRNTInterfaceInfo->State.IsActive))
|
||||||
|
return PIPE_READYWAIT_DeviceDisconnected;
|
||||||
|
|
||||||
|
uint8_t ErrorCode;
|
||||||
|
|
||||||
|
Pipe_SelectPipe(PRNTInterfaceInfo->Config.DataOUTPipeNumber);
|
||||||
|
Pipe_Unfreeze();
|
||||||
|
|
||||||
|
if (!(Pipe_BytesInPipe()))
|
||||||
|
return PIPE_READYWAIT_NoError;
|
||||||
|
|
||||||
|
bool BankFull = !(Pipe_IsReadWriteAllowed());
|
||||||
|
|
||||||
|
Pipe_ClearOUT();
|
||||||
|
|
||||||
|
if (BankFull)
|
||||||
|
{
|
||||||
|
if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
|
||||||
|
return ErrorCode;
|
||||||
|
|
||||||
|
Pipe_ClearOUT();
|
||||||
|
}
|
||||||
|
|
||||||
|
Pipe_Freeze();
|
||||||
|
|
||||||
|
return PIPE_READYWAIT_NoError;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t PRNT_Host_SendByte(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo,
|
||||||
|
const uint8_t Data)
|
||||||
|
{
|
||||||
|
if ((USB_HostState != HOST_STATE_Configured) || !(PRNTInterfaceInfo->State.IsActive))
|
||||||
|
return PIPE_READYWAIT_DeviceDisconnected;
|
||||||
|
|
||||||
|
uint8_t ErrorCode;
|
||||||
|
|
||||||
|
Pipe_SelectPipe(PRNTInterfaceInfo->Config.DataOUTPipeNumber);
|
||||||
|
Pipe_Unfreeze();
|
||||||
|
|
||||||
|
if (!(Pipe_IsReadWriteAllowed()))
|
||||||
|
{
|
||||||
|
Pipe_ClearOUT();
|
||||||
|
|
||||||
|
if ((ErrorCode = Pipe_WaitUntilReady()) != PIPE_READYWAIT_NoError)
|
||||||
|
return ErrorCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pipe_Write_Byte(Data);
|
||||||
|
Pipe_Freeze();
|
||||||
|
|
||||||
|
return PIPE_READYWAIT_NoError;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t PRNT_Host_SendString(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo,
|
uint8_t PRNT_Host_SendString(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo,
|
||||||
void* Buffer,
|
void* Buffer,
|
||||||
const uint16_t Length)
|
const uint16_t Length)
|
||||||
|
|
|
@ -114,6 +114,14 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Function Prototypes: */
|
/* Function Prototypes: */
|
||||||
|
/** General management task for a given Printer host class interface, required for the correct operation of
|
||||||
|
* the interface. This should be called frequently in the main program loop, before the master USB management task
|
||||||
|
* \ref USB_USBTask().
|
||||||
|
*
|
||||||
|
* \param[in,out] PRNTInterfaceInfo Pointer to a structure containing a Printer Class host configuration and state.
|
||||||
|
*/
|
||||||
|
void PRNT_Host_USBTask(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
/** Host interface configuration routine, to configure a given Printer host interface instance using the
|
/** Host interface configuration routine, to configure a given Printer host interface instance using the
|
||||||
* Configuration Descriptor read from an attached USB device. This function automatically updates the given Printer
|
* Configuration Descriptor read from an attached USB device. This function automatically updates the given Printer
|
||||||
* instance's state values and configures the pipes required to communicate with the interface if it is found within
|
* instance's state values and configures the pipes required to communicate with the interface if it is found within
|
||||||
|
@ -159,6 +167,17 @@
|
||||||
*/
|
*/
|
||||||
uint8_t PRNT_Host_SoftReset(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
uint8_t PRNT_Host_SoftReset(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
|
/** Flushes any data waiting to be sent, ensuring that the send buffer is cleared.
|
||||||
|
*
|
||||||
|
* \pre This function must only be called when the Host state machine is in the HOST_STATE_Configured state or the
|
||||||
|
* call will fail.
|
||||||
|
*
|
||||||
|
* \param[in,out] PRNTInterfaceInfo Pointer to a structure containing a Printer Class host configuration and state.
|
||||||
|
*
|
||||||
|
* \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
|
||||||
|
*/
|
||||||
|
uint8_t PRNT_Host_Flush(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
/** Sends the given raw data stream to the attached printer's input endpoint. This should contain commands that the
|
/** Sends the given raw data stream to the attached printer's input endpoint. This should contain commands that the
|
||||||
* printer is able to understand - for example, PCL data. Not all printers accept all printer languages; see
|
* printer is able to understand - for example, PCL data. Not all printers accept all printer languages; see
|
||||||
* \ref PRNT_Host_GetDeviceID() for details on determining acceptable languages for an attached printer.
|
* \ref PRNT_Host_GetDeviceID() for details on determining acceptable languages for an attached printer.
|
||||||
|
@ -176,6 +195,22 @@
|
||||||
void* Buffer,
|
void* Buffer,
|
||||||
const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
|
const uint16_t Length) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
|
||||||
|
|
||||||
|
/** Sends a given byte to the attached USB device, if connected. If a device is not connected when the function is called, the
|
||||||
|
* byte is discarded. Bytes will be queued for transmission to the device until either the pipe bank becomes full, or the
|
||||||
|
* \ref PRNT_Host_Flush() function is called to flush the pending data to the host. This allows for multiple bytes to be
|
||||||
|
* packed into a single pipe packet, increasing data throughput.
|
||||||
|
*
|
||||||
|
* \pre This function must only be called when the Host state machine is in the HOST_STATE_Configured state or the
|
||||||
|
* call will fail.
|
||||||
|
*
|
||||||
|
* \param[in,out] PRNTInterfaceInfo Pointer to a structure containing a Printer Class host configuration and state.
|
||||||
|
* \param[in] Data Byte of data to send to the device.
|
||||||
|
*
|
||||||
|
* \return A value from the \ref Pipe_WaitUntilReady_ErrorCodes_t enum.
|
||||||
|
*/
|
||||||
|
uint8_t PRNT_Host_SendByte(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo,
|
||||||
|
const uint8_t Data) ATTR_NON_NULL_PTR_ARG(1);
|
||||||
|
|
||||||
/** Determines the number of bytes received by the printer interface from the device, waiting to be read. This indicates the number
|
/** Determines the number of bytes received by the printer interface from the device, waiting to be read. This indicates the number
|
||||||
* of bytes in the IN pipe bank only, and thus the number of calls to \ref PRNT_Host_ReceiveByte() which are guaranteed to succeed
|
* of bytes in the IN pipe bank only, and thus the number of calls to \ref PRNT_Host_ReceiveByte() which are guaranteed to succeed
|
||||||
* immediately. If multiple bytes are to be received, they should be buffered by the user application, as the pipe bank will not be
|
* immediately. If multiple bytes are to be received, they should be buffered by the user application, as the pipe bank will not be
|
||||||
|
@ -220,19 +255,6 @@
|
||||||
char* const DeviceIDString,
|
char* const DeviceIDString,
|
||||||
const uint16_t BufferSize) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
|
const uint16_t BufferSize) ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
|
||||||
|
|
||||||
/* Inline Functions: */
|
|
||||||
/** General management task for a given Printer host class interface, required for the correct operation of
|
|
||||||
* the interface. This should be called frequently in the main program loop, before the master USB management task
|
|
||||||
* \ref USB_USBTask().
|
|
||||||
*
|
|
||||||
* \param[in,out] PRNTInterfaceInfo Pointer to a structure containing a Printer Class host configuration and state.
|
|
||||||
*/
|
|
||||||
static inline void PRNT_Host_USBTask(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo) ATTR_NON_NULL_PTR_ARG(1);
|
|
||||||
static inline void PRNT_Host_USBTask(USB_ClassInfo_PRNT_Host_t* const PRNTInterfaceInfo)
|
|
||||||
{
|
|
||||||
(void)PRNTInterfaceInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Private Interface - For use in library only: */
|
/* Private Interface - For use in library only: */
|
||||||
#if !defined(__DOXYGEN__)
|
#if !defined(__DOXYGEN__)
|
||||||
/* Macros: */
|
/* Macros: */
|
||||||
|
|
|
@ -16,7 +16,8 @@
|
||||||
* - Added new USB_Device_GetFrameNumber() and USB_Host_GetFrameNumber() functions to retrieve the current USB frame number
|
* - Added new USB_Device_GetFrameNumber() and USB_Host_GetFrameNumber() functions to retrieve the current USB frame number
|
||||||
* - Added new USB_Host_EnableSOFEvents(), USB_Host_DisableSOFEvents() and EVENT_USB_Host_StartOfFrame() for the user application
|
* - Added new USB_Host_EnableSOFEvents(), USB_Host_DisableSOFEvents() and EVENT_USB_Host_StartOfFrame() for the user application
|
||||||
* handling of USB Start of Frame events while in USB Host mode
|
* handling of USB Start of Frame events while in USB Host mode
|
||||||
* - Added new PRNT_Host_BytesReceived() and PRNT_Host_ReceiveByte() functions to the Print Host Class driver
|
* - Added new PRNT_Host_BytesReceived(), PRNT_Host_ReceiveByte(), PRNT_Host_SendByte() and PRNT_Host_Flush() functions to the
|
||||||
|
* Print Host Class driver
|
||||||
* - Added class specific descriptor type defines with standard USB-IF element naming
|
* - Added class specific descriptor type defines with standard USB-IF element naming
|
||||||
* - Added new project makefile template to the library and moved board driver stub files into in a new "CodeTemplates" directory
|
* - Added new project makefile template to the library and moved board driver stub files into in a new "CodeTemplates" directory
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue