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
hub.cpp@4:74afa8c5ffe9, 2016-02-21 (annotated)
- Committer:
- dxyang
- Date:
- Sun Feb 21 00:09:29 2016 +0000
- Revision:
- 4:74afa8c5ffe9
- Parent:
- 2:d1eae91343a9
same as "Got roles sorted" but added an enter - makes my other commit of integration into a separate branch
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
epgmdm | 1:c2232b1eaf31 | 1 | /** |
epgmdm | 1:c2232b1eaf31 | 2 | * All the code associated to run the mbed as a hub. |
epgmdm | 1:c2232b1eaf31 | 3 | * Link with locker |
epgmdm | 1:c2232b1eaf31 | 4 | */ |
epgmdm | 1:c2232b1eaf31 | 5 | #include "mbed.h" |
epgmdm | 1:c2232b1eaf31 | 6 | #include "utils.h" |
epgmdm | 2:d1eae91343a9 | 7 | #include "NRF2401P.h" |
dxyang | 4:74afa8c5ffe9 | 8 | |
epgmdm | 1:c2232b1eaf31 | 9 | #define debug |
epgmdm | 1:c2232b1eaf31 | 10 | |
epgmdm | 1:c2232b1eaf31 | 11 | // Flags |
epgmdm | 2:d1eae91343a9 | 12 | unsigned char flag1sH = 0; |
epgmdm | 2:d1eae91343a9 | 13 | |
epgmdm | 1:c2232b1eaf31 | 14 | // Variables |
epgmdm | 2:d1eae91343a9 | 15 | Ticker tick1sHub; |
epgmdm | 2:d1eae91343a9 | 16 | float currentMaxH = 1.5; // Maximum current that each cube can consume. |
epgmdm | 2:d1eae91343a9 | 17 | |
epgmdm | 1:c2232b1eaf31 | 18 | // tx nRF2401 |
epgmdm | 2:d1eae91343a9 | 19 | extern char txBuff[]; |
epgmdm | 2:d1eae91343a9 | 20 | extern NRF2401P nrf1; |
epgmdm | 2:d1eae91343a9 | 21 | extern int channel; |
epgmdm | 1:c2232b1eaf31 | 22 | long long addrLcker=0xBBBBBBBBBB; |
epgmdm | 2:d1eae91343a9 | 23 | // ----------------------------------------------------------------------------- |
epgmdm | 2:d1eae91343a9 | 24 | // Interupt routines |
epgmdm | 2:d1eae91343a9 | 25 | // ----------------------------------------------------------------------------- |
epgmdm | 2:d1eae91343a9 | 26 | /** |
epgmdm | 2:d1eae91343a9 | 27 | * Fast interrupt routine for every 1 second |
epgmdm | 2:d1eae91343a9 | 28 | */ |
epgmdm | 2:d1eae91343a9 | 29 | void int1sH() |
epgmdm | 2:d1eae91343a9 | 30 | { |
epgmdm | 2:d1eae91343a9 | 31 | flag1sH=1; |
epgmdm | 2:d1eae91343a9 | 32 | // add only fast code. |
epgmdm | 2:d1eae91343a9 | 33 | } |
epgmdm | 2:d1eae91343a9 | 34 | /** |
epgmdm | 2:d1eae91343a9 | 35 | * Sends a time stamp |
epgmdm | 2:d1eae91343a9 | 36 | */ |
epgmdm | 2:d1eae91343a9 | 37 | void txTimeH() |
epgmdm | 2:d1eae91343a9 | 38 | { |
epgmdm | 2:d1eae91343a9 | 39 | #ifdef debug |
epgmdm | 2:d1eae91343a9 | 40 | printf("Send time \n\r"); |
epgmdm | 2:d1eae91343a9 | 41 | #endif |
epgmdm | 2:d1eae91343a9 | 42 | time_t now= time(NULL); |
epgmdm | 2:d1eae91343a9 | 43 | sprintf(txBuff,"T %X",now); |
epgmdm | 2:d1eae91343a9 | 44 | nrf1.transmitData(txBuff,strlen(txBuff)); |
epgmdm | 2:d1eae91343a9 | 45 | #ifdef debug |
epgmdm | 2:d1eae91343a9 | 46 | printf("Tx %s [nrf:%s] \n\r", txBuff,nrf1.statusString()); |
epgmdm | 2:d1eae91343a9 | 47 | #endif |
epgmdm | 2:d1eae91343a9 | 48 | } |
epgmdm | 2:d1eae91343a9 | 49 | |
epgmdm | 2:d1eae91343a9 | 50 | /** |
epgmdm | 2:d1eae91343a9 | 51 | * Sends max Current |
epgmdm | 2:d1eae91343a9 | 52 | */ |
epgmdm | 2:d1eae91343a9 | 53 | void txCurrentH() |
epgmdm | 2:d1eae91343a9 | 54 | { |
epgmdm | 2:d1eae91343a9 | 55 | #ifdef debug |
epgmdm | 2:d1eae91343a9 | 56 | printf("Send current \n\r"); |
epgmdm | 2:d1eae91343a9 | 57 | #endif |
epgmdm | 2:d1eae91343a9 | 58 | sprintf(txBuff,"I %04X", *((int *) ¤tMaxH)); |
epgmdm | 2:d1eae91343a9 | 59 | nrf1.transmitData(txBuff,strlen(txBuff)); |
epgmdm | 2:d1eae91343a9 | 60 | #ifdef debug |
epgmdm | 2:d1eae91343a9 | 61 | printf("Tx %s [nrf:%s] \n\r", txBuff,nrf1.statusString()); |
epgmdm | 2:d1eae91343a9 | 62 | #endif |
epgmdm | 2:d1eae91343a9 | 63 | } |
epgmdm | 1:c2232b1eaf31 | 64 | |
epgmdm | 2:d1eae91343a9 | 65 | /** |
epgmdm | 2:d1eae91343a9 | 66 | * Slow interrupt routine for every 1 second |
epgmdm | 2:d1eae91343a9 | 67 | */ |
epgmdm | 2:d1eae91343a9 | 68 | void do1sH() |
epgmdm | 2:d1eae91343a9 | 69 | { |
epgmdm | 2:d1eae91343a9 | 70 | #ifdef debug |
epgmdm | 2:d1eae91343a9 | 71 | printf("Hub 1s \n\r"); |
epgmdm | 2:d1eae91343a9 | 72 | #endif |
epgmdm | 2:d1eae91343a9 | 73 | |
epgmdm | 2:d1eae91343a9 | 74 | time_t now= time(NULL); |
epgmdm | 2:d1eae91343a9 | 75 | if ((now % 60)==0){ |
epgmdm | 2:d1eae91343a9 | 76 | txTimeH(); |
epgmdm | 2:d1eae91343a9 | 77 | } |
epgmdm | 2:d1eae91343a9 | 78 | txCurrentH(); |
epgmdm | 2:d1eae91343a9 | 79 | #ifdef debug |
epgmdm | 2:d1eae91343a9 | 80 | printf("Tx %s [nrf:%s] \n\r", txBuff,nrf1.statusString()); |
epgmdm | 2:d1eae91343a9 | 81 | #endif |
epgmdm | 2:d1eae91343a9 | 82 | } |
epgmdm | 2:d1eae91343a9 | 83 | // ----------------------------------------------------------------------------- |
epgmdm | 1:c2232b1eaf31 | 84 | // Initializaton |
epgmdm | 2:d1eae91343a9 | 85 | // ----------------------------------------------------------------------------- |
epgmdm | 2:d1eae91343a9 | 86 | /** |
epgmdm | 2:d1eae91343a9 | 87 | * Sets up the interrupts for the hub |
epgmdm | 2:d1eae91343a9 | 88 | */ |
epgmdm | 2:d1eae91343a9 | 89 | void initInteruptsHub(){ |
epgmdm | 2:d1eae91343a9 | 90 | tick1sHub.attach(&int1sH, 10.0); |
epgmdm | 2:d1eae91343a9 | 91 | } |
epgmdm | 2:d1eae91343a9 | 92 | /** |
epgmdm | 2:d1eae91343a9 | 93 | * asks the user for the time |
epgmdm | 2:d1eae91343a9 | 94 | */ |
epgmdm | 2:d1eae91343a9 | 95 | |
epgmdm | 2:d1eae91343a9 | 96 | void setRTCpc() |
epgmdm | 2:d1eae91343a9 | 97 | { |
epgmdm | 2:d1eae91343a9 | 98 | // get the current time from the terminal |
epgmdm | 2:d1eae91343a9 | 99 | struct tm t; |
epgmdm | 2:d1eae91343a9 | 100 | printf("Enter current date :\n\r"); |
epgmdm | 2:d1eae91343a9 | 101 | printf("YYYY MM DD [enter]\n\r"); |
epgmdm | 2:d1eae91343a9 | 102 | scanf("%d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday); |
epgmdm | 2:d1eae91343a9 | 103 | printf("Enter current time:\n\r"); |
epgmdm | 2:d1eae91343a9 | 104 | printf("HH MM SS [enter]\n\r"); |
epgmdm | 2:d1eae91343a9 | 105 | scanf("%d %d %d", &t.tm_hour, &t.tm_min, &t.tm_sec); |
epgmdm | 2:d1eae91343a9 | 106 | |
epgmdm | 2:d1eae91343a9 | 107 | // adjust for tm structure required values |
epgmdm | 2:d1eae91343a9 | 108 | t.tm_year = t.tm_year - 1900; |
epgmdm | 2:d1eae91343a9 | 109 | t.tm_mon = t.tm_mon - 1; |
epgmdm | 2:d1eae91343a9 | 110 | |
epgmdm | 2:d1eae91343a9 | 111 | // set the time |
epgmdm | 2:d1eae91343a9 | 112 | set_time(mktime(&t)); |
epgmdm | 2:d1eae91343a9 | 113 | |
epgmdm | 2:d1eae91343a9 | 114 | } |
epgmdm | 2:d1eae91343a9 | 115 | |
epgmdm | 2:d1eae91343a9 | 116 | |
epgmdm | 2:d1eae91343a9 | 117 | |
epgmdm | 1:c2232b1eaf31 | 118 | /** |
epgmdm | 1:c2232b1eaf31 | 119 | * Initialise for a locker |
epgmdm | 1:c2232b1eaf31 | 120 | * fp is the config file if additonal information is needed. |
epgmdm | 1:c2232b1eaf31 | 121 | */ |
epgmdm | 1:c2232b1eaf31 | 122 | void initialiseHub(FILE *fp){ |
epgmdm | 1:c2232b1eaf31 | 123 | #ifdef debug |
epgmdm | 1:c2232b1eaf31 | 124 | printf("Initialise Hub\n\r"); |
epgmdm | 1:c2232b1eaf31 | 125 | #endif |
epgmdm | 1:c2232b1eaf31 | 126 | |
epgmdm | 1:c2232b1eaf31 | 127 | // Read in hub address and channel |
epgmdm | 1:c2232b1eaf31 | 128 | if (fscanf (fp,"%x %*c %*s",&channel )!=1) writeError("Hub config: cannot read channel"); |
epgmdm | 1:c2232b1eaf31 | 129 | if (fscanf (fp,"%llx %*c %*s",&addrLcker )!=1) writeError("Hub config: cannot read hub address"); |
epgmdm | 1:c2232b1eaf31 | 130 | |
epgmdm | 1:c2232b1eaf31 | 131 | #ifdef debug |
epgmdm | 1:c2232b1eaf31 | 132 | printf(" Channel:%x, Hub Address %llx \n\r",channel, addrLcker); |
epgmdm | 1:c2232b1eaf31 | 133 | #endif |
epgmdm | 2:d1eae91343a9 | 134 | setRTCpc(); |
epgmdm | 2:d1eae91343a9 | 135 | |
epgmdm | 2:d1eae91343a9 | 136 | // Setup nrf |
epgmdm | 2:d1eae91343a9 | 137 | |
epgmdm | 2:d1eae91343a9 | 138 | #ifdef debug |
epgmdm | 2:d1eae91343a9 | 139 | printf("Steup doNrf \n\r"); |
epgmdm | 2:d1eae91343a9 | 140 | #endif |
epgmdm | 2:d1eae91343a9 | 141 | spiNrf(); |
epgmdm | 2:d1eae91343a9 | 142 | nrf1.quickTxSetup(channel, addrLcker); |
epgmdm | 2:d1eae91343a9 | 143 | #ifdef debug |
epgmdm | 2:d1eae91343a9 | 144 | nrf1.printDetails(); |
epgmdm | 2:d1eae91343a9 | 145 | nrf1.checkStatus(); |
epgmdm | 2:d1eae91343a9 | 146 | printf("Setup doNrf complete [nrf:%s]\n\r",nrf1.statusString()); |
epgmdm | 2:d1eae91343a9 | 147 | #endif |
epgmdm | 2:d1eae91343a9 | 148 | |
epgmdm | 2:d1eae91343a9 | 149 | // Setup interupts |
epgmdm | 2:d1eae91343a9 | 150 | initInteruptsHub(); |
epgmdm | 1:c2232b1eaf31 | 151 | |
epgmdm | 1:c2232b1eaf31 | 152 | |
epgmdm | 1:c2232b1eaf31 | 153 | } |
epgmdm | 2:d1eae91343a9 | 154 | |
epgmdm | 1:c2232b1eaf31 | 155 | // Interupt routines |
epgmdm | 1:c2232b1eaf31 | 156 | |
epgmdm | 1:c2232b1eaf31 | 157 | // Loop through slow routines |
epgmdm | 1:c2232b1eaf31 | 158 | |
epgmdm | 1:c2232b1eaf31 | 159 | void loopHub(){ |
epgmdm | 1:c2232b1eaf31 | 160 | |
epgmdm | 2:d1eae91343a9 | 161 | if (flag1sH){ |
epgmdm | 2:d1eae91343a9 | 162 | do1sH(); |
epgmdm | 2:d1eae91343a9 | 163 | flag1sH=0; |
epgmdm | 2:d1eae91343a9 | 164 | } |
epgmdm | 1:c2232b1eaf31 | 165 | } |