Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: Android.cpp
- Revision:
- 3:36ff03cb6bab
- Parent:
- 2:aeecb6277fc7
- Child:
- 4:5f1af832e593
--- a/Android.cpp Tue Jan 09 20:07:04 2018 +0000 +++ b/Android.cpp Sat Jan 13 18:53:38 2018 +0000 @@ -3,7 +3,7 @@ #include "mbed.h" #include<string> #include "Android.h" -#include "MODSERIAL.h" +#include "rtos.h" #define ARDUINO_STARTED "AR1" #define ANDROID_CONNECTED "AN1" @@ -33,92 +33,21 @@ - -#define PAYMENT_MODE "PAID" -#define MESSAGE_BUFFER_SIZE 32 - -char messageBufferIncoming[MESSAGE_BUFFER_SIZE]; -char messageBufferOutgoing[MESSAGE_BUFFER_SIZE]; -int lastCommands[3]; -int commandValue = 0; - -void Android::onMessage(MODSERIAL_IRQ_INFO *q) -{ - MODSERIAL *sys = q->serial; - sys->move(messageBufferIncoming, MESSAGE_BUFFER_SIZE); - - this->processMessageBuffer(); - - printf("Command received: %s\n", messageBufferIncoming); -} - - Android::Android(PinName txPin, PinName rxPin, Carousel& carousel): serial(txPin, rxPin), myled(LED1), carousel(carousel) { this->serial.baud(115200); - //this->serial.attach(callback(this, &Android::onData)); - this->serial.attach(this, &Android::onMessage, MODSERIAL::RxAutoDetect); - this->serial.autoDetectChar('\n'); + this->serial.attach(callback(this, &Android::onData)); + //this->serial.attach(this, &Android::onData, MODSERIAL::RxAutoDetect); + //this->serial.autoDetectChar('\n'); this->ticker.attach(callback(this, &Android::hearthBeat), 5.0f); + + //this->tickerReadSerial.attach(callback(this, &Android::onData), 0.1f); this->carousel.callibrate(); + } -void Android::processMessageBuffer() -{ - lastCommands[0] = lastCommands[1]; - lastCommands[1] = lastCommands[2]; - - int newCommand = 0; - if (strncmp(messageBufferIncoming, ANDROID_CONNECTED, sizeof(ANDROID_CONNECTED)) == 0) { - newCommand = COMMAND_CONNECTED; - } else if (strncmp(messageBufferIncoming, ANDROID_HEART_BEAT, sizeof(ANDROID_HEART_BEAT)) == 0) { - newCommand = COMMAND_HEARTH_BEAT; - } else if (strncmp(messageBufferIncoming, PRODUCT_SELECTED, sizeof(PRODUCT_SELECTED)) == 0) { - newCommand = COMMAND_PRODUCT_SELECT; - } else if (strncmp(messageBufferIncoming, TAKE_PAYMENT, sizeof(TAKE_PAYMENT)) == 0) { - newCommand = COMMAND_TAKE_PAYMENT; - } else if (strncmp(messageBufferIncoming, DISPENSING_NO_PAYMENT, sizeof(DISPENSING_NO_PAYMENT)) == 0) { - newCommand = COMMAND_DISPENSE; - } else if (atoi(messageBufferIncoming) != 0) { - newCommand = COMMAND_VALUE; - commandValue = atoi(messageBufferIncoming); - } else { - newCommand = COMMAND_UNKNOWN; - printf("Did not understood Android message: "); - printf(messageBufferIncoming); - printf("\n"); - } - lastCommands[2] = newCommand; - - this->executeCommands(); -} - -void Android::executeCommands() -{ - switch(lastCommands[2]) { - case COMMAND_VALUE: - switch (lastCommands[1]) { - case COMMAND_DISPENSE: - this->carousel.dispenseProduct(lastCommands[2]); - break; - } - break; - case COMMAND_CONNECTED: - this->sendToAndroid(OK); - break; - case COMMAND_DISPENSE: - case COMMAND_TAKE_PAYMENT: - case COMMAND_PRODUCT_SELECT: - case COMMAND_HEARTH_BEAT: - //do nothing - break; - } -} - - - void Android::hearthBeat(void) { this->sendToAndroid(ARDUINO_HEART_BEAT); @@ -131,40 +60,41 @@ this->serial.putc(-91); } + void Android::onData(void) { char command[50]; - int id; - - command[0] = '\n'; - id = -1; + + this->serial.scanf("%s", command); - if (this->serial.readable()) { - this->serial.scanf("%s\n", &command); - printf("Command received: %s\n", command); - - if (strcmp(command, ANDROID_CONNECTED) == 0) { - this->sendToAndroid(OK); - } else if (command == ANDROID_HEART_BEAT) { - //enjoy - } else if (strcmp(command, PRODUCT_SELECTED) == 0) { - this->serial.scanf("%d\n", &id); - printf("%d\n", id); - //do nothing - //preTurnProduct(); - } else if (strcmp(command, TAKE_PAYMENT) == 0) { - //do nothing - } else if (strcmp(command, DISPENSING_NO_PAYMENT) == 0) { - this->serial.scanf("%d\n", &id); - printf("%d\n", id); - this->carousel.dispenseProduct(id); - } else { - printf("Did not understood Android message: "); - printf(command); - printf("\n"); - } - - + if (strncmp(command, ANDROID_CONNECTED, sizeof(ANDROID_CONNECTED)-1) == 0) { + printf("%s\n", command); + this->sendToAndroid(OK); + } else if (strncmp(command, ANDROID_HEART_BEAT, sizeof(ANDROID_HEART_BEAT)-1) == 0) { + printf("%s\n", command); + } else if (strncmp(command, PRODUCT_SELECTED, sizeof(PRODUCT_SELECTED)-1) == 0) { + int section = this->readNumber(); + printf("Selected %d\n", section); + } else if (strncmp(command, TAKE_PAYMENT, sizeof(TAKE_PAYMENT)-1) == 0) { + printf("%s\n", command); + } else if (strncmp(command, DISPENSING_NO_PAYMENT, sizeof(DISPENSING_NO_PAYMENT)-1) == 0) { + int section = this->readNumber(); + printf("Dispensing %d\n", section); + this->carousel.dispenseProduct(section); + } else { + printf("Unknown command: |%s|\n", command); + } + + this->serial.getc();//read newline +} - } +int Android::readNumber() { + this->serial.getc();//read newline + char serialString[5]; + this->serial.scanf("%s", serialString); + + int answer; + char* end = NULL; + answer = strtol (serialString,&end,10); + return answer; }