A shiftbrite controlled by a Vodafone USB modem
Dependencies: VodafoneUSBModem_bleedingedge mbed-rtos mbed
Revision 0:9a2bd692bc95, committed 2012-09-28
- Comitter:
- ashleymills
- Date:
- Fri Sep 28 09:27:18 2012 +0000
- Commit message:
- Shiftbrite controlled by RGB messages over USB dongle
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/VodafoneUSBModem_bleedingedge.lib Fri Sep 28 09:27:18 2012 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/donatien/code/VodafoneUSBModem_bleedingedge/#54ca82a7644c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Sep 28 09:27:18 2012 +0000
@@ -0,0 +1,156 @@
+#define __DEBUG__ 4 //Maximum verbosity
+#ifndef __MODULE__
+#define __MODULE__ "net_3g_basic_http_test.cpp"
+#endif
+
+#include "mbed.h"
+#include "rtos.h"
+#include "VodafoneUSBModem.h"
+#include "socket/bsd_socket.h"
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+DigitalOut latch(p15);
+DigitalOut enable(p16);
+SPI spi(p11, p12, p13);
+
+void setLEDColor(int red, int green, int blue) {
+ unsigned int low_color=0;
+ unsigned int high_color=0;
+ high_color=(blue<<4)|((red&0x3C0)>>6);
+ low_color=(((red&0x3F)<<10)|(green));
+ spi.write(high_color);
+ spi.write(low_color);
+ latch=1;
+ latch=0;
+}
+
+void setupShifty() {
+ spi.format(16,0);
+ spi.frequency(500000);
+ enable=0;
+ latch=0;
+}
+
+
+void lightListener(void const*) {
+ VodafoneUSBModem modem;
+ // socket stuff
+ int sockfd,ret = OK;
+ uint16_t port = 3232;
+ struct sockaddr_in serverAddress;
+ struct hostent *server;
+ char urlBuffer[128];
+ int urlBufferLength = 128;
+
+ // declare space for phone number and message storage
+ char numBuffer[20], msgBuffer[512];
+ size_t numSMS; // variable to track number of received messages
+
+ //int ret = modem.connect("internet","web","web");
+
+ if(ret == OK) {
+ int count = 30;
+ int rssi;
+ int r=0,g=0,b=0;
+ LinkMonitor::REGISTRATION_STATE regState;
+ LinkMonitor::BEARER bearer;
+ while(1) {
+
+ //modem.getLinkState(&rssi, ®State, &bearer);
+ //DBG("RSSI: %d dBm; Reg state: %d; Bearer: %d", rssi, regState, bearer);
+
+ // retrieve the short message count into numSMS
+ if(modem.getSMCount(&numSMS)==OK) {
+ // check if any short messages have been received
+ if(numSMS>0) {
+ DBG("SM count > 0");
+ // get the oldest short message in the queue
+ if(modem.getSM(numBuffer,msgBuffer,256)==OK) {
+ sscanf(msgBuffer,"%d,%d,%d",&r,&g,&b);
+ DBG("Setting light to: %d,%d,%d",r,g,b);
+ setLEDColor(r*4,g*4,b*4);
+ // connect to socket and push message
+ /*
+ // create the socket
+ if((sockfd=::socket(AF_INET,SOCK_STREAM,0))<0) { DBG("Error opening socket\r\n"); } else { DBG("Socket open\r\n"); }
+
+ // create the socket address
+ std::memset(&serverAddress, 0, sizeof(struct sockaddr_in));
+ if((server=::gethostbyname("m2mthings.com"))==NULL) {
+ DBG("Error resolving address, setting manually.");
+ serverAddress.sin_addr.s_addr = inet_addr("109.74.199.96");
+ } else {
+ DBG("Address resolved OK");
+ memcpy((char*)&serverAddress.sin_addr.s_addr, (char*)server->h_addr_list[0], server->h_length);
+ }
+ // set server address family
+ serverAddress.sin_family = AF_INET;
+ // set server port
+ serverAddress.sin_port = htons(port);
+
+ // do socket connect
+ DBG("Connecting socket to %s:%d", inet_ntoa(serverAddress.sin_addr), ntohs(serverAddress.sin_port));
+ if((ret=::connect(sockfd, (const struct sockaddr *)&serverAddress, sizeof(serverAddress)))<0) {
+ ::close(sockfd);
+ DBG("Could not connect");
+ } else {
+ DBG("Connection OK");
+ }
+
+ DBG("Sending password");
+ ::write(sockfd,"hi3h892!",8);
+
+ ret = ::recv(sockfd,urlBuffer,urlBufferLength,0);
+ if (ret<0) {
+ DBG("Error receiving ACK.");
+ } else {
+ DBG("Received(%d): %s",urlBufferLength,urlBuffer);
+ modem.sendSM(numBuffer,urlBuffer);
+ }
+
+ ::close(sockfd);
+ */
+
+ }
+ }
+ }
+ // wait 500ms
+ Thread::wait(500);
+ }
+
+ }
+
+ modem.disconnect();
+ DBG("Disconnected");
+
+ while (1) {
+ Thread::wait(100);
+ }
+}
+
+void keepAlive(void const*) {
+ while (1) {
+ led1 = !led1;
+ Thread::wait(250);
+ led1 = !led1;
+ Thread::wait(25000);
+ }
+}
+
+int main() {
+ DBG_INIT();
+ DBG_SET_SPEED(115200);
+ DBG_SET_NEWLINE("\r\n");
+ int red=0;
+ int green=0;
+ int blue=0;
+ setupShifty();
+ setLEDColor(500,200,200);
+
+ Thread lightTask(lightListener, NULL, osPriorityNormal, 1024 * 6);
+ keepAlive(NULL);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Fri Sep 28 09:27:18 2012 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#9654a71f5a90
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Sep 28 09:27:18 2012 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/cd19af002ccc \ No newline at end of file



