
ControllerBox directs electromechanical equipment in restaurants to display information.
Dependencies: TextLCD MbedJSONValue libMotiv picojson mbed-rtos mbed
Fork of Mbed_MotiVControllerBox by
libMotiv/Controller.cpp@3:21c8adb97c8f, 2014-12-04 (annotated)
- Committer:
- TimWoo
- Date:
- Thu Dec 04 22:26:30 2014 +0000
- Revision:
- 3:21c8adb97c8f
- Child:
- 5:e22a1ae893d2
Still sandboxing, but more inside the classes.; ; command building by Device and thus Flower works; updating table works; commandList basics now done;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
TimWoo | 3:21c8adb97c8f | 1 | #include <string> |
TimWoo | 3:21c8adb97c8f | 2 | #include <stdlib.h> |
TimWoo | 3:21c8adb97c8f | 3 | #include "TextLCD.h" |
TimWoo | 3:21c8adb97c8f | 4 | #include "Controller.h" |
TimWoo | 3:21c8adb97c8f | 5 | #include "Device.h" |
TimWoo | 3:21c8adb97c8f | 6 | #include "Table.h" |
TimWoo | 3:21c8adb97c8f | 7 | #include "Flower.h" |
TimWoo | 3:21c8adb97c8f | 8 | |
TimWoo | 3:21c8adb97c8f | 9 | #include <exception> |
TimWoo | 3:21c8adb97c8f | 10 | //#include <logic_error> |
TimWoo | 3:21c8adb97c8f | 11 | //#include <runtime_error> |
TimWoo | 3:21c8adb97c8f | 12 | #include <iostream> |
TimWoo | 3:21c8adb97c8f | 13 | //Flower commands |
TimWoo | 3:21c8adb97c8f | 14 | // fRESET = 0, |
TimWoo | 3:21c8adb97c8f | 15 | // fPETAL_SPD = 1, |
TimWoo | 3:21c8adb97c8f | 16 | // fBLINK_SPD = 2, |
TimWoo | 3:21c8adb97c8f | 17 | // fBLINK_PERIOD = 3, |
TimWoo | 3:21c8adb97c8f | 18 | // fLED_INTENSITY = 4, |
TimWoo | 3:21c8adb97c8f | 19 | // fPETAL_POS = 10, |
TimWoo | 3:21c8adb97c8f | 20 | // fLED_TABLE_FREE = 20, |
TimWoo | 3:21c8adb97c8f | 21 | // fLED_TABLE_RES = 21, |
TimWoo | 3:21c8adb97c8f | 22 | // fLED_FOOD = 22, |
TimWoo | 3:21c8adb97c8f | 23 | // fLED_DRINK = 23, |
TimWoo | 3:21c8adb97c8f | 24 | // fLED_SERVICE = 24, |
TimWoo | 3:21c8adb97c8f | 25 | // fLED_CLR = 29, |
TimWoo | 3:21c8adb97c8f | 26 | //// Flower version 2 commands n/a for now. |
TimWoo | 3:21c8adb97c8f | 27 | //// fPISTIL_SPD = 3, |
TimWoo | 3:21c8adb97c8f | 28 | //// fPETAL1_POS = 11, |
TimWoo | 3:21c8adb97c8f | 29 | //// fPETAL2_POS = 12, |
TimWoo | 3:21c8adb97c8f | 30 | //// fPETAL3_POS = 13, |
TimWoo | 3:21c8adb97c8f | 31 | //// fPETAL4_POS = 14, |
TimWoo | 3:21c8adb97c8f | 32 | //// fPETAL5_POS = 15, |
TimWoo | 3:21c8adb97c8f | 33 | //// fPETAL6_POS = 16, |
TimWoo | 3:21c8adb97c8f | 34 | //// fPISTIL_POS_FOOD = 30, |
TimWoo | 3:21c8adb97c8f | 35 | //// fPISTIL_POS_DRINKS = 31, |
TimWoo | 3:21c8adb97c8f | 36 | //// fPISTIL_POS_SERVICE = 32 |
TimWoo | 3:21c8adb97c8f | 37 | // fTABLE_FREE = 50, |
TimWoo | 3:21c8adb97c8f | 38 | // fTABLE_ACTIVE = 51, |
TimWoo | 3:21c8adb97c8f | 39 | // fTABLE_RES = 52, |
TimWoo | 3:21c8adb97c8f | 40 | // fTABLE_END = 53, |
TimWoo | 3:21c8adb97c8f | 41 | // fFOOD_ORDERED = 54, |
TimWoo | 3:21c8adb97c8f | 42 | // fDRINKS_ORDERED = 55, |
TimWoo | 3:21c8adb97c8f | 43 | // fSERVICE_REQ = 56, |
TimWoo | 3:21c8adb97c8f | 44 | // fPETALS_CLOSE = 60, |
TimWoo | 3:21c8adb97c8f | 45 | // fLAMP_ACT = 100, |
TimWoo | 3:21c8adb97c8f | 46 | // fDEMO1 = 101, |
TimWoo | 3:21c8adb97c8f | 47 | // fDEMO2 = 102 |
TimWoo | 3:21c8adb97c8f | 48 | //Flower commands v2 |
TimWoo | 3:21c8adb97c8f | 49 | //Functie Waarde(n) Doel |
TimWoo | 3:21c8adb97c8f | 50 | // |
TimWoo | 3:21c8adb97c8f | 51 | //Primaire functies |
TimWoo | 3:21c8adb97c8f | 52 | // |
TimWoo | 3:21c8adb97c8f | 53 | //0* 0 Reset (Zet alle waarden terug naar default) |
TimWoo | 3:21c8adb97c8f | 54 | //1* 0 – 100 Zet bewegingssnelheid van de bladeren (0 langzaam, 100 snel) |
TimWoo | 3:21c8adb97c8f | 55 | //2 0 – 100 Zet knippersnelheid van de verlichting (in %) |
TimWoo | 3:21c8adb97c8f | 56 | //3 0 – 255 Zet knipperlengte van de verlichting (in sec) |
TimWoo | 3:21c8adb97c8f | 57 | //4 0 – 100 Zet de lichtintensiteit van de LEDstrip (0 – 100 %) |
TimWoo | 3:21c8adb97c8f | 58 | //5 0 – 100 Zet bewegingssnelheid van de stampers (Niet beschikbaar in bloem versie 1) |
TimWoo | 3:21c8adb97c8f | 59 | //6 0 – 255 Zet tijd |
TimWoo | 3:21c8adb97c8f | 60 | //10* 0 – 100 Zet de positie van de bloembladeren (0 dicht, 100 open) |
TimWoo | 3:21c8adb97c8f | 61 | //11 – 18 0 – 100 Zet de positie van (max. 8) individuele bloembladeren (0 dicht, 100 open) (Niet beschikbaar in bloem versie 1) |
TimWoo | 3:21c8adb97c8f | 62 | //20* 0 … 1 Zet led “tafel vrij” |
TimWoo | 3:21c8adb97c8f | 63 | //21* 0 … 1 Zet led “tafel gereserveerd” |
TimWoo | 3:21c8adb97c8f | 64 | //22* 0 … 1 Zet led F(ood) |
TimWoo | 3:21c8adb97c8f | 65 | //23* 0 … 1 Zet led D(rink) |
TimWoo | 3:21c8adb97c8f | 66 | //24* 0 … 1 Zet led S(ervice) |
TimWoo | 3:21c8adb97c8f | 67 | //29 0 … 1 Zet led verlichting (standaard wit) |
TimWoo | 3:21c8adb97c8f | 68 | //30 0 – 100 Zet hoogte van stamper F(ood) (Niet beschikbaar in bloem versie 1) |
TimWoo | 3:21c8adb97c8f | 69 | //31 0 – 100 Zet hoogte van stamper D(rink) (Niet beschikbaar in bloem versie 1) |
TimWoo | 3:21c8adb97c8f | 70 | //32 0 – 100 Zet hoogte van stamper S(ervice) (Niet beschikbaar in bloem versie 1) |
TimWoo | 3:21c8adb97c8f | 71 | //Complexe functies |
TimWoo | 3:21c8adb97c8f | 72 | //50* 1 Zet bloem naar stand “Tafel vrij” (Gesloten groen) |
TimWoo | 3:21c8adb97c8f | 73 | //51* 1 Zet bloem naar stand “Tafel in gebruik” (Open groen) |
TimWoo | 3:21c8adb97c8f | 74 | //52* 1 Zet bloem naar stand “Tafel gereserveerd” (Gesloten rood) |
TimWoo | 3:21c8adb97c8f | 75 | //53* 1 Zet bloem naar stand “Zittingstijd om” (Open rood) |
TimWoo | 3:21c8adb97c8f | 76 | //54* 0 – 100 Zet bloem naar stand “Eten besteld” met x% bestelstatus |
TimWoo | 3:21c8adb97c8f | 77 | //55* 0 – 100 Zet bloem naar stand “Drank besteld” met x% bestelstatus |
TimWoo | 3:21c8adb97c8f | 78 | //56* 0 – 100 Zet bloem naar stand “Bediening gevraagd” met x% bestelstatus |
TimWoo | 3:21c8adb97c8f | 79 | //60 1 Bloem sluit al naar gelang de ingestelde tijd |
TimWoo | 3:21c8adb97c8f | 80 | //61 1 Zet bloem naar status “zittingstijd om”. (“Gereserveerd rood knipperen”) |
TimWoo | 3:21c8adb97c8f | 81 | //100 1 Lampfunctie (Bloem opent een klein beetje en fungeert als lamp) |
TimWoo | 3:21c8adb97c8f | 82 | //101 1 Demostand 1 (Bloem gaat continu open en dicht en alle leds wisselen) |
TimWoo | 3:21c8adb97c8f | 83 | //102 0 – 100 Demostand 2 (Bloem opent naar stand X en statusleds wisselen) |
TimWoo | 3:21c8adb97c8f | 84 | |
TimWoo | 3:21c8adb97c8f | 85 | //#include "MotiVAPI.h" |
TimWoo | 3:21c8adb97c8f | 86 | |
TimWoo | 3:21c8adb97c8f | 87 | //Test endpoint: http://demo.motiv.jvanbaarsen.com/demo/test |
TimWoo | 3:21c8adb97c8f | 88 | using namespace std; |
TimWoo | 3:21c8adb97c8f | 89 | |
TimWoo | 3:21c8adb97c8f | 90 | Controller::Controller(TextLCD *lcd): |
TimWoo | 3:21c8adb97c8f | 91 | status(WAITING) |
TimWoo | 3:21c8adb97c8f | 92 | { |
TimWoo | 3:21c8adb97c8f | 93 | printf("Controller constructor\r\n"); |
TimWoo | 3:21c8adb97c8f | 94 | this->lcd = lcd; |
TimWoo | 3:21c8adb97c8f | 95 | //setStatus(WAITING); |
TimWoo | 3:21c8adb97c8f | 96 | // _mapi = new MotiVAPI("http://demo.motiv.jvanbaarsen.com/demo/test"); |
TimWoo | 3:21c8adb97c8f | 97 | displayStatus(); |
TimWoo | 3:21c8adb97c8f | 98 | // devices.push_back(new <Device>Flower(1)); |
TimWoo | 3:21c8adb97c8f | 99 | // devices.append(new Flower(2)); |
TimWoo | 3:21c8adb97c8f | 100 | // devices.append(new Flower(3)); |
TimWoo | 3:21c8adb97c8f | 101 | |
TimWoo | 3:21c8adb97c8f | 102 | // tables.append(new Table(1)); |
TimWoo | 3:21c8adb97c8f | 103 | // tables.append(new Table(2)); |
TimWoo | 3:21c8adb97c8f | 104 | // tables.append(new Table(3)); |
TimWoo | 3:21c8adb97c8f | 105 | |
TimWoo | 3:21c8adb97c8f | 106 | //tables stores Tables |
TimWoo | 3:21c8adb97c8f | 107 | //Tables can be updated with information |
TimWoo | 3:21c8adb97c8f | 108 | //Tables can be asked for commands to send |
TimWoo | 3:21c8adb97c8f | 109 | //Tables will check changes between new info (this API update) and old info (previous API update) |
TimWoo | 3:21c8adb97c8f | 110 | //Tables can use the Flower interface to build commands |
TimWoo | 3:21c8adb97c8f | 111 | |
TimWoo | 3:21c8adb97c8f | 112 | |
TimWoo | 3:21c8adb97c8f | 113 | //Would like to have: |
TimWoo | 3:21c8adb97c8f | 114 | //Sending commands in different thread than receiving api update |
TimWoo | 3:21c8adb97c8f | 115 | //Commands then put into shared object commandQueue (FIFO) |
TimWoo | 3:21c8adb97c8f | 116 | |
TimWoo | 3:21c8adb97c8f | 117 | |
TimWoo | 3:21c8adb97c8f | 118 | // Test |
TimWoo | 3:21c8adb97c8f | 119 | Table table(1); |
TimWoo | 3:21c8adb97c8f | 120 | Table table2(2); |
TimWoo | 3:21c8adb97c8f | 121 | |
TimWoo | 3:21c8adb97c8f | 122 | vector<MCommand> insertVector; |
TimWoo | 3:21c8adb97c8f | 123 | insertVector = table.update(1,0,0,0); |
TimWoo | 3:21c8adb97c8f | 124 | printf("Updated first table\r\n"); |
TimWoo | 3:21c8adb97c8f | 125 | commandList.insert(commandList.begin(), insertVector.begin(), insertVector.end()); |
TimWoo | 3:21c8adb97c8f | 126 | printCommandList(); |
TimWoo | 3:21c8adb97c8f | 127 | insertVector = table2.update(2,0,0,0); |
TimWoo | 3:21c8adb97c8f | 128 | printf("Updated second table\r\n"); |
TimWoo | 3:21c8adb97c8f | 129 | commandList.insert(commandList.begin(), insertVector.begin(), insertVector.end()); |
TimWoo | 3:21c8adb97c8f | 130 | } |
TimWoo | 3:21c8adb97c8f | 131 | |
TimWoo | 3:21c8adb97c8f | 132 | void Controller::printDesc(int c) |
TimWoo | 3:21c8adb97c8f | 133 | { |
TimWoo | 3:21c8adb97c8f | 134 | // string desc = flower->getCommandDesc(c); |
TimWoo | 3:21c8adb97c8f | 135 | // lcdWriteLine(2, desc); |
TimWoo | 3:21c8adb97c8f | 136 | } |
TimWoo | 3:21c8adb97c8f | 137 | |
TimWoo | 3:21c8adb97c8f | 138 | Controller::cStatus Controller::getStatus() |
TimWoo | 3:21c8adb97c8f | 139 | { |
TimWoo | 3:21c8adb97c8f | 140 | return this->status; |
TimWoo | 3:21c8adb97c8f | 141 | } |
TimWoo | 3:21c8adb97c8f | 142 | |
TimWoo | 3:21c8adb97c8f | 143 | string Controller::statusString() |
TimWoo | 3:21c8adb97c8f | 144 | { |
TimWoo | 3:21c8adb97c8f | 145 | switch(status) { |
TimWoo | 3:21c8adb97c8f | 146 | case READY: |
TimWoo | 3:21c8adb97c8f | 147 | return "ready"; |
TimWoo | 3:21c8adb97c8f | 148 | |
TimWoo | 3:21c8adb97c8f | 149 | case WAITING: |
TimWoo | 3:21c8adb97c8f | 150 | return "waiting"; |
TimWoo | 3:21c8adb97c8f | 151 | |
TimWoo | 3:21c8adb97c8f | 152 | case BUSY: |
TimWoo | 3:21c8adb97c8f | 153 | return "busy"; |
TimWoo | 3:21c8adb97c8f | 154 | |
TimWoo | 3:21c8adb97c8f | 155 | case ERROR: |
TimWoo | 3:21c8adb97c8f | 156 | return "error"; |
TimWoo | 3:21c8adb97c8f | 157 | |
TimWoo | 3:21c8adb97c8f | 158 | case INIT: |
TimWoo | 3:21c8adb97c8f | 159 | return "intializing"; |
TimWoo | 3:21c8adb97c8f | 160 | |
TimWoo | 3:21c8adb97c8f | 161 | default: |
TimWoo | 3:21c8adb97c8f | 162 | return "unknown"; |
TimWoo | 3:21c8adb97c8f | 163 | } |
TimWoo | 3:21c8adb97c8f | 164 | } |
TimWoo | 3:21c8adb97c8f | 165 | |
TimWoo | 3:21c8adb97c8f | 166 | void Controller::setStatus(cStatus status) |
TimWoo | 3:21c8adb97c8f | 167 | { |
TimWoo | 3:21c8adb97c8f | 168 | this->status = status; |
TimWoo | 3:21c8adb97c8f | 169 | displayStatus(); |
TimWoo | 3:21c8adb97c8f | 170 | } |
TimWoo | 3:21c8adb97c8f | 171 | |
TimWoo | 3:21c8adb97c8f | 172 | void Controller::displayStatus() |
TimWoo | 3:21c8adb97c8f | 173 | { |
TimWoo | 3:21c8adb97c8f | 174 | this->lcd->locate(0,0); |
TimWoo | 3:21c8adb97c8f | 175 | this->lcd->clearLine(); |
TimWoo | 3:21c8adb97c8f | 176 | this->lcd->locate(0,0); |
TimWoo | 3:21c8adb97c8f | 177 | this->lcd->printf("Status: %s", statusString()); |
TimWoo | 3:21c8adb97c8f | 178 | } |
TimWoo | 3:21c8adb97c8f | 179 | |
TimWoo | 3:21c8adb97c8f | 180 | |
TimWoo | 3:21c8adb97c8f | 181 | void Controller::lcdWriteLine(int row, string str) |
TimWoo | 3:21c8adb97c8f | 182 | { |
TimWoo | 3:21c8adb97c8f | 183 | this->lcd->locate(0,row); |
TimWoo | 3:21c8adb97c8f | 184 | this->lcd->clearLine(); |
TimWoo | 3:21c8adb97c8f | 185 | this->lcd->locate(0,row); |
TimWoo | 3:21c8adb97c8f | 186 | this->lcd->printf("%s", str); |
TimWoo | 3:21c8adb97c8f | 187 | } |
TimWoo | 3:21c8adb97c8f | 188 | |
TimWoo | 3:21c8adb97c8f | 189 | //void Controller::nextCommand() |
TimWoo | 3:21c8adb97c8f | 190 | //{ |
TimWoo | 3:21c8adb97c8f | 191 | // std::vector<MCommand>::iterator it; |
TimWoo | 3:21c8adb97c8f | 192 | // it = commandList->begin(); |
TimWoo | 3:21c8adb97c8f | 193 | // it = commandList->insert(it, commandList->back()); |
TimWoo | 3:21c8adb97c8f | 194 | // it = commandList->begin(); |
TimWoo | 3:21c8adb97c8f | 195 | // commandList->pop_back(); |
TimWoo | 3:21c8adb97c8f | 196 | // it = commandList->begin(); |
TimWoo | 3:21c8adb97c8f | 197 | // MCommand command = *it; |
TimWoo | 3:21c8adb97c8f | 198 | // printDesc(command->getCmd()); |
TimWoo | 3:21c8adb97c8f | 199 | //} |
TimWoo | 3:21c8adb97c8f | 200 | |
TimWoo | 3:21c8adb97c8f | 201 | void Controller::prevCommand() |
TimWoo | 3:21c8adb97c8f | 202 | { |
TimWoo | 3:21c8adb97c8f | 203 | |
TimWoo | 3:21c8adb97c8f | 204 | } |
TimWoo | 3:21c8adb97c8f | 205 | |
TimWoo | 3:21c8adb97c8f | 206 | void Controller::sendCommandDem() |
TimWoo | 3:21c8adb97c8f | 207 | { |
TimWoo | 3:21c8adb97c8f | 208 | |
TimWoo | 3:21c8adb97c8f | 209 | } |
TimWoo | 3:21c8adb97c8f | 210 | |
TimWoo | 3:21c8adb97c8f | 211 | void Controller::printCommandList() |
TimWoo | 3:21c8adb97c8f | 212 | { |
TimWoo | 3:21c8adb97c8f | 213 | printf("\r\nCommand list printing\r\n\r\n"); |
TimWoo | 3:21c8adb97c8f | 214 | printf("The command list contains %d commands\r\n", commandList.size()); |
TimWoo | 3:21c8adb97c8f | 215 | if(commandList.size()) { |
TimWoo | 3:21c8adb97c8f | 216 | for(std::vector<MCommand>::iterator it = commandList.begin(); it != commandList.end(); ++it) { |
TimWoo | 3:21c8adb97c8f | 217 | /* std::cout << *it; ... */ |
TimWoo | 3:21c8adb97c8f | 218 | it->print(); |
TimWoo | 3:21c8adb97c8f | 219 | } |
TimWoo | 3:21c8adb97c8f | 220 | } |
TimWoo | 3:21c8adb97c8f | 221 | } |