Sample code for the TrainInfoLib

Dependencies:   NJE10XCtrlLib NTPClient_NetServices mbed IniFileLib NextTrainFileLib TrainInfoLib lwip

Committer:
rinosh2
Date:
Fri Nov 19 21:07:11 2010 +0000
Revision:
1:93b052511e2c
Parent:
0:1a9fa43d77af
Add to the TextLCD for the status indication.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rinosh2 0:1a9fa43d77af 1 ///////////////////////////////////////////////////////////////////////////////
rinosh2 0:1a9fa43d77af 2 // TrainInfo: sample code for the TrainInfo library by rinos 2010
rinosh2 0:1a9fa43d77af 3 ///////////////////////////////////////////////////////////////////////////////
rinosh2 0:1a9fa43d77af 4
rinosh2 0:1a9fa43d77af 5 #include "TrainInfo.h"
rinosh2 0:1a9fa43d77af 6 #include "NJE10XCtrl.h"
rinosh2 0:1a9fa43d77af 7 #include <time.h>
rinosh2 0:1a9fa43d77af 8
rinosh2 0:1a9fa43d77af 9 ///////////////////////////////////////////////////////////////////////////////
rinosh2 0:1a9fa43d77af 10
rinosh2 0:1a9fa43d77af 11 LocalFileSystem local("local");
rinosh2 0:1a9fa43d77af 12 NJE10XCtrl gNJE(p9);
rinosh2 0:1a9fa43d77af 13
rinosh2 0:1a9fa43d77af 14 // critical section
rinosh2 0:1a9fa43d77af 15 #define TickerLock() (NVIC_DisableIRQ(TIMER3_IRQn))
rinosh2 0:1a9fa43d77af 16 #define TickerUnlock() (NVIC_EnableIRQ (TIMER3_IRQn))
rinosh2 0:1a9fa43d77af 17
rinosh2 0:1a9fa43d77af 18 // Config file
rinosh2 0:1a9fa43d77af 19 #ifndef ROOTPATH
rinosh2 0:1a9fa43d77af 20 #define ROOTPATH "/local/"
rinosh2 0:1a9fa43d77af 21 #endif
rinosh2 0:1a9fa43d77af 22 const char INI_FILE[] = ROOTPATH "TInfo.ini";
rinosh2 0:1a9fa43d77af 23 const int DEFAULT_GIVEUP_SEC = 30; // Giveup-seconds to take the next train
rinosh2 0:1a9fa43d77af 24 int gGiveupSec = DEFAULT_GIVEUP_SEC;
rinosh2 0:1a9fa43d77af 25 char gDelayMessage[TrainInfo::MAX_DELAY_MESSAGE];
rinosh2 0:1a9fa43d77af 26 int gDispMode = 0;
rinosh2 0:1a9fa43d77af 27 int gTimeZone = 540; // +9h00m
rinosh2 0:1a9fa43d77af 28
rinosh2 0:1a9fa43d77af 29 // Latest search cache
rinosh2 0:1a9fa43d77af 30 time_t gSerchTime;
rinosh2 0:1a9fa43d77af 31 NextTrainFile::NextInfo gNext[2];
rinosh2 0:1a9fa43d77af 32 int gDelayStatus = 0;
rinosh2 0:1a9fa43d77af 33 const int S_INFO_OK = 0x01;
rinosh2 0:1a9fa43d77af 34 const int S_DELAY = 0x10;
rinosh2 0:1a9fa43d77af 35
rinosh2 0:1a9fa43d77af 36
rinosh2 0:1a9fa43d77af 37 ////////////////////////////////////////////////////////////////////////////////
rinosh2 1:93b052511e2c 38 // LCD
rinosh2 1:93b052511e2c 39 #include "TextLCD.h"
rinosh2 1:93b052511e2c 40 void putLcd(const char* msg){
rinosh2 1:93b052511e2c 41 TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d0, d1, d2, d3
rinosh2 1:93b052511e2c 42 lcd.cls();
rinosh2 1:93b052511e2c 43 lcd.printf("%s", msg);
rinosh2 1:93b052511e2c 44 }
rinosh2 1:93b052511e2c 45
rinosh2 1:93b052511e2c 46 ////////////////////////////////////////////////////////////////////////////////
rinosh2 0:1a9fa43d77af 47 // RTC Configuration
rinosh2 0:1a9fa43d77af 48
rinosh2 0:1a9fa43d77af 49 //#define USE_NTPCLIENT 1
rinosh2 0:1a9fa43d77af 50
rinosh2 0:1a9fa43d77af 51 #ifdef USE_NTPCLIENT
rinosh2 0:1a9fa43d77af 52 #include "EthernetNetIf.h"
rinosh2 0:1a9fa43d77af 53 #include "NTPClient.h"
rinosh2 0:1a9fa43d77af 54
rinosh2 0:1a9fa43d77af 55 int UpdateRTC(const char* ntp_server, int ntp_port, int timezone) {
rinosh2 0:1a9fa43d77af 56 printf("UpdateRTC by NTPClient...\n");
rinosh2 0:1a9fa43d77af 57
rinosh2 0:1a9fa43d77af 58 EthernetNetIf eth;
rinosh2 0:1a9fa43d77af 59 EthernetErr ethErr = eth.setup(); // default timeout: 15sec
rinosh2 0:1a9fa43d77af 60 if (ethErr) {
rinosh2 0:1a9fa43d77af 61 printf("eth.setup failed %d.\n", ethErr);
rinosh2 0:1a9fa43d77af 62 return 1;
rinosh2 0:1a9fa43d77af 63 }
rinosh2 0:1a9fa43d77af 64 /*
rinosh2 0:1a9fa43d77af 65 time_t now = time(0);
rinosh2 0:1a9fa43d77af 66 if(now){
rinosh2 0:1a9fa43d77af 67 printf("Use current RTC: %d\n", now);
rinosh2 0:1a9fa43d77af 68 return 0;
rinosh2 0:1a9fa43d77af 69 }
rinosh2 0:1a9fa43d77af 70 */
rinosh2 0:1a9fa43d77af 71 printf("Connect to the NTP server %s...\n", ntp_server);
rinosh2 0:1a9fa43d77af 72
rinosh2 0:1a9fa43d77af 73 NTPResult ntpErr = NTPClient().setTime(Host(IpAddr(), ntp_port, ntp_server));
rinosh2 0:1a9fa43d77af 74 if(ntpErr){
rinosh2 0:1a9fa43d77af 75 printf("NTPClient::setTime failed %d.\n", ntpErr);
rinosh2 0:1a9fa43d77af 76 return 2;
rinosh2 0:1a9fa43d77af 77 }
rinosh2 0:1a9fa43d77af 78
rinosh2 0:1a9fa43d77af 79 #else
rinosh2 0:1a9fa43d77af 80 // I can't use NTPClient with LWIP HTTPClient...
rinosh2 0:1a9fa43d77af 81 // So, I get the RTC via http-NTP server.
rinosh2 0:1a9fa43d77af 82
rinosh2 0:1a9fa43d77af 83 #include "HTTPClient.h"
rinosh2 0:1a9fa43d77af 84 #define NTP2POSIX 2208988800UL
rinosh2 0:1a9fa43d77af 85
rinosh2 0:1a9fa43d77af 86 int UpdateRTC(const char* ntp_server, int ntp_port, int timezone) {
rinosh2 0:1a9fa43d77af 87 printf("UpdateRTC by HTTP-NTP...\n");
rinosh2 0:1a9fa43d77af 88
rinosh2 0:1a9fa43d77af 89 char rbuf[80];
rinosh2 0:1a9fa43d77af 90 printf("Connect to the NTP server %s...\n", ntp_server);
rinosh2 0:1a9fa43d77af 91 HTTPClient http;
rinosh2 0:1a9fa43d77af 92 http.timeout(10);
rinosh2 0:1a9fa43d77af 93 int len = http.get(ntp_server, rbuf, sizeof(rbuf) - 1);
rinosh2 0:1a9fa43d77af 94 if(len){
rinosh2 0:1a9fa43d77af 95 rbuf[len] = '\0';
rinosh2 0:1a9fa43d77af 96 char* p = strstr(rbuf, "<BODY>");
rinosh2 0:1a9fa43d77af 97 if(p){
rinosh2 0:1a9fa43d77af 98 p += 7;
rinosh2 0:1a9fa43d77af 99 time_t val = strtoul(p, 0, 10) - NTP2POSIX;
rinosh2 0:1a9fa43d77af 100 set_time(val);
rinosh2 0:1a9fa43d77af 101 printf("NTP set %d\n", val);
rinosh2 0:1a9fa43d77af 102 }
rinosh2 0:1a9fa43d77af 103 printf("HTTPClient download [%s]\n", rbuf);
rinosh2 0:1a9fa43d77af 104 }
rinosh2 0:1a9fa43d77af 105
rinosh2 0:1a9fa43d77af 106 #endif
rinosh2 0:1a9fa43d77af 107 // Puts RTC (JST)
rinosh2 0:1a9fa43d77af 108 time_t now = time(0) + timezone;
rinosh2 0:1a9fa43d77af 109 printf("RTC(JST): %s\n", ctime(&now));
rinosh2 0:1a9fa43d77af 110 return 0;
rinosh2 0:1a9fa43d77af 111 }
rinosh2 0:1a9fa43d77af 112
rinosh2 0:1a9fa43d77af 113 ////////////////////////////////////////////////////////////////////////////////
rinosh2 0:1a9fa43d77af 114 // Display control
rinosh2 0:1a9fa43d77af 115
rinosh2 0:1a9fa43d77af 116 #include "NJE10XCtrl.h"
rinosh2 0:1a9fa43d77af 117
rinosh2 0:1a9fa43d77af 118 char gMsgNoTrain[100] = "NoTrain";
rinosh2 0:1a9fa43d77af 119 char gMsgLeft [ 20] = "Left";
rinosh2 0:1a9fa43d77af 120 char gMsgDir [ 20] = "To";
rinosh2 0:1a9fa43d77af 121 char gMsgSec [ 20] = "Sec";
rinosh2 0:1a9fa43d77af 122 int gMsgWarn = 60 * 3; // 3min
rinosh2 0:1a9fa43d77af 123
rinosh2 0:1a9fa43d77af 124 void dispTime(){
rinosh2 0:1a9fa43d77af 125 char buf[100];
rinosh2 0:1a9fa43d77af 126 time_t t = time(0) + gTimeZone;
rinosh2 0:1a9fa43d77af 127 struct tm* st = localtime(&t);
rinosh2 0:1a9fa43d77af 128 t -= gSerchTime;
rinosh2 0:1a9fa43d77af 129
rinosh2 0:1a9fa43d77af 130 gNJE.clear();
rinosh2 0:1a9fa43d77af 131 NextTrainFile::NextInfo* p = &gNext[0];
rinosh2 0:1a9fa43d77af 132 if(p->m_diff < 0){
rinosh2 0:1a9fa43d77af 133 printf("Now:%02d:%02d:%02d, %s\n", st->tm_hour, st->tm_min, st->tm_sec, gMsgNoTrain); // or error
rinosh2 0:1a9fa43d77af 134 sprintf(buf, "%02d:%02d:%02d ", st->tm_hour, st->tm_min, st->tm_sec);
rinosh2 0:1a9fa43d77af 135 gNJE.add(buf);
rinosh2 0:1a9fa43d77af 136 gNJE.addAttr(NJE10XCtrl::ATTR_RED);
rinosh2 0:1a9fa43d77af 137 gNJE.add(gMsgNoTrain);
rinosh2 0:1a9fa43d77af 138 gNJE.setMessage(1);
rinosh2 0:1a9fa43d77af 139 return;
rinosh2 0:1a9fa43d77af 140 }
rinosh2 0:1a9fa43d77af 141
rinosh2 0:1a9fa43d77af 142 // Check the difference (was gone?)
rinosh2 0:1a9fa43d77af 143 int diff = p->m_diff - t;
rinosh2 0:1a9fa43d77af 144 if(diff < gGiveupSec){
rinosh2 0:1a9fa43d77af 145 p = &gNext[1];
rinosh2 0:1a9fa43d77af 146 diff = p->m_diff - t;
rinosh2 0:1a9fa43d77af 147 }
rinosh2 0:1a9fa43d77af 148
rinosh2 0:1a9fa43d77af 149 // Show message to the NJE-105
rinosh2 0:1a9fa43d77af 150 NJE10XCtrl::Attr1 a1 = NJE10XCtrl::ATTR_GREEN;
rinosh2 0:1a9fa43d77af 151 NJE10XCtrl::Attr2 a2 = NJE10XCtrl::ATTR_SCROLL_R;
rinosh2 0:1a9fa43d77af 152 NJE10XCtrl::Attr3 a3 = NJE10XCtrl::ATTR_NORMAL;
rinosh2 0:1a9fa43d77af 153
rinosh2 0:1a9fa43d77af 154 if(diff < 0){
rinosh2 0:1a9fa43d77af 155 printf("%02d:%02d Gone%2dsec ", p->m_hour, p->m_min, -diff);
rinosh2 0:1a9fa43d77af 156
rinosh2 0:1a9fa43d77af 157 sprintf(buf, "%02d:%02d", p->m_hour, p->m_min);
rinosh2 0:1a9fa43d77af 158 gNJE.add(buf);
rinosh2 0:1a9fa43d77af 159 //gNJE.addAttr(NJE10XCtrl::ATTR_YELLOW, NJE10XCtrl::ATTR_SCROLL);
rinosh2 0:1a9fa43d77af 160 gNJE.add(p->m_option);
rinosh2 0:1a9fa43d77af 161 gNJE.add(gMsgDir);
rinosh2 0:1a9fa43d77af 162 sprintf(buf, " Gone%ds", -diff);
rinosh2 0:1a9fa43d77af 163 gNJE.add(buf);
rinosh2 0:1a9fa43d77af 164 } else if(diff < 60) {
rinosh2 0:1a9fa43d77af 165 // 123456789012345678901234 (NJE-105)
rinosh2 0:1a9fa43d77af 166 // MM:HH •’Ê “ú‹gs Žc59•b
rinosh2 0:1a9fa43d77af 167 printf("%02d:%02d Left%2dsec %s\n", p->m_hour, p->m_min, diff, p->m_option);
rinosh2 0:1a9fa43d77af 168
rinosh2 0:1a9fa43d77af 169 sprintf(buf, "%02d:%02d", p->m_hour, p->m_min);
rinosh2 0:1a9fa43d77af 170 gNJE.add(buf);
rinosh2 0:1a9fa43d77af 171 gNJE.addAttr(NJE10XCtrl::ATTR_YELLOW, NJE10XCtrl::ATTR_SCROLL_R);
rinosh2 0:1a9fa43d77af 172 gNJE.add(p->m_option);
rinosh2 0:1a9fa43d77af 173 gNJE.add(gMsgDir);
rinosh2 0:1a9fa43d77af 174 gNJE.addAttr((diff<gMsgWarn)? NJE10XCtrl::ATTR_RED : NJE10XCtrl::ATTR_GREEN, NJE10XCtrl::ATTR_SCROLL_R);
rinosh2 0:1a9fa43d77af 175 gNJE.add(' ');
rinosh2 0:1a9fa43d77af 176 gNJE.add(gMsgLeft);
rinosh2 0:1a9fa43d77af 177 sprintf(buf, "%2d%s", diff, gMsgSec);
rinosh2 0:1a9fa43d77af 178 gNJE.add(buf);
rinosh2 0:1a9fa43d77af 179 } else {
rinosh2 0:1a9fa43d77af 180 // 123456789012345678901234 (NJE-105)
rinosh2 0:1a9fa43d77af 181 // MM:HH•’Ê “ú‹gs Žc01:23
rinosh2 0:1a9fa43d77af 182 int diff_min = diff / 60;
rinosh2 0:1a9fa43d77af 183 int diff_sec = diff % 60;
rinosh2 0:1a9fa43d77af 184 printf("%02d:%02d Left%2d:%02d(%s)\n", p->m_hour, p->m_min, diff_min, diff_sec, p->m_option);
rinosh2 0:1a9fa43d77af 185
rinosh2 0:1a9fa43d77af 186 sprintf(buf, "%02d:%02d", p->m_hour, p->m_min);
rinosh2 0:1a9fa43d77af 187 gNJE.add(buf);
rinosh2 0:1a9fa43d77af 188 gNJE.addAttr(NJE10XCtrl::ATTR_YELLOW, NJE10XCtrl::ATTR_SCROLL_R);
rinosh2 0:1a9fa43d77af 189 gNJE.add(p->m_option);
rinosh2 0:1a9fa43d77af 190 gNJE.add(gMsgDir);
rinosh2 0:1a9fa43d77af 191 gNJE.addAttr((diff<gMsgWarn)? NJE10XCtrl::ATTR_RED : NJE10XCtrl::ATTR_GREEN, NJE10XCtrl::ATTR_SCROLL_R);
rinosh2 0:1a9fa43d77af 192 gNJE.add(gMsgLeft);
rinosh2 0:1a9fa43d77af 193 sprintf(buf, "%2d:%02d", diff_min, diff_sec);
rinosh2 0:1a9fa43d77af 194 gNJE.add(buf);
rinosh2 0:1a9fa43d77af 195 }
rinosh2 0:1a9fa43d77af 196
rinosh2 0:1a9fa43d77af 197 // delay
rinosh2 0:1a9fa43d77af 198 a1 = NJE10XCtrl::ATTR_GREEN;
rinosh2 0:1a9fa43d77af 199 int delay = 0;
rinosh2 0:1a9fa43d77af 200 if(gDelayStatus & S_DELAY){
rinosh2 0:1a9fa43d77af 201 delay = 1;
rinosh2 0:1a9fa43d77af 202 a1 = NJE10XCtrl::ATTR_RED;
rinosh2 0:1a9fa43d77af 203 } else if(*gDelayMessage){
rinosh2 0:1a9fa43d77af 204 if(diff % 60 < 3) delay = 1;
rinosh2 0:1a9fa43d77af 205 }
rinosh2 0:1a9fa43d77af 206
rinosh2 0:1a9fa43d77af 207 if(delay) gNJE.setMessage(2, gDelayMessage, a1);
rinosh2 0:1a9fa43d77af 208 else gNJE.delMessage(2);
rinosh2 0:1a9fa43d77af 209 gNJE.setMessage(1, 0, a1, a2, a3);
rinosh2 0:1a9fa43d77af 210
rinosh2 0:1a9fa43d77af 211 // if(delay) gNJE.setMessage(1, gDelayMessage);
rinosh2 0:1a9fa43d77af 212 // else gNJE.setMessage(1, 0, a1, a2, a3);
rinosh2 0:1a9fa43d77af 213 }
rinosh2 0:1a9fa43d77af 214
rinosh2 0:1a9fa43d77af 215 void dispDelay(){
rinosh2 0:1a9fa43d77af 216 if(++gDispMode > 10) gDispMode = 0;
rinosh2 0:1a9fa43d77af 217 if(gDispMode != 1){
rinosh2 0:1a9fa43d77af 218 gNJE.delMessage(2);
rinosh2 0:1a9fa43d77af 219 return;
rinosh2 0:1a9fa43d77af 220 }
rinosh2 0:1a9fa43d77af 221 printf("%s\n", gDelayMessage);
rinosh2 0:1a9fa43d77af 222 gNJE.setMessage(2, gDelayMessage);
rinosh2 0:1a9fa43d77af 223 }
rinosh2 0:1a9fa43d77af 224
rinosh2 0:1a9fa43d77af 225 void dispWait(){
rinosh2 0:1a9fa43d77af 226 if(++gDispMode > 10) gDispMode = 0;
rinosh2 0:1a9fa43d77af 227 if(gDispMode != 1){
rinosh2 0:1a9fa43d77af 228 return;
rinosh2 0:1a9fa43d77af 229 }
rinosh2 0:1a9fa43d77af 230 printf("Please wait...\n");
rinosh2 0:1a9fa43d77af 231 gNJE.setMessage(1, "Please wait...");
rinosh2 0:1a9fa43d77af 232 }
rinosh2 0:1a9fa43d77af 233
rinosh2 0:1a9fa43d77af 234 void dispCB(){
rinosh2 0:1a9fa43d77af 235 // if(gDelayStatus & S_DELAY){
rinosh2 0:1a9fa43d77af 236 // dispDelay();
rinosh2 0:1a9fa43d77af 237 // } else {
rinosh2 0:1a9fa43d77af 238 if(gDelayStatus & S_INFO_OK){
rinosh2 0:1a9fa43d77af 239 dispTime();
rinosh2 0:1a9fa43d77af 240 gDispMode = 0;
rinosh2 0:1a9fa43d77af 241 } else {
rinosh2 0:1a9fa43d77af 242 dispWait();
rinosh2 0:1a9fa43d77af 243 }
rinosh2 0:1a9fa43d77af 244 // }
rinosh2 0:1a9fa43d77af 245 }
rinosh2 0:1a9fa43d77af 246
rinosh2 0:1a9fa43d77af 247 ////////////////////////////////////////////////////////////////////////////////
rinosh2 0:1a9fa43d77af 248 // NextTrain & Delay information control
rinosh2 0:1a9fa43d77af 249 int updateNext(TrainInfo& train){
rinosh2 1:93b052511e2c 250 putLcd("Update NextTrain information...");
rinosh2 1:93b052511e2c 251
rinosh2 0:1a9fa43d77af 252 printf("UpdateTrain\n");
rinosh2 0:1a9fa43d77af 253
rinosh2 0:1a9fa43d77af 254 // Next (and 2nd Next) train check
rinosh2 0:1a9fa43d77af 255 TickerLock();
rinosh2 0:1a9fa43d77af 256 time_t now = time(0) + gTimeZone;
rinosh2 0:1a9fa43d77af 257 gSerchTime = now;
rinosh2 0:1a9fa43d77af 258 struct tm* st = localtime(&now);
rinosh2 0:1a9fa43d77af 259 for(int index = 0, offset = 0 ; index < 2; ++offset){
rinosh2 0:1a9fa43d77af 260 NextTrainFile::Status ret = train.search(now, offset);
rinosh2 0:1a9fa43d77af 261 switch(ret){
rinosh2 0:1a9fa43d77af 262 case NextTrainFile::S_SUCCESS:
rinosh2 0:1a9fa43d77af 263 if(train.next()->m_diff > gGiveupSec){
rinosh2 0:1a9fa43d77af 264 gNext[index++] = *train.next();
rinosh2 0:1a9fa43d77af 265 }
rinosh2 0:1a9fa43d77af 266 break;
rinosh2 0:1a9fa43d77af 267
rinosh2 0:1a9fa43d77af 268 case NextTrainFile::S_NO_TRAIN:
rinosh2 0:1a9fa43d77af 269 gNext[index++].m_diff = -1;
rinosh2 0:1a9fa43d77af 270 break;
rinosh2 0:1a9fa43d77af 271
rinosh2 0:1a9fa43d77af 272 default:
rinosh2 0:1a9fa43d77af 273 gNext[index++].m_diff = -2;
rinosh2 0:1a9fa43d77af 274 break;
rinosh2 0:1a9fa43d77af 275 }
rinosh2 0:1a9fa43d77af 276 }
rinosh2 0:1a9fa43d77af 277 gDelayStatus |= S_INFO_OK;
rinosh2 0:1a9fa43d77af 278 TickerUnlock();
rinosh2 0:1a9fa43d77af 279 return 0;
rinosh2 0:1a9fa43d77af 280 }
rinosh2 0:1a9fa43d77af 281
rinosh2 0:1a9fa43d77af 282 int updateDelay(TrainInfo& train){
rinosh2 1:93b052511e2c 283 putLcd("Update Delay Information...");
rinosh2 1:93b052511e2c 284
rinosh2 0:1a9fa43d77af 285 // Delay check
rinosh2 0:1a9fa43d77af 286 TrainInfo::Status ret = train.checkDelay();
rinosh2 0:1a9fa43d77af 287 if(ret == TrainInfo::S_DELAY_DETECTED){
rinosh2 0:1a9fa43d77af 288 TickerLock();
rinosh2 0:1a9fa43d77af 289 train.getDelayMessage(gDelayMessage, sizeof(gDelayMessage));
rinosh2 0:1a9fa43d77af 290 gDelayStatus |= S_DELAY;
rinosh2 0:1a9fa43d77af 291 TickerUnlock();
rinosh2 0:1a9fa43d77af 292 } else {
rinosh2 0:1a9fa43d77af 293 TickerLock();
rinosh2 0:1a9fa43d77af 294 train.getDelayMessage(gDelayMessage, sizeof(gDelayMessage)); // copy for testing...
rinosh2 0:1a9fa43d77af 295 gDelayStatus &= ~S_DELAY;
rinosh2 0:1a9fa43d77af 296 TickerUnlock();
rinosh2 0:1a9fa43d77af 297 }
rinosh2 0:1a9fa43d77af 298 return 0;
rinosh2 0:1a9fa43d77af 299 }
rinosh2 0:1a9fa43d77af 300
rinosh2 0:1a9fa43d77af 301 int updateAll(){
rinosh2 0:1a9fa43d77af 302 TrainInfo train;
rinosh2 0:1a9fa43d77af 303
rinosh2 0:1a9fa43d77af 304 if(train.open(INI_FILE)){
rinosh2 0:1a9fa43d77af 305 printf("Can't open INI file '%s'\n", INI_FILE);
rinosh2 0:1a9fa43d77af 306 return 1;
rinosh2 0:1a9fa43d77af 307 }
rinosh2 0:1a9fa43d77af 308 updateNext (train);
rinosh2 0:1a9fa43d77af 309 updateDelay(train);
rinosh2 0:1a9fa43d77af 310 return 0;
rinosh2 0:1a9fa43d77af 311 }
rinosh2 0:1a9fa43d77af 312
rinosh2 0:1a9fa43d77af 313 ////////////////////////////////////////////////////////////////////////////////
rinosh2 0:1a9fa43d77af 314 // Configuration and Startup
rinosh2 0:1a9fa43d77af 315 int setupParams(const char* inifile){
rinosh2 0:1a9fa43d77af 316 char ntpserver[100] = "ntp.jst.mfeed.ad.jp";
rinosh2 0:1a9fa43d77af 317 int ntpport = 123;
rinosh2 0:1a9fa43d77af 318
rinosh2 0:1a9fa43d77af 319 const IniFile::IniList INI_PARAM_LIST[] = {
rinosh2 0:1a9fa43d77af 320 INIFILE_INT("GiveupSec", gGiveupSec),
rinosh2 0:1a9fa43d77af 321 INIFILE_STR("NTPServer", ntpserver, sizeof(ntpserver)),
rinosh2 0:1a9fa43d77af 322 INIFILE_INT("NTPPort", ntpport),
rinosh2 0:1a9fa43d77af 323 INIFILE_INT("TimeZone", gTimeZone),
rinosh2 0:1a9fa43d77af 324
rinosh2 0:1a9fa43d77af 325 INIFILE_STR("MsgNoTrain", gMsgNoTrain, sizeof(gMsgNoTrain)),
rinosh2 0:1a9fa43d77af 326 INIFILE_STR("MsgLeft", gMsgLeft, sizeof(gMsgLeft)),
rinosh2 0:1a9fa43d77af 327 INIFILE_STR("MsgDir", gMsgDir, sizeof(gMsgDir)),
rinosh2 0:1a9fa43d77af 328 INIFILE_STR("MsgSec", gMsgSec, sizeof(gMsgSec)),
rinosh2 0:1a9fa43d77af 329
rinosh2 0:1a9fa43d77af 330 INIFILE_INT("MsgWarn", gMsgWarn),
rinosh2 0:1a9fa43d77af 331
rinosh2 0:1a9fa43d77af 332 INIFILE_END,
rinosh2 0:1a9fa43d77af 333 };
rinosh2 0:1a9fa43d77af 334
rinosh2 0:1a9fa43d77af 335 IniFile::getval(inifile, INI_PARAM_LIST);
rinosh2 0:1a9fa43d77af 336 gTimeZone *= 60;
rinosh2 0:1a9fa43d77af 337
rinosh2 0:1a9fa43d77af 338 // Init NJE
rinosh2 0:1a9fa43d77af 339 gNJE.setScrollSpeed(NJE10XCtrl::ScrollSpeed(NJE10XCtrl::SCROLL_FAST));
rinosh2 0:1a9fa43d77af 340 //gNJE.setBlinkSpeed(NJE10XCtrl::BlinkSpeed(NJE10XCtrl::BLINK_FAST));
rinosh2 0:1a9fa43d77af 341 gNJE.setStopTime(1);
rinosh2 0:1a9fa43d77af 342 gNJE.setMessage(1, "Please wait...");
rinosh2 0:1a9fa43d77af 343
rinosh2 0:1a9fa43d77af 344
rinosh2 0:1a9fa43d77af 345 // Init RTC
rinosh2 1:93b052511e2c 346 putLcd("Connect to the NTP server...");
rinosh2 0:1a9fa43d77af 347 UpdateRTC(ntpserver, ntpport, gTimeZone);
rinosh2 0:1a9fa43d77af 348 return 0;
rinosh2 0:1a9fa43d77af 349 }
rinosh2 0:1a9fa43d77af 350
rinosh2 0:1a9fa43d77af 351 int main(){
rinosh2 1:93b052511e2c 352 putLcd("Start TrainInfo!");
rinosh2 1:93b052511e2c 353
rinosh2 0:1a9fa43d77af 354 setupParams(INI_FILE);
rinosh2 0:1a9fa43d77af 355 Ticker dispTicker;
rinosh2 0:1a9fa43d77af 356 dispTicker.attach(dispCB, 1); // 1 update per sec
rinosh2 0:1a9fa43d77af 357
rinosh2 0:1a9fa43d77af 358 for(;;){
rinosh2 0:1a9fa43d77af 359 printf("Update information\n");
rinosh2 0:1a9fa43d77af 360 if(updateAll()) break;
rinosh2 0:1a9fa43d77af 361
rinosh2 0:1a9fa43d77af 362 // Free LocalFileSystem before waiting.
rinosh2 0:1a9fa43d77af 363 // (For access file via USB)
rinosh2 1:93b052511e2c 364 putLcd("Wait for the next update event");
rinosh2 0:1a9fa43d77af 365 wait(60);
rinosh2 0:1a9fa43d77af 366 }
rinosh2 0:1a9fa43d77af 367 dispTicker.detach();
rinosh2 0:1a9fa43d77af 368 printf("Program end\n");
rinosh2 0:1a9fa43d77af 369 return 0;
rinosh2 0:1a9fa43d77af 370 }