Vodafone Test Suite
Dependencies: mbed-rtos mbed HTTPClient VodafoneUSBModem
main.cpp@0:6d8a9f4b2cc6, 2012-08-22 (annotated)
- Committer:
- ashleymills
- Date:
- Wed Aug 22 08:48:49 2012 +0000
- Revision:
- 0:6d8a9f4b2cc6
- Child:
- 1:0d63e4db8503
Init;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ashleymills | 0:6d8a9f4b2cc6 | 1 | #define __DEBUG__ 4 //Maximum verbosity |
ashleymills | 0:6d8a9f4b2cc6 | 2 | #ifndef __MODULE__ |
ashleymills | 0:6d8a9f4b2cc6 | 3 | #define __MODULE__ "net_3g_basic_http_test.cpp" |
ashleymills | 0:6d8a9f4b2cc6 | 4 | #endif |
ashleymills | 0:6d8a9f4b2cc6 | 5 | |
ashleymills | 0:6d8a9f4b2cc6 | 6 | #include "mbed.h" |
ashleymills | 0:6d8a9f4b2cc6 | 7 | #include "socket/bsd_socket.h" |
ashleymills | 0:6d8a9f4b2cc6 | 8 | |
ashleymills | 0:6d8a9f4b2cc6 | 9 | #include "rtos.h" |
ashleymills | 0:6d8a9f4b2cc6 | 10 | |
ashleymills | 0:6d8a9f4b2cc6 | 11 | #include "VodafoneUSBModem.h" |
ashleymills | 0:6d8a9f4b2cc6 | 12 | |
ashleymills | 0:6d8a9f4b2cc6 | 13 | DigitalOut led1(LED1); |
ashleymills | 0:6d8a9f4b2cc6 | 14 | DigitalOut led2(LED2); |
ashleymills | 0:6d8a9f4b2cc6 | 15 | DigitalOut led3(LED3); |
ashleymills | 0:6d8a9f4b2cc6 | 16 | DigitalOut led4(LED4); |
ashleymills | 0:6d8a9f4b2cc6 | 17 | |
ashleymills | 0:6d8a9f4b2cc6 | 18 | extern "C" void HardFault_Handler() |
ashleymills | 0:6d8a9f4b2cc6 | 19 | { |
ashleymills | 0:6d8a9f4b2cc6 | 20 | error("Hard Fault!\n"); |
ashleymills | 0:6d8a9f4b2cc6 | 21 | } |
ashleymills | 0:6d8a9f4b2cc6 | 22 | |
ashleymills | 0:6d8a9f4b2cc6 | 23 | void test(void const*) { |
ashleymills | 0:6d8a9f4b2cc6 | 24 | VodafoneUSBModem modem; |
ashleymills | 0:6d8a9f4b2cc6 | 25 | // socket stuff |
ashleymills | 0:6d8a9f4b2cc6 | 26 | int sockfd; |
ashleymills | 0:6d8a9f4b2cc6 | 27 | uint16_t port = 3232; |
ashleymills | 0:6d8a9f4b2cc6 | 28 | struct sockaddr_in serverAddress; |
ashleymills | 0:6d8a9f4b2cc6 | 29 | struct hostent *server; |
ashleymills | 0:6d8a9f4b2cc6 | 30 | char urlBuffer[128]; |
ashleymills | 0:6d8a9f4b2cc6 | 31 | int urlBufferLength = 128; |
ashleymills | 0:6d8a9f4b2cc6 | 32 | |
ashleymills | 0:6d8a9f4b2cc6 | 33 | // declare space for phone number and message storage |
ashleymills | 0:6d8a9f4b2cc6 | 34 | char numBuffer[20], msgBuffer[512]; |
ashleymills | 0:6d8a9f4b2cc6 | 35 | size_t numSMS; // variable to track number of received messages |
ashleymills | 0:6d8a9f4b2cc6 | 36 | |
ashleymills | 0:6d8a9f4b2cc6 | 37 | DBG("Hello!"); |
ashleymills | 0:6d8a9f4b2cc6 | 38 | |
ashleymills | 0:6d8a9f4b2cc6 | 39 | modem.sendUSSD("*#100#", msgBuffer, 512); |
ashleymills | 0:6d8a9f4b2cc6 | 40 | |
ashleymills | 0:6d8a9f4b2cc6 | 41 | DBG("ussd: %s",msgBuffer); |
ashleymills | 0:6d8a9f4b2cc6 | 42 | |
ashleymills | 0:6d8a9f4b2cc6 | 43 | |
ashleymills | 0:6d8a9f4b2cc6 | 44 | int ret = modem.connect("internet","web","web"); |
ashleymills | 0:6d8a9f4b2cc6 | 45 | |
ashleymills | 0:6d8a9f4b2cc6 | 46 | if (ret == OK) { |
ashleymills | 0:6d8a9f4b2cc6 | 47 | int count = 30; |
ashleymills | 0:6d8a9f4b2cc6 | 48 | while(1) { |
ashleymills | 0:6d8a9f4b2cc6 | 49 | int rssi; |
ashleymills | 0:6d8a9f4b2cc6 | 50 | LinkMonitor::REGISTRATION_STATE regState; |
ashleymills | 0:6d8a9f4b2cc6 | 51 | LinkMonitor::BEARER bearer; |
ashleymills | 0:6d8a9f4b2cc6 | 52 | |
ashleymills | 0:6d8a9f4b2cc6 | 53 | modem.getLinkState(&rssi, ®State, &bearer); |
ashleymills | 0:6d8a9f4b2cc6 | 54 | DBG("RSSI: %d dBm; Reg state: %d; Bearer: %d", rssi, regState, bearer); |
ashleymills | 0:6d8a9f4b2cc6 | 55 | |
ashleymills | 0:6d8a9f4b2cc6 | 56 | DBG("Checking SM count"); |
ashleymills | 0:6d8a9f4b2cc6 | 57 | |
ashleymills | 0:6d8a9f4b2cc6 | 58 | // retrieve the short message count into numSMS |
ashleymills | 0:6d8a9f4b2cc6 | 59 | if(modem.getSMCount(&numSMS)==OK) { |
ashleymills | 0:6d8a9f4b2cc6 | 60 | DBG("getSMCount success"); |
ashleymills | 0:6d8a9f4b2cc6 | 61 | DBG("numSMS: %d",numSMS); |
ashleymills | 0:6d8a9f4b2cc6 | 62 | // check if any short messages have been received |
ashleymills | 0:6d8a9f4b2cc6 | 63 | if(numSMS>0) { |
ashleymills | 0:6d8a9f4b2cc6 | 64 | DBG("SM count > 0"); |
ashleymills | 0:6d8a9f4b2cc6 | 65 | // get the oldest short message in the queue |
ashleymills | 0:6d8a9f4b2cc6 | 66 | if(modem.getSM(numBuffer,msgBuffer,256)==OK) { |
ashleymills | 0:6d8a9f4b2cc6 | 67 | DBG("message received"); |
ashleymills | 0:6d8a9f4b2cc6 | 68 | DBG("num: %s",numBuffer); |
ashleymills | 0:6d8a9f4b2cc6 | 69 | DBG("msg: %s",msgBuffer); |
ashleymills | 0:6d8a9f4b2cc6 | 70 | |
ashleymills | 0:6d8a9f4b2cc6 | 71 | // connect to socket and push message |
ashleymills | 0:6d8a9f4b2cc6 | 72 | |
ashleymills | 0:6d8a9f4b2cc6 | 73 | // create the socket |
ashleymills | 0:6d8a9f4b2cc6 | 74 | if((sockfd=::socket(AF_INET,SOCK_STREAM,0))<0) { DBG("Error opening socket\r\n"); } else { DBG("Socket open\r\n"); } |
ashleymills | 0:6d8a9f4b2cc6 | 75 | |
ashleymills | 0:6d8a9f4b2cc6 | 76 | // create the socket address |
ashleymills | 0:6d8a9f4b2cc6 | 77 | std::memset(&serverAddress, 0, sizeof(struct sockaddr_in)); |
ashleymills | 0:6d8a9f4b2cc6 | 78 | if((server=::gethostbyname("m2mthings.com"))==NULL) { |
ashleymills | 0:6d8a9f4b2cc6 | 79 | DBG("Error resolving address, setting manually."); |
ashleymills | 0:6d8a9f4b2cc6 | 80 | serverAddress.sin_addr.s_addr = inet_addr("109.74.199.96"); |
ashleymills | 0:6d8a9f4b2cc6 | 81 | } else { |
ashleymills | 0:6d8a9f4b2cc6 | 82 | DBG("Address resolved OK"); |
ashleymills | 0:6d8a9f4b2cc6 | 83 | memcpy((char*)&serverAddress.sin_addr.s_addr, (char*)server->h_addr_list[0], server->h_length); |
ashleymills | 0:6d8a9f4b2cc6 | 84 | } |
ashleymills | 0:6d8a9f4b2cc6 | 85 | // set server address family |
ashleymills | 0:6d8a9f4b2cc6 | 86 | serverAddress.sin_family = AF_INET; |
ashleymills | 0:6d8a9f4b2cc6 | 87 | // set server port |
ashleymills | 0:6d8a9f4b2cc6 | 88 | serverAddress.sin_port = htons(port); |
ashleymills | 0:6d8a9f4b2cc6 | 89 | |
ashleymills | 0:6d8a9f4b2cc6 | 90 | // do socket connect |
ashleymills | 0:6d8a9f4b2cc6 | 91 | DBG("Connecting socket to %s:%d", inet_ntoa(serverAddress.sin_addr), ntohs(serverAddress.sin_port)); |
ashleymills | 0:6d8a9f4b2cc6 | 92 | if((ret=::connect(sockfd, (const struct sockaddr *)&serverAddress, sizeof(serverAddress)))<0) { |
ashleymills | 0:6d8a9f4b2cc6 | 93 | ::close(sockfd); |
ashleymills | 0:6d8a9f4b2cc6 | 94 | DBG("Could not connect"); |
ashleymills | 0:6d8a9f4b2cc6 | 95 | } else { |
ashleymills | 0:6d8a9f4b2cc6 | 96 | DBG("Connection OK"); |
ashleymills | 0:6d8a9f4b2cc6 | 97 | } |
ashleymills | 0:6d8a9f4b2cc6 | 98 | |
ashleymills | 0:6d8a9f4b2cc6 | 99 | DBG("Sending password"); |
ashleymills | 0:6d8a9f4b2cc6 | 100 | ::write(sockfd,"hi3h892!",8); |
ashleymills | 0:6d8a9f4b2cc6 | 101 | |
ashleymills | 0:6d8a9f4b2cc6 | 102 | ret = ::recv(sockfd,urlBuffer,urlBufferLength,0); |
ashleymills | 0:6d8a9f4b2cc6 | 103 | if (ret<0) { |
ashleymills | 0:6d8a9f4b2cc6 | 104 | DBG("Error receiving ACK."); |
ashleymills | 0:6d8a9f4b2cc6 | 105 | } else { |
ashleymills | 0:6d8a9f4b2cc6 | 106 | DBG("Received(%d): %s",urlBufferLength,urlBuffer); |
ashleymills | 0:6d8a9f4b2cc6 | 107 | modem.sendSM(numBuffer,urlBuffer); |
ashleymills | 0:6d8a9f4b2cc6 | 108 | } |
ashleymills | 0:6d8a9f4b2cc6 | 109 | |
ashleymills | 0:6d8a9f4b2cc6 | 110 | ::close(sockfd); |
ashleymills | 0:6d8a9f4b2cc6 | 111 | |
ashleymills | 0:6d8a9f4b2cc6 | 112 | |
ashleymills | 0:6d8a9f4b2cc6 | 113 | } |
ashleymills | 0:6d8a9f4b2cc6 | 114 | } |
ashleymills | 0:6d8a9f4b2cc6 | 115 | } |
ashleymills | 0:6d8a9f4b2cc6 | 116 | // wait 500ms |
ashleymills | 0:6d8a9f4b2cc6 | 117 | Thread::wait(1000); |
ashleymills | 0:6d8a9f4b2cc6 | 118 | } |
ashleymills | 0:6d8a9f4b2cc6 | 119 | |
ashleymills | 0:6d8a9f4b2cc6 | 120 | } |
ashleymills | 0:6d8a9f4b2cc6 | 121 | |
ashleymills | 0:6d8a9f4b2cc6 | 122 | modem.disconnect(); |
ashleymills | 0:6d8a9f4b2cc6 | 123 | DBG("Disconnected"); |
ashleymills | 0:6d8a9f4b2cc6 | 124 | |
ashleymills | 0:6d8a9f4b2cc6 | 125 | while (1) { |
ashleymills | 0:6d8a9f4b2cc6 | 126 | Thread::wait(100); |
ashleymills | 0:6d8a9f4b2cc6 | 127 | } |
ashleymills | 0:6d8a9f4b2cc6 | 128 | } |
ashleymills | 0:6d8a9f4b2cc6 | 129 | |
ashleymills | 0:6d8a9f4b2cc6 | 130 | void keepAlive(void const*) |
ashleymills | 0:6d8a9f4b2cc6 | 131 | { |
ashleymills | 0:6d8a9f4b2cc6 | 132 | while (1) |
ashleymills | 0:6d8a9f4b2cc6 | 133 | { |
ashleymills | 0:6d8a9f4b2cc6 | 134 | led1 = !led1; |
ashleymills | 0:6d8a9f4b2cc6 | 135 | Thread::wait(500); |
ashleymills | 0:6d8a9f4b2cc6 | 136 | led1 = !led1; |
ashleymills | 0:6d8a9f4b2cc6 | 137 | Thread::wait(30000); |
ashleymills | 0:6d8a9f4b2cc6 | 138 | } |
ashleymills | 0:6d8a9f4b2cc6 | 139 | } |
ashleymills | 0:6d8a9f4b2cc6 | 140 | |
ashleymills | 0:6d8a9f4b2cc6 | 141 | |
ashleymills | 0:6d8a9f4b2cc6 | 142 | int main() { |
ashleymills | 0:6d8a9f4b2cc6 | 143 | |
ashleymills | 0:6d8a9f4b2cc6 | 144 | DBG_INIT(); |
ashleymills | 0:6d8a9f4b2cc6 | 145 | DBG_SET_SPEED(115200); |
ashleymills | 0:6d8a9f4b2cc6 | 146 | DBG_SET_NEWLINE("\r\n"); |
ashleymills | 0:6d8a9f4b2cc6 | 147 | |
ashleymills | 0:6d8a9f4b2cc6 | 148 | Thread testTask(test, NULL, osPriorityNormal, 1024 * 5); |
ashleymills | 0:6d8a9f4b2cc6 | 149 | keepAlive(NULL); |
ashleymills | 0:6d8a9f4b2cc6 | 150 | |
ashleymills | 0:6d8a9f4b2cc6 | 151 | return 0; |
ashleymills | 0:6d8a9f4b2cc6 | 152 | } |