A shiftbrite controlled by a Vodafone USB modem
Dependencies: VodafoneUSBModem_bleedingedge mbed-rtos mbed
main.cpp
00001 #define __DEBUG__ 4 //Maximum verbosity 00002 #ifndef __MODULE__ 00003 #define __MODULE__ "net_3g_basic_http_test.cpp" 00004 #endif 00005 00006 #include "mbed.h" 00007 #include "rtos.h" 00008 #include "VodafoneUSBModem.h" 00009 #include "socket/bsd_socket.h" 00010 00011 DigitalOut led1(LED1); 00012 DigitalOut led2(LED2); 00013 DigitalOut led3(LED3); 00014 DigitalOut led4(LED4); 00015 00016 DigitalOut latch(p15); 00017 DigitalOut enable(p16); 00018 SPI spi(p11, p12, p13); 00019 00020 void setLEDColor(int red, int green, int blue) { 00021 unsigned int low_color=0; 00022 unsigned int high_color=0; 00023 high_color=(blue<<4)|((red&0x3C0)>>6); 00024 low_color=(((red&0x3F)<<10)|(green)); 00025 spi.write(high_color); 00026 spi.write(low_color); 00027 latch=1; 00028 latch=0; 00029 } 00030 00031 void setupShifty() { 00032 spi.format(16,0); 00033 spi.frequency(500000); 00034 enable=0; 00035 latch=0; 00036 } 00037 00038 00039 void lightListener(void const*) { 00040 VodafoneUSBModem modem; 00041 // socket stuff 00042 int sockfd,ret = OK; 00043 uint16_t port = 3232; 00044 struct sockaddr_in serverAddress; 00045 struct hostent *server; 00046 char urlBuffer[128]; 00047 int urlBufferLength = 128; 00048 00049 // declare space for phone number and message storage 00050 char numBuffer[20], msgBuffer[512]; 00051 size_t numSMS; // variable to track number of received messages 00052 00053 //int ret = modem.connect("internet","web","web"); 00054 00055 if(ret == OK) { 00056 int count = 30; 00057 int rssi; 00058 int r=0,g=0,b=0; 00059 LinkMonitor::REGISTRATION_STATE regState; 00060 LinkMonitor::BEARER bearer; 00061 while(1) { 00062 00063 //modem.getLinkState(&rssi, ®State, &bearer); 00064 //DBG("RSSI: %d dBm; Reg state: %d; Bearer: %d", rssi, regState, bearer); 00065 00066 // retrieve the short message count into numSMS 00067 if(modem.getSMCount(&numSMS)==OK) { 00068 // check if any short messages have been received 00069 if(numSMS>0) { 00070 DBG("SM count > 0"); 00071 // get the oldest short message in the queue 00072 if(modem.getSM(numBuffer,msgBuffer,256)==OK) { 00073 sscanf(msgBuffer,"%d,%d,%d",&r,&g,&b); 00074 DBG("Setting light to: %d,%d,%d",r,g,b); 00075 setLEDColor(r*4,g*4,b*4); 00076 // connect to socket and push message 00077 /* 00078 // create the socket 00079 if((sockfd=::socket(AF_INET,SOCK_STREAM,0))<0) { DBG("Error opening socket\r\n"); } else { DBG("Socket open\r\n"); } 00080 00081 // create the socket address 00082 std::memset(&serverAddress, 0, sizeof(struct sockaddr_in)); 00083 if((server=::gethostbyname("m2mthings.com"))==NULL) { 00084 DBG("Error resolving address, setting manually."); 00085 serverAddress.sin_addr.s_addr = inet_addr("109.74.199.96"); 00086 } else { 00087 DBG("Address resolved OK"); 00088 memcpy((char*)&serverAddress.sin_addr.s_addr, (char*)server->h_addr_list[0], server->h_length); 00089 } 00090 // set server address family 00091 serverAddress.sin_family = AF_INET; 00092 // set server port 00093 serverAddress.sin_port = htons(port); 00094 00095 // do socket connect 00096 DBG("Connecting socket to %s:%d", inet_ntoa(serverAddress.sin_addr), ntohs(serverAddress.sin_port)); 00097 if((ret=::connect(sockfd, (const struct sockaddr *)&serverAddress, sizeof(serverAddress)))<0) { 00098 ::close(sockfd); 00099 DBG("Could not connect"); 00100 } else { 00101 DBG("Connection OK"); 00102 } 00103 00104 DBG("Sending password"); 00105 ::write(sockfd,"hi3h892!",8); 00106 00107 ret = ::recv(sockfd,urlBuffer,urlBufferLength,0); 00108 if (ret<0) { 00109 DBG("Error receiving ACK."); 00110 } else { 00111 DBG("Received(%d): %s",urlBufferLength,urlBuffer); 00112 modem.sendSM(numBuffer,urlBuffer); 00113 } 00114 00115 ::close(sockfd); 00116 */ 00117 00118 } 00119 } 00120 } 00121 // wait 500ms 00122 Thread::wait(500); 00123 } 00124 00125 } 00126 00127 modem.disconnect(); 00128 DBG("Disconnected"); 00129 00130 while (1) { 00131 Thread::wait(100); 00132 } 00133 } 00134 00135 void keepAlive(void const*) { 00136 while (1) { 00137 led1 = !led1; 00138 Thread::wait(250); 00139 led1 = !led1; 00140 Thread::wait(25000); 00141 } 00142 } 00143 00144 int main() { 00145 DBG_INIT(); 00146 DBG_SET_SPEED(115200); 00147 DBG_SET_NEWLINE("\r\n"); 00148 int red=0; 00149 int green=0; 00150 int blue=0; 00151 setupShifty(); 00152 setLEDColor(500,200,200); 00153 00154 Thread lightTask(lightListener, NULL, osPriorityNormal, 1024 * 6); 00155 keepAlive(NULL); 00156 }
Generated on Thu Jul 14 2022 04:57:58 by 1.7.2