working version of song control with initialization from sd card

Dependencies:   MFRC522 NRF2401P SDFileSystem SPI_TFT_ILI9341 TFT_fonts mbed

Fork of Song_Control by Malcolm McCulloch

Files at this revision

API Documentation at this revision

Comitter:
dxyang
Date:
Mon Feb 29 11:39:29 2016 +0000
Parent:
6:00a132a076d5
Child:
8:b40c4553f6d4
Commit message:
made the userIndex a parameter for a lot of methods, decoupled dependence on the global variable a bit (still used in the main loop though)

Changed in this revision

hub.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/hub.cpp	Mon Feb 29 11:04:16 2016 +0000
+++ b/hub.cpp	Mon Feb 29 11:39:29 2016 +0000
@@ -437,8 +437,9 @@
  * Log an action from a selection of predefined actions done by the current user
  * Actions used with this method should require a known user to be using system
  * @param action - enumerated HubActionForLogging that selects from predefined actions
+ * @param userIndex - int corresponding to the index of the user in the user table
  */
-void logActionWithUserInfoH(enum HubActionForLoggingH action)
+void logActionWithUserInfoH(enum HubActionForLoggingH action, int userIndex)
 { 
     // Append to a log text file
     spiSD();
@@ -483,9 +484,9 @@
     char rfidBuffer[20];
     char uidBuffer[20];
     char acctBalanceBuffer[20];
-    sprintf(rfidBuffer, "%u ", allUsersH[currentUserH].rfid);                                                                                 
-    sprintf(uidBuffer, "%u ", allUsersH[currentUserH].uid);
-    sprintf(acctBalanceBuffer, "%d\n", allUsersH[currentUserH].accountCredit);
+    sprintf(rfidBuffer, "%u ", allUsersH[userIndex].rfid);                                                                                 
+    sprintf(uidBuffer, "%u ", allUsersH[userIndex].uid);
+    sprintf(acctBalanceBuffer, "%d\n", allUsersH[userIndex].accountCredit);
     strcat(logLine, rfidBuffer);
     strcat(logLine, uidBuffer);
     strcat(logLine, acctBalanceBuffer);
@@ -556,11 +557,12 @@
 /*
  * User presses the button corresponding to an exit. Returns to home screen
  * after logging the action.
+ * @param userIndex - int representing index of user in user table 
  */
-void cancelPressedH() {
+void cancelPressedH(int userIndex) {
     clearAllUserInitiatedFlagsH();
     currentScreenH = initialScanRfid;
-    logActionWithUserInfoH(hubAction_Exit);
+    logActionWithUserInfoH(hubAction_Exit, userIndex);
 }
 
 /**
@@ -679,9 +681,11 @@
 
     // find the user info
     char foundUserFlag = 0;
+    int foundUserIndex;
     for (int i = 0; i < userCountH; i++) {
         if (allUsersH[i].rfid == actualRfid) {
             currentUserH = i;
+            foundUserIndex = i;
             foundUserFlag = 1;
             break;
         }
@@ -708,15 +712,15 @@
     }
     
     // log user scan
-    logActionWithUserInfoH(hubAction_RfidScanned);
+    logActionWithUserInfoH(hubAction_RfidScanned, foundUserIndex);
 
     // Display info about the user 
     char authorizationFlag = 0;
     TFT_H.cls();
     TFT_H.locate(0,0);
     TFT_H.printf("UserID: %u\n\r", actualRfid);
-    TFT_H.printf("Balance:%d\n\r", allUsersH[currentUserH].accountCredit);
-    if (allUsersH[currentUserH].batterySubscription > 0) {
+    TFT_H.printf("Balance:%d\n\r", allUsersH[foundUserIndex].accountCredit);
+    if (allUsersH[foundUserIndex].batterySubscription > 0) {
         authorizationFlag = 1;
     }
     TFT_H.printf("Authorization:%s\n\r", (authorizationFlag)? "YES":"NO");
@@ -743,8 +747,8 @@
     TFT_H.printf("Battery Action?\n\r");
     TFT_H.locate(0,200);
 
-    uint8_t maxBatteries = allUsersH[currentUserH].batterySubscription;
-    uint8_t outBatteries = allUsersH[currentUserH].batteriesOut;
+    uint8_t maxBatteries = allUsersH[foundUserIndex].batterySubscription;
+    uint8_t outBatteries = allUsersH[foundUserIndex].batteriesOut;
 
     if ((maxBatteries - outBatteries) == 0) {   // can only drop off
         TFT_H.printf(" drop           exit");
@@ -763,17 +767,18 @@
 /**
  *  Do if user selects to pickup a battery. Determines how many batteries
  *  a user can pickup based off user info and displays corresponding text
+ *  @param userIndex - int representing index of user in user table
  */
-void batteryPickUpH() {
+void batteryPickUpH(int userIndex) {
     TFT_H.cls();
     TFT_H.locate(0,0);
-    TFT_H.printf("UserID: %u\n\r\n\r", allUsersH[currentUserH].rfid);
+    TFT_H.printf("UserID: %u\n\r\n\r", allUsersH[userIndex].rfid);
 
     TFT_H.printf("Action: PICK UP\n\r");
     TFT_H.locate(0,160);
     TFT_H.printf("How many batteries?\n\r");
     TFT_H.locate(0,200);
-    switch (allUsersH[currentUserH].batterySubscription - allUsersH[currentUserH].batteriesOut) {
+    switch (allUsersH[userIndex].batterySubscription - allUsersH[userIndex].batteriesOut) {
         case 1: {
             TFT_H.printf("  1            exit");
             break;
@@ -797,17 +802,18 @@
 /**
  *  Do if user selects to dropoff a battery. Determines how many batteries
  *  a user can pickup based off user info and displays corresponding text
+ *  @param userIndex - int representing index of user in user table
  */
-void batteryDropOffH() {
+void batteryDropOffH(int userIndex) {
     TFT_H.cls();
     TFT_H.locate(0,0);
-    TFT_H.printf("UserID: %u\n\r\n\r", allUsersH[currentUserH].rfid);
+    TFT_H.printf("UserID: %u\n\r\n\r", allUsersH[userIndex].rfid);
 
     TFT_H.printf("Action: DROP OFF\n\r");
     TFT_H.locate(0,160);
     TFT_H.printf("How many batteries?\n\r");
     TFT_H.locate(0,200);
-    switch (allUsersH[currentUserH].batteriesOut) {
+    switch (allUsersH[userIndex].batteriesOut) {
         case 1: {
             TFT_H.printf("  1            exit");
             break;
@@ -832,23 +838,24 @@
  *  Do after use selects number of batteries to drop off. 
  *  Logs the action, changes user info, transmits instructions to other systems
  *  @param numBatteries - int for number of batteries selected to drop off
+ *  @param userIndex - int representing index of user in user table
  */
-void batteryDropOffH(int numBatteries) {
+void batteryDropOffH(int numBatteries, int userIndex) {
     switch(numBatteries) {
         case 1:
-            logActionWithUserInfoH(hubAction_OneBatteryDropped);
+            logActionWithUserInfoH(hubAction_OneBatteryDropped, userIndex);
             txBatteryDropOff(1);
-            allUsersH[currentUserH].batteriesOut--;
+            allUsersH[userIndex].batteriesOut--;
             break;
         case 2:
-            logActionWithUserInfoH(hubAction_TwoBatteryDropped);
+            logActionWithUserInfoH(hubAction_TwoBatteryDropped, userIndex);
             txBatteryDropOff(2);
-            allUsersH[currentUserH].batteriesOut -= 2;
+            allUsersH[userIndex].batteriesOut -= 2;
             break;
         case 3:
-            logActionWithUserInfoH(hubAction_ThreeBatteryDropped);
+            logActionWithUserInfoH(hubAction_ThreeBatteryDropped, userIndex);
             txBatteryDropOff(3);
-            allUsersH[currentUserH].batteriesOut -= 3;
+            allUsersH[userIndex].batteriesOut -= 3;
             break;
     }
 
@@ -860,23 +867,24 @@
  *  Do after use selects number of batteries to pick up. 
  *  Logs the action, changes user info, transmits instructions to other systems
  *  @param numBatteries - int for number of batteries selected to pick up
+ *  @param userIndex - int representing index of user in user table
  */
-void batteryPickUpH(int numBatteries) {
+void batteryPickUpH(int numBatteries, int userIndex) {
     switch(numBatteries) {
         case 1:
-            logActionWithUserInfoH(hubAction_OneBatteryPicked);
+            logActionWithUserInfoH(hubAction_OneBatteryPicked, userIndex);
             txBatteryPickUp(1);
-            allUsersH[currentUserH].batteriesOut++;
+            allUsersH[userIndex].batteriesOut++;
             break;
         case 2:
-            logActionWithUserInfoH(hubAction_TwoBatteryPicked);
+            logActionWithUserInfoH(hubAction_TwoBatteryPicked, userIndex);
             txBatteryPickUp(2);
-            allUsersH[currentUserH].batteriesOut += 2;
+            allUsersH[userIndex].batteriesOut += 2;
             break;
         case 3:
-            logActionWithUserInfoH(hubAction_ThreeBatteryPicked);
+            logActionWithUserInfoH(hubAction_ThreeBatteryPicked, userIndex);
             txBatteryPickUp(3);
-            allUsersH[currentUserH].batteriesOut += 3;
+            allUsersH[userIndex].batteriesOut += 3;
             break;
     }
 
@@ -970,15 +978,15 @@
                 uint8_t outBatteries = allUsersH[currentUserH].batteriesOut;
 
                 if ((maxBatteries - outBatteries) == 0) {
-                    if (flagButtonOneH) batteryDropOffH();
-                    if (flagButtonFourH) cancelPressedH();
+                    if (flagButtonOneH) batteryDropOffH(currentUserH);
+                    if (flagButtonFourH) cancelPressedH(currentUserH);
                 } else if (outBatteries == 0) { 
-                    if (flagButtonOneH) batteryPickUpH();
-                    if (flagButtonFourH) cancelPressedH();
+                    if (flagButtonOneH) batteryPickUpH(currentUserH);
+                    if (flagButtonFourH) cancelPressedH(currentUserH);
                 } else {                                                     
-                    if (flagButtonOneH) batteryPickUpH();
-                    if (flagButtonThreeH) batteryDropOffH();
-                    if (flagButtonFourH) cancelPressedH();
+                    if (flagButtonOneH) batteryPickUpH(currentUserH);
+                    if (flagButtonThreeH) batteryDropOffH(currentUserH);
+                    if (flagButtonFourH) cancelPressedH(currentUserH);
                 }
 
                 break;
@@ -986,21 +994,21 @@
             case batterySelectNumberForDropoff: {
                 switch (allUsersH[currentUserH].batteriesOut) {
                     case 1: {
-                        if (flagButtonOneH) batteryDropOffH(1);
-                        if (flagButtonFourH) cancelPressedH();
+                        if (flagButtonOneH) batteryDropOffH(1, currentUserH);
+                        if (flagButtonFourH) cancelPressedH(currentUserH);
                         break;
                     }
                     case 2: {
-                        if (flagButtonOneH) batteryDropOffH(1);
-                        if (flagButtonTwoH) batteryDropOffH(2);
-                        if (flagButtonFourH) cancelPressedH();
+                        if (flagButtonOneH) batteryDropOffH(1, currentUserH);
+                        if (flagButtonTwoH) batteryDropOffH(2, currentUserH);
+                        if (flagButtonFourH) cancelPressedH(currentUserH);
                         break;
                     }
                     case 3: {
-                        if (flagButtonOneH) batteryDropOffH(1);
-                        if (flagButtonTwoH) batteryDropOffH(2);
-                        if (flagButtonThreeH) batteryDropOffH(3);
-                        if (flagButtonFourH) cancelPressedH();
+                        if (flagButtonOneH) batteryDropOffH(1, currentUserH);
+                        if (flagButtonTwoH) batteryDropOffH(2, currentUserH);
+                        if (flagButtonThreeH) batteryDropOffH(3, currentUserH);
+                        if (flagButtonFourH) cancelPressedH(currentUserH);
                         break;
                     }
                 }
@@ -1009,21 +1017,21 @@
             case batterySelectNumberForPickup: {
                 switch (allUsersH[currentUserH].batterySubscription - allUsersH[currentUserH].batteriesOut) {
                     case 1: {
-                        if (flagButtonOneH) batteryPickUpH(1);
-                        if (flagButtonFourH) cancelPressedH();
+                        if (flagButtonOneH) batteryPickUpH(1, currentUserH);
+                        if (flagButtonFourH) cancelPressedH(currentUserH);
                         break;
                     }
                     case 2: {
-                        if (flagButtonOneH) batteryPickUpH(1);
-                        if (flagButtonTwoH) batteryPickUpH(2);
-                        if (flagButtonFourH) cancelPressedH();
+                        if (flagButtonOneH) batteryPickUpH(1, currentUserH);
+                        if (flagButtonTwoH) batteryPickUpH(2, currentUserH);
+                        if (flagButtonFourH) cancelPressedH(currentUserH);
                         break;
                     }
                     case 3: {
-                        if (flagButtonOneH) batteryPickUpH(1);
-                        if (flagButtonTwoH) batteryPickUpH(2);
-                        if (flagButtonThreeH) batteryPickUpH(3);
-                        if (flagButtonFourH) cancelPressedH();
+                        if (flagButtonOneH) batteryPickUpH(1, currentUserH);
+                        if (flagButtonTwoH) batteryPickUpH(2, currentUserH);
+                        if (flagButtonThreeH) batteryPickUpH(3, currentUserH);
+                        if (flagButtonFourH) cancelPressedH(currentUserH);
                         break;
                     }
                 }