3rd year group project. Electronic and Electrical Engineering. Heriot-Watt University. This is the code for the mbed for the Automatic Little Object Organiser (ALOO).
Dependencies: MCP23017 TCS3472_I2C WattBob_TextLCD mbed
commander.cpp@5:6ef2d954fca3, 2015-11-16 (annotated)
- Committer:
- lordlycastle
- Date:
- Mon Nov 16 01:26:41 2015 +0000
- Revision:
- 5:6ef2d954fca3
- Parent:
- 3:843b830ee8bd
- Child:
- 6:98fe30430194
Test for updating from local.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lordlycastle |
5:6ef2d954fca3 | 1 | #include <string> |
lordlycastle |
5:6ef2d954fca3 | 2 | #include <iostream> |
dreamselec | 2:7a55cb10259f | 3 | #include "commander.h" |
dreamselec | 2:7a55cb10259f | 4 | #include "globals.h" |
dreamselec | 2:7a55cb10259f | 5 | |
dreamselec | 2:7a55cb10259f | 6 | //enum Type { INVALID = -1, QUERY = 0, SET, REPLY }; |
dreamselec | 2:7a55cb10259f | 7 | //enum CObject { MBED = 0, COLOUR_SENSOR, SERVOS }; |
dreamselec | 2:7a55cb10259f | 8 | |
dreamselec | 2:7a55cb10259f | 9 | /** Listen serial port for either of the command prefix i.e. '?' or '!' or '=' |
dreamselec | 2:7a55cb10259f | 10 | @return -1:not correct prefix, otherwise 0:QUERY, 1:SET, 2:REPLY*/ |
dreamselec | 2:7a55cb10259f | 11 | Type listenForCommand(){ |
dreamselec | 2:7a55cb10259f | 12 | char commandType; |
dreamselec | 3:843b830ee8bd | 13 | pc.printf("In listen"); |
dreamselec | 2:7a55cb10259f | 14 | commandType = pc.getc(); |
dreamselec | 3:843b830ee8bd | 15 | |
dreamselec | 3:843b830ee8bd | 16 | if (commandType == '?'){ |
dreamselec | 2:7a55cb10259f | 17 | return QUERY; |
dreamselec | 3:843b830ee8bd | 18 | } |
dreamselec | 3:843b830ee8bd | 19 | else if (commandType == '!'){ |
dreamselec | 2:7a55cb10259f | 20 | return SET; |
dreamselec | 3:843b830ee8bd | 21 | } |
dreamselec | 3:843b830ee8bd | 22 | else if (commandType == '='){ |
dreamselec | 2:7a55cb10259f | 23 | return REPLY; |
dreamselec | 3:843b830ee8bd | 24 | } |
dreamselec | 3:843b830ee8bd | 25 | else{ |
dreamselec | 2:7a55cb10259f | 26 | return INVALID; |
dreamselec | 3:843b830ee8bd | 27 | } |
dreamselec | 2:7a55cb10259f | 28 | } |
dreamselec | 2:7a55cb10259f | 29 | |
dreamselec | 2:7a55cb10259f | 30 | void recieveCommand(Command *cmd, Type type){ |
dreamselec | 3:843b830ee8bd | 31 | // pc.printf("In recieve command\n"); |
dreamselec | 2:7a55cb10259f | 32 | |
dreamselec | 2:7a55cb10259f | 33 | switch (type) { |
dreamselec | 2:7a55cb10259f | 34 | case QUERY: |
dreamselec | 2:7a55cb10259f | 35 | cmd->inputString[0] = '?'; |
dreamselec | 2:7a55cb10259f | 36 | cmd->commandType[0] = '?'; |
dreamselec | 2:7a55cb10259f | 37 | break; |
dreamselec | 2:7a55cb10259f | 38 | case SET: |
dreamselec | 2:7a55cb10259f | 39 | cmd->inputString[0] = '!'; |
dreamselec | 2:7a55cb10259f | 40 | cmd->commandType[0] = '!'; |
dreamselec | 2:7a55cb10259f | 41 | break; |
dreamselec | 2:7a55cb10259f | 42 | case REPLY: |
dreamselec | 3:843b830ee8bd | 43 | cmd->inputString[0] = ':'; |
dreamselec | 3:843b830ee8bd | 44 | cmd->commandType[0] = ':'; |
dreamselec | 2:7a55cb10259f | 45 | break; |
dreamselec | 2:7a55cb10259f | 46 | default: |
dreamselec | 2:7a55cb10259f | 47 | break; |
dreamselec | 2:7a55cb10259f | 48 | } |
dreamselec | 2:7a55cb10259f | 49 | |
dreamselec | 2:7a55cb10259f | 50 | char nextChar; |
dreamselec | 2:7a55cb10259f | 51 | |
dreamselec | 2:7a55cb10259f | 52 | int commandObjectIdx = 0; |
dreamselec | 2:7a55cb10259f | 53 | bool recordCommandObject = false; |
dreamselec | 2:7a55cb10259f | 54 | int commandStringIdx = 0; |
dreamselec | 2:7a55cb10259f | 55 | bool recordCommandString = false; |
dreamselec | 2:7a55cb10259f | 56 | |
dreamselec | 2:7a55cb10259f | 57 | for (int i = 1; i < gCommandBufferSize; i++){ |
dreamselec | 2:7a55cb10259f | 58 | nextChar = pc.getc(); |
dreamselec | 2:7a55cb10259f | 59 | cmd->inputString[i] = nextChar; |
dreamselec | 2:7a55cb10259f | 60 | |
dreamselec | 2:7a55cb10259f | 61 | if (nextChar == gCommandTerminator){ |
dreamselec | 3:843b830ee8bd | 62 | pc.printf("nextChar == Terminator\r\n"); |
dreamselec | 3:843b830ee8bd | 63 | pc.printf("%s\r\n", cmd->inputString); |
dreamselec | 3:843b830ee8bd | 64 | // cmd->commandString[commandStringIdx - 1] = '\0'; |
dreamselec | 2:7a55cb10259f | 65 | break; |
dreamselec | 2:7a55cb10259f | 66 | } |
dreamselec | 2:7a55cb10259f | 67 | |
dreamselec | 2:7a55cb10259f | 68 | if (recordCommandObject){ |
dreamselec | 2:7a55cb10259f | 69 | cmd->commandObject[commandObjectIdx] = nextChar; |
dreamselec | 2:7a55cb10259f | 70 | commandObjectIdx++; |
dreamselec | 2:7a55cb10259f | 71 | } else if (recordCommandString) { |
dreamselec | 2:7a55cb10259f | 72 | cmd->commandString[commandStringIdx] = nextChar; |
dreamselec | 2:7a55cb10259f | 73 | commandStringIdx++; |
dreamselec | 2:7a55cb10259f | 74 | } |
dreamselec | 2:7a55cb10259f | 75 | |
dreamselec | 2:7a55cb10259f | 76 | if (nextChar == '<') |
dreamselec | 2:7a55cb10259f | 77 | recordCommandObject = true; |
dreamselec | 2:7a55cb10259f | 78 | else if (nextChar == '>'){ |
dreamselec | 2:7a55cb10259f | 79 | recordCommandObject = false; |
dreamselec | 2:7a55cb10259f | 80 | cmd->commandObject[commandObjectIdx - 1] = '\0'; |
dreamselec | 2:7a55cb10259f | 81 | recordCommandString = true; |
dreamselec | 2:7a55cb10259f | 82 | } |
dreamselec | 2:7a55cb10259f | 83 | } |
dreamselec | 2:7a55cb10259f | 84 | |
dreamselec | 2:7a55cb10259f | 85 | if (cmd->commandObject == "mbed") |
dreamselec | 2:7a55cb10259f | 86 | cmd->objectEnum = MBED; |
dreamselec | 2:7a55cb10259f | 87 | else if (cmd->commandObject == "colour_sensor") |
dreamselec | 2:7a55cb10259f | 88 | cmd->objectEnum = COLOUR_SENSOR; |
dreamselec | 2:7a55cb10259f | 89 | } |
dreamselec | 2:7a55cb10259f | 90 | |
dreamselec | 2:7a55cb10259f | 91 | void decodeCommand(Command *cmd) |
dreamselec | 2:7a55cb10259f | 92 | { |
dreamselec | 2:7a55cb10259f | 93 | switch (cmd->typeEnum) { |
dreamselec | 3:843b830ee8bd | 94 | case QUERY: { |
dreamselec | 3:843b830ee8bd | 95 | switch (cmd->objectEnum) { |
dreamselec | 3:843b830ee8bd | 96 | case MBED: { |
dreamselec | 3:843b830ee8bd | 97 | string commandString = cmd->commandString; |
dreamselec | 2:7a55cb10259f | 98 | const string init = "init"; |
dreamselec | 3:843b830ee8bd | 99 | if (cmd->commandString == "init") { |
dreamselec | 3:843b830ee8bd | 100 | // Convert gParity from Pairty to string |
dreamselec | 3:843b830ee8bd | 101 | pc.printf("%s<%s>baudRate:%f,parity:none,stopbits:%i;\r\n", cmd->commandType, cmd->commandObject, gBaudRate, gStopBits); |
dreamselec | 2:7a55cb10259f | 102 | } |
dreamselec | 2:7a55cb10259f | 103 | break; |
dreamselec | 3:843b830ee8bd | 104 | } |
dreamselec | 2:7a55cb10259f | 105 | default: |
dreamselec | 2:7a55cb10259f | 106 | pc.printf("Going to 2rd default\r\n"); |
dreamselec | 2:7a55cb10259f | 107 | break; |
dreamselec | 2:7a55cb10259f | 108 | } |
dreamselec | 2:7a55cb10259f | 109 | break; |
dreamselec | 2:7a55cb10259f | 110 | } |
dreamselec | 2:7a55cb10259f | 111 | default: |
dreamselec | 2:7a55cb10259f | 112 | pc.printf("Going to 1rd default\r\n"); |
dreamselec | 2:7a55cb10259f | 113 | break; |
dreamselec | 2:7a55cb10259f | 114 | } |
dreamselec | 2:7a55cb10259f | 115 | } |
dreamselec | 2:7a55cb10259f | 116 | |
dreamselec | 2:7a55cb10259f | 117 | //string parseReply(Command *cmd){ |
dreamselec | 2:7a55cb10259f | 118 | // |
dreamselec | 2:7a55cb10259f | 119 | //} |