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:
Sun Feb 10 06:02:51 2013 +0000
Revision:
6:5aa67ed9ae43
Parent:
4:d7a5f6fe7987
Child:
8:22eb078985b1
fix a bug overloading electric current

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