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 Jul 25 00:45:01 2019 +0000
Revision:
3:ecaf9963341b
Child:
5:65f21c0b6b79
Baseline for testing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
foxbrianr 3:ecaf9963341b 1
foxbrianr 3:ecaf9963341b 2 #include "mbed.h"
foxbrianr 3:ecaf9963341b 3 #include "ESCMControlApp.h"
foxbrianr 3:ecaf9963341b 4
foxbrianr 3:ecaf9963341b 5
foxbrianr 3:ecaf9963341b 6 Serial rs485port1(p9, p10, 9600); //tx,rx,baud
foxbrianr 3:ecaf9963341b 7 DigitalOut rs485port1mode (p11); //Transmit = 1, Receive = 0
foxbrianr 3:ecaf9963341b 8
foxbrianr 3:ecaf9963341b 9 Serial rs485port2(p13, p14, 9600); //tx,rx,baud
foxbrianr 3:ecaf9963341b 10 DigitalOut rs485port2mode (p12); //Transmit = 1, Receive = 0
foxbrianr 3:ecaf9963341b 11
foxbrianr 3:ecaf9963341b 12 CAN canport (p30, p29); // rx,tx
foxbrianr 3:ecaf9963341b 13 DigitalOut canportmode (p25); //Silent Mode = 1, Normal = 0
foxbrianr 3:ecaf9963341b 14
foxbrianr 3:ecaf9963341b 15
foxbrianr 3:ecaf9963341b 16 emic2 speaker(p28, p27); //serial RX,TX pins to emic
foxbrianr 3:ecaf9963341b 17
foxbrianr 3:ecaf9963341b 18 Mutex sound_mutex;
foxbrianr 3:ecaf9963341b 19
foxbrianr 3:ecaf9963341b 20
foxbrianr 3:ecaf9963341b 21 ESCM_EventLog escmEventLog;
foxbrianr 3:ecaf9963341b 22
foxbrianr 3:ecaf9963341b 23 static int dataRxCnt = 0;
foxbrianr 3:ecaf9963341b 24 static int cur_address = 0;
foxbrianr 3:ecaf9963341b 25
foxbrianr 3:ecaf9963341b 26
foxbrianr 3:ecaf9963341b 27 void setCurrentTime (char* timeBuf)
foxbrianr 3:ecaf9963341b 28 {
foxbrianr 3:ecaf9963341b 29
foxbrianr 3:ecaf9963341b 30 time_t rawtime;
foxbrianr 3:ecaf9963341b 31 struct tm * timeinfo;
foxbrianr 3:ecaf9963341b 32
foxbrianr 3:ecaf9963341b 33 time ( &rawtime );
foxbrianr 3:ecaf9963341b 34 timeinfo = localtime ( &rawtime );
foxbrianr 3:ecaf9963341b 35
foxbrianr 3:ecaf9963341b 36 int hours = timeinfo->tm_hour;
foxbrianr 3:ecaf9963341b 37 int mins = timeinfo->tm_min;
foxbrianr 3:ecaf9963341b 38 int secs = timeinfo->tm_sec;
foxbrianr 3:ecaf9963341b 39
foxbrianr 3:ecaf9963341b 40 int years = timeinfo->tm_year + 1900;
foxbrianr 3:ecaf9963341b 41 int months = timeinfo->tm_mon + 1 ;
foxbrianr 3:ecaf9963341b 42 int days = timeinfo->tm_mday;
foxbrianr 3:ecaf9963341b 43
foxbrianr 3:ecaf9963341b 44 sprintf(timeBuf,"%0d/%0d/%04d %02d:%02d:%02d\0",
foxbrianr 3:ecaf9963341b 45 months,days,years,hours,mins,secs );
foxbrianr 3:ecaf9963341b 46
foxbrianr 3:ecaf9963341b 47 }
foxbrianr 3:ecaf9963341b 48
foxbrianr 3:ecaf9963341b 49 void rx485Message() {
foxbrianr 3:ecaf9963341b 50 // Note: you need to actually read from the serial to clear the RX interrupt
foxbrianr 3:ecaf9963341b 51 int dataRxBuffer[4];
foxbrianr 3:ecaf9963341b 52 char timeBuffer[40];
foxbrianr 3:ecaf9963341b 53
foxbrianr 3:ecaf9963341b 54 int value = rs485port1.getc();
foxbrianr 3:ecaf9963341b 55
foxbrianr 3:ecaf9963341b 56 if (value){
foxbrianr 3:ecaf9963341b 57 dataRxBuffer[dataRxCnt++]=value;
foxbrianr 3:ecaf9963341b 58
foxbrianr 3:ecaf9963341b 59 if(dataRxCnt==4) {
foxbrianr 3:ecaf9963341b 60 cur_address = 10*(dataRxBuffer[0] -0x30) + (dataRxBuffer[1] -0x30);
foxbrianr 3:ecaf9963341b 61 memset(dataRxBuffer,0,sizeof(dataRxBuffer));
foxbrianr 3:ecaf9963341b 62 dataRxCnt=0;
foxbrianr 3:ecaf9963341b 63 printf("ADDR=%d\n",cur_address);
foxbrianr 3:ecaf9963341b 64
foxbrianr 3:ecaf9963341b 65 setCurrentTime(timeBuffer);
foxbrianr 3:ecaf9963341b 66 escmEventLog.add(cur_address, timeBuffer);
foxbrianr 3:ecaf9963341b 67 ESCMControlApp::say("Unit %d is open",cur_address);
foxbrianr 3:ecaf9963341b 68 }
foxbrianr 3:ecaf9963341b 69 }
foxbrianr 3:ecaf9963341b 70 }
foxbrianr 3:ecaf9963341b 71
foxbrianr 3:ecaf9963341b 72
foxbrianr 3:ecaf9963341b 73
foxbrianr 3:ecaf9963341b 74 void ESCMControlApp::init()
foxbrianr 3:ecaf9963341b 75 {
foxbrianr 3:ecaf9963341b 76 rs485port1mode = 0; // Receive
foxbrianr 3:ecaf9963341b 77 rs485port2mode = 1; // Transmit
foxbrianr 3:ecaf9963341b 78 canportmode = 0; // Normal mode
foxbrianr 3:ecaf9963341b 79
foxbrianr 3:ecaf9963341b 80
foxbrianr 3:ecaf9963341b 81 rs485port1.attach(&rx485Message);
foxbrianr 3:ecaf9963341b 82 }
foxbrianr 3:ecaf9963341b 83
foxbrianr 3:ecaf9963341b 84
foxbrianr 3:ecaf9963341b 85 void ESCMControlApp::update(void)
foxbrianr 3:ecaf9963341b 86 {
foxbrianr 3:ecaf9963341b 87 #if 0
foxbrianr 3:ecaf9963341b 88 if(rs485port1.readable() )
foxbrianr 3:ecaf9963341b 89 {
foxbrianr 3:ecaf9963341b 90 rx485Message();
foxbrianr 3:ecaf9963341b 91 }
foxbrianr 3:ecaf9963341b 92 #endif
foxbrianr 3:ecaf9963341b 93
foxbrianr 3:ecaf9963341b 94 if (cur_address)
foxbrianr 3:ecaf9963341b 95 {
foxbrianr 3:ecaf9963341b 96 tx485Message(cur_address);
foxbrianr 3:ecaf9963341b 97 say("%d is open", cur_address);
foxbrianr 3:ecaf9963341b 98 }
foxbrianr 3:ecaf9963341b 99 }
foxbrianr 3:ecaf9963341b 100
foxbrianr 3:ecaf9963341b 101
foxbrianr 3:ecaf9963341b 102 void ESCMControlApp::say (char *format, ...)
foxbrianr 3:ecaf9963341b 103 {
foxbrianr 3:ecaf9963341b 104 char buffer[128];
foxbrianr 3:ecaf9963341b 105 va_list args;
foxbrianr 3:ecaf9963341b 106 va_start(args, format);
foxbrianr 3:ecaf9963341b 107 vsprintf(buffer,format,args);
foxbrianr 3:ecaf9963341b 108
foxbrianr 3:ecaf9963341b 109 speaker.speakf("S");//Speak command starts with "S"
foxbrianr 3:ecaf9963341b 110 speaker.speakf(buffer);
foxbrianr 3:ecaf9963341b 111 speaker.speakf("\r");
foxbrianr 3:ecaf9963341b 112 speaker.ready();
foxbrianr 3:ecaf9963341b 113
foxbrianr 3:ecaf9963341b 114
foxbrianr 3:ecaf9963341b 115 va_end(args);
foxbrianr 3:ecaf9963341b 116 }
foxbrianr 3:ecaf9963341b 117
foxbrianr 3:ecaf9963341b 118 void ESCMControlApp::tx485Message(int address) {
foxbrianr 3:ecaf9963341b 119
foxbrianr 3:ecaf9963341b 120 int sum =0;
foxbrianr 3:ecaf9963341b 121
foxbrianr 3:ecaf9963341b 122 char dataTxBuffer[12];
foxbrianr 3:ecaf9963341b 123 sum += dataTxBuffer[0] = 0x40;
foxbrianr 3:ecaf9963341b 124 sum += dataTxBuffer[1] = 0x01;
foxbrianr 3:ecaf9963341b 125 sum += dataTxBuffer[2] = address; // floor number
foxbrianr 3:ecaf9963341b 126 sum += dataTxBuffer[3] = 0x0;
foxbrianr 3:ecaf9963341b 127 sum += dataTxBuffer[4] = 0x0;
foxbrianr 3:ecaf9963341b 128 sum += dataTxBuffer[5] = 0x0;
foxbrianr 3:ecaf9963341b 129 sum += dataTxBuffer[6] = (0x30 + address / 10);
foxbrianr 3:ecaf9963341b 130 sum += dataTxBuffer[7] = (0x30 + address % 10);
foxbrianr 3:ecaf9963341b 131 ; //
foxbrianr 3:ecaf9963341b 132 sum += dataTxBuffer[8] = 0x0;
foxbrianr 3:ecaf9963341b 133 sum += dataTxBuffer[9] = 0x0;
foxbrianr 3:ecaf9963341b 134 sum += dataTxBuffer[10] = 0x0;
foxbrianr 3:ecaf9963341b 135 sum += dataTxBuffer[11] = (char)(~sum +1);
foxbrianr 3:ecaf9963341b 136
foxbrianr 3:ecaf9963341b 137 for(int i= 0;i<12;i++){
foxbrianr 3:ecaf9963341b 138 rs485port2.putc(dataTxBuffer[i]);
foxbrianr 3:ecaf9963341b 139 }
foxbrianr 3:ecaf9963341b 140
foxbrianr 3:ecaf9963341b 141 }
foxbrianr 3:ecaf9963341b 142
foxbrianr 3:ecaf9963341b 143 void ESCMControlApp::txCanMessage502 (int address)
foxbrianr 3:ecaf9963341b 144 {
foxbrianr 3:ecaf9963341b 145 CANMessage canMessage(502);
foxbrianr 3:ecaf9963341b 146
foxbrianr 3:ecaf9963341b 147 canMessage.len = 8;
foxbrianr 3:ecaf9963341b 148
foxbrianr 3:ecaf9963341b 149 canMessage.data[0] = 0x0;
foxbrianr 3:ecaf9963341b 150 canMessage.data[1] = (0x30 + address / 10);
foxbrianr 3:ecaf9963341b 151 canMessage.data[2] = (0x30 + address % 10);
foxbrianr 3:ecaf9963341b 152 canMessage.data[3] = 0x0;
foxbrianr 3:ecaf9963341b 153 canMessage.data[4] = 0x0;
foxbrianr 3:ecaf9963341b 154 canMessage.data[5] = 0x0;
foxbrianr 3:ecaf9963341b 155 canMessage.data[6] = 0x0;
foxbrianr 3:ecaf9963341b 156 canMessage.data[7] = 0x0;
foxbrianr 3:ecaf9963341b 157
foxbrianr 3:ecaf9963341b 158 wait_ms(5); //Wait a bit for the mode the first time
foxbrianr 3:ecaf9963341b 159 if(canport.write(canMessage)) {
foxbrianr 3:ecaf9963341b 160 printf("Message sent via CAN: %d\n\r", address);
foxbrianr 3:ecaf9963341b 161 }
foxbrianr 3:ecaf9963341b 162
foxbrianr 3:ecaf9963341b 163 }
foxbrianr 3:ecaf9963341b 164
foxbrianr 3:ecaf9963341b 165
foxbrianr 3:ecaf9963341b 166
foxbrianr 3:ecaf9963341b 167 Menu ESCMControlApp::getAddressMenu()
foxbrianr 3:ecaf9963341b 168 {
foxbrianr 3:ecaf9963341b 169 return NULL;
foxbrianr 3:ecaf9963341b 170 }