mbed 5.4 with sleep mode
Dependencies: C027_Support mbed-dev
Fork of C027_SupportTest_coap by
main.cpp@39:4f3f7463e55f, 2017-05-25 (annotated)
- Committer:
- ranaumarnaeem
- Date:
- Thu May 25 11:53:45 2017 +0000
- Revision:
- 39:4f3f7463e55f
- Parent:
- 37:43d48521d4d7
mbed 5.4 with sleep mode
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lawliet | 0:4e3cb26f6019 | 1 | #include "mbed.h" |
ranaumarnaeem | 34:d6ce8f961b8b | 2 | #include <stdlib.h> |
ranaumarnaeem | 34:d6ce8f961b8b | 3 | #include <stdio.h> |
ranaumarnaeem | 34:d6ce8f961b8b | 4 | #include <string.h> |
ranaumarnaeem | 34:d6ce8f961b8b | 5 | #include <errno.h> |
ranaumarnaeem | 34:d6ce8f961b8b | 6 | #include <stdint.h> |
mazgch | 19:f022ff746eb8 | 7 | #include "GPS.h" |
mazgch | 19:f022ff746eb8 | 8 | #include "MDM.h" |
ranaumarnaeem | 34:d6ce8f961b8b | 9 | #include "main.h" |
ranaumarnaeem | 39:4f3f7463e55f | 10 | #include "coap_msg.h" |
ranaumarnaeem | 39:4f3f7463e55f | 11 | #include "coap_client.h" |
ranaumarnaeem | 39:4f3f7463e55f | 12 | |
ranaumarnaeem | 34:d6ce8f961b8b | 13 | extern "C" { |
ranaumarnaeem | 39:4f3f7463e55f | 14 | |
ranaumarnaeem | 37:43d48521d4d7 | 15 | #include "rtc_api.h" |
ranaumarnaeem | 37:43d48521d4d7 | 16 | } |
ranaumarnaeem | 37:43d48521d4d7 | 17 | // |
ranaumarnaeem | 37:43d48521d4d7 | 18 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 37:43d48521d4d7 | 19 | #define SIMPIN "1922" |
ranaumarnaeem | 37:43d48521d4d7 | 20 | #define APN NULL |
ranaumarnaeem | 37:43d48521d4d7 | 21 | #define USERNAME NULL |
ranaumarnaeem | 37:43d48521d4d7 | 22 | #define PASSWORD NULL |
ranaumarnaeem | 37:43d48521d4d7 | 23 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 37:43d48521d4d7 | 24 | int pport = 5685; |
ranaumarnaeem | 37:43d48521d4d7 | 25 | const char* host = "coap.me"; |
ranaumarnaeem | 37:43d48521d4d7 | 26 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 37:43d48521d4d7 | 27 | int ssocket; |
ranaumarnaeem | 37:43d48521d4d7 | 28 | MDMParser::IP ipp; |
ranaumarnaeem | 37:43d48521d4d7 | 29 | MDMSerial* gmdm = NULL; |
ranaumarnaeem | 37:43d48521d4d7 | 30 | DigitalOut myled(LED); |
ranaumarnaeem | 37:43d48521d4d7 | 31 | unsigned long ulGPSRxCntr=0, ulGPSTxCntr=0 ; //-- Asset |
ranaumarnaeem | 37:43d48521d4d7 | 32 | unsigned long ulGSMRxCntr=0, ulGSMTxCntr=0 ; //-- Asset |
ranaumarnaeem | 37:43d48521d4d7 | 33 | unsigned long ulTotalRxCntr=0,ulTotalTxCntr=0; //-- Asset |
ranaumarnaeem | 37:43d48521d4d7 | 34 | char caLssFinalAssetMsg[150]; |
ranaumarnaeem | 39:4f3f7463e55f | 35 | double dLatitude=31.47691,dLongitude=74.34259; |
ranaumarnaeem | 37:43d48521d4d7 | 36 | static unsigned int uiWakeupCounter=0,uiWatchdogCounter=0; |
ranaumarnaeem | 37:43d48521d4d7 | 37 | unsigned char ucBtteryLevel=0; |
ranaumarnaeem | 37:43d48521d4d7 | 38 | MDMParser::DevStatus devStatus={}; |
ranaumarnaeem | 37:43d48521d4d7 | 39 | |
ranaumarnaeem | 37:43d48521d4d7 | 40 | bool bSendingDataFlag = true; |
ranaumarnaeem | 37:43d48521d4d7 | 41 | bool bSleepModeFlag = true; |
ranaumarnaeem | 37:43d48521d4d7 | 42 | //bool bHeartBeatFlag = false; |
ranaumarnaeem | 37:43d48521d4d7 | 43 | //bool bAlarmIntervalFlag = true; |
ranaumarnaeem | 37:43d48521d4d7 | 44 | |
ranaumarnaeem | 37:43d48521d4d7 | 45 | //unsigned int uiAlarmIntervalCounter = 0; |
ranaumarnaeem | 37:43d48521d4d7 | 46 | //unsigned int uiHeartBeatCounter = 0; |
ranaumarnaeem | 39:4f3f7463e55f | 47 | |
ranaumarnaeem | 39:4f3f7463e55f | 48 | char ucReturnCode[10]; //Return code array |
ranaumarnaeem | 39:4f3f7463e55f | 49 | int alarmtime = 1495698480;//2017-3-29-11:56:7 |
ranaumarnaeem | 37:43d48521d4d7 | 50 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 37:43d48521d4d7 | 51 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 37:43d48521d4d7 | 52 | /* |
ranaumarnaeem | 37:43d48521d4d7 | 53 | void timer0_init(int sec) |
ranaumarnaeem | 37:43d48521d4d7 | 54 | { |
ranaumarnaeem | 37:43d48521d4d7 | 55 | LPC_SC->PCONP |=1<1; //timer0 power on |
ranaumarnaeem | 37:43d48521d4d7 | 56 | LPC_TIM0->MR0 = sec * 23980000; //1sec * sec |
ranaumarnaeem | 39:4f3f7463e55f | 57 | LPC_TIM0->MCR = 1; //interrupt and reset control |
ranaumarnaeem | 37:43d48521d4d7 | 58 | //3 = Interrupt & reset timer0 on match |
ranaumarnaeem | 37:43d48521d4d7 | 59 | //1 = Interrupt only, no reset of timer0 |
ranaumarnaeem | 37:43d48521d4d7 | 60 | NVIC_EnableIRQ(TIMER0_IRQn); //enable timer0 interrupt |
ranaumarnaeem | 37:43d48521d4d7 | 61 | LPC_TIM0->TCR = 1; //enable Timer0 |
ranaumarnaeem | 37:43d48521d4d7 | 62 | //printf("Done timer_init\n\r"); |
ranaumarnaeem | 37:43d48521d4d7 | 63 | } |
ranaumarnaeem | 37:43d48521d4d7 | 64 | |
ranaumarnaeem | 37:43d48521d4d7 | 65 | extern "C" void TIMER0_IRQHandler (void) |
ranaumarnaeem | 37:43d48521d4d7 | 66 | { |
ranaumarnaeem | 37:43d48521d4d7 | 67 | if((LPC_TIM0->IR & 0x01) == 0x01) // if MR0 interrupt, proceed |
ranaumarnaeem | 37:43d48521d4d7 | 68 | { |
ranaumarnaeem | 37:43d48521d4d7 | 69 | LPC_TIM0->IR |= 1 << 0; // Clear MR0 interrupt flag |
ranaumarnaeem | 39:4f3f7463e55f | 70 | printf("Timer 0 interrupt generated 10 sec\r\n"); |
ranaumarnaeem | 39:4f3f7463e55f | 71 | LPC_TIM0->TCR = 0; |
ranaumarnaeem | 37:43d48521d4d7 | 72 | } |
ranaumarnaeem | 37:43d48521d4d7 | 73 | } |
ranaumarnaeem | 37:43d48521d4d7 | 74 | */ |
ranaumarnaeem | 37:43d48521d4d7 | 75 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 37:43d48521d4d7 | 76 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 37:43d48521d4d7 | 77 | |
ranaumarnaeem | 39:4f3f7463e55f | 78 | void rtc_setup(time_t t, unsigned int sec) |
ranaumarnaeem | 37:43d48521d4d7 | 79 | { |
ranaumarnaeem | 39:4f3f7463e55f | 80 | struct tm *timeinfo = localtime(&t); |
ranaumarnaeem | 39:4f3f7463e55f | 81 | unsigned int min; |
ranaumarnaeem | 39:4f3f7463e55f | 82 | |
ranaumarnaeem | 37:43d48521d4d7 | 83 | rtc_init(); |
ranaumarnaeem | 37:43d48521d4d7 | 84 | |
ranaumarnaeem | 39:4f3f7463e55f | 85 | rtc_write(alarmtime);//2017-3-29-11:56:7 |
ranaumarnaeem | 39:4f3f7463e55f | 86 | |
ranaumarnaeem | 39:4f3f7463e55f | 87 | //min = sec/60; |
ranaumarnaeem | 39:4f3f7463e55f | 88 | //sec = sec%60; |
ranaumarnaeem | 39:4f3f7463e55f | 89 | //set alarm time |
ranaumarnaeem | 39:4f3f7463e55f | 90 | LPC_RTC->ALSEC = timeinfo->tm_sec+sec;//10 sec |
ranaumarnaeem | 39:4f3f7463e55f | 91 | //LPC_RTC->ALMIN = timeinfo->tm_min+min;//10 sec |
ranaumarnaeem | 39:4f3f7463e55f | 92 | |
ranaumarnaeem | 39:4f3f7463e55f | 93 | LPC_RTC->AMR &= (~(1 << 0)) & 0xFF; |
ranaumarnaeem | 39:4f3f7463e55f | 94 | |
ranaumarnaeem | 39:4f3f7463e55f | 95 | LPC_RTC->ILR = (1 << 0) | (1 << 1); |
ranaumarnaeem | 39:4f3f7463e55f | 96 | |
ranaumarnaeem | 39:4f3f7463e55f | 97 | printf("RTC Alarm Time Set\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 98 | |
ranaumarnaeem | 37:43d48521d4d7 | 99 | NVIC_EnableIRQ(RTC_IRQn); |
ranaumarnaeem | 37:43d48521d4d7 | 100 | |
ranaumarnaeem | 37:43d48521d4d7 | 101 | do |
ranaumarnaeem | 37:43d48521d4d7 | 102 | { |
ranaumarnaeem | 37:43d48521d4d7 | 103 | LPC_RTC->CCR |= (1 << 0); |
ranaumarnaeem | 37:43d48521d4d7 | 104 | } |
ranaumarnaeem | 37:43d48521d4d7 | 105 | while ((LPC_RTC->CCR & (1 << 0)) == 0); |
ranaumarnaeem | 37:43d48521d4d7 | 106 | |
ranaumarnaeem | 37:43d48521d4d7 | 107 | printf("RTC setup successfully\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 108 | } |
ranaumarnaeem | 37:43d48521d4d7 | 109 | |
ranaumarnaeem | 37:43d48521d4d7 | 110 | extern "C" void RTC_IRQHandler (void) |
ranaumarnaeem | 37:43d48521d4d7 | 111 | { |
ranaumarnaeem | 37:43d48521d4d7 | 112 | // Check for alarm match |
ranaumarnaeem | 37:43d48521d4d7 | 113 | if (LPC_RTC->ILR & (1 << 1)) |
ranaumarnaeem | 37:43d48521d4d7 | 114 | { |
ranaumarnaeem | 37:43d48521d4d7 | 115 | LPC_RTC->ILR = (1 << 1); |
ranaumarnaeem | 37:43d48521d4d7 | 116 | printf("RTC interrupt generated 10 sec\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 117 | } |
ranaumarnaeem | 34:d6ce8f961b8b | 118 | } |
ranaumarnaeem | 34:d6ce8f961b8b | 119 | |
ranaumarnaeem | 34:d6ce8f961b8b | 120 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 34:d6ce8f961b8b | 121 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 37:43d48521d4d7 | 122 | |
lawliet | 0:4e3cb26f6019 | 123 | int main(void) |
ranaumarnaeem | 37:43d48521d4d7 | 124 | { |
ranaumarnaeem | 37:43d48521d4d7 | 125 | int ret; |
ranaumarnaeem | 37:43d48521d4d7 | 126 | char buf[150] = ""; |
ranaumarnaeem | 37:43d48521d4d7 | 127 | |
ranaumarnaeem | 37:43d48521d4d7 | 128 | // Create the GPS object |
ranaumarnaeem | 37:43d48521d4d7 | 129 | #if 1 // use GPSI2C class |
ranaumarnaeem | 37:43d48521d4d7 | 130 | GPSI2C gps; |
ranaumarnaeem | 37:43d48521d4d7 | 131 | #else // or GPSSerial class |
ranaumarnaeem | 37:43d48521d4d7 | 132 | GPSSerial gps; |
ranaumarnaeem | 37:43d48521d4d7 | 133 | #endif |
ranaumarnaeem | 37:43d48521d4d7 | 134 | |
ranaumarnaeem | 34:d6ce8f961b8b | 135 | MDMSerial mdm; |
ranaumarnaeem | 37:43d48521d4d7 | 136 | gmdm = &mdm; |
ranaumarnaeem | 37:43d48521d4d7 | 137 | us_ticker_init(); |
ranaumarnaeem | 39:4f3f7463e55f | 138 | |
lawliet | 0:4e3cb26f6019 | 139 | |
ranaumarnaeem | 37:43d48521d4d7 | 140 | while(1) |
ranaumarnaeem | 37:43d48521d4d7 | 141 | { |
ranaumarnaeem | 37:43d48521d4d7 | 142 | wait(5); |
ranaumarnaeem | 37:43d48521d4d7 | 143 | //if(bAlarmIntervalFlag || bHeartBeatFlag) |
ranaumarnaeem | 37:43d48521d4d7 | 144 | //{ |
ranaumarnaeem | 37:43d48521d4d7 | 145 | if(initialize_modem()) |
ranaumarnaeem | 34:d6ce8f961b8b | 146 | { |
ranaumarnaeem | 37:43d48521d4d7 | 147 | if(bSendingDataFlag)//&& bAlarmIntervalFlag) |
ranaumarnaeem | 37:43d48521d4d7 | 148 | { |
ranaumarnaeem | 37:43d48521d4d7 | 149 | //bAlarmIntervalFlag = false; |
ranaumarnaeem | 39:4f3f7463e55f | 150 | while( (ret = gps.getMessage(buf, sizeof(buf))) > 0) |
ranaumarnaeem | 37:43d48521d4d7 | 151 | { |
ranaumarnaeem | 37:43d48521d4d7 | 152 | int len = LENGTH(ret); |
ranaumarnaeem | 37:43d48521d4d7 | 153 | ulGPSRxCntr = len; |
ranaumarnaeem | 37:43d48521d4d7 | 154 | if( (PROTOCOL(ret)==GPSParser::NMEA) && (len > 6) ) |
ranaumarnaeem | 37:43d48521d4d7 | 155 | { |
ranaumarnaeem | 37:43d48521d4d7 | 156 | // talker is $GA=Galileo $GB=Beidou $GL=Glonass $GN=Combined $GP=GPS |
ranaumarnaeem | 37:43d48521d4d7 | 157 | if( (buf[0]=='$') || buf[1]=='G' ) |
ranaumarnaeem | 37:43d48521d4d7 | 158 | { |
ranaumarnaeem | 37:43d48521d4d7 | 159 | #define _CHECK_TALKER(s) ((buf[3] == s[0]) && (buf[4] == s[1]) && (buf[5] == s[2])) |
ranaumarnaeem | 37:43d48521d4d7 | 160 | if( _CHECK_TALKER("GLL") ) |
ranaumarnaeem | 37:43d48521d4d7 | 161 | { |
ranaumarnaeem | 37:43d48521d4d7 | 162 | char ch; |
ranaumarnaeem | 37:43d48521d4d7 | 163 | if( gps.getNmeaAngle(1,buf,len,dLatitude) && gps.getNmeaAngle(3,buf,len,dLongitude) && gps.getNmeaItem(6,buf,len,ch) && ch == 'A' ) |
ranaumarnaeem | 37:43d48521d4d7 | 164 | { |
ranaumarnaeem | 37:43d48521d4d7 | 165 | printf( "GPS Location: %.5f %.5f\r\n", dLatitude, dLongitude ); |
ranaumarnaeem | 37:43d48521d4d7 | 166 | break; |
ranaumarnaeem | 37:43d48521d4d7 | 167 | //sprintf(link, "I am here!\n" "https://maps.google.com/?q=%.5f,%.5f", la, lo); |
ranaumarnaeem | 37:43d48521d4d7 | 168 | } else |
ranaumarnaeem | 37:43d48521d4d7 | 169 | { |
ranaumarnaeem | 37:43d48521d4d7 | 170 | dLatitude = 0.0; |
ranaumarnaeem | 37:43d48521d4d7 | 171 | dLongitude = 0.0; |
ranaumarnaeem | 37:43d48521d4d7 | 172 | } |
ranaumarnaeem | 37:43d48521d4d7 | 173 | } |
ranaumarnaeem | 37:43d48521d4d7 | 174 | //else if(_CHECK_TALKER("GGA") || _CHECK_TALKER("GNS") ) |
ranaumarnaeem | 37:43d48521d4d7 | 175 | //{ |
ranaumarnaeem | 37:43d48521d4d7 | 176 | //double a = 0; |
ranaumarnaeem | 37:43d48521d4d7 | 177 | //if (gps.getNmeaItem(9,buf,len,a)) // altitude msl [m] |
ranaumarnaeem | 37:43d48521d4d7 | 178 | // printf("GPS Altitude: %.1f\r\n", a); |
ranaumarnaeem | 37:43d48521d4d7 | 179 | //} |
ranaumarnaeem | 37:43d48521d4d7 | 180 | //else if( _CHECK_TALKER("VTG") ) |
ranaumarnaeem | 37:43d48521d4d7 | 181 | //{ |
ranaumarnaeem | 37:43d48521d4d7 | 182 | //double s = 0; |
ranaumarnaeem | 37:43d48521d4d7 | 183 | //if( gps.getNmeaItem(7,buf,len,s) ) // speed [km/h] |
ranaumarnaeem | 37:43d48521d4d7 | 184 | // printf( "GPS Speed: %.1f\r\n", s ); |
ranaumarnaeem | 37:43d48521d4d7 | 185 | //} |
ranaumarnaeem | 37:43d48521d4d7 | 186 | } |
ranaumarnaeem | 37:43d48521d4d7 | 187 | } |
ranaumarnaeem | 37:43d48521d4d7 | 188 | else |
ranaumarnaeem | 37:43d48521d4d7 | 189 | { |
ranaumarnaeem | 37:43d48521d4d7 | 190 | printf("GPS Packet error\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 191 | dLatitude = 0.0; |
ranaumarnaeem | 37:43d48521d4d7 | 192 | dLongitude = 0.0; |
ranaumarnaeem | 37:43d48521d4d7 | 193 | } |
ranaumarnaeem | 37:43d48521d4d7 | 194 | } |
ranaumarnaeem | 37:43d48521d4d7 | 195 | memset(caLssFinalAssetMsg, '\0', sizeof(caLssFinalAssetMsg)); |
ranaumarnaeem | 37:43d48521d4d7 | 196 | sprintf( caLssFinalAssetMsg, "$AQLSS,01,%s,%s,%.5f,%.5f,%lu,%lu,%d,%d,%d*xx", |
ranaumarnaeem | 37:43d48521d4d7 | 197 | devStatus.imei,devStatus.imsi, dLatitude,dLongitude,ulGPSRxCntr,ulGPSTxCntr,uiWakeupCounter,uiWatchdogCounter,ucBtteryLevel); |
ranaumarnaeem | 37:43d48521d4d7 | 198 | printf( "AssetMsg: %s\r\n", caLssFinalAssetMsg ); |
ranaumarnaeem | 37:43d48521d4d7 | 199 | } |
ranaumarnaeem | 37:43d48521d4d7 | 200 | else // else if(bHeartBeatFlag) |
ranaumarnaeem | 37:43d48521d4d7 | 201 | { |
ranaumarnaeem | 37:43d48521d4d7 | 202 | //bHeartBeatFlag = false; |
ranaumarnaeem | 37:43d48521d4d7 | 203 | sprintf( caLssFinalAssetMsg, "$AQLSS,02,%s,%s*xx",devStatus.imei,devStatus.imsi); |
ranaumarnaeem | 37:43d48521d4d7 | 204 | printf( "HeartBeat: %s\r\n", caLssFinalAssetMsg ); |
ranaumarnaeem | 37:43d48521d4d7 | 205 | } |
ranaumarnaeem | 39:4f3f7463e55f | 206 | |
ranaumarnaeem | 37:43d48521d4d7 | 207 | ssocket = mdm.socketSocket(MDMParser::IPPROTO_UDP, pport); |
ranaumarnaeem | 37:43d48521d4d7 | 208 | if( ssocket >= 0 ) |
ranaumarnaeem | 37:43d48521d4d7 | 209 | { |
ranaumarnaeem | 37:43d48521d4d7 | 210 | mdm.socketSetBlocking(ssocket, 10); |
ranaumarnaeem | 37:43d48521d4d7 | 211 | ipp = 0x97092263;//0x052753CE; |
ranaumarnaeem | 39:4f3f7463e55f | 212 | if (PASS == test_exchange_func(caLssFinalAssetMsg,strlen(caLssFinalAssetMsg),ucReturnCode)) |
ranaumarnaeem | 37:43d48521d4d7 | 213 | { |
ranaumarnaeem | 37:43d48521d4d7 | 214 | printf("\r\n-----------------<pass>-----------------\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 215 | } |
ranaumarnaeem | 37:43d48521d4d7 | 216 | else |
ranaumarnaeem | 37:43d48521d4d7 | 217 | printf("\r\n-----------------<fail>-----------------\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 218 | |
ranaumarnaeem | 37:43d48521d4d7 | 219 | mdm.socketFree(ssocket); |
ranaumarnaeem | 37:43d48521d4d7 | 220 | responce_checker(); |
ranaumarnaeem | 39:4f3f7463e55f | 221 | } |
ranaumarnaeem | 37:43d48521d4d7 | 222 | |
ranaumarnaeem | 37:43d48521d4d7 | 223 | mdm.disconnect(); |
ranaumarnaeem | 39:4f3f7463e55f | 224 | /*mdm.powerOff();*/ |
ranaumarnaeem | 39:4f3f7463e55f | 225 | |
ranaumarnaeem | 37:43d48521d4d7 | 226 | if(bSleepModeFlag) |
ranaumarnaeem | 37:43d48521d4d7 | 227 | { |
ranaumarnaeem | 39:4f3f7463e55f | 228 | rtc_setup(alarmtime,10); |
ranaumarnaeem | 39:4f3f7463e55f | 229 | printf("Enter Sleep Mode\r\n"); |
ranaumarnaeem | 39:4f3f7463e55f | 230 | hal_sleep(); |
ranaumarnaeem | 39:4f3f7463e55f | 231 | printf("Exit Sleep Mode\r\n"); |
ranaumarnaeem | 39:4f3f7463e55f | 232 | myled = !myled; |
ranaumarnaeem | 39:4f3f7463e55f | 233 | uiWakeupCounter++; |
ranaumarnaeem | 37:43d48521d4d7 | 234 | } |
ranaumarnaeem | 39:4f3f7463e55f | 235 | |
ranaumarnaeem | 39:4f3f7463e55f | 236 | /*if(bSendingDataFlag) |
ranaumarnaeem | 37:43d48521d4d7 | 237 | wait( 10 ); |
ranaumarnaeem | 34:d6ce8f961b8b | 238 | else |
ranaumarnaeem | 37:43d48521d4d7 | 239 | wait( 60 ); |
ranaumarnaeem | 39:4f3f7463e55f | 240 | myled = !myled;*/ |
ranaumarnaeem | 34:d6ce8f961b8b | 241 | } |
ranaumarnaeem | 37:43d48521d4d7 | 242 | //} |
ranaumarnaeem | 37:43d48521d4d7 | 243 | } |
ranaumarnaeem | 34:d6ce8f961b8b | 244 | return 0; |
ranaumarnaeem | 34:d6ce8f961b8b | 245 | } |
ranaumarnaeem | 34:d6ce8f961b8b | 246 | //---------------------------------------------------------------------------------------------------------------------- |
ranaumarnaeem | 37:43d48521d4d7 | 247 | //----------------------------------------------------------------------------------------------------------------------l |
ranaumarnaeem | 37:43d48521d4d7 | 248 | int initialize_modem(void) |
ranaumarnaeem | 37:43d48521d4d7 | 249 | { |
ranaumarnaeem | 37:43d48521d4d7 | 250 | bool mdmOk = gmdm->init(SIMPIN, &devStatus); |
ranaumarnaeem | 37:43d48521d4d7 | 251 | gmdm->dumpDevStatus(&devStatus); |
ranaumarnaeem | 37:43d48521d4d7 | 252 | if (mdmOk) |
ranaumarnaeem | 37:43d48521d4d7 | 253 | { |
ranaumarnaeem | 37:43d48521d4d7 | 254 | MDMParser::IP ipp = gmdm->join(APN,USERNAME,PASSWORD); // join the internet connection |
ranaumarnaeem | 37:43d48521d4d7 | 255 | if (ipp == NOIP) |
ranaumarnaeem | 37:43d48521d4d7 | 256 | { |
ranaumarnaeem | 37:43d48521d4d7 | 257 | printf( "AQ-LSS: Modem NOT initialized\n" ); |
ranaumarnaeem | 37:43d48521d4d7 | 258 | gmdm->powerOff(); |
ranaumarnaeem | 37:43d48521d4d7 | 259 | return 0; |
ranaumarnaeem | 37:43d48521d4d7 | 260 | } |
ranaumarnaeem | 37:43d48521d4d7 | 261 | else |
ranaumarnaeem | 37:43d48521d4d7 | 262 | { |
ranaumarnaeem | 37:43d48521d4d7 | 263 | printf( "AQ-LSS: Modem initialized\n" ); |
ranaumarnaeem | 37:43d48521d4d7 | 264 | //ussd_send(); |
ranaumarnaeem | 37:43d48521d4d7 | 265 | return 1; |
ranaumarnaeem | 37:43d48521d4d7 | 266 | } |
ranaumarnaeem | 37:43d48521d4d7 | 267 | } |
ranaumarnaeem | 37:43d48521d4d7 | 268 | else |
ranaumarnaeem | 37:43d48521d4d7 | 269 | { |
ranaumarnaeem | 37:43d48521d4d7 | 270 | return 0; |
ranaumarnaeem | 37:43d48521d4d7 | 271 | } |
ranaumarnaeem | 37:43d48521d4d7 | 272 | } |
ranaumarnaeem | 34:d6ce8f961b8b | 273 | int recv(int socket_d, char *buf, int len) |
ranaumarnaeem | 34:d6ce8f961b8b | 274 | { |
ranaumarnaeem | 34:d6ce8f961b8b | 275 | int ret = gmdm->socketRecvFrom(ssocket, &ipp, &pport, buf, len); |
ranaumarnaeem | 34:d6ce8f961b8b | 276 | return ret; |
ranaumarnaeem | 34:d6ce8f961b8b | 277 | } |
ranaumarnaeem | 34:d6ce8f961b8b | 278 | |
ranaumarnaeem | 34:d6ce8f961b8b | 279 | int send(int socket_d, char *buf, int len) |
ranaumarnaeem | 34:d6ce8f961b8b | 280 | { |
ranaumarnaeem | 34:d6ce8f961b8b | 281 | ipp = gmdm->gethostbyname(host); |
ranaumarnaeem | 37:43d48521d4d7 | 282 | ipp = 0x97092263;//0x052753CE; |
ranaumarnaeem | 34:d6ce8f961b8b | 283 | int ret = gmdm->socketSendTo(ssocket, ipp, pport, (char*)buf, len); |
ranaumarnaeem | 34:d6ce8f961b8b | 284 | return ret; |
ranaumarnaeem | 34:d6ce8f961b8b | 285 | } |
ranaumarnaeem | 34:d6ce8f961b8b | 286 | |
ranaumarnaeem | 37:43d48521d4d7 | 287 | int readseconds(void) |
ranaumarnaeem | 34:d6ce8f961b8b | 288 | { |
ranaumarnaeem | 37:43d48521d4d7 | 289 | unsigned int seconds = us_ticker_read()/1000000; |
ranaumarnaeem | 37:43d48521d4d7 | 290 | return seconds; |
ranaumarnaeem | 34:d6ce8f961b8b | 291 | } |
ranaumarnaeem | 34:d6ce8f961b8b | 292 | |
ranaumarnaeem | 37:43d48521d4d7 | 293 | /* |
ranaumarnaeem | 34:d6ce8f961b8b | 294 | void ussd_send(void) |
ranaumarnaeem | 34:d6ce8f961b8b | 295 | { |
ranaumarnaeem | 34:d6ce8f961b8b | 296 | int ret; |
ranaumarnaeem | 34:d6ce8f961b8b | 297 | char buffer[512]; |
ranaumarnaeem | 34:d6ce8f961b8b | 298 | const char* ussd = "*222#";//"*100#"; |
ranaumarnaeem | 34:d6ce8f961b8b | 299 | printf("Ussd Send Command %s\r\n", ussd); |
ranaumarnaeem | 34:d6ce8f961b8b | 300 | ret = gmdm->ussdCommand(ussd, buffer); |
ranaumarnaeem | 34:d6ce8f961b8b | 301 | if (ret > 0) |
ranaumarnaeem | 34:d6ce8f961b8b | 302 | printf("Ussd Got Answer: \"%s\"\r\n", buffer); |
ranaumarnaeem | 34:d6ce8f961b8b | 303 | } |
ranaumarnaeem | 37:43d48521d4d7 | 304 | */ |
ranaumarnaeem | 37:43d48521d4d7 | 305 | |
ranaumarnaeem | 37:43d48521d4d7 | 306 | void responce_checker(void) |
ranaumarnaeem | 39:4f3f7463e55f | 307 | { |
ranaumarnaeem | 37:43d48521d4d7 | 308 | if(!strcmp((const char*)ucReturnCode,"RC 000")) |
ranaumarnaeem | 37:43d48521d4d7 | 309 | { |
ranaumarnaeem | 37:43d48521d4d7 | 310 | printf("Acknowledged RC 000\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 311 | } |
ranaumarnaeem | 37:43d48521d4d7 | 312 | else if(!strcmp((const char*)ucReturnCode,"RC 001")) |
ranaumarnaeem | 37:43d48521d4d7 | 313 | { |
ranaumarnaeem | 37:43d48521d4d7 | 314 | printf("Acknowledged with Data RC 001\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 315 | } |
ranaumarnaeem | 37:43d48521d4d7 | 316 | else if(!strcmp((const char*)ucReturnCode,"RC 002")) |
ranaumarnaeem | 37:43d48521d4d7 | 317 | { |
ranaumarnaeem | 37:43d48521d4d7 | 318 | printf("Start Sending Data RC 002\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 319 | bSendingDataFlag = true; |
ranaumarnaeem | 37:43d48521d4d7 | 320 | } |
ranaumarnaeem | 37:43d48521d4d7 | 321 | else if(!strcmp((const char*)ucReturnCode,"RC 003")) |
ranaumarnaeem | 37:43d48521d4d7 | 322 | { |
ranaumarnaeem | 37:43d48521d4d7 | 323 | printf("Stop Sending Data RC 003\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 324 | bSendingDataFlag = false; |
ranaumarnaeem | 37:43d48521d4d7 | 325 | } |
ranaumarnaeem | 37:43d48521d4d7 | 326 | else if(!strcmp((const char*)ucReturnCode,"RC 004")) |
ranaumarnaeem | 37:43d48521d4d7 | 327 | { |
ranaumarnaeem | 37:43d48521d4d7 | 328 | printf("Enable Sleep mode RC 004\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 329 | bSleepModeFlag = true; |
ranaumarnaeem | 37:43d48521d4d7 | 330 | } |
ranaumarnaeem | 37:43d48521d4d7 | 331 | else if(!strcmp((const char*)ucReturnCode,"RC 005")) |
ranaumarnaeem | 37:43d48521d4d7 | 332 | { |
ranaumarnaeem | 37:43d48521d4d7 | 333 | printf("Disable Sleep mode RC 005\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 334 | bSleepModeFlag = false; |
ranaumarnaeem | 37:43d48521d4d7 | 335 | } |
ranaumarnaeem | 37:43d48521d4d7 | 336 | else if(!strcmp((const char*)ucReturnCode,"RC 006")) |
ranaumarnaeem | 37:43d48521d4d7 | 337 | { |
ranaumarnaeem | 37:43d48521d4d7 | 338 | printf("Reboot Client Return Code 006\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 339 | NVIC_SystemReset(); |
ranaumarnaeem | 37:43d48521d4d7 | 340 | } |
ranaumarnaeem | 37:43d48521d4d7 | 341 | else if(!strcmp((const char*)ucReturnCode,"EC 000")) |
ranaumarnaeem | 37:43d48521d4d7 | 342 | { |
ranaumarnaeem | 37:43d48521d4d7 | 343 | printf("Error Code 000 Received Connection with web server failed\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 344 | } |
ranaumarnaeem | 37:43d48521d4d7 | 345 | else if(!strcmp((const char*)ucReturnCode,"EC 001")) |
ranaumarnaeem | 37:43d48521d4d7 | 346 | { |
ranaumarnaeem | 37:43d48521d4d7 | 347 | printf("Error Code 001 Received Node IMEI is not registered on Server\r\n"); |
ranaumarnaeem | 37:43d48521d4d7 | 348 | } |
ranaumarnaeem | 37:43d48521d4d7 | 349 | else if(!strcmp((const char*)ucReturnCode,"EC 002")) |
ranaumarnaeem | 37:43d48521d4d7 | 350 | { |
ranaumarnaeem | 37:43d48521d4d7 | 351 | printf("Error Code 002 Received Payload is corrupted\r\n"); |
ranaumarnaeem | 39:4f3f7463e55f | 352 | } |
ranaumarnaeem | 37:43d48521d4d7 | 353 | } |