Mangirdas Skripka / Android
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; 
 }