Vodafone Test Suite

Dependencies:   mbed-rtos mbed HTTPClient VodafoneUSBModem

Committer:
ashleymills
Date:
Wed Aug 22 08:48:49 2012 +0000
Revision:
0:6d8a9f4b2cc6
Child:
1:0d63e4db8503
Init;

Who changed what in which revision?

UserRevisionLine numberNew 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, &regState, &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 }