display your latest tweet with WiFly RN-XV and AD128160-UART
Dependencies: AD128160_kazushi_branch HTTPClient mbed PowerControl WiflyInterface
Fork of FontTest3 by
Please see at http://kazushi-lab.c.fun.ac.jp/pukiwiki/index.php?TwitterMbed
Diff: main.cpp
- Revision:
- 2:56a2ab00e743
- Parent:
- 1:6b495e0f3b0c
- Child:
- 3:cce58539833e
--- a/main.cpp Thu Dec 27 09:40:41 2012 +0000 +++ b/main.cpp Mon Jan 07 04:15:48 2013 +0000 @@ -2,13 +2,12 @@ // // coded by Kazushi Mukaiyama (http://www.kazushi.info/) // refer to gs fan's notebook (http://mbed.org/users/gsfan/notebook/gainspan_wifi/) -// refer to Sim's notebook (http://mbed.org/users/Sim/code/FontTest3/) +// refer to GingaX's notebook (http://www31.atwiki.jp/gingax/pages/63.html) #include "mbed.h" #include "GSwifi.h" -#include "spilcd.h" -#include "kfont8.h" #include "sjis_utf16.h" +#include "s_Lcd.h" #define countof(x) ( sizeof(x) / sizeof(x[0]) ) @@ -25,89 +24,15 @@ //#define _DEBUG -SPILCD lcd(p21, p22, p23, p5, p6, p7); GSwifi gs(p13, p14); // TX, RX (no flow control) -// GSwifi gs(p13, p14, p12, P0_22); // TX, RX, CTS, RTS DigitalOut led1(LED1), led2(LED2); #ifdef _DEBUG Serial pc(USBTX, USBRX); #endif -int csrx = 0; -int csry = 0; -int offsety = 0; -unsigned char kstate = 0; +unsigned char kstatus = 0; bool estate = false; -unsigned char kbuf[4]; - -void locate(int x, int y){ - csrx = x; - csry = y; - if(csrx < 0) csrx = 0; - if(csry < 0) csry = 0; - csrx &= 31; - csry &= 7; - lcd.moveto(csrx << 3, (offsety + csry) & 7); -}; - -void scroll(void){ - int i; - offsety = (offsety + 1) & 7; - lcd.cmd(0x40 | offsety << 3); - lcd.moveto(0, (offsety + 7) & 7); - for(i = 0; i < 128; i++) lcd.write(0); -} - -void newline(void){ - csrx = 0; - if(++csry == 8){ - scroll(); - csry = 7; - } - locate(csrx, csry); -} - -// draw 4x8 font -void drawfont4(unsigned char c){ - const unsigned char *p = &font4[c << 2]; - lcd.write(p[0]); - lcd.write(p[1]); - lcd.write(p[2]); - lcd.write(p[3]); - // cursor control - if(++csrx == 32) newline(); -} - -const unsigned char *findface(unsigned short c){ - const unsigned char *p = NULL; - int i, sum; - for(sum = i = 0; i < countof(font8table); i++){ - if(font8table[i].start <= c && c <= font8table[i].end){ - p = &font8[(sum + c - font8table[i].start) << 3]; - break; - } - sum += font8table[i].end - font8table[i].start + 1; - } - return p; -} - -// draw 8x8 font -void drawkanji(unsigned short c){ - const unsigned char *p = findface(c); - if(p == NULL) return; - - if(csrx >= 31) newline(); - lcd.write(p[0]); - lcd.write(p[1]); - lcd.write(p[2]); - lcd.write(p[3]); - lcd.write(p[4]); - lcd.write(p[5]); - lcd.write(p[6]); - lcd.write(p[7]); - csrx += 2; - if(csrx == 32) newline(); -} +unsigned char unibuf[4]; unsigned short convert(unsigned short utf){ unsigned short sjis = NULL; @@ -120,42 +45,78 @@ return sjis; } -void drawc(unsigned char c){ - if(estate && kstate==4){ // 1st digit of utf-16 - kbuf[3] = c; +void drawChar(unsigned char c){ + if(estate && kstatus==4){ // 1st digit of utf-16 + unibuf[3] = c; char *endptr; - unsigned short code = convert(strtol((char*)kbuf, &endptr, 16)); - drawkanji(code); + unsigned short code = convert(strtol((char*)unibuf, &endptr, 16)); + //kanji_init(); + color(0xffff); + k_puts(code); + //kanji_end(); #ifdef _DEBUG - pc.printf("%s, %x\r\n", kbuf, code); + pc.printf("%s, %x\r\n", unibuf, code); #endif - kstate = 0; + kstatus = 0; estate = false; - } else if(estate && kstate==3){ // 2nd digit of utf-16 - kbuf[2] = c; - kstate = 4; - } else if(estate && kstate==2){ // 3rd digit of utf-16 - kbuf[1] = c; - kstate = 3; - } else if(estate && kstate==1){ // 4th digit of utf-16 - kbuf[0] = c; - kstate = 2; - } else if(estate && c=='u'){ // escape code - kstate = 1; - } else if(estate && !c=='u'){ // escape code - drawfont4(c); - kstate = 0; + } else if(estate && kstatus==3){ // 2nd digit of utf-16 + unibuf[2] = c; + kstatus = 4; + } else if(estate && kstatus==2){ // 3rd digit of utf-16 + unibuf[1] = c; + kstatus = 3; + } else if(estate && kstatus==1){ // 4th digit of utf-16 + unibuf[0] = c; + kstatus = 2; + } else if(estate && c=='u'){ + kstatus = 1; + } else if(estate && !c=='u'){ + drawc(c); + kstatus = 0; estate = false; } else if(c=='\\'){ // escape code estate = true; } else { // 4x8font - drawfont4(c); + drawc(c); } } -void draws(const unsigned char *s){ +void drawString(const unsigned char *s){ unsigned char c; - while((c = *s++) != '\0') drawc(c); + while((c = *s++) != '\0') drawChar(c); +} + +int connect(){ + IpAddr ipaddr, netmask, gateway, nameserver; + + if (gs.connect(SECURE, SSID, PASS, 0)) { + drawString("WiFi connection error"); newline(); +#ifdef _DEBUG + pc.printf("WiFi connection error\r\n"); +#endif + return -1; + } + + gs.getAddress(ipaddr, netmask, gateway, nameserver); + if(nameserver.isNull()) { + nameserver = IpAddr(192,168,1,1); + gs.setAddress(ipaddr, netmask, gateway, nameserver); + gs.getAddress(ipaddr, netmask, gateway, nameserver); + } +#ifdef _DEBUG + pc.printf("ip %d.%d.%d.%d\r\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]); + pc.printf("gw %d.%d.%d.%d\r\n", gateway[0], gateway[1], gateway[2], gateway[3]); + pc.printf("ns %d.%d.%d.%d\r\n", nameserver[0], nameserver[1], nameserver[2], nameserver[3]); +#endif + char localip[20]; + sprintf(localip, "ip %d.%d.%d.%d", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]); + drawString((unsigned char*)localip); newline(); + sprintf(localip, "gw %d.%d.%d.%d", gateway[0], gateway[1], gateway[2], gateway[3]); + drawString((unsigned char*)localip); newline(); + sprintf(localip, "ns %d.%d.%d.%d", nameserver[0], nameserver[1], nameserver[2], nameserver[3]); + drawString((unsigned char*)localip); newline(); + + delete [] localip; } void onGsReceive (int cid, int len) { @@ -179,65 +140,63 @@ #ifdef _DEBUG pc.printf("%s\r\n", c); #endif - lcd.cls(); locate(0,0); - c = strtok(c, "@"); - draws((unsigned char*)c); newline(); - c = strtok(NULL, "@"); - draws((unsigned char*)c); newline(); + color(0x001f); + cls(); + color(0xffff); + //c = strtok(c, "@"); + drawString((unsigned char*)c); newline(); + //c = strtok(NULL, "@"); + //drawString((unsigned char*)c); newline(); break; } } } led2 = 0; + + delete [] buf; } int main() { int r; - IpAddr ipaddr, netmask, gateway, nameserver; + char* msg; Host host; led1 = 1; #ifdef _DEBUG pc.baud(115200); #endif - char* msg; + s_Lcdinit(); + + color(0x001f); + cls(); + color(0xffff); + msg = "connect"; - draws((unsigned char*)msg); newline(); - if (gs.connect(SECURE, SSID, PASS, 0)) { + drawString((unsigned char*)msg); newline(); + r = connect(); + if(r<0){ return -1; } - gs.getAddress(ipaddr, netmask, gateway, nameserver); - if(nameserver.isNull()) { - nameserver = IpAddr(192,168,1,1); - r = gs.setAddress(ipaddr, netmask, gateway, nameserver); - gs.getAddress(ipaddr, netmask, gateway, nameserver); - } - char localip[20]; - sprintf(localip, "ip %d.%d.%d.%d", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]); - draws ((unsigned char*)localip); newline(); - sprintf(localip, "gw %d.%d.%d.%d", gateway[0], gateway[1], gateway[2], gateway[3]); - draws ((unsigned char*)localip); newline(); - sprintf(localip, "ns %d.%d.%d.%d", nameserver[0], nameserver[1], nameserver[2], nameserver[3]); - draws ((unsigned char*)localip); newline(); - msg = "start twitter"; - draws((unsigned char*)msg); newline(); + drawString((unsigned char*)msg); newline(); host.setName(HTTP_HOST); - //r = gs.httpGet(host, HTTP_URI, HTTP_USER, HTTP_PASS, 0, &onGsReceive); + for (;;) { - led1 = !led1; wait_ms(60); led1 = !led1; // blink + led1 = !led1; wait_ms(500); led1 = !led1; // blink gs.poll(); r = gs.httpGet(host, HTTP_URI, HTTP_USER, HTTP_PASS, 0, &onGsReceive); - //if (!gs.isConnected(r)) break; + if (!gs.isConnected(r)) { + color(0x001f); + cls(); + msg = "reconnect"; + drawString((unsigned char*)msg); newline(); + connect(); + } wait(INTERVAL_SEC); } - - //msg = "exit"; - //lcd.cls(); locate(0,0); - //draws((unsigned char*)msg); }