Program to control an accelerometer, motors and a rangefinder using the ScmRTOS ported to mbed. (Work in progress and buggy)
Hexacopter/serial.h@0:9b057566f9ee, 2010-11-01 (annotated)
- Committer:
- jberry
- Date:
- Mon Nov 01 20:39:01 2010 +0000
- Revision:
- 0:9b057566f9ee
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jberry | 0:9b057566f9ee | 1 | #ifndef SERIAL_H |
jberry | 0:9b057566f9ee | 2 | #define SERIAL_H |
jberry | 0:9b057566f9ee | 3 | #include <channels.h> |
jberry | 0:9b057566f9ee | 4 | #include <Mutexes.h> |
jberry | 0:9b057566f9ee | 5 | #include <processes.h> |
jberry | 0:9b057566f9ee | 6 | |
jberry | 0:9b057566f9ee | 7 | #define UART1TX p9 |
jberry | 0:9b057566f9ee | 8 | #define UART1RX p10 |
jberry | 0:9b057566f9ee | 9 | |
jberry | 0:9b057566f9ee | 10 | Serial USB(USBTX, USBRX); // tx, rx |
jberry | 0:9b057566f9ee | 11 | Serial XB(UART1TX, UART1RX); // tx, rx |
jberry | 0:9b057566f9ee | 12 | Serial *OUT = &USB; //intially set to USB |
jberry | 0:9b057566f9ee | 13 | |
jberry | 0:9b057566f9ee | 14 | extern BusOut leds; |
jberry | 0:9b057566f9ee | 15 | void USB_serial() //signal RTOS event that RXinterrupt has been asserted |
jberry | 0:9b057566f9ee | 16 | { |
jberry | 0:9b057566f9ee | 17 | OS::TISRW ISRW; |
jberry | 0:9b057566f9ee | 18 | leds = 0x7; |
jberry | 0:9b057566f9ee | 19 | //char count = 0; |
jberry | 0:9b057566f9ee | 20 | //led3 = !led3; |
jberry | 0:9b057566f9ee | 21 | char temp = 0; |
jberry | 0:9b057566f9ee | 22 | |
jberry | 0:9b057566f9ee | 23 | //leds = 0xa; |
jberry | 0:9b057566f9ee | 24 | if(true)//!Serial_Mutex.IsLocked()) |
jberry | 0:9b057566f9ee | 25 | { |
jberry | 0:9b057566f9ee | 26 | //leds = 0xb; |
jberry | 0:9b057566f9ee | 27 | //Serial_Mutex.Lock(); |
jberry | 0:9b057566f9ee | 28 | leds = 0xc; |
jberry | 0:9b057566f9ee | 29 | if(USB.readable()) |
jberry | 0:9b057566f9ee | 30 | { |
jberry | 0:9b057566f9ee | 31 | temp = USB.getc(); |
jberry | 0:9b057566f9ee | 32 | leds = 0xd; |
jberry | 0:9b057566f9ee | 33 | |
jberry | 0:9b057566f9ee | 34 | if(RX_channel.get_free_size() >0 ) //only push a character onto the channel if there is free space |
jberry | 0:9b057566f9ee | 35 | { |
jberry | 0:9b057566f9ee | 36 | //OUT = &USB; |
jberry | 0:9b057566f9ee | 37 | if(temp != '\n') |
jberry | 0:9b057566f9ee | 38 | { |
jberry | 0:9b057566f9ee | 39 | RX_channel.push(temp); |
jberry | 0:9b057566f9ee | 40 | leds = 0xe; |
jberry | 0:9b057566f9ee | 41 | } |
jberry | 0:9b057566f9ee | 42 | else if(temp == '\n') |
jberry | 0:9b057566f9ee | 43 | { |
jberry | 0:9b057566f9ee | 44 | RX_channel.push('\0'); |
jberry | 0:9b057566f9ee | 45 | } |
jberry | 0:9b057566f9ee | 46 | } |
jberry | 0:9b057566f9ee | 47 | else USB.getc(); //start discarding characters!*/ |
jberry | 0:9b057566f9ee | 48 | leds = 0xf; |
jberry | 0:9b057566f9ee | 49 | leds = 0xa; |
jberry | 0:9b057566f9ee | 50 | } |
jberry | 0:9b057566f9ee | 51 | leds = 0xb; |
jberry | 0:9b057566f9ee | 52 | //Serial_Mutex.Unlock(); |
jberry | 0:9b057566f9ee | 53 | //Serial_Mutex.Lock(); |
jberry | 0:9b057566f9ee | 54 | //if(USB.writeable()) |
jberry | 0:9b057566f9ee | 55 | //USB.putc(temp); |
jberry | 0:9b057566f9ee | 56 | //Serial_Mutex.Unlock(); |
jberry | 0:9b057566f9ee | 57 | leds = 0x1; |
jberry | 0:9b057566f9ee | 58 | } |
jberry | 0:9b057566f9ee | 59 | else USB.getc(); //start discarding characters! |
jberry | 0:9b057566f9ee | 60 | |
jberry | 0:9b057566f9ee | 61 | leds = 0x9; |
jberry | 0:9b057566f9ee | 62 | } |
jberry | 0:9b057566f9ee | 63 | |
jberry | 0:9b057566f9ee | 64 | /*void XB_serial() |
jberry | 0:9b057566f9ee | 65 | { |
jberry | 0:9b057566f9ee | 66 | //led4 = !led4; |
jberry | 0:9b057566f9ee | 67 | char temp = 0; |
jberry | 0:9b057566f9ee | 68 | OS::TISRW ISRW; |
jberry | 0:9b057566f9ee | 69 | if(!XB_Mutex.IsLocked()) |
jberry | 0:9b057566f9ee | 70 | { |
jberry | 0:9b057566f9ee | 71 | XB_Mutex.Lock(); |
jberry | 0:9b057566f9ee | 72 | while(XB.readable()) |
jberry | 0:9b057566f9ee | 73 | { |
jberry | 0:9b057566f9ee | 74 | temp = XB.getc(); |
jberry | 0:9b057566f9ee | 75 | if(RX_channel.get_free_size() >0 ) //only push a character onto the channel if there is free space |
jberry | 0:9b057566f9ee | 76 | { |
jberry | 0:9b057566f9ee | 77 | OUT = &XB; |
jberry | 0:9b057566f9ee | 78 | if(temp != '\n') |
jberry | 0:9b057566f9ee | 79 | { |
jberry | 0:9b057566f9ee | 80 | RX_channel.push(temp); |
jberry | 0:9b057566f9ee | 81 | } |
jberry | 0:9b057566f9ee | 82 | else if(temp == '\n') |
jberry | 0:9b057566f9ee | 83 | { |
jberry | 0:9b057566f9ee | 84 | OUT = &XB; |
jberry | 0:9b057566f9ee | 85 | RX_channel.push('\0'); |
jberry | 0:9b057566f9ee | 86 | } |
jberry | 0:9b057566f9ee | 87 | } |
jberry | 0:9b057566f9ee | 88 | else temp = XB.getc(); //otherwise, wait until another character is sent and try then |
jberry | 0:9b057566f9ee | 89 | } |
jberry | 0:9b057566f9ee | 90 | XB_Mutex.Unlock(); |
jberry | 0:9b057566f9ee | 91 | } |
jberry | 0:9b057566f9ee | 92 | |
jberry | 0:9b057566f9ee | 93 | |
jberry | 0:9b057566f9ee | 94 | }*/ |
jberry | 0:9b057566f9ee | 95 | |
jberry | 0:9b057566f9ee | 96 | #endif |
jberry | 0:9b057566f9ee | 97 |