Commit 4c035b14 authored by Dean Camera's avatar Dean Camera
Browse files

Cleaner solution to the PrinterHost data send routine problem of embedded...

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.
parent 5d8cdd9b
......@@ -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";
printf_P(PSTR("Sending Test Page (%d bytes)...\r\n"), (sizeof(PCL_Test_Page) - 1));
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);
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);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment