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
main.cpp@4:d7a5f6fe7987, 2013-01-09 (annotated)
- Committer:
- kazushi2008
- Date:
- Wed Jan 09 07:33:29 2013 +0000
- Revision:
- 4:d7a5f6fe7987
- Parent:
- 3:cce58539833e
- Child:
- 6:5aa67ed9ae43
first publishing
Who changed what in which revision?
User | Revision | Line number | New 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 | 4:d7a5f6fe7987 | 15 | #define SSID "SSID" |
kazushi2008 | 4:d7a5f6fe7987 | 16 | #define PASS "passkey" |
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 | 4:d7a5f6fe7987 | 21 | #define HTTP_USER "username" |
kazushi2008 | 4:d7a5f6fe7987 | 22 | #define HTTP_PASS "password" |
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 | } |