display your latest tweet with WiFly RN-XV and AD128160-UART

Dependencies:   AD128160_kazushi_branch HTTPClient mbed PowerControl WiflyInterface

Fork of FontTest3 by Sim mbed

/media/uploads/kazushi2008/_scaled_twittermbed_scene.jpg /media/uploads/kazushi2008/_scaled_twittermbed.jpg

Please see at http://kazushi-lab.c.fun.ac.jp/pukiwiki/index.php?TwitterMbed

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);
 }