Program to control an accelerometer, motors and a rangefinder using the ScmRTOS ported to mbed. (Work in progress and buggy)
Hexacopter/Command_handler.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 | #pragma once |
jberry | 0:9b057566f9ee | 2 | #ifndef COMMAND_HANDLER_H |
jberry | 0:9b057566f9ee | 3 | #define COMMAND_HANDLER_H |
jberry | 0:9b057566f9ee | 4 | #include <messages.h> |
jberry | 0:9b057566f9ee | 5 | #include <processes.h> |
jberry | 0:9b057566f9ee | 6 | |
jberry | 0:9b057566f9ee | 7 | //DigitalOut led2(LED2); |
jberry | 0:9b057566f9ee | 8 | extern BusOut leds; |
jberry | 0:9b057566f9ee | 9 | template<> OS_PROCESS void Command_handler::Exec() //serial stream handling process |
jberry | 0:9b057566f9ee | 10 | { |
jberry | 0:9b057566f9ee | 11 | //led2 = 0; |
jberry | 0:9b057566f9ee | 12 | char RX_Command[100] = ""; |
jberry | 0:9b057566f9ee | 13 | RX_Command[99] = '\0'; |
jberry | 0:9b057566f9ee | 14 | |
jberry | 0:9b057566f9ee | 15 | for(;;) |
jberry | 0:9b057566f9ee | 16 | { |
jberry | 0:9b057566f9ee | 17 | |
jberry | 0:9b057566f9ee | 18 | //RX_channel.pop(temp); |
jberry | 0:9b057566f9ee | 19 | for(byte i = 0; i<100; i++) |
jberry | 0:9b057566f9ee | 20 | { |
jberry | 0:9b057566f9ee | 21 | RX_channel.pop(RX_Command[i]); |
jberry | 0:9b057566f9ee | 22 | leds = 0x4; |
jberry | 0:9b057566f9ee | 23 | if(i == 99) |
jberry | 0:9b057566f9ee | 24 | { |
jberry | 0:9b057566f9ee | 25 | RX_Command[i] = '\0'; |
jberry | 0:9b057566f9ee | 26 | } |
jberry | 0:9b057566f9ee | 27 | //pc.putc(RX_Command[i]); |
jberry | 0:9b057566f9ee | 28 | if(RX_Command[i] == '\0') //keep popping chars until a delimiter is found |
jberry | 0:9b057566f9ee | 29 | break; |
jberry | 0:9b057566f9ee | 30 | } |
jberry | 0:9b057566f9ee | 31 | //led2 = !led2; |
jberry | 0:9b057566f9ee | 32 | TX_channel.write(RX_Command, strlen(RX_Command)+1); //output the command for debugging |
jberry | 0:9b057566f9ee | 33 | TX_channel.push('\n'); |
jberry | 0:9b057566f9ee | 34 | //char temp = 0; |
jberry | 0:9b057566f9ee | 35 | //TX_channel.pop(temp); |
jberry | 0:9b057566f9ee | 36 | //OUT->putc(temp); |
jberry | 0:9b057566f9ee | 37 | //OUT->printf(RX_Command); |
jberry | 0:9b057566f9ee | 38 | |
jberry | 0:9b057566f9ee | 39 | if (strstr(RX_Command,"SER:") != NULL) //check for Serv: in the command - this will indicate that the command is destined for the servo process |
jberry | 0:9b057566f9ee | 40 | { |
jberry | 0:9b057566f9ee | 41 | SER_channel.write(RX_Command, strlen(RX_Command)+1); |
jberry | 0:9b057566f9ee | 42 | //Servo_Command_Event.Signal(); |
jberry | 0:9b057566f9ee | 43 | } |
jberry | 0:9b057566f9ee | 44 | |
jberry | 0:9b057566f9ee | 45 | else if (strstr(RX_Command,"PIN") != NULL) //check for PING in the command - this will indicate that the command is destined for the PING process |
jberry | 0:9b057566f9ee | 46 | { |
jberry | 0:9b057566f9ee | 47 | |
jberry | 0:9b057566f9ee | 48 | PING_MESSAGE = 0; |
jberry | 0:9b057566f9ee | 49 | PING_MESSAGE.send(); |
jberry | 0:9b057566f9ee | 50 | } |
jberry | 0:9b057566f9ee | 51 | |
jberry | 0:9b057566f9ee | 52 | else if (strstr(RX_Command,"PIC") != NULL) //check for PING in the command - this will indicate that the command is destined for the PING process |
jberry | 0:9b057566f9ee | 53 | { |
jberry | 0:9b057566f9ee | 54 | |
jberry | 0:9b057566f9ee | 55 | PING_MESSAGE = 1; |
jberry | 0:9b057566f9ee | 56 | PING_MESSAGE.send(); |
jberry | 0:9b057566f9ee | 57 | } |
jberry | 0:9b057566f9ee | 58 | |
jberry | 0:9b057566f9ee | 59 | else if (strstr(RX_Command, "MOT:") != NULL) //check to see if incoming motor control command |
jberry | 0:9b057566f9ee | 60 | { |
jberry | 0:9b057566f9ee | 61 | MOT_channel.write(RX_Command, strlen(RX_Command)+1); |
jberry | 0:9b057566f9ee | 62 | |
jberry | 0:9b057566f9ee | 63 | } |
jberry | 0:9b057566f9ee | 64 | else if (strstr(RX_Command, "MO2:") != NULL) //this command will deal with both motors |
jberry | 0:9b057566f9ee | 65 | { |
jberry | 0:9b057566f9ee | 66 | MOT_channel.write(RX_Command, strlen(RX_Command)+1); |
jberry | 0:9b057566f9ee | 67 | |
jberry | 0:9b057566f9ee | 68 | } |
jberry | 0:9b057566f9ee | 69 | |
jberry | 0:9b057566f9ee | 70 | else if (strstr(RX_Command, "ACR") != NULL) //check to see if incoming motor control command |
jberry | 0:9b057566f9ee | 71 | { //OS::message<byte> ACCELEROMETER_MESSAGE; //if message is a zero, then return acceleration once, if a 1 then continually return acceleration data |
jberry | 0:9b057566f9ee | 72 | |
jberry | 0:9b057566f9ee | 73 | ACCELEROMETER_MESSAGE = 1; |
jberry | 0:9b057566f9ee | 74 | ACCELEROMETER_MESSAGE.send(); //send the message |
jberry | 0:9b057566f9ee | 75 | |
jberry | 0:9b057566f9ee | 76 | } |
jberry | 0:9b057566f9ee | 77 | else if (strstr(RX_Command, "ACC") != NULL) //check to see if incoming motor control command |
jberry | 0:9b057566f9ee | 78 | { //OS::message<byte> ACCELEROMETER_Message; //if message is a zero, then return acceleration once, if a 1 then continually return acceleration data |
jberry | 0:9b057566f9ee | 79 | |
jberry | 0:9b057566f9ee | 80 | ACCELEROMETER_MESSAGE = 0; |
jberry | 0:9b057566f9ee | 81 | ACCELEROMETER_MESSAGE.send(); //send the message |
jberry | 0:9b057566f9ee | 82 | |
jberry | 0:9b057566f9ee | 83 | } |
jberry | 0:9b057566f9ee | 84 | leds = 0x4; |
jberry | 0:9b057566f9ee | 85 | } |
jberry | 0:9b057566f9ee | 86 | |
jberry | 0:9b057566f9ee | 87 | } |
jberry | 0:9b057566f9ee | 88 | |
jberry | 0:9b057566f9ee | 89 | |
jberry | 0:9b057566f9ee | 90 | #endif |
jberry | 0:9b057566f9ee | 91 |