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

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?

UserRevisionLine numberNew 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 //}