Google weather APIから取得したお天気情報をVFDに表示します。

Dependencies:   NetServices mbed spxml

Committer:
kanpapa
Date:
Sat Nov 26 12:12:08 2011 +0000
Revision:
0:e89d01416461
beta version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kanpapa 0:e89d01416461 1 //
kanpapa 0:e89d01416461 2 // VFD fontx2 weather
kanpapa 0:e89d01416461 3 //
kanpapa 0:e89d01416461 4 // 2011/11/26 by @kanpapa
kanpapa 0:e89d01416461 5 //
kanpapa 0:e89d01416461 6 // Special thanks: @gingaxx
kanpapa 0:e89d01416461 7 //
kanpapa 0:e89d01416461 8
kanpapa 0:e89d01416461 9 #include "mbed.h"
kanpapa 0:e89d01416461 10
kanpapa 0:e89d01416461 11 #include "EthernetNetIf.h"
kanpapa 0:e89d01416461 12 #include "HTTPClient.h"
kanpapa 0:e89d01416461 13
kanpapa 0:e89d01416461 14 #include "spdomparser.hpp"
kanpapa 0:e89d01416461 15 #include "spxmlnode.hpp"
kanpapa 0:e89d01416461 16 #include "spxmlhandle.hpp"
kanpapa 0:e89d01416461 17
kanpapa 0:e89d01416461 18 #include "vfd_gp1059.h"
kanpapa 0:e89d01416461 19 /*
kanpapa 0:e89d01416461 20 =========================
kanpapa 0:e89d01416461 21 FUTABA VFD GP1059A01(I/O)
kanpapa 0:e89d01416461 22 -------------------------
kanpapa 0:e89d01416461 23 p9 1 (D0) I/O
kanpapa 0:e89d01416461 24 p10 2 (D1) I/O
kanpapa 0:e89d01416461 25 p11 3 (D2) I/O
kanpapa 0:e89d01416461 26 p12 4 (D3) I/O
kanpapa 0:e89d01416461 27 p13 5 (D4) I/O
kanpapa 0:e89d01416461 28 p14 6 (D5) I/O
kanpapa 0:e89d01416461 29 p15 7 (D6) I/O
kanpapa 0:e89d01416461 30 p16 8 (D7) I/O
kanpapa 0:e89d01416461 31 p21 10 (INT) O
kanpapa 0:e89d01416461 32 p22 11 (WR) I
kanpapa 0:e89d01416461 33 p23 12 (RD) I
kanpapa 0:e89d01416461 34 p24 13 (CS) I
kanpapa 0:e89d01416461 35 p25 14 (C/D) I
kanpapa 0:e89d01416461 36 */
kanpapa 0:e89d01416461 37
kanpapa 0:e89d01416461 38 VFD_GP1059 vfd(p9, p10, p11, p12, p13, p14, p15, p16, p21, p22, p23, p24, p25);
kanpapa 0:e89d01416461 39
kanpapa 0:e89d01416461 40 LocalFileSystem local("local");
kanpapa 0:e89d01416461 41
kanpapa 0:e89d01416461 42 // LED Status
kanpapa 0:e89d01416461 43 DigitalOut led1(LED1);
kanpapa 0:e89d01416461 44 DigitalOut led2(LED2);
kanpapa 0:e89d01416461 45 DigitalOut led3(LED3);
kanpapa 0:e89d01416461 46 DigitalOut led4(LED4);
kanpapa 0:e89d01416461 47
kanpapa 0:e89d01416461 48 unsigned char reverse_bit(unsigned char x){
kanpapa 0:e89d01416461 49 const unsigned int bit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
kanpapa 0:e89d01416461 50 unsigned char y = 0;
kanpapa 0:e89d01416461 51 for (int i = 0; i < 8; i++){
kanpapa 0:e89d01416461 52 if ((bit[i] & x) != 0){
kanpapa 0:e89d01416461 53 y |= bit[7-i];
kanpapa 0:e89d01416461 54 }
kanpapa 0:e89d01416461 55 }
kanpapa 0:e89d01416461 56 return(y);
kanpapa 0:e89d01416461 57 }
kanpapa 0:e89d01416461 58
kanpapa 0:e89d01416461 59 //
kanpapa 0:e89d01416461 60 // FONTX2 test routine
kanpapa 0:e89d01416461 61 // original version @gingaxx
kanpapa 0:e89d01416461 62 //
kanpapa 0:e89d01416461 63
kanpapa 0:e89d01416461 64 //#define kanji_file "/local/SHMZN16X.FNT"
kanpapa 0:e89d01416461 65 //#define kanji_file "/local/k12x10.fnt"
kanpapa 0:e89d01416461 66 //#define kanji_file "/local/J2KZN16A.FNT"
kanpapa 0:e89d01416461 67 //#define kanji_file "/local/XBGZN16X.TLF"
kanpapa 0:e89d01416461 68 #define kanji_file "/local/MGOZN16X.TLF"
kanpapa 0:e89d01416461 69
kanpapa 0:e89d01416461 70 int cx = 0;
kanpapa 0:e89d01416461 71 int cy = 0;
kanpapa 0:e89d01416461 72 //int offsety = 0;
kanpapa 0:e89d01416461 73 //bool kstate = false;
kanpapa 0:e89d01416461 74 //unsigned char kbuf;
kanpapa 0:e89d01416461 75
kanpapa 0:e89d01416461 76 FILE *fp; // File open buffer
kanpapa 0:e89d01416461 77
kanpapa 0:e89d01416461 78 unsigned short start[92], end[92]; // table
kanpapa 0:e89d01416461 79 unsigned char font[64]; // kanji image read buffer
kanpapa 0:e89d01416461 80
kanpapa 0:e89d01416461 81 char Identifier[6+1]; // 00-05 "FONTX2"
kanpapa 0:e89d01416461 82 char FontName[8+1]; // 06-13 Font name
kanpapa 0:e89d01416461 83 unsigned char XSize; // 14
kanpapa 0:e89d01416461 84 unsigned char YSize; // 15
kanpapa 0:e89d01416461 85 unsigned char CodeType; // 16 0:ASCII, 1:KANJI
kanpapa 0:e89d01416461 86 unsigned char Tnum; // 17 Table entry number
kanpapa 0:e89d01416461 87
kanpapa 0:e89d01416461 88 //#define FONT_XBYTE ((XSize + 7) >> 3)
kanpapa 0:e89d01416461 89 //#define FONT_YBYTE ((YSize + 7) >> 3)
kanpapa 0:e89d01416461 90
kanpapa 0:e89d01416461 91 void kanji_init(){
kanpapa 0:e89d01416461 92 //move cursor
kanpapa 0:e89d01416461 93 fp = fopen(kanji_file , "r");
kanpapa 0:e89d01416461 94
kanpapa 0:e89d01416461 95 if(!fp) {
kanpapa 0:e89d01416461 96 printf("File could not be opened!\n");
kanpapa 0:e89d01416461 97 led1 = 1;
kanpapa 0:e89d01416461 98 exit(1);
kanpapa 0:e89d01416461 99 }
kanpapa 0:e89d01416461 100
kanpapa 0:e89d01416461 101 fgets(Identifier, 6+1, fp); // FONTX2
kanpapa 0:e89d01416461 102 fgets(FontName, 8+1, fp);
kanpapa 0:e89d01416461 103 fread(&XSize, 1, 1, fp);
kanpapa 0:e89d01416461 104 fread(&YSize, 1, 1, fp);
kanpapa 0:e89d01416461 105 fread(&CodeType, 1, 1, fp);
kanpapa 0:e89d01416461 106 fread(&Tnum, 1, 1, fp);
kanpapa 0:e89d01416461 107
kanpapa 0:e89d01416461 108 printf("Identifier: %s\n\r",Identifier);
kanpapa 0:e89d01416461 109 printf("FontName: %s\n\r",FontName);
kanpapa 0:e89d01416461 110 printf("XSize: %d\n\r",XSize);
kanpapa 0:e89d01416461 111 printf("YSize: %d\n\r",YSize);
kanpapa 0:e89d01416461 112 printf("CodeType: %d\n\r",CodeType);
kanpapa 0:e89d01416461 113 printf("Tnum: %d\n\r",Tnum);
kanpapa 0:e89d01416461 114
kanpapa 0:e89d01416461 115 // Table read
kanpapa 0:e89d01416461 116 for (int a = 0; a < Tnum; a++){
kanpapa 0:e89d01416461 117 fread(&start[a], 1, 2, fp);
kanpapa 0:e89d01416461 118 fread(&end[a] , 1, 2, fp);
kanpapa 0:e89d01416461 119 printf("Table No.%d start:%04x end:%04x\n\r",a,start[a],end[a]);
kanpapa 0:e89d01416461 120 }
kanpapa 0:e89d01416461 121 }
kanpapa 0:e89d01416461 122
kanpapa 0:e89d01416461 123 //Kanji puts cr = kanji code
kanpapa 0:e89d01416461 124 void k_puts(int cr){
kanpapa 0:e89d01416461 125
kanpapa 0:e89d01416461 126 const unsigned char bit_chk[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
kanpapa 0:e89d01416461 127
kanpapa 0:e89d01416461 128 // LF code control
kanpapa 0:e89d01416461 129 if (cr == '\n') {
kanpapa 0:e89d01416461 130 cx = 0;
kanpapa 0:e89d01416461 131 cy++;
kanpapa 0:e89d01416461 132 return;
kanpapa 0:e89d01416461 133 }
kanpapa 0:e89d01416461 134
kanpapa 0:e89d01416461 135 // calculate kanji address
kanpapa 0:e89d01416461 136 int c = 0;
kanpapa 0:e89d01416461 137 int adrs = 0;
kanpapa 0:e89d01416461 138 while(cr > start[c]){
kanpapa 0:e89d01416461 139 if (cr > end[c]){
kanpapa 0:e89d01416461 140 adrs += end[c] - start[c] + 1;
kanpapa 0:e89d01416461 141 } else {
kanpapa 0:e89d01416461 142 adrs += cr - start[c];
kanpapa 0:e89d01416461 143 }
kanpapa 0:e89d01416461 144 c++;
kanpapa 0:e89d01416461 145 }
kanpapa 0:e89d01416461 146 c--;
kanpapa 0:e89d01416461 147 printf("cr=%X, table num=%d, adrs=%d \r\n",cr,c,adrs);
kanpapa 0:e89d01416461 148
kanpapa 0:e89d01416461 149 // Kanji image Read
kanpapa 0:e89d01416461 150 fseek( fp, Tnum * 4 + 18 + 32 * adrs, SEEK_SET );
kanpapa 0:e89d01416461 151 fread( &font, 1, 32, fp);
kanpapa 0:e89d01416461 152
kanpapa 0:e89d01416461 153 // debug dump
kanpapa 0:e89d01416461 154 //for (int s = 0; s < 32 ; s++){
kanpapa 0:e89d01416461 155 // printf(" %02x ",font[s]);
kanpapa 0:e89d01416461 156 //}
kanpapa 0:e89d01416461 157 //printf("\r\n");
kanpapa 0:e89d01416461 158
kanpapa 0:e89d01416461 159 // kanji put
kanpapa 0:e89d01416461 160 c = 0;
kanpapa 0:e89d01416461 161 unsigned int vfd_address = cx * 8 * 16 + cy * 2;
kanpapa 0:e89d01416461 162 //printf("VFD address: %04x\r\n",vfd_address);
kanpapa 0:e89d01416461 163
kanpapa 0:e89d01416461 164 int n = 0;
kanpapa 0:e89d01416461 165 for (int j = 0; j < 2 ; j++) {
kanpapa 0:e89d01416461 166 for (int x = 0; x < 8; x++) {
kanpapa 0:e89d01416461 167 //printf("set VFD address: %04x\r\n",vfd_address);
kanpapa 0:e89d01416461 168 vfd.set_write_read_address(vfd_address);
kanpapa 0:e89d01416461 169 int m = 0;
kanpapa 0:e89d01416461 170 for (int k = 0; k < 2 ; k++) {
kanpapa 0:e89d01416461 171 unsigned int d = 0;
kanpapa 0:e89d01416461 172 for (int i = 0; i < 8; i++) {
kanpapa 0:e89d01416461 173 if (font[m * 2 + j] & bit_chk[x]) {
kanpapa 0:e89d01416461 174 //printf("BIT on!\r\n");
kanpapa 0:e89d01416461 175 d = d | 1;
kanpapa 0:e89d01416461 176 }
kanpapa 0:e89d01416461 177 if (i < 7) {
kanpapa 0:e89d01416461 178 d = d << 1;
kanpapa 0:e89d01416461 179 }
kanpapa 0:e89d01416461 180 //printf("i:%d, k:%d, m:%d, font:%02x, bit_chk:%02x, data:%02x\r\n",i,k,m,font[m*2+j],bit_chk[x],d);
kanpapa 0:e89d01416461 181 m++;
kanpapa 0:e89d01416461 182 }
kanpapa 0:e89d01416461 183 //printf("send_data: %02x\r\n",d);
kanpapa 0:e89d01416461 184 vfd.send_data(d);
kanpapa 0:e89d01416461 185 }
kanpapa 0:e89d01416461 186 vfd_address = vfd_address + 8;
kanpapa 0:e89d01416461 187 }
kanpapa 0:e89d01416461 188 n++;
kanpapa 0:e89d01416461 189 }
kanpapa 0:e89d01416461 190
kanpapa 0:e89d01416461 191 // move cursor
kanpapa 0:e89d01416461 192 cx++;
kanpapa 0:e89d01416461 193 if (cx >= 15){ //LF control
kanpapa 0:e89d01416461 194 cx = 0;
kanpapa 0:e89d01416461 195 cy++;
kanpapa 0:e89d01416461 196 }
kanpapa 0:e89d01416461 197 }
kanpapa 0:e89d01416461 198
kanpapa 0:e89d01416461 199 void kanji_end(){
kanpapa 0:e89d01416461 200 fclose(fp);
kanpapa 0:e89d01416461 201 }
kanpapa 0:e89d01416461 202
kanpapa 0:e89d01416461 203 void display_vfd_space(){
kanpapa 0:e89d01416461 204 k_puts(0x8140);
kanpapa 0:e89d01416461 205 }
kanpapa 0:e89d01416461 206
kanpapa 0:e89d01416461 207 void display_vfd (const char * buf){
kanpapa 0:e89d01416461 208 unsigned int kc = 0;
kanpapa 0:e89d01416461 209 while (1) {
kanpapa 0:e89d01416461 210 // "0" - "9" 0x30-0x39 824f-8258
kanpapa 0:e89d01416461 211 // "A" - "Z" 0x41-0x4A 8260-8279
kanpapa 0:e89d01416461 212 // "a" - "z" 0x61-0x7a 8281-829a
kanpapa 0:e89d01416461 213 printf("check buf= %02x ", *buf);
kanpapa 0:e89d01416461 214 if (*buf == 0) break;
kanpapa 0:e89d01416461 215 if (*buf >= '0' && *buf <= '9') {
kanpapa 0:e89d01416461 216 kc = 0x821f + *buf;
kanpapa 0:e89d01416461 217 } else if (*buf >= 'A' && *buf <= 'Z') {
kanpapa 0:e89d01416461 218 kc = 0x821f + *buf;
kanpapa 0:e89d01416461 219 } else if (*buf >= 'a' && *buf <= 'z') {
kanpapa 0:e89d01416461 220 kc = 0x8220 + *buf;
kanpapa 0:e89d01416461 221 } else if (*buf == '%') {
kanpapa 0:e89d01416461 222 kc = 0x8193;
kanpapa 0:e89d01416461 223 } else if (*buf == '/') {
kanpapa 0:e89d01416461 224 kc = 0x815e;
kanpapa 0:e89d01416461 225 } else if (*buf == ':') {
kanpapa 0:e89d01416461 226 kc = 0x8146;
kanpapa 0:e89d01416461 227 } else if (*buf == '\n') {
kanpapa 0:e89d01416461 228 kc = '\n';
kanpapa 0:e89d01416461 229 } else if (*buf >= 0x80) {
kanpapa 0:e89d01416461 230 // kanji
kanpapa 0:e89d01416461 231 kc = *buf * 256 + *(buf + 1);
kanpapa 0:e89d01416461 232 buf++;
kanpapa 0:e89d01416461 233 } else {
kanpapa 0:e89d01416461 234 kc = 0;
kanpapa 0:e89d01416461 235 }
kanpapa 0:e89d01416461 236 buf++;
kanpapa 0:e89d01416461 237
kanpapa 0:e89d01416461 238 printf("kc: %04x ",kc);
kanpapa 0:e89d01416461 239 if (kc != 0) {
kanpapa 0:e89d01416461 240 k_puts(kc);
kanpapa 0:e89d01416461 241 }
kanpapa 0:e89d01416461 242 }
kanpapa 0:e89d01416461 243 }
kanpapa 0:e89d01416461 244
kanpapa 0:e89d01416461 245 const char tokyo[7] = {0x93, 0x8c, 0x8b, 0x9e, 0x93, 0x73, 0x00};
kanpapa 0:e89d01416461 246 const char otacity[7] = {0x91, 0xe5, 0x93, 0x63, 0x8b, 0xe6, 0x00};
kanpapa 0:e89d01416461 247 const char today_weather[7] = {0x82, 0xcc, 0x93, 0x56, 0x8b, 0x43, 0x00};
kanpapa 0:e89d01416461 248 const char kanji_condition[7] = {0x8b, 0x43, 0x89, 0xb7, 0x81, 0x46, 0x00};
kanpapa 0:e89d01416461 249 const char kanji_c[3] = {0x81, 0x8e, 0x00};
kanpapa 0:e89d01416461 250
kanpapa 0:e89d01416461 251 EthernetNetIf eth;
kanpapa 0:e89d01416461 252 HTTPClient http;
kanpapa 0:e89d01416461 253
kanpapa 0:e89d01416461 254 HTTPResult result;
kanpapa 0:e89d01416461 255 bool completed = false;
kanpapa 0:e89d01416461 256 void request_callback(HTTPResult r) {
kanpapa 0:e89d01416461 257 result = r;
kanpapa 0:e89d01416461 258 completed = true;
kanpapa 0:e89d01416461 259 }
kanpapa 0:e89d01416461 260
kanpapa 0:e89d01416461 261 void blink_LED() {
kanpapa 0:e89d01416461 262 for (int i = 0 ; i < 5 ; i++) {
kanpapa 0:e89d01416461 263 led4 = 1;
kanpapa 0:e89d01416461 264 wait(0.2);
kanpapa 0:e89d01416461 265 led4 = 0;
kanpapa 0:e89d01416461 266 wait(0.2);
kanpapa 0:e89d01416461 267 }
kanpapa 0:e89d01416461 268 return;
kanpapa 0:e89d01416461 269 }
kanpapa 0:e89d01416461 270
kanpapa 0:e89d01416461 271 void dispCurrent() {
kanpapa 0:e89d01416461 272 display_vfd(tokyo);
kanpapa 0:e89d01416461 273 display_vfd(otacity);
kanpapa 0:e89d01416461 274 display_vfd(today_weather);
kanpapa 0:e89d01416461 275 display_vfd_space();
kanpapa 0:e89d01416461 276 return;
kanpapa 0:e89d01416461 277 }
kanpapa 0:e89d01416461 278
kanpapa 0:e89d01416461 279 void parseWeather(SP_XmlElementNode *node) {
kanpapa 0:e89d01416461 280 SP_XmlHandle handle(node);
kanpapa 0:e89d01416461 281 SP_XmlElementNode * condition = handle.getChild( "condition" ).toElement();
kanpapa 0:e89d01416461 282 if (condition) {
kanpapa 0:e89d01416461 283 printf("current condition=%s\n",condition->getAttrValue("data"));
kanpapa 0:e89d01416461 284 display_vfd(condition->getAttrValue("data"));
kanpapa 0:e89d01416461 285 display_vfd_space();
kanpapa 0:e89d01416461 286 }
kanpapa 0:e89d01416461 287 SP_XmlElementNode * tempc = handle.getChild( "temp_c" ).toElement();
kanpapa 0:e89d01416461 288 if (tempc) {
kanpapa 0:e89d01416461 289 printf("current temp=%sC\n",tempc->getAttrValue("data"));
kanpapa 0:e89d01416461 290 display_vfd(kanji_condition);
kanpapa 0:e89d01416461 291 display_vfd(tempc->getAttrValue("data"));
kanpapa 0:e89d01416461 292 display_vfd(kanji_c);
kanpapa 0:e89d01416461 293 display_vfd_space();
kanpapa 0:e89d01416461 294 }
kanpapa 0:e89d01416461 295 SP_XmlElementNode * humidity = handle.getChild( "humidity" ).toElement();
kanpapa 0:e89d01416461 296 if (humidity) {
kanpapa 0:e89d01416461 297 printf("current humidity=%s\n", humidity->getAttrValue("data"));
kanpapa 0:e89d01416461 298 display_vfd(humidity->getAttrValue("data"));
kanpapa 0:e89d01416461 299 display_vfd_space();
kanpapa 0:e89d01416461 300 }
kanpapa 0:e89d01416461 301 SP_XmlElementNode * wind_condition = handle.getChild( "wind_condition" ).toElement();
kanpapa 0:e89d01416461 302 if (wind_condition) {
kanpapa 0:e89d01416461 303 printf("current wind_condition=%s\n",wind_condition->getAttrValue("data"));
kanpapa 0:e89d01416461 304 display_vfd(wind_condition->getAttrValue("data"));
kanpapa 0:e89d01416461 305 }
kanpapa 0:e89d01416461 306 }
kanpapa 0:e89d01416461 307
kanpapa 0:e89d01416461 308 int main() {
kanpapa 0:e89d01416461 309 // the eth and HTTP code has be taken directly from the HTTPStream documentation page
kanpapa 0:e89d01416461 310 // see http://mbed.org/cookbook/HTTP-Client-Data-Containers
kanpapa 0:e89d01416461 311
kanpapa 0:e89d01416461 312 // Start Sign
kanpapa 0:e89d01416461 313 blink_LED();
kanpapa 0:e89d01416461 314
kanpapa 0:e89d01416461 315 // init VFD
kanpapa 0:e89d01416461 316 vfd.cls();
kanpapa 0:e89d01416461 317 vfd.set_disp_start_address(0); // Display address: 000000H
kanpapa 0:e89d01416461 318 vfd.luminance_adjustment(0x0f); // 100%
kanpapa 0:e89d01416461 319
kanpapa 0:e89d01416461 320 // setup FONTX2
kanpapa 0:e89d01416461 321 kanji_init();
kanpapa 0:e89d01416461 322 printf("kanji_init()\r\n");
kanpapa 0:e89d01416461 323
kanpapa 0:e89d01416461 324 printf("LAN setup\n");
kanpapa 0:e89d01416461 325 EthernetErr ethErr = eth.setup();
kanpapa 0:e89d01416461 326 if (ethErr) {
kanpapa 0:e89d01416461 327 printf("Error in LAN setup\n");
kanpapa 0:e89d01416461 328 vfd.cls();
kanpapa 0:e89d01416461 329 display_vfd("Error in LAN setup");
kanpapa 0:e89d01416461 330 // Close FONTX2 file
kanpapa 0:e89d01416461 331 kanji_end();
kanpapa 0:e89d01416461 332 printf("kanji_end()\r\n");
kanpapa 0:e89d01416461 333 return -1;
kanpapa 0:e89d01416461 334 }
kanpapa 0:e89d01416461 335 printf("LAN setup ok\n");
kanpapa 0:e89d01416461 336
kanpapa 0:e89d01416461 337 SP_XmlDomParser parser;
kanpapa 0:e89d01416461 338
kanpapa 0:e89d01416461 339 HTTPStream stream;
kanpapa 0:e89d01416461 340
kanpapa 0:e89d01416461 341 char BigBuf[512 + 1] = {0};
kanpapa 0:e89d01416461 342 stream.readNext((byte*)BigBuf, 512); //Point to buffer for the first read
kanpapa 0:e89d01416461 343
kanpapa 0:e89d01416461 344 while(1){
kanpapa 0:e89d01416461 345 led1 = 1;
kanpapa 0:e89d01416461 346 //HTTPResult r = http.get("http://www.google.com/ig/api?weather=Los+Angeles", &stream, request_callback);
kanpapa 0:e89d01416461 347 HTTPResult r = http.get("http://www.google.com/ig/api?weather=ota,tokyo&hl=ja", &stream, request_callback);
kanpapa 0:e89d01416461 348
kanpapa 0:e89d01416461 349 while (!completed) {
kanpapa 0:e89d01416461 350 Net::poll(); //Polls the Networking stack
kanpapa 0:e89d01416461 351 if (stream.readable()) {
kanpapa 0:e89d01416461 352 BigBuf[stream.readLen()] = 0; //Transform this buffer in a zero-terminated char* string
kanpapa 0:e89d01416461 353
kanpapa 0:e89d01416461 354 parser.append( BigBuf, strlen(BigBuf)); // stream current buffer data to the XML parser
kanpapa 0:e89d01416461 355
kanpapa 0:e89d01416461 356 stream.readNext((byte*)BigBuf, 512); //Buffer has been read, now we can put more data in it
kanpapa 0:e89d01416461 357 }
kanpapa 0:e89d01416461 358 }
kanpapa 0:e89d01416461 359 if (result == HTTP_OK) {
kanpapa 0:e89d01416461 360 printf("HTTP Read completely\n");
kanpapa 0:e89d01416461 361 } else {
kanpapa 0:e89d01416461 362 printf("HTTP Error %d\n", result);
kanpapa 0:e89d01416461 363 vfd.cls();
kanpapa 0:e89d01416461 364 display_vfd("HTTP Error");
kanpapa 0:e89d01416461 365 // Close FONTX2 file
kanpapa 0:e89d01416461 366 kanji_end();
kanpapa 0:e89d01416461 367 printf("kanji_end()\r\n");
kanpapa 0:e89d01416461 368 return -1;
kanpapa 0:e89d01416461 369 }
kanpapa 0:e89d01416461 370
kanpapa 0:e89d01416461 371 SP_XmlHandle rootHandle( parser.getDocument()->getRootElement() );
kanpapa 0:e89d01416461 372 SP_XmlElementNode * child2 = rootHandle.getChild( "weather" )
kanpapa 0:e89d01416461 373 .getChild( "current_conditions").toElement();
kanpapa 0:e89d01416461 374 led1 = 0;
kanpapa 0:e89d01416461 375
kanpapa 0:e89d01416461 376 if ( child2 ) {
kanpapa 0:e89d01416461 377 dispCurrent();
kanpapa 0:e89d01416461 378 parseWeather(child2);
kanpapa 0:e89d01416461 379 }
kanpapa 0:e89d01416461 380
kanpapa 0:e89d01416461 381 if ( NULL != parser.getError() ) {
kanpapa 0:e89d01416461 382 printf( "\n\nerror: %s\n", parser.getError() );
kanpapa 0:e89d01416461 383 }
kanpapa 0:e89d01416461 384
kanpapa 0:e89d01416461 385 // scrool 30 * (10sec + 1sec * 3 + 10sec)
kanpapa 0:e89d01416461 386 led2 = 1;
kanpapa 0:e89d01416461 387 for (int loop = 0; loop < 30 ; loop++) {
kanpapa 0:e89d01416461 388 uint16_t address = 0;
kanpapa 0:e89d01416461 389 vfd.set_disp_start_address(address);
kanpapa 0:e89d01416461 390 wait(10);
kanpapa 0:e89d01416461 391
kanpapa 0:e89d01416461 392 for (int dot = 0; dot < 3; dot++) {
kanpapa 0:e89d01416461 393 vfd.set_disp_start_address(address);
kanpapa 0:e89d01416461 394 wait(1);
kanpapa 0:e89d01416461 395 address++;
kanpapa 0:e89d01416461 396 }
kanpapa 0:e89d01416461 397 wait(10);
kanpapa 0:e89d01416461 398 }
kanpapa 0:e89d01416461 399 led2 = 0;
kanpapa 0:e89d01416461 400
kanpapa 0:e89d01416461 401 // END Sign
kanpapa 0:e89d01416461 402 blink_LED();
kanpapa 0:e89d01416461 403
kanpapa 0:e89d01416461 404 //kanji_end();
kanpapa 0:e89d01416461 405 //printf("kanji_end()\r\n");
kanpapa 0:e89d01416461 406
kanpapa 0:e89d01416461 407 printf("end\n");
kanpapa 0:e89d01416461 408
kanpapa 0:e89d01416461 409 wait(60);
kanpapa 0:e89d01416461 410 }
kanpapa 0:e89d01416461 411 }