![](/media/cache/group/download_IjbieK2.png.50x50_q85.png)
demo new haven display
Dependencies: LCD Menu ButtonCtrl TimeManagement EventLog AddressMap emic2
ESCM 2000 Control and Display application provides interface for the LPC1768 processor boards with the ECSM 2000 system.
This application implements SW interface : - RX 485 Receive from physical system - RX 485 Interface to send toECOM / ESCM board - CAN Interface to send to ECOM / ESCM board - 4x40 LCD with menu controls - RTC configuration -EMIC2 Sound Card - GPIO Extender to push buttons etc
main.cpp@5:65f21c0b6b79, 2019-09-12 (annotated)
- Committer:
- foxbrianr
- Date:
- Thu Sep 12 11:28:26 2019 +0000
- Revision:
- 5:65f21c0b6b79
- Parent:
- 3:ecaf9963341b
- Child:
- 6:010ceb99f7b0
beta1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
foxbrianr | 0:91f25a0f819c | 1 | #include "mbed.h" |
foxbrianr | 3:ecaf9963341b | 2 | #include "rtos.h" |
foxbrianr | 5:65f21c0b6b79 | 3 | #include "stats_report.h" |
foxbrianr | 3:ecaf9963341b | 4 | |
foxbrianr | 0:91f25a0f819c | 5 | #include "LCD.h" |
foxbrianr | 0:91f25a0f819c | 6 | |
foxbrianr | 3:ecaf9963341b | 7 | #include "ButtonController.h" |
foxbrianr | 3:ecaf9963341b | 8 | |
foxbrianr | 3:ecaf9963341b | 9 | #include "ESCMControlApp.h" |
foxbrianr | 3:ecaf9963341b | 10 | |
foxbrianr | 3:ecaf9963341b | 11 | #include "Menu.h" |
foxbrianr | 3:ecaf9963341b | 12 | #include "EditTimeMenu.h" |
foxbrianr | 5:65f21c0b6b79 | 13 | #include "EditAddressMenu.h" |
foxbrianr | 3:ecaf9963341b | 14 | #include "DisplayCodesMenu.h" |
foxbrianr | 5:65f21c0b6b79 | 15 | #include "FactoryResetMenu.h" |
foxbrianr | 3:ecaf9963341b | 16 | |
foxbrianr | 5:65f21c0b6b79 | 17 | #define SLEEP_TIME 500 // (msec) |
foxbrianr | 5:65f21c0b6b79 | 18 | #define PRINT_AFTER_N_LOOPS 20 |
foxbrianr | 3:ecaf9963341b | 19 | |
foxbrianr | 3:ecaf9963341b | 20 | DigitalOut led1(LED1); |
foxbrianr | 3:ecaf9963341b | 21 | DigitalOut led2(LED2); |
foxbrianr | 3:ecaf9963341b | 22 | DigitalOut led3(LED3); |
foxbrianr | 3:ecaf9963341b | 23 | DigitalOut led4(LED4); |
foxbrianr | 3:ecaf9963341b | 24 | |
foxbrianr | 3:ecaf9963341b | 25 | |
foxbrianr | 0:91f25a0f819c | 26 | Serial pc(USBTX, USBRX); // tx, rx |
foxbrianr | 0:91f25a0f819c | 27 | |
foxbrianr | 5:65f21c0b6b79 | 28 | /*------------------------------------------------------------------- |
foxbrianr | 5:65f21c0b6b79 | 29 | * define displays |
foxbrianr | 5:65f21c0b6b79 | 30 | *-------------------------------------------------------------------*/ |
foxbrianr | 5:65f21c0b6b79 | 31 | |
foxbrianr | 3:ecaf9963341b | 32 | LCD lcd; |
foxbrianr | 5:65f21c0b6b79 | 33 | #define MAX_THREADS 6 |
foxbrianr | 5:65f21c0b6b79 | 34 | Thread * threads [MAX_THREADS]; |
foxbrianr | 3:ecaf9963341b | 35 | |
foxbrianr | 5:65f21c0b6b79 | 36 | /*------------------------------------------------------------------- |
foxbrianr | 5:65f21c0b6b79 | 37 | * define displays |
foxbrianr | 5:65f21c0b6b79 | 38 | *-------------------------------------------------------------------*/ |
foxbrianr | 5:65f21c0b6b79 | 39 | |
foxbrianr | 5:65f21c0b6b79 | 40 | Menu rootMenu ("root menu"); |
foxbrianr | 5:65f21c0b6b79 | 41 | EditTimeMenu editTime ("Edit Time"); |
foxbrianr | 5:65f21c0b6b79 | 42 | EditAddressMenu editAddress ("Edit Addresses"); |
foxbrianr | 5:65f21c0b6b79 | 43 | DisplayCodesMenu showEvents ("Display Events" ); |
foxbrianr | 5:65f21c0b6b79 | 44 | FactoryResetMenu factoryReset("Factory Reset" ); |
foxbrianr | 5:65f21c0b6b79 | 45 | /*------------------------------------------------------------------- |
foxbrianr | 5:65f21c0b6b79 | 46 | * define display escmBtnController |
foxbrianr | 5:65f21c0b6b79 | 47 | *-------------------------------------------------------------------*/ |
foxbrianr | 5:65f21c0b6b79 | 48 | ButtonController escmBtnController; |
foxbrianr | 5:65f21c0b6b79 | 49 | |
foxbrianr | 5:65f21c0b6b79 | 50 | /*------------------------------------------------------------------- |
foxbrianr | 5:65f21c0b6b79 | 51 | * define application |
foxbrianr | 5:65f21c0b6b79 | 52 | *-------------------------------------------------------------------*/ |
foxbrianr | 5:65f21c0b6b79 | 53 | ESCMControlApp escmController; |
foxbrianr | 3:ecaf9963341b | 54 | |
foxbrianr | 3:ecaf9963341b | 55 | |
foxbrianr | 5:65f21c0b6b79 | 56 | int dataRxCnt = 0; |
foxbrianr | 3:ecaf9963341b | 57 | |
foxbrianr | 5:65f21c0b6b79 | 58 | int cur_address = 0; |
foxbrianr | 3:ecaf9963341b | 59 | |
foxbrianr | 5:65f21c0b6b79 | 60 | /*------------------------------------------------------------------- |
foxbrianr | 5:65f21c0b6b79 | 61 | * define led toggles for diagnostics |
foxbrianr | 5:65f21c0b6b79 | 62 | *-------------------------------------------------------------------*/ |
foxbrianr | 5:65f21c0b6b79 | 63 | void toggleLed1(){ led1 = !led1;} |
foxbrianr | 5:65f21c0b6b79 | 64 | void toggleLed2(){ led2 = !led2;} |
foxbrianr | 5:65f21c0b6b79 | 65 | void toggleLed3(){ led3 = !led3;} |
foxbrianr | 5:65f21c0b6b79 | 66 | void toggleLed4(){ led4 = !led4;} |
foxbrianr | 3:ecaf9963341b | 67 | |
foxbrianr | 5:65f21c0b6b79 | 68 | Semaphore displaySemaphore; |
foxbrianr | 5:65f21c0b6b79 | 69 | |
foxbrianr | 3:ecaf9963341b | 70 | /*********************************************************************** |
foxbrianr | 3:ecaf9963341b | 71 | * Thread to read GPIO and handle events |
foxbrianr | 3:ecaf9963341b | 72 | ***********************************************************************/ |
foxbrianr | 3:ecaf9963341b | 73 | |
foxbrianr | 5:65f21c0b6b79 | 74 | void ReadGPIOExtender(void) //const *name) |
foxbrianr | 3:ecaf9963341b | 75 | { |
foxbrianr | 3:ecaf9963341b | 76 | uint8_t code = 0; |
foxbrianr | 5:65f21c0b6b79 | 77 | |
foxbrianr | 5:65f21c0b6b79 | 78 | pc.printf("Starting escmBtnController task\n" ); |
foxbrianr | 5:65f21c0b6b79 | 79 | toggleLed4(); |
foxbrianr | 3:ecaf9963341b | 80 | |
foxbrianr | 3:ecaf9963341b | 81 | while (true) { |
foxbrianr | 5:65f21c0b6b79 | 82 | escmBtnController.update(); |
foxbrianr | 5:65f21c0b6b79 | 83 | toggleLed4(); |
foxbrianr | 5:65f21c0b6b79 | 84 | Thread::wait(50); |
foxbrianr | 3:ecaf9963341b | 85 | } |
foxbrianr | 3:ecaf9963341b | 86 | } |
foxbrianr | 3:ecaf9963341b | 87 | |
foxbrianr | 3:ecaf9963341b | 88 | /*********************************************************************** |
foxbrianr | 3:ecaf9963341b | 89 | * Thread to read GPIO and handle events |
foxbrianr | 3:ecaf9963341b | 90 | ***********************************************************************/ |
foxbrianr | 3:ecaf9963341b | 91 | |
foxbrianr | 5:65f21c0b6b79 | 92 | void ESCMController_Update(void) //const *name) |
foxbrianr | 3:ecaf9963341b | 93 | { |
foxbrianr | 5:65f21c0b6b79 | 94 | |
foxbrianr | 5:65f21c0b6b79 | 95 | pc.printf("Starting escmIOController task\n" ); |
foxbrianr | 3:ecaf9963341b | 96 | |
foxbrianr | 5:65f21c0b6b79 | 97 | if ( escmEventLog.size()> 0 ) |
foxbrianr | 5:65f21c0b6b79 | 98 | { |
foxbrianr | 5:65f21c0b6b79 | 99 | int address = escmEventLog.index(0)->address; |
foxbrianr | 5:65f21c0b6b79 | 100 | escmController.tx485Message ( address ); |
foxbrianr | 5:65f21c0b6b79 | 101 | } |
foxbrianr | 3:ecaf9963341b | 102 | |
foxbrianr | 3:ecaf9963341b | 103 | while(1) { |
foxbrianr | 3:ecaf9963341b | 104 | escmController.update(); |
foxbrianr | 5:65f21c0b6b79 | 105 | Thread::wait(100); |
foxbrianr | 3:ecaf9963341b | 106 | } |
foxbrianr | 3:ecaf9963341b | 107 | } |
foxbrianr | 3:ecaf9963341b | 108 | |
foxbrianr | 3:ecaf9963341b | 109 | |
foxbrianr | 3:ecaf9963341b | 110 | /*********************************************************************** |
foxbrianr | 3:ecaf9963341b | 111 | * Update LCD Display Thread |
foxbrianr | 3:ecaf9963341b | 112 | ***********************************************************************/ |
foxbrianr | 3:ecaf9963341b | 113 | |
foxbrianr | 5:65f21c0b6b79 | 114 | void UpdateDisplay(void) |
foxbrianr | 5:65f21c0b6b79 | 115 | { |
foxbrianr | 5:65f21c0b6b79 | 116 | static int counter = 0; |
foxbrianr | 5:65f21c0b6b79 | 117 | Menu *activeMenu = Menu::setCurrentMenu (&editAddress); |
foxbrianr | 5:65f21c0b6b79 | 118 | |
foxbrianr | 5:65f21c0b6b79 | 119 | pc.printf("Starting escmDisplay task\n" ); |
foxbrianr | 5:65f21c0b6b79 | 120 | |
foxbrianr | 5:65f21c0b6b79 | 121 | lcd.init(); |
foxbrianr | 5:65f21c0b6b79 | 122 | lcd.cls(); |
foxbrianr | 5:65f21c0b6b79 | 123 | lcd.locate(0,0); |
foxbrianr | 5:65f21c0b6b79 | 124 | lcd.printf ("Initializing System.."); |
foxbrianr | 5:65f21c0b6b79 | 125 | |
foxbrianr | 5:65f21c0b6b79 | 126 | event_t ex;// = (event_t*)(event_queue.alloc()); |
foxbrianr | 5:65f21c0b6b79 | 127 | int event =0; |
foxbrianr | 5:65f21c0b6b79 | 128 | |
foxbrianr | 5:65f21c0b6b79 | 129 | toggleLed3(); |
foxbrianr | 5:65f21c0b6b79 | 130 | activeMenu->update_needed = 1; |
foxbrianr | 5:65f21c0b6b79 | 131 | |
foxbrianr | 5:65f21c0b6b79 | 132 | while (true) { |
foxbrianr | 5:65f21c0b6b79 | 133 | |
foxbrianr | 5:65f21c0b6b79 | 134 | if (counter==0) { |
foxbrianr | 5:65f21c0b6b79 | 135 | activeMenu->update_needed = 1; |
foxbrianr | 5:65f21c0b6b79 | 136 | counter = 100; |
foxbrianr | 5:65f21c0b6b79 | 137 | } |
foxbrianr | 5:65f21c0b6b79 | 138 | |
foxbrianr | 5:65f21c0b6b79 | 139 | if (activeMenu == NULL){ |
foxbrianr | 5:65f21c0b6b79 | 140 | lcd.printf ("ERROR: Invalid Menu Selected.."); |
foxbrianr | 5:65f21c0b6b79 | 141 | continue; |
foxbrianr | 5:65f21c0b6b79 | 142 | } |
foxbrianr | 5:65f21c0b6b79 | 143 | else { |
foxbrianr | 5:65f21c0b6b79 | 144 | |
foxbrianr | 5:65f21c0b6b79 | 145 | if ( activeMenu != Menu::getCurrentMenu() ) |
foxbrianr | 5:65f21c0b6b79 | 146 | { |
foxbrianr | 5:65f21c0b6b79 | 147 | activeMenu = Menu::getCurrentMenu() ; |
foxbrianr | 5:65f21c0b6b79 | 148 | activeMenu->update_needed = 1; |
foxbrianr | 5:65f21c0b6b79 | 149 | } |
foxbrianr | 5:65f21c0b6b79 | 150 | else |
foxbrianr | 5:65f21c0b6b79 | 151 | { |
foxbrianr | 5:65f21c0b6b79 | 152 | |
foxbrianr | 5:65f21c0b6b79 | 153 | escmBtnController.processCmdQueue(activeMenu); |
foxbrianr | 5:65f21c0b6b79 | 154 | } |
foxbrianr | 5:65f21c0b6b79 | 155 | |
foxbrianr | 5:65f21c0b6b79 | 156 | activeMenu->DrawDisplay(&lcd); |
foxbrianr | 5:65f21c0b6b79 | 157 | } |
foxbrianr | 5:65f21c0b6b79 | 158 | |
foxbrianr | 5:65f21c0b6b79 | 159 | toggleLed3(); |
foxbrianr | 5:65f21c0b6b79 | 160 | Thread::wait(10); |
foxbrianr | 5:65f21c0b6b79 | 161 | counter--; |
foxbrianr | 5:65f21c0b6b79 | 162 | |
foxbrianr | 5:65f21c0b6b79 | 163 | } |
foxbrianr | 5:65f21c0b6b79 | 164 | } |
foxbrianr | 5:65f21c0b6b79 | 165 | /*********************************************************************** |
foxbrianr | 5:65f21c0b6b79 | 166 | * Handle Terminal Prompts |
foxbrianr | 5:65f21c0b6b79 | 167 | * TODO: should have its own queue. |
foxbrianr | 5:65f21c0b6b79 | 168 | ***********************************************************************/ |
foxbrianr | 5:65f21c0b6b79 | 169 | |
foxbrianr | 5:65f21c0b6b79 | 170 | void TerminalPrompt(void) // const *name) |
foxbrianr | 3:ecaf9963341b | 171 | { |
foxbrianr | 3:ecaf9963341b | 172 | |
foxbrianr | 5:65f21c0b6b79 | 173 | pc.printf("Starting escmTerm task\n" ); |
foxbrianr | 3:ecaf9963341b | 174 | |
foxbrianr | 5:65f21c0b6b79 | 175 | while (1) |
foxbrianr | 5:65f21c0b6b79 | 176 | { |
foxbrianr | 5:65f21c0b6b79 | 177 | int c; |
foxbrianr | 5:65f21c0b6b79 | 178 | pc.printf("\n>>"); |
foxbrianr | 5:65f21c0b6b79 | 179 | pc.scanf("%d", &c); |
foxbrianr | 3:ecaf9963341b | 180 | |
foxbrianr | 5:65f21c0b6b79 | 181 | /* echo */ |
foxbrianr | 5:65f21c0b6b79 | 182 | pc.printf("\n%0d",c); |
foxbrianr | 3:ecaf9963341b | 183 | |
foxbrianr | 5:65f21c0b6b79 | 184 | if ( c >= 0 && c < 99) { |
foxbrianr | 5:65f21c0b6b79 | 185 | ESCMControlApp::postEvent((uint16_t)c); |
foxbrianr | 5:65f21c0b6b79 | 186 | } |
foxbrianr | 5:65f21c0b6b79 | 187 | else if (c==555) |
foxbrianr | 5:65f21c0b6b79 | 188 | { |
foxbrianr | 5:65f21c0b6b79 | 189 | addressMap.reset(); |
foxbrianr | 5:65f21c0b6b79 | 190 | } |
foxbrianr | 5:65f21c0b6b79 | 191 | else if (c==666) |
foxbrianr | 5:65f21c0b6b79 | 192 | { |
foxbrianr | 5:65f21c0b6b79 | 193 | escmEventLog.reset(); |
foxbrianr | 5:65f21c0b6b79 | 194 | } |
foxbrianr | 5:65f21c0b6b79 | 195 | else if (c==999) |
foxbrianr | 5:65f21c0b6b79 | 196 | { |
foxbrianr | 5:65f21c0b6b79 | 197 | pc.printf("\nThread | size | free | used | max | "); |
foxbrianr | 5:65f21c0b6b79 | 198 | pc.printf("\n------------------------------------ "); |
foxbrianr | 5:65f21c0b6b79 | 199 | for(int i = 0; i<MAX_THREADS; i++) { |
foxbrianr | 5:65f21c0b6b79 | 200 | pc.printf("\n%-8d | %4d | %4d | %4d | %4d |", |
foxbrianr | 5:65f21c0b6b79 | 201 | i, |
foxbrianr | 5:65f21c0b6b79 | 202 | threads[i]->stack_size(), |
foxbrianr | 5:65f21c0b6b79 | 203 | threads[i]->free_stack(), |
foxbrianr | 5:65f21c0b6b79 | 204 | threads[i]->used_stack(), |
foxbrianr | 5:65f21c0b6b79 | 205 | threads[i]->max_stack() |
foxbrianr | 5:65f21c0b6b79 | 206 | ) ; |
foxbrianr | 5:65f21c0b6b79 | 207 | } |
foxbrianr | 5:65f21c0b6b79 | 208 | } |
foxbrianr | 5:65f21c0b6b79 | 209 | else |
foxbrianr | 5:65f21c0b6b79 | 210 | { |
foxbrianr | 5:65f21c0b6b79 | 211 | } |
foxbrianr | 3:ecaf9963341b | 212 | } |
foxbrianr | 3:ecaf9963341b | 213 | } |
foxbrianr | 3:ecaf9963341b | 214 | /*********************************************************************** |
foxbrianr | 3:ecaf9963341b | 215 | * Play sounds |
foxbrianr | 3:ecaf9963341b | 216 | * TODO: should have its own queue. |
foxbrianr | 3:ecaf9963341b | 217 | ***********************************************************************/ |
foxbrianr | 3:ecaf9963341b | 218 | |
foxbrianr | 5:65f21c0b6b79 | 219 | void PlaySound(void) // const *name) |
foxbrianr | 3:ecaf9963341b | 220 | { |
foxbrianr | 5:65f21c0b6b79 | 221 | led2 = 1; |
foxbrianr | 5:65f21c0b6b79 | 222 | pc.printf("Starting escmSound task\n" ); |
foxbrianr | 5:65f21c0b6b79 | 223 | |
foxbrianr | 5:65f21c0b6b79 | 224 | while (1) { |
foxbrianr | 5:65f21c0b6b79 | 225 | toggleLed2(); |
foxbrianr | 5:65f21c0b6b79 | 226 | escmController.processSoundQueue(); |
foxbrianr | 5:65f21c0b6b79 | 227 | Thread::wait(200); |
foxbrianr | 3:ecaf9963341b | 228 | } |
foxbrianr | 3:ecaf9963341b | 229 | } |
foxbrianr | 3:ecaf9963341b | 230 | |
foxbrianr | 5:65f21c0b6b79 | 231 | |
foxbrianr | 5:65f21c0b6b79 | 232 | /*********************************************************************** |
foxbrianr | 5:65f21c0b6b79 | 233 | * Dumps thread stats |
foxbrianr | 5:65f21c0b6b79 | 234 | ***********************************************************************/ |
foxbrianr | 5:65f21c0b6b79 | 235 | |
foxbrianr | 5:65f21c0b6b79 | 236 | void PrintSystemStats (void) |
foxbrianr | 5:65f21c0b6b79 | 237 | { |
foxbrianr | 5:65f21c0b6b79 | 238 | uint32_t frameCount = 0; |
foxbrianr | 5:65f21c0b6b79 | 239 | while(1) { |
foxbrianr | 5:65f21c0b6b79 | 240 | frameCount++; |
foxbrianr | 5:65f21c0b6b79 | 241 | if ((0 == frameCount) || (PRINT_AFTER_N_LOOPS == frameCount)) { |
foxbrianr | 5:65f21c0b6b79 | 242 | // Following the main thread wait, report on the current system status |
foxbrianr | 5:65f21c0b6b79 | 243 | //sys_state.report_state(); |
foxbrianr | 5:65f21c0b6b79 | 244 | #if 0 |
foxbrianr | 5:65f21c0b6b79 | 245 | pc.printf("\nThread | size | free | used | max | "); |
foxbrianr | 5:65f21c0b6b79 | 246 | pc.printf("\n------------------------------------ "); |
foxbrianr | 5:65f21c0b6b79 | 247 | for(int i = 0; i<MAX_THREADS; i++) { |
foxbrianr | 5:65f21c0b6b79 | 248 | pc.printf("\n%-8d | %4d | %4d | %4d | %4d |", |
foxbrianr | 5:65f21c0b6b79 | 249 | i, |
foxbrianr | 5:65f21c0b6b79 | 250 | threads[i]->stack_size(), |
foxbrianr | 5:65f21c0b6b79 | 251 | threads[i]->free_stack(), |
foxbrianr | 5:65f21c0b6b79 | 252 | threads[i]->used_stack(), |
foxbrianr | 5:65f21c0b6b79 | 253 | threads[i]->max_stack() |
foxbrianr | 5:65f21c0b6b79 | 254 | ) ; |
foxbrianr | 5:65f21c0b6b79 | 255 | } |
foxbrianr | 5:65f21c0b6b79 | 256 | #endif |
foxbrianr | 5:65f21c0b6b79 | 257 | escmEventLog.save(); |
foxbrianr | 5:65f21c0b6b79 | 258 | frameCount = 0; |
foxbrianr | 5:65f21c0b6b79 | 259 | } |
foxbrianr | 5:65f21c0b6b79 | 260 | |
foxbrianr | 5:65f21c0b6b79 | 261 | Thread::wait(500); |
foxbrianr | 5:65f21c0b6b79 | 262 | } |
foxbrianr | 5:65f21c0b6b79 | 263 | } |
foxbrianr | 5:65f21c0b6b79 | 264 | |
foxbrianr | 5:65f21c0b6b79 | 265 | #if 0 |
foxbrianr | 5:65f21c0b6b79 | 266 | /*********************************************************************** |
foxbrianr | 5:65f21c0b6b79 | 267 | * process incoming messages from rx485 serial (ISR) |
foxbrianr | 5:65f21c0b6b79 | 268 | ***********************************************************************/ |
foxbrianr | 5:65f21c0b6b79 | 269 | |
foxbrianr | 5:65f21c0b6b79 | 270 | void rx485Message() { |
foxbrianr | 5:65f21c0b6b79 | 271 | // Note: you need to actually read from the serial to clear the RX interrupt |
foxbrianr | 5:65f21c0b6b79 | 272 | int dataRxBuffer[4]; |
foxbrianr | 5:65f21c0b6b79 | 273 | int value = rs485port1.getc(); |
foxbrianr | 5:65f21c0b6b79 | 274 | |
foxbrianr | 5:65f21c0b6b79 | 275 | if (value){ |
foxbrianr | 5:65f21c0b6b79 | 276 | dataRxBuffer[dataRxCnt++]=value; |
foxbrianr | 5:65f21c0b6b79 | 277 | |
foxbrianr | 5:65f21c0b6b79 | 278 | if(dataRxCnt==4) { |
foxbrianr | 5:65f21c0b6b79 | 279 | cur_address = 10*(dataRxBuffer[0] -0x30) + (dataRxBuffer[1] -0x30); |
foxbrianr | 5:65f21c0b6b79 | 280 | memset(dataRxBuffer,0,sizeof(dataRxBuffer)); |
foxbrianr | 5:65f21c0b6b79 | 281 | dataRxCnt=0; |
foxbrianr | 5:65f21c0b6b79 | 282 | } |
foxbrianr | 5:65f21c0b6b79 | 283 | else |
foxbrianr | 5:65f21c0b6b79 | 284 | { |
foxbrianr | 5:65f21c0b6b79 | 285 | // do nothing |
foxbrianr | 5:65f21c0b6b79 | 286 | } |
foxbrianr | 5:65f21c0b6b79 | 287 | } |
foxbrianr | 5:65f21c0b6b79 | 288 | } |
foxbrianr | 5:65f21c0b6b79 | 289 | |
foxbrianr | 5:65f21c0b6b79 | 290 | #endif |
foxbrianr | 5:65f21c0b6b79 | 291 | |
foxbrianr | 3:ecaf9963341b | 292 | /*********************************************************************** |
foxbrianr | 3:ecaf9963341b | 293 | * Main Loop |
foxbrianr | 3:ecaf9963341b | 294 | ***********************************************************************/ |
foxbrianr | 0:91f25a0f819c | 295 | |
foxbrianr | 5:65f21c0b6b79 | 296 | int main() |
foxbrianr | 5:65f21c0b6b79 | 297 | { |
foxbrianr | 5:65f21c0b6b79 | 298 | SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */); |
foxbrianr | 3:ecaf9963341b | 299 | |
foxbrianr | 3:ecaf9963341b | 300 | led1=1; |
foxbrianr | 3:ecaf9963341b | 301 | led1=!led1; |
foxbrianr | 3:ecaf9963341b | 302 | |
foxbrianr | 0:91f25a0f819c | 303 | pc.printf("\n\r"); |
foxbrianr | 5:65f21c0b6b79 | 304 | |
foxbrianr | 0:91f25a0f819c | 305 | pc.printf("=====================================\n\r"); |
foxbrianr | 5:65f21c0b6b79 | 306 | pc.printf("= ESCM 2000 =\n\r"); |
foxbrianr | 5:65f21c0b6b79 | 307 | pc.printf("= %s %s =\n\r", __DATE__ , __TIME__); |
foxbrianr | 5:65f21c0b6b79 | 308 | pc.printf("= v0.01 =\n\r"); |
foxbrianr | 0:91f25a0f819c | 309 | pc.printf("=====================================\n\r"); |
foxbrianr | 0:91f25a0f819c | 310 | |
foxbrianr | 5:65f21c0b6b79 | 311 | |
foxbrianr | 5:65f21c0b6b79 | 312 | // initialize main controller |
foxbrianr | 3:ecaf9963341b | 313 | escmController.init(); |
foxbrianr | 0:91f25a0f819c | 314 | |
foxbrianr | 5:65f21c0b6b79 | 315 | toggleLed1(); |
foxbrianr | 5:65f21c0b6b79 | 316 | |
foxbrianr | 5:65f21c0b6b79 | 317 | //Add any selections |
foxbrianr | 5:65f21c0b6b79 | 318 | rootMenu.add(&showEvents); |
foxbrianr | 5:65f21c0b6b79 | 319 | rootMenu.add(&editTime); |
foxbrianr | 5:65f21c0b6b79 | 320 | rootMenu.add(&editAddress); |
foxbrianr | 5:65f21c0b6b79 | 321 | rootMenu.add(&factoryReset); |
foxbrianr | 5:65f21c0b6b79 | 322 | Menu::setCurrentMenu (&rootMenu); |
foxbrianr | 5:65f21c0b6b79 | 323 | |
foxbrianr | 5:65f21c0b6b79 | 324 | toggleLed1(); |
foxbrianr | 3:ecaf9963341b | 325 | |
foxbrianr | 5:65f21c0b6b79 | 326 | EventQueue *stats_queue = mbed_event_queue(); |
foxbrianr | 3:ecaf9963341b | 327 | |
foxbrianr | 5:65f21c0b6b79 | 328 | threads[0] = new Thread(osPriorityNormal5, 0x300 ); |
foxbrianr | 5:65f21c0b6b79 | 329 | threads[1] = new Thread(osPriorityNormal4, 0x500 ); |
foxbrianr | 5:65f21c0b6b79 | 330 | threads[2] = new Thread(osPriorityNormal3, 0x1000 ); |
foxbrianr | 5:65f21c0b6b79 | 331 | threads[3] = new Thread(osPriorityNormal2, 0x400 ); |
foxbrianr | 5:65f21c0b6b79 | 332 | threads[4] = new Thread(osPriorityNormal1, 0x200 ); |
foxbrianr | 5:65f21c0b6b79 | 333 | threads[5] = new Thread(osPriorityLow, 0x100 ); |
foxbrianr | 5:65f21c0b6b79 | 334 | |
foxbrianr | 5:65f21c0b6b79 | 335 | #if 0 |
foxbrianr | 5:65f21c0b6b79 | 336 | for (int i = 0; i < 100 ; i++ ) { |
foxbrianr | 5:65f21c0b6b79 | 337 | escmController.tx485Message(i); |
foxbrianr | 5:65f21c0b6b79 | 338 | escmController.txCanMessage502(i); |
foxbrianr | 5:65f21c0b6b79 | 339 | wait_ms(5); |
foxbrianr | 5:65f21c0b6b79 | 340 | } |
foxbrianr | 5:65f21c0b6b79 | 341 | #endif |
foxbrianr | 0:91f25a0f819c | 342 | |
foxbrianr | 5:65f21c0b6b79 | 343 | threads[0]->start(ESCMController_Update); |
foxbrianr | 5:65f21c0b6b79 | 344 | threads[1]->start(ReadGPIOExtender); |
foxbrianr | 5:65f21c0b6b79 | 345 | threads[2]->start(UpdateDisplay); |
foxbrianr | 5:65f21c0b6b79 | 346 | threads[3]->start(PlaySound); |
foxbrianr | 5:65f21c0b6b79 | 347 | threads[4]->start(PrintSystemStats); |
foxbrianr | 5:65f21c0b6b79 | 348 | //threads[5]->start(TerminalPrompt); |
foxbrianr | 3:ecaf9963341b | 349 | |
foxbrianr | 5:65f21c0b6b79 | 350 | escmController.say("Welcome ESCM"); |
foxbrianr | 5:65f21c0b6b79 | 351 | |
foxbrianr | 0:91f25a0f819c | 352 | while(1) { |
foxbrianr | 5:65f21c0b6b79 | 353 | toggleLed1(); |
foxbrianr | 5:65f21c0b6b79 | 354 | wait_ms(500); |
foxbrianr | 0:91f25a0f819c | 355 | } |
foxbrianr | 0:91f25a0f819c | 356 | } |
foxbrianr | 0:91f25a0f819c | 357 |