Eli Hughes
/
RobotPowerLogger-V2
For Terrance
Diff: Code/Serial.c
- Revision:
- 0:085749c8446f
diff -r 000000000000 -r 085749c8446f Code/Serial.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Code/Serial.c Wed Jun 13 15:10:06 2012 +0000 @@ -0,0 +1,55 @@ +#include "System.h" + +ByteQueue PCBackDoorTx,PCBackDoorRx; +BYTE PCBackDoorTx_Queue_Storage[PC_BACKDOOR_TX_QUEUE_SIZE]; +BYTE PCBackDoorRx_Queue_Storage[PC_BACKDOOR_RX_QUEUE_SIZE]; + +Serial PCBackDoor(USBTX, USBRX); +Ticker PCBackDoorTxQueueCheck; + +//IRQ for when data is received +void PCBackDoorRxIRQ(); +void PCBackDoorMoveTxQueue(); + +void InitPCBackDoor() +{ + InitByteQueue(&PCBackDoorTx,PC_BACKDOOR_TX_QUEUE_SIZE,&PCBackDoorTx_Queue_Storage[0]); + InitByteQueue(&PCBackDoorRx,PC_BACKDOOR_RX_QUEUE_SIZE,&PCBackDoorRx_Queue_Storage[0]); + + PCBackDoor.baud(57600); + PCBackDoor.format(8,Serial::None,1); + + + //The Rx IRQ wil fill up my big software Rx Queue + PCBackDoor.attach(&PCBackDoorRxIRQ); + + //Periodicically check my outgoing Tx Queue (every 1 mS) + PCBackDoorTxQueueCheck.attach_us(&PCBackDoorMoveTxQueue,500); +} + +void PCBackDoorMoveTxQueue() +{ + BYTE Temp; + + while(PCBackDoor.writeable()) + { + if(BytesInQueue(&PCBackDoorTx) == 0) + { + break; + } + else + { + ByteDequeue(&PCBackDoorTx,&Temp); + PCBackDoor.putc(Temp); + } + } + +} + +void PCBackDoorRxIRQ() +{ + while(PCBackDoor.readable()) + { + ByteEnqueue(&PCBackDoorRx,(BYTE)PCBackDoor.getc()); + } +} \ No newline at end of file