usb_serial.c: eliminate type punning compiler warnings

This commit is contained in:
David Forrest 2013-04-01 23:33:21 -04:00 committed by Markus Hitter
parent ea59e634a7
commit aefd4b6596
1 changed files with 10 additions and 8 deletions

View File

@ -309,7 +309,9 @@ static uint8_t transmit_previous_timeout=0;
// serial port settings (baud rate, control signals, etc) set // serial port settings (baud rate, control signals, etc) set
// by the PC. These are ignored, but kept in RAM. // by the PC. These are ignored, but kept in RAM.
static uint8_t cdc_line_coding[7]={0x00, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x08}; static union{
uint8_t bytes[7];
uint32_t baud; } cdc_line_coding={{0x00, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x08}};
static uint8_t cdc_line_rtsdtr=0; static uint8_t cdc_line_rtsdtr=0;
@ -652,19 +654,19 @@ void usb_serial_flush_output(void)
// communication // communication
uint32_t usb_serial_get_baud(void) uint32_t usb_serial_get_baud(void)
{ {
return *(uint32_t *)cdc_line_coding; return cdc_line_coding.baud;
} }
uint8_t usb_serial_get_stopbits(void) uint8_t usb_serial_get_stopbits(void)
{ {
return cdc_line_coding[4]; return cdc_line_coding.bytes[4];
} }
uint8_t usb_serial_get_paritytype(void) uint8_t usb_serial_get_paritytype(void)
{ {
return cdc_line_coding[5]; return cdc_line_coding.bytes[5];
} }
uint8_t usb_serial_get_numbits(void) uint8_t usb_serial_get_numbits(void)
{ {
return cdc_line_coding[6]; return cdc_line_coding.bytes[6];
} }
uint8_t usb_serial_get_control(void) uint8_t usb_serial_get_control(void)
{ {
@ -753,7 +755,7 @@ ISR(USB_GEN_vect)
// Misc functions to wait for ready and send/receive packets // Misc functions to wait for ready and send/receive packets
static inline void usb_wait_in_ready(void) inline void usb_wait_in_ready(void)
{ {
while (!(UEINTX & (1<<TXINI))) ; while (!(UEINTX & (1<<TXINI))) ;
} }
@ -879,7 +881,7 @@ ISR(USB_COM_vect)
} }
if (bRequest == CDC_GET_LINE_CODING && bmRequestType == 0xA1) { if (bRequest == CDC_GET_LINE_CODING && bmRequestType == 0xA1) {
usb_wait_in_ready(); usb_wait_in_ready();
p = cdc_line_coding; p = cdc_line_coding.bytes;
for (i=0; i<7; i++) { for (i=0; i<7; i++) {
UEDATX = *p++; UEDATX = *p++;
} }
@ -888,7 +890,7 @@ ISR(USB_COM_vect)
} }
if (bRequest == CDC_SET_LINE_CODING && bmRequestType == 0x21) { if (bRequest == CDC_SET_LINE_CODING && bmRequestType == 0x21) {
usb_wait_receive_out(); usb_wait_receive_out();
p = cdc_line_coding; p = cdc_line_coding.bytes;
for (i=0; i<7; i++) { for (i=0; i<7; i++) {
*p++ = UEDATX; *p++ = UEDATX;
} }