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

Committer:
kazushi2008
Date:
Wed Jan 09 05:40:55 2013 +0000
Revision:
3:cce58539833e
Parent:
2:56a2ab00e743
Child:
4:d7a5f6fe7987
stable with AD128160

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kazushi2008 1:6b495e0f3b0c 1 // Twitter Mbed with Gain Span WiFi
kazushi2008 1:6b495e0f3b0c 2 //
kazushi2008 1:6b495e0f3b0c 3 // coded by Kazushi Mukaiyama (http://www.kazushi.info/)
kazushi2008 1:6b495e0f3b0c 4 // refer to gs fan's notebook (http://mbed.org/users/gsfan/notebook/gainspan_wifi/)
kazushi2008 2:56a2ab00e743 5 // refer to GingaX's notebook (http://www31.atwiki.jp/gingax/pages/63.html)
kazushi2008 1:6b495e0f3b0c 6
kazushi2008 1:6b495e0f3b0c 7 #include "mbed.h"
kazushi2008 1:6b495e0f3b0c 8 #include "GSwifi.h"
kazushi2008 1:6b495e0f3b0c 9 #include "sjis_utf16.h"
kazushi2008 2:56a2ab00e743 10 #include "s_Lcd.h"
kazushi2008 1:6b495e0f3b0c 11
kazushi2008 1:6b495e0f3b0c 12 #define countof(x) ( sizeof(x) / sizeof(x[0]) )
kazushi2008 1:6b495e0f3b0c 13
kazushi2008 1:6b495e0f3b0c 14 #define SECURE GSSEC_WPA_PSK
kazushi2008 1:6b495e0f3b0c 15 #define SSID "mima-lab"
kazushi2008 1:6b495e0f3b0c 16 #define PASS "ikaika5656"
kazushi2008 1:6b495e0f3b0c 17
kazushi2008 1:6b495e0f3b0c 18 #define HTTP_HOST "api.supertweet.net" // SuperTweet.net
kazushi2008 1:6b495e0f3b0c 19 //#define HTTP_URI "/1.1/statuses/show.json?id=281639966776369152"
kazushi2008 1:6b495e0f3b0c 20 #define HTTP_URI "/1.1/statuses/user_timeline.json?screen_name=pla3c&count=1"
kazushi2008 1:6b495e0f3b0c 21 #define HTTP_USER "pla3c"
kazushi2008 1:6b495e0f3b0c 22 #define HTTP_PASS "pla3c"
kazushi2008 1:6b495e0f3b0c 23 #define INTERVAL_SEC 60.0
kazushi2008 1:6b495e0f3b0c 24
kazushi2008 1:6b495e0f3b0c 25 //#define _DEBUG
kazushi2008 1:6b495e0f3b0c 26
kazushi2008 1:6b495e0f3b0c 27 GSwifi gs(p13, p14); // TX, RX (no flow control)
kazushi2008 1:6b495e0f3b0c 28 DigitalOut led1(LED1), led2(LED2);
kazushi2008 1:6b495e0f3b0c 29 #ifdef _DEBUG
kazushi2008 1:6b495e0f3b0c 30 Serial pc(USBTX, USBRX);
kazushi2008 1:6b495e0f3b0c 31 #endif
kazushi2008 1:6b495e0f3b0c 32
kazushi2008 2:56a2ab00e743 33 unsigned char kstatus = 0;
kazushi2008 1:6b495e0f3b0c 34 bool estate = false;
kazushi2008 2:56a2ab00e743 35 unsigned char unibuf[4];
kazushi2008 1:6b495e0f3b0c 36
kazushi2008 1:6b495e0f3b0c 37 unsigned short convert(unsigned short utf){
kazushi2008 1:6b495e0f3b0c 38 unsigned short sjis = NULL;
kazushi2008 1:6b495e0f3b0c 39 for(int i=0; i<countof(sjis2utf16)/2; i++){
kazushi2008 1:6b495e0f3b0c 40 if(utf==sjis2utf16[i*2+1]){
kazushi2008 1:6b495e0f3b0c 41 sjis = sjis2utf16[i*2];
kazushi2008 1:6b495e0f3b0c 42 break;
kazushi2008 1:6b495e0f3b0c 43 }
kazushi2008 1:6b495e0f3b0c 44 }
kazushi2008 1:6b495e0f3b0c 45 return sjis;
kazushi2008 1:6b495e0f3b0c 46 }
kazushi2008 1:6b495e0f3b0c 47
kazushi2008 2:56a2ab00e743 48 void drawChar(unsigned char c){
kazushi2008 2:56a2ab00e743 49 if(estate && kstatus==4){ // 1st digit of utf-16
kazushi2008 2:56a2ab00e743 50 unibuf[3] = c;
kazushi2008 1:6b495e0f3b0c 51 char *endptr;
kazushi2008 2:56a2ab00e743 52 unsigned short code = convert(strtol((char*)unibuf, &endptr, 16));
kazushi2008 2:56a2ab00e743 53 //kanji_init();
kazushi2008 2:56a2ab00e743 54 color(0xffff);
kazushi2008 2:56a2ab00e743 55 k_puts(code);
kazushi2008 2:56a2ab00e743 56 //kanji_end();
kazushi2008 1:6b495e0f3b0c 57 #ifdef _DEBUG
kazushi2008 2:56a2ab00e743 58 pc.printf("%s, %x\r\n", unibuf, code);
kazushi2008 1:6b495e0f3b0c 59 #endif
kazushi2008 2:56a2ab00e743 60 kstatus = 0;
kazushi2008 1:6b495e0f3b0c 61 estate = false;
kazushi2008 2:56a2ab00e743 62 } else if(estate && kstatus==3){ // 2nd digit of utf-16
kazushi2008 2:56a2ab00e743 63 unibuf[2] = c;
kazushi2008 2:56a2ab00e743 64 kstatus = 4;
kazushi2008 2:56a2ab00e743 65 } else if(estate && kstatus==2){ // 3rd digit of utf-16
kazushi2008 2:56a2ab00e743 66 unibuf[1] = c;
kazushi2008 2:56a2ab00e743 67 kstatus = 3;
kazushi2008 2:56a2ab00e743 68 } else if(estate && kstatus==1){ // 4th digit of utf-16
kazushi2008 2:56a2ab00e743 69 unibuf[0] = c;
kazushi2008 2:56a2ab00e743 70 kstatus = 2;
kazushi2008 2:56a2ab00e743 71 } else if(estate && c=='u'){
kazushi2008 2:56a2ab00e743 72 kstatus = 1;
kazushi2008 2:56a2ab00e743 73 } else if(estate && !c=='u'){
kazushi2008 2:56a2ab00e743 74 drawc(c);
kazushi2008 2:56a2ab00e743 75 kstatus = 0;
kazushi2008 1:6b495e0f3b0c 76 estate = false;
kazushi2008 1:6b495e0f3b0c 77 } else if(c=='\\'){ // escape code
kazushi2008 1:6b495e0f3b0c 78 estate = true;
kazushi2008 1:6b495e0f3b0c 79 } else { // 4x8font
kazushi2008 2:56a2ab00e743 80 drawc(c);
kazushi2008 1:6b495e0f3b0c 81 }
kazushi2008 1:6b495e0f3b0c 82 }
kazushi2008 1:6b495e0f3b0c 83
kazushi2008 2:56a2ab00e743 84 void drawString(const unsigned char *s){
kazushi2008 1:6b495e0f3b0c 85 unsigned char c;
kazushi2008 2:56a2ab00e743 86 while((c = *s++) != '\0') drawChar(c);
kazushi2008 2:56a2ab00e743 87 }
kazushi2008 2:56a2ab00e743 88
kazushi2008 2:56a2ab00e743 89 int connect(){
kazushi2008 2:56a2ab00e743 90 IpAddr ipaddr, netmask, gateway, nameserver;
kazushi2008 2:56a2ab00e743 91
kazushi2008 2:56a2ab00e743 92 if (gs.connect(SECURE, SSID, PASS, 0)) {
kazushi2008 2:56a2ab00e743 93 drawString("WiFi connection error"); newline();
kazushi2008 2:56a2ab00e743 94 #ifdef _DEBUG
kazushi2008 2:56a2ab00e743 95 pc.printf("WiFi connection error\r\n");
kazushi2008 2:56a2ab00e743 96 #endif
kazushi2008 2:56a2ab00e743 97 return -1;
kazushi2008 2:56a2ab00e743 98 }
kazushi2008 2:56a2ab00e743 99
kazushi2008 2:56a2ab00e743 100 gs.getAddress(ipaddr, netmask, gateway, nameserver);
kazushi2008 2:56a2ab00e743 101 if(nameserver.isNull()) {
kazushi2008 2:56a2ab00e743 102 nameserver = IpAddr(192,168,1,1);
kazushi2008 2:56a2ab00e743 103 gs.setAddress(ipaddr, netmask, gateway, nameserver);
kazushi2008 2:56a2ab00e743 104 gs.getAddress(ipaddr, netmask, gateway, nameserver);
kazushi2008 2:56a2ab00e743 105 }
kazushi2008 2:56a2ab00e743 106 #ifdef _DEBUG
kazushi2008 2:56a2ab00e743 107 pc.printf("ip %d.%d.%d.%d\r\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
kazushi2008 2:56a2ab00e743 108 pc.printf("gw %d.%d.%d.%d\r\n", gateway[0], gateway[1], gateway[2], gateway[3]);
kazushi2008 2:56a2ab00e743 109 pc.printf("ns %d.%d.%d.%d\r\n", nameserver[0], nameserver[1], nameserver[2], nameserver[3]);
kazushi2008 2:56a2ab00e743 110 #endif
kazushi2008 2:56a2ab00e743 111 char localip[20];
kazushi2008 2:56a2ab00e743 112 sprintf(localip, "ip %d.%d.%d.%d", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3]);
kazushi2008 2:56a2ab00e743 113 drawString((unsigned char*)localip); newline();
kazushi2008 2:56a2ab00e743 114 sprintf(localip, "gw %d.%d.%d.%d", gateway[0], gateway[1], gateway[2], gateway[3]);
kazushi2008 2:56a2ab00e743 115 drawString((unsigned char*)localip); newline();
kazushi2008 2:56a2ab00e743 116 sprintf(localip, "ns %d.%d.%d.%d", nameserver[0], nameserver[1], nameserver[2], nameserver[3]);
kazushi2008 2:56a2ab00e743 117 drawString((unsigned char*)localip); newline();
kazushi2008 2:56a2ab00e743 118
kazushi2008 2:56a2ab00e743 119 delete [] localip;
kazushi2008 3:cce58539833e 120
kazushi2008 3:cce58539833e 121 return 0;
kazushi2008 1:6b495e0f3b0c 122 }
kazushi2008 1:6b495e0f3b0c 123
kazushi2008 1:6b495e0f3b0c 124 void onGsReceive (int cid, int len) {
kazushi2008 1:6b495e0f3b0c 125 int i;
kazushi2008 1:6b495e0f3b0c 126 char buf[GS_DATA_SIZE + 1];
kazushi2008 1:6b495e0f3b0c 127
kazushi2008 1:6b495e0f3b0c 128 led2 = 1;
kazushi2008 1:6b495e0f3b0c 129 i = gs.recv(cid, buf, len);
kazushi2008 1:6b495e0f3b0c 130 buf[i] = 0;
kazushi2008 1:6b495e0f3b0c 131
kazushi2008 1:6b495e0f3b0c 132 // parse buffer
kazushi2008 1:6b495e0f3b0c 133 char* c = strtok(buf, "\r\n");
kazushi2008 1:6b495e0f3b0c 134 if(strcmp(c, "200 OK")==0){
kazushi2008 1:6b495e0f3b0c 135 while(c!=NULL){
kazushi2008 1:6b495e0f3b0c 136 c = strtok(NULL, "\"");
kazushi2008 1:6b495e0f3b0c 137 char key[4];
kazushi2008 1:6b495e0f3b0c 138 sprintf(key, "%.4s", c);
kazushi2008 1:6b495e0f3b0c 139 if(strcmp(key, "text")==0){
kazushi2008 1:6b495e0f3b0c 140 c = strtok(NULL, "\"");
kazushi2008 1:6b495e0f3b0c 141 c = strtok(NULL, "\"");
kazushi2008 1:6b495e0f3b0c 142 #ifdef _DEBUG
kazushi2008 1:6b495e0f3b0c 143 pc.printf("%s\r\n", c);
kazushi2008 1:6b495e0f3b0c 144 #endif
kazushi2008 2:56a2ab00e743 145 color(0x001f);
kazushi2008 2:56a2ab00e743 146 cls();
kazushi2008 2:56a2ab00e743 147 color(0xffff);
kazushi2008 2:56a2ab00e743 148 //c = strtok(c, "@");
kazushi2008 2:56a2ab00e743 149 drawString((unsigned char*)c); newline();
kazushi2008 2:56a2ab00e743 150 //c = strtok(NULL, "@");
kazushi2008 2:56a2ab00e743 151 //drawString((unsigned char*)c); newline();
kazushi2008 1:6b495e0f3b0c 152 break;
kazushi2008 1:6b495e0f3b0c 153 }
kazushi2008 1:6b495e0f3b0c 154 }
kazushi2008 1:6b495e0f3b0c 155 }
kazushi2008 1:6b495e0f3b0c 156
kazushi2008 1:6b495e0f3b0c 157 led2 = 0;
kazushi2008 2:56a2ab00e743 158
kazushi2008 3:cce58539833e 159 //delete [] buf;
kazushi2008 1:6b495e0f3b0c 160 }
kazushi2008 1:6b495e0f3b0c 161
kazushi2008 1:6b495e0f3b0c 162 int main() {
kazushi2008 1:6b495e0f3b0c 163 int r;
kazushi2008 2:56a2ab00e743 164 char* msg;
kazushi2008 1:6b495e0f3b0c 165 Host host;
kazushi2008 1:6b495e0f3b0c 166 led1 = 1;
kazushi2008 1:6b495e0f3b0c 167 #ifdef _DEBUG
kazushi2008 1:6b495e0f3b0c 168 pc.baud(115200);
kazushi2008 1:6b495e0f3b0c 169 #endif
kazushi2008 1:6b495e0f3b0c 170
kazushi2008 2:56a2ab00e743 171 s_Lcdinit();
kazushi2008 2:56a2ab00e743 172
kazushi2008 2:56a2ab00e743 173 color(0x001f);
kazushi2008 2:56a2ab00e743 174 cls();
kazushi2008 2:56a2ab00e743 175 color(0xffff);
kazushi2008 2:56a2ab00e743 176
kazushi2008 1:6b495e0f3b0c 177 msg = "connect";
kazushi2008 2:56a2ab00e743 178 drawString((unsigned char*)msg); newline();
kazushi2008 2:56a2ab00e743 179 r = connect();
kazushi2008 2:56a2ab00e743 180 if(r<0){
kazushi2008 1:6b495e0f3b0c 181 return -1;
kazushi2008 1:6b495e0f3b0c 182 }
kazushi2008 1:6b495e0f3b0c 183
kazushi2008 1:6b495e0f3b0c 184 msg = "start twitter";
kazushi2008 2:56a2ab00e743 185 drawString((unsigned char*)msg); newline();
kazushi2008 1:6b495e0f3b0c 186
kazushi2008 1:6b495e0f3b0c 187 host.setName(HTTP_HOST);
kazushi2008 2:56a2ab00e743 188
kazushi2008 3:cce58539833e 189 while(1) {
kazushi2008 2:56a2ab00e743 190 led1 = !led1; wait_ms(500); led1 = !led1; // blink
kazushi2008 1:6b495e0f3b0c 191
kazushi2008 1:6b495e0f3b0c 192 r = gs.httpGet(host, HTTP_URI, HTTP_USER, HTTP_PASS, 0, &onGsReceive);
kazushi2008 3:cce58539833e 193 gs.poll();
kazushi2008 2:56a2ab00e743 194 if (!gs.isConnected(r)) {
kazushi2008 2:56a2ab00e743 195 color(0x001f);
kazushi2008 2:56a2ab00e743 196 cls();
kazushi2008 2:56a2ab00e743 197 msg = "reconnect";
kazushi2008 2:56a2ab00e743 198 drawString((unsigned char*)msg); newline();
kazushi2008 3:cce58539833e 199 wait_ms(5);
kazushi2008 2:56a2ab00e743 200 connect();
kazushi2008 2:56a2ab00e743 201 }
kazushi2008 1:6b495e0f3b0c 202
kazushi2008 1:6b495e0f3b0c 203 wait(INTERVAL_SEC);
kazushi2008 3:cce58539833e 204 }
kazushi2008 1:6b495e0f3b0c 205 }