Twitter client, with TextLCD, Ethernet Connection, and USB Host for keyboard.
Dependencies: EthernetNetIf TextLCD mbed
Diff: main.cpp
- Revision:
- 0:70571fd24107
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Apr 21 05:54:26 2011 +0000 @@ -0,0 +1,184 @@ +/* +Copyright (c) 2011 blmarket.net +*/ +/* +Copyright (c) 2010 Peter Barrett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#include "mbed.h" +#include "USBHost.h" +#include "Utils.h" +#include "FATFileSystem.h" +#include "EthernetNetIf.h" +#include "HTTPClient.h" +#include "TextLCD.h" + +Serial pc(USBTX, USBRX); +TextLCD lcd(p21, p23, p22, p27, p28, p29, p30); // rs, rw, e, d0-d3 +EthernetNetIf eth( + IpAddr(110,76,72,244), //IP Address + IpAddr(255,255,255,0), //Network Mask + IpAddr(110,76,72,1), //Gateway + IpAddr(143,248,1,177) //DNS +); +HTTPClient *twitterclient = NULL; // will be set by initialization func. + +u8 prevkey[8] = {0}; +char keyMap[256] = {0,0,0,0,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',0,0,0,0,0,0,0,0,0,0,0/*return*/,0,0,0,' '}; + +int msglen = 0; +char msgtxt[256]; +bool needcls = false; + +void sendTweet(void) +{ + if(msglen == 0) return; + if(twitterclient == NULL) return; + HTTPMap msg; + msg["status"] = msgtxt; + + twitterclient->basicAuth("blmarketmbed", "1324"); //We use basic authentication, replace with you account's parameters + + //No need to retieve data sent back by the server + HTTPResult r = twitterclient->post("http://api.supertweet.net/1/statuses/update.xml", msg, NULL); + if( r == HTTP_OK ) + { + printf("Tweet sent with success!\n"); + lcd.cls(); + lcd.printf("Tweet success!\nType Tweet msg\n"); + } + else + { + printf("Problem during tweeting, return code %d\n", r); + lcd.cls(); + lcd.printf("Tweet failure\n"); + } + needcls = true; + + msglen = 0; + msgtxt[msglen]=0; +} + +void onPressedKey(u8 value) +{ + if(value == 40) + { + sendTweet(); + return; + } + + if(keyMap[value] != 0) + { + if(msglen >= 32) return; + if(needcls) + { + lcd.cls(); + needcls = false; + } + lcd.printf("%c",keyMap[value]); + msgtxt[msglen++] = keyMap[value]; + msgtxt[msglen] = 0; + } + else + { + printf("Unknown keycode %d\n",value); + } +} + +void HandleKeyboardCallback(u8 *data, int len) +{ + if(len != 8) + { + printf("Wrong KeyboardCallback : len should be 8\n"); + return; + } + + for(int i=2;i<len;i++) if(data[i] != 0) + { + bool omit = false; + for(int j=2;j<len;j++) + { + if(prevkey[j] == data[i]) + { + omit = true; + break; + } + } + if(omit) continue; + onPressedKey(data[i]); + } + memcpy(prevkey, data, sizeof(u8)*len); +} + +int main() +{ + printf("Init\n"); + lcd.printf("TwitterClient\nLoading...\n"); + + EthernetErr ethErr = eth.setup(); + if(ethErr) + { + printf("Error %d in setup.\n", ethErr); + return -1; + } + printf("\r\nSetup OK\r\n"); + + pc.baud(9600); + USBInit(); + + twitterclient = new HTTPClient(); + + lcd.cls(); + lcd.printf("Type Tweet msg\n"); + needcls = true; + + while(1) + { + USBLoop(); + } + +/* + printf("\r\nSetting up...\r\n"); + + HTTPClient twitter; + + HTTPMap msg; + msg["status"] = "Now I need to attach my USB keyboard to mbed"; //A good example of Key/Value pair use with Web APIs + + twitter.basicAuth("blmarketmbed", "1324"); //We use basic authentication, replace with you account's parameters + + //No need to retieve data sent back by the server + HTTPResult r = twitter.post("http://api.supertweet.net/1/statuses/update.xml", msg, NULL); + if( r == HTTP_OK ) + { + printf("Tweet sent with success!\n"); + lcd.printf("Tweet success!\n"); + } + else + { + printf("Problem during tweeting, return code %d\n", r); + lcd.printf("Tweet failure\n"); + } +*/ + + return 0; +} +