Exemplo n.º 1
0
void handle_interrupt(uint32_t id, uint32_t event)
{
    volatile char d = 0;
    uint8_t next;
    SoftwareSerial *pSwSerial = (SoftwareSerial *)id;

    if( (SerialIrq)event == RxIrq ) {
        d = serial_getc( (serial_t *)(pSwSerial->pUART) );
        next = (pSwSerial->_receive_buffer_tail + 1) % pSwSerial->_receive_buffer_size;
        if ( next != (pSwSerial->_receive_buffer_head) ) {
            pSwSerial->_receive_buffer[ pSwSerial->_receive_buffer_tail ] = d;
            pSwSerial->_receive_buffer_tail = next;
        } else {
            pSwSerial->_buffer_overflow = true;
        }
        if (pSwSerial->availableCallback != NULL) {
            pSwSerial->availableCallback(d);
        }
    }
}