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

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?

UserRevisionLine numberNew 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