* updated serial apis for character match in asynch.

pull/1214/head
akhilpanayam 2015-06-29 15:48:39 +05:30
parent ce1b82ea2c
commit 4dd6e5304d
1 changed files with 9 additions and 9 deletions

View File

@ -634,30 +634,25 @@ void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
switch ((int)pUSART_S(obj)) { switch ((int)pUSART_S(obj)) {
case UART_0: case UART_0:
irq_n = SERCOM0_IRQn;
vector = (uint32_t)uart0_irq; vector = (uint32_t)uart0_irq;
break; break;
case UART_1: case UART_1:
irq_n = SERCOM1_IRQn;
vector = (uint32_t)uart1_irq; vector = (uint32_t)uart1_irq;
break; break;
case UART_2: case UART_2:
irq_n = SERCOM2_IRQn;
vector = (uint32_t)uart2_irq; vector = (uint32_t)uart2_irq;
break; break;
case UART_3: case UART_3:
irq_n = SERCOM3_IRQn;
vector = (uint32_t)uart3_irq; vector = (uint32_t)uart3_irq;
break; break;
case UART_4: case UART_4:
irq_n = SERCOM4_IRQn;
vector = (uint32_t)uart4_irq; vector = (uint32_t)uart4_irq;
break; break;
case UART_5: case UART_5:
irq_n = SERCOM5_IRQn;
vector = (uint32_t)uart5_irq; vector = (uint32_t)uart5_irq;
break; break;
} }
irq_n = get_serial_irq_num(obj);
if (enable) { if (enable) {
switch (irq) { switch (irq) {
@ -816,6 +811,7 @@ void serial_rx_asynch(serial_t *obj, void *rx, size_t rx_length, uint8_t rx_widt
serial_rx_enable_event(obj, SERIAL_EVENT_RX_ALL, false); serial_rx_enable_event(obj, SERIAL_EVENT_RX_ALL, false);
serial_rx_enable_event(obj, event, true); serial_rx_enable_event(obj, event, true);
serial_set_char_match(obj, char_match);
serial_rx_buffer_set(obj, rx, rx_length, rx_width); serial_rx_buffer_set(obj, rx, rx_length, rx_width);
@ -896,14 +892,18 @@ int serial_rx_irq_handler_asynch(serial_t *obj)
/* Check for character match event */ /* Check for character match event */
if((buf[obj->rx_buff.pos - 1] == obj->char_match) && (obj->serial.events & SERIAL_EVENT_RX_CHARACTER_MATCH)) { if((buf[obj->rx_buff.pos - 1] == obj->char_match) && (obj->serial.events & SERIAL_EVENT_RX_CHARACTER_MATCH)) {
// event |= SERIAL_EVENT_RX_CHARACTER_MATCH; event |= SERIAL_EVENT_RX_CHARACTER_MATCH;
} }
/* check for final char event */ /* check for final char event */
if(obj->rx_buff.pos >= (obj->rx_buff.length)) { if((obj->rx_buff.length) == 0) {
// event |= SERIAL_EVENT_RX_COMPLETE & obj->serial.events; event |= SERIAL_EVENT_RX_COMPLETE & obj->serial.events;
} }
if(event != 0) {
serial_rx_abort_asynch(obj);
return event & obj->serial.events;
}
} }
int serial_irq_handler_asynch(serial_t *obj) int serial_irq_handler_asynch(serial_t *obj)