forked from mfulz_github/qmk_firmware
Cleaner solution to the PrinterHost data send routine problem of embedded NULLs - use a special structure to hold the data string plus the length in bytes of the data.
This commit is contained in:
parent
5d8cdd9bea
commit
4c035b14f1
|
@ -33,18 +33,18 @@
|
|||
/** Sends the given data directly to the printer via the data endpoints, for the sending of print commands in printer
|
||||
* languages accepted by the attached printer (e.g. PCL).
|
||||
*
|
||||
* \param[in] PrinterCommands Pointer to the input buffer containing the printer data to send
|
||||
* \param[in] PrinterCommands Pointer to a structure containing the commands and length of the data to send
|
||||
*
|
||||
* \return A value from the Pipe_Stream_RW_ErrorCodes_t enum
|
||||
*/
|
||||
uint8_t Printer_SendData(char* PrinterCommands, uint16_t DataLength)
|
||||
uint8_t Printer_SendData(Printer_Data_t* PrinterCommands)
|
||||
{
|
||||
uint8_t ErrorCode;
|
||||
|
||||
Pipe_SelectPipe(PRINTER_DATA_OUT_PIPE);
|
||||
Pipe_Unfreeze();
|
||||
|
||||
if ((ErrorCode = Pipe_Write_Stream_LE(PrinterCommands, DataLength)) != PIPE_RWSTREAM_NoError)
|
||||
if ((ErrorCode = Pipe_Write_Stream_LE(PrinterCommands->Data, PrinterCommands->Length)) != PIPE_RWSTREAM_NoError)
|
||||
return ErrorCode;
|
||||
|
||||
Pipe_ClearOUT();
|
||||
|
|
|
@ -53,8 +53,15 @@
|
|||
/** Pipe number of the Printer data OUT pipe */
|
||||
#define PRINTER_DATA_OUT_PIPE 2
|
||||
|
||||
/* Type Defines: */
|
||||
typedef struct
|
||||
{
|
||||
char* Data;
|
||||
uint16_t Length;
|
||||
} Printer_Data_t;
|
||||
|
||||
/* Function Prototypes: */
|
||||
uint8_t Printer_SendData(char* PrinterCommands, uint16_t DataLength);
|
||||
uint8_t Printer_SendData(Printer_Data_t* PrinterCommands);
|
||||
uint8_t Printer_GetDeviceID(char* DeviceIDString, uint8_t BufferSize);
|
||||
uint8_t Printer_GetPortStatus(uint8_t* PortStatus);
|
||||
uint8_t Printer_SoftReset(void);
|
||||
|
|
|
@ -204,12 +204,16 @@ void USB_Printer_Host(void)
|
|||
/* Indicate device busy via the status LEDs */
|
||||
LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
|
||||
|
||||
char PCL_Test_Page[] = "\033%-12345X\033E LUFA PCL Test Page \033E\033%-12345X";
|
||||
// char ESCP2_Test_Page[] = "\033@\033i\001\033X\001\060\000\r\nLUFA ESCP/2 Test Page\r\n";
|
||||
Printer_Data_t TestPageData =
|
||||
{
|
||||
"\033%-12345X\033E LUFA PCL Test Page \033E\033%-12345X",
|
||||
// "\033@\033i\001\033X\001\060\000\r\nLUFA ESCP/2 Test Page\r\n",
|
||||
(sizeof(TestPageData.Data) - 1)
|
||||
};
|
||||
|
||||
printf_P(PSTR("Sending Test Page (%d bytes)...\r\n"), TestPageData.Length);
|
||||
|
||||
printf_P(PSTR("Sending Test Page (%d bytes)...\r\n"), (sizeof(PCL_Test_Page) - 1));
|
||||
|
||||
if ((ErrorCode = Printer_SendData(PCL_Test_Page, (sizeof(PCL_Test_Page) - 1))) != PIPE_RWSTREAM_NoError)
|
||||
if ((ErrorCode = Printer_SendData(&TestPageData)) != PIPE_RWSTREAM_NoError)
|
||||
{
|
||||
puts_P(PSTR(ESC_FG_RED "Error Sending Test Page.\r\n"));
|
||||
printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode);
|
||||
|
|
Loading…
Reference in New Issue