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