Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed-rtos mbed VodafoneUSBModem_bleedingedge
main.cpp@16:9245c3a37491, 2012-09-26 (annotated)
- Committer:
- nherriot
- Date:
- Wed Sep 26 17:02:59 2012 +0000
- Revision:
- 16:9245c3a37491
- Parent:
- 15:262da03e3e20
- Child:
- 17:9b57d29e2eab
- Child:
- 20:27f878df6d14
debug switched on for teseting
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nherriot | 0:5136cdfaebd0 | 1 | /* net_sms_test.cpp */ |
nherriot | 0:5136cdfaebd0 | 2 | /* |
nherriot | 0:5136cdfaebd0 | 3 | Copyright (C) 2012 ARM Limited. |
nherriot | 0:5136cdfaebd0 | 4 | |
nherriot | 0:5136cdfaebd0 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of |
nherriot | 0:5136cdfaebd0 | 6 | this software and associated documentation files (the "Software"), to deal in |
nherriot | 0:5136cdfaebd0 | 7 | the Software without restriction, including without limitation the rights to |
nherriot | 0:5136cdfaebd0 | 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies |
nherriot | 0:5136cdfaebd0 | 9 | of the Software, and to permit persons to whom the Software is furnished to do |
nherriot | 0:5136cdfaebd0 | 10 | so, subject to the following conditions: |
nherriot | 0:5136cdfaebd0 | 11 | |
nherriot | 0:5136cdfaebd0 | 12 | The above copyright notice and this permission notice shall be included in all |
nherriot | 0:5136cdfaebd0 | 13 | copies or substantial portions of the Software. |
nherriot | 0:5136cdfaebd0 | 14 | |
nherriot | 0:5136cdfaebd0 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
nherriot | 0:5136cdfaebd0 | 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
nherriot | 0:5136cdfaebd0 | 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
nherriot | 0:5136cdfaebd0 | 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
nherriot | 0:5136cdfaebd0 | 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
nherriot | 0:5136cdfaebd0 | 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
nherriot | 0:5136cdfaebd0 | 21 | SOFTWARE. |
nherriot | 0:5136cdfaebd0 | 22 | */ |
nherriot | 0:5136cdfaebd0 | 23 | |
nherriot | 0:5136cdfaebd0 | 24 | #define __DEBUG__ 4 //Maximum verbosity |
nherriot | 0:5136cdfaebd0 | 25 | #ifndef __MODULE__ |
nherriot | 6:5a892c3d738e | 26 | // #define __MODULE__ "net_voda_k3770_test.cpp" |
nherriot | 0:5136cdfaebd0 | 27 | #endif |
nherriot | 0:5136cdfaebd0 | 28 | |
nherriot | 0:5136cdfaebd0 | 29 | #define MY_PHONE_NUMBER "+447717275049" |
nherriot | 0:5136cdfaebd0 | 30 | |
nherriot | 0:5136cdfaebd0 | 31 | #include "core/fwk.h" |
nherriot | 0:5136cdfaebd0 | 32 | #include "mbed.h" |
nherriot | 0:5136cdfaebd0 | 33 | #include "rtos.h" |
nherriot | 10:c8a6f2822068 | 34 | #include "VodafoneUSBModem.h" |
nherriot | 0:5136cdfaebd0 | 35 | |
nherriot | 2:bcc9256ecaab | 36 | #include <string> |
nherriot | 2:bcc9256ecaab | 37 | |
nherriot | 0:5136cdfaebd0 | 38 | extern "C" void HardFault_Handler() { |
nherriot | 0:5136cdfaebd0 | 39 | error("Hard Fault!\n"); |
nherriot | 0:5136cdfaebd0 | 40 | } |
nherriot | 0:5136cdfaebd0 | 41 | |
nherriot | 8:1b4e84f4c451 | 42 | DigitalOut led1(LED1); // LED 1 is used to show the state of the door. ON is door open, and OFF is door close. |
nherriot | 16:9245c3a37491 | 43 | DigitalOut led2(LED2); // LED 2 is used to indicate that the main process is still running. |
nherriot | 8:1b4e84f4c451 | 44 | DigitalOut led3(LED3); // LED 3 is use to indicate if the relay is being switched on to open the door |
nherriot | 7:316c2dac06a5 | 45 | DigitalOut led4(LED4); |
nherriot | 8:1b4e84f4c451 | 46 | DigitalOut doorContactorRelay(p5); // create a digital pin object to control the door contactor relay |
nherriot | 11:769f2b28b236 | 47 | DigitalIn doorProximitySwitch(p6); // create a digital pin object to sense door position proximity switch, this works in reverse |
nherriot | 8:1b4e84f4c451 | 48 | // the switch senses positive when the door is closed - need to be sure when it's closed! :-) |
nherriot | 8:1b4e84f4c451 | 49 | bool openTheDoor = false; // create a state variable which is set to indicate the mbed should open the door |
nherriot | 8:1b4e84f4c451 | 50 | // this variable will be used hold the latch open until it knows the door has been open. |
nherriot | 15:262da03e3e20 | 51 | bool detectRegState = true; // this boolean variable will force the while loop to detect reg state - if the connection manager |
nherriot | 15:262da03e3e20 | 52 | // is not registered it will stay in this 'detec' phase for ever. |
nherriot | 15:262da03e3e20 | 53 | |
nherriot | 10:c8a6f2822068 | 54 | int read_digital(void) { |
nherriot | 10:c8a6f2822068 | 55 | DigitalIn mydigital(p6); |
nherriot | 10:c8a6f2822068 | 56 | return(mydigital.read()); |
nherriot | 10:c8a6f2822068 | 57 | } |
nherriot | 0:5136cdfaebd0 | 58 | |
nherriot | 0:5136cdfaebd0 | 59 | void test(void const*) { |
nherriot | 10:c8a6f2822068 | 60 | VodafoneUSBModem connectionManager; // create a connection manager object |
nherriot | 0:5136cdfaebd0 | 61 | |
nherriot | 1:3c9d0c9dffa4 | 62 | DBG("Hello world and Vodafone K3770 test program!"); |
nherriot | 0:5136cdfaebd0 | 63 | |
nherriot | 15:262da03e3e20 | 64 | |
nherriot | 0:5136cdfaebd0 | 65 | |
nherriot | 10:c8a6f2822068 | 66 | char num[17]; // create a buffer to hold the telephone number in |
nherriot | 10:c8a6f2822068 | 67 | char msg[160]; // create a buffer to hold the text message in |
nherriot | 10:c8a6f2822068 | 68 | size_t count; |
nherriot | 15:262da03e3e20 | 69 | LinkMonitor::REGISTRATION_STATE regState = LinkMonitor::REGISTRATION_STATE_UNKNOWN; // an enum to hold the registration state of the connection manager |
nherriot | 15:262da03e3e20 | 70 | LinkMonitor::BEARER bearer = LinkMonitor::BEARER_UNKNOWN; // an enum to hold the type of bearer established by the connection manager |
nherriot | 15:262da03e3e20 | 71 | int rssi = -1000; // a signal strength indicator variable - set to a very default low value. |
nherriot | 15:262da03e3e20 | 72 | |
nherriot | 16:9245c3a37491 | 73 | |
nherriot | 16:9245c3a37491 | 74 | // LinkMonitor::REGISTRATION_STATE regState = LinkMonitor::REGISTRATION_STATE_HOME_NETWORK; |
nherriot | 16:9245c3a37491 | 75 | |
nherriot | 15:262da03e3e20 | 76 | // before we do anything we need to make sure we have a connection to a network. |
nherriot | 15:262da03e3e20 | 77 | // so let us check that first! |
nherriot | 15:262da03e3e20 | 78 | |
nherriot | 16:9245c3a37491 | 79 | |
nherriot | 15:262da03e3e20 | 80 | while(detectRegState) |
nherriot | 15:262da03e3e20 | 81 | { |
nherriot | 15:262da03e3e20 | 82 | if(connectionManager.getLinkState(&rssi, ®State, &bearer)==0) |
nherriot | 16:9245c3a37491 | 83 | //if (detectRegState ==1) |
nherriot | 15:262da03e3e20 | 84 | { |
nherriot | 15:262da03e3e20 | 85 | if(rssi==-1000) |
nherriot | 15:262da03e3e20 | 86 | { |
nherriot | 15:262da03e3e20 | 87 | DBG("Checking signal strength - RSSI: Error."); |
nherriot | 15:262da03e3e20 | 88 | } |
nherriot | 15:262da03e3e20 | 89 | else |
nherriot | 15:262da03e3e20 | 90 | { |
nherriot | 15:262da03e3e20 | 91 | DBG("Signal strength is: RSSI: %d",rssi); |
nherriot | 15:262da03e3e20 | 92 | } |
nherriot | 15:262da03e3e20 | 93 | |
nherriot | 15:262da03e3e20 | 94 | switch(regState) |
nherriot | 15:262da03e3e20 | 95 | { |
nherriot | 15:262da03e3e20 | 96 | case LinkMonitor::REGISTRATION_STATE_UNKNOWN: |
nherriot | 15:262da03e3e20 | 97 | DBG("regState: UNKNOWN. Failing."); |
nherriot | 15:262da03e3e20 | 98 | break; |
nherriot | 15:262da03e3e20 | 99 | case LinkMonitor::REGISTRATION_STATE_REGISTERING: |
nherriot | 15:262da03e3e20 | 100 | DBG("regState: REGISTERING"); |
nherriot | 15:262da03e3e20 | 101 | break; |
nherriot | 15:262da03e3e20 | 102 | case LinkMonitor::REGISTRATION_STATE_DENIED: |
nherriot | 15:262da03e3e20 | 103 | DBG("regState: DENIED"); |
nherriot | 15:262da03e3e20 | 104 | break; |
nherriot | 15:262da03e3e20 | 105 | case LinkMonitor::REGISTRATION_STATE_NO_SIGNAL: |
nherriot | 15:262da03e3e20 | 106 | DBG("regState: NO SIGNAL"); |
nherriot | 15:262da03e3e20 | 107 | break; |
nherriot | 15:262da03e3e20 | 108 | case LinkMonitor::REGISTRATION_STATE_HOME_NETWORK: |
nherriot | 15:262da03e3e20 | 109 | detectRegState = false; |
nherriot | 15:262da03e3e20 | 110 | DBG("regState: HOME NETWORK"); |
nherriot | 15:262da03e3e20 | 111 | break; |
nherriot | 15:262da03e3e20 | 112 | case LinkMonitor::REGISTRATION_STATE_ROAMING: |
nherriot | 15:262da03e3e20 | 113 | detectRegState = false; |
nherriot | 15:262da03e3e20 | 114 | DBG("regState: ROAMING"); |
nherriot | 15:262da03e3e20 | 115 | break; |
nherriot | 15:262da03e3e20 | 116 | default: |
nherriot | 15:262da03e3e20 | 117 | DBG("regState: ERROR. Failing."); |
nherriot | 15:262da03e3e20 | 118 | break; |
nherriot | 15:262da03e3e20 | 119 | } |
nherriot | 15:262da03e3e20 | 120 | } |
nherriot | 16:9245c3a37491 | 121 | Thread::wait(500); |
nherriot | 15:262da03e3e20 | 122 | } |
nherriot | 15:262da03e3e20 | 123 | |
nherriot | 15:262da03e3e20 | 124 | |
nherriot | 15:262da03e3e20 | 125 | |
nherriot | 15:262da03e3e20 | 126 | |
nherriot | 15:262da03e3e20 | 127 | |
nherriot | 15:262da03e3e20 | 128 | connectionManager.sendSM(MY_PHONE_NUMBER, "Hello from mbed door controller:)"); |
nherriot | 15:262da03e3e20 | 129 | |
nherriot | 15:262da03e3e20 | 130 | |
nherriot | 10:c8a6f2822068 | 131 | |
nherriot | 0:5136cdfaebd0 | 132 | while(true) |
nherriot | 0:5136cdfaebd0 | 133 | { |
nherriot | 8:1b4e84f4c451 | 134 | |
nherriot | 8:1b4e84f4c451 | 135 | // if this state variable has been set I need to keep the doorContactor on until the door is open |
nherriot | 15:262da03e3e20 | 136 | if ((openTheDoor) && (read_digital() == 0)) |
nherriot | 3:0a8eebcb0acf | 137 | { |
nherriot | 15:262da03e3e20 | 138 | DBG("The door is open now and I'm switching off the relay and reseting the state variable"); |
nherriot | 8:1b4e84f4c451 | 139 | doorContactorRelay = 0; // door must be open now so switch relay off. |
nherriot | 8:1b4e84f4c451 | 140 | openTheDoor = false; // the door is open now so set it to false. |
nherriot | 8:1b4e84f4c451 | 141 | led3 = 0; // switch the LED light off to indicate I'm switching the relay off |
nherriot | 8:1b4e84f4c451 | 142 | |
nherriot | 8:1b4e84f4c451 | 143 | } |
nherriot | 3:0a8eebcb0acf | 144 | |
nherriot | 8:1b4e84f4c451 | 145 | // check the state of the door and switch the LED light to 'ON' for door open and 'OFF' for door closed. |
nherriot | 10:c8a6f2822068 | 146 | //if (doorProximitySwitch.read() == 0) |
nherriot | 10:c8a6f2822068 | 147 | if (read_digital() == 0) |
nherriot | 8:1b4e84f4c451 | 148 | { |
nherriot | 15:262da03e3e20 | 149 | // DBG("The door proximity switch is: %d so I think it's open", doorProximitySwitch.read() ); |
nherriot | 8:1b4e84f4c451 | 150 | led1 = 1; |
nherriot | 3:0a8eebcb0acf | 151 | } |
nherriot | 8:1b4e84f4c451 | 152 | else |
nherriot | 8:1b4e84f4c451 | 153 | { |
nherriot | 15:262da03e3e20 | 154 | // DBG("The door proximity switch is: %d so I think it's closed", doorProximitySwitch.read() ); |
nherriot | 8:1b4e84f4c451 | 155 | led1 = 0; |
nherriot | 8:1b4e84f4c451 | 156 | } |
nherriot | 8:1b4e84f4c451 | 157 | |
nherriot | 8:1b4e84f4c451 | 158 | |
nherriot | 8:1b4e84f4c451 | 159 | |
nherriot | 7:316c2dac06a5 | 160 | int ret = connectionManager.getSMCount(&count); // check to see if there is an incoming SMS message |
nherriot | 0:5136cdfaebd0 | 161 | if(ret) |
nherriot | 0:5136cdfaebd0 | 162 | { |
nherriot | 0:5136cdfaebd0 | 163 | WARN("getSMCount returned %d", ret); |
nherriot | 10:c8a6f2822068 | 164 | Thread::wait(125); |
nherriot | 0:5136cdfaebd0 | 165 | continue; |
nherriot | 0:5136cdfaebd0 | 166 | } |
nherriot | 10:c8a6f2822068 | 167 | |
nherriot | 16:9245c3a37491 | 168 | DBG("The SMS count is now at: %d for this modem", count); |
nherriot | 7:316c2dac06a5 | 169 | if( count > 0) // if there are messages in the mailbox start pulling them off the queue |
nherriot | 0:5136cdfaebd0 | 170 | { |
nherriot | 0:5136cdfaebd0 | 171 | DBG("%d SMS to read", count); |
nherriot | 10:c8a6f2822068 | 172 | ret = connectionManager.getSM(num, msg, 160); |
nherriot | 8:1b4e84f4c451 | 173 | |
nherriot | 0:5136cdfaebd0 | 174 | if(ret) |
nherriot | 0:5136cdfaebd0 | 175 | { |
nherriot | 0:5136cdfaebd0 | 176 | WARN("getSM returned %d", ret); |
nherriot | 10:c8a6f2822068 | 177 | Thread::wait(125); |
nherriot | 0:5136cdfaebd0 | 178 | continue; |
nherriot | 0:5136cdfaebd0 | 179 | } |
nherriot | 0:5136cdfaebd0 | 180 | |
nherriot | 6:5a892c3d738e | 181 | DBG("The message is from number: %s and the message is: \"%s\"", num, msg); |
nherriot | 6:5a892c3d738e | 182 | |
nherriot | 15:262da03e3e20 | 183 | // if the SMS is from your own number, ignore it! |
nherriot | 15:262da03e3e20 | 184 | if(strcmp(num,"+447785666088")==0) |
nherriot | 15:262da03e3e20 | 185 | { |
nherriot | 15:262da03e3e20 | 186 | DBG("The message appears to be from my MSISDN number: %s, I'll do nothing.", num); |
nherriot | 15:262da03e3e20 | 187 | continue; |
nherriot | 15:262da03e3e20 | 188 | } |
nherriot | 15:262da03e3e20 | 189 | |
nherriot | 15:262da03e3e20 | 190 | |
nherriot | 15:262da03e3e20 | 191 | |
nherriot | 15:262da03e3e20 | 192 | if ((strcmp (msg, "open") ==0)|| (strcmp(num,"TrackaPhone")==0)) |
nherriot | 8:1b4e84f4c451 | 193 | { |
nherriot | 2:bcc9256ecaab | 194 | DBG("The SMS message indicates I should open the door"); |
nherriot | 7:316c2dac06a5 | 195 | |
nherriot | 7:316c2dac06a5 | 196 | // check the door is not already open if it is do nothing and send a warning back to the sender |
nherriot | 7:316c2dac06a5 | 197 | // for this door the switch 'true' then its closed - we have to have an active signal to show it's securely closed |
nherriot | 8:1b4e84f4c451 | 198 | |
nherriot | 15:262da03e3e20 | 199 | if (read_digital() == 0 ) |
nherriot | 7:316c2dac06a5 | 200 | { |
nherriot | 7:316c2dac06a5 | 201 | DBG("The door is already open - so I'll do nothing"); |
nherriot | 8:1b4e84f4c451 | 202 | connectionManager.sendSM(num, " WARNING - The door is already open sir! "); |
nherriot | 7:316c2dac06a5 | 203 | } |
nherriot | 7:316c2dac06a5 | 204 | else |
nherriot | 7:316c2dac06a5 | 205 | { |
nherriot | 7:316c2dac06a5 | 206 | doorContactorRelay = 1; |
nherriot | 8:1b4e84f4c451 | 207 | openTheDoor = true; // set the state vairable to let the door contoller know it needs to open the door |
nherriot | 7:316c2dac06a5 | 208 | led3 = 1; |
nherriot | 7:316c2dac06a5 | 209 | DBG("The relay has been activated to open the door"); |
nherriot | 8:1b4e84f4c451 | 210 | connectionManager.sendSM(num, " Door open sir... Welcome home! " ); |
nherriot | 8:1b4e84f4c451 | 211 | } |
nherriot | 8:1b4e84f4c451 | 212 | } |
nherriot | 8:1b4e84f4c451 | 213 | else |
nherriot | 8:1b4e84f4c451 | 214 | { |
nherriot | 2:bcc9256ecaab | 215 | DBG("The SMS message is not recognized"); |
nherriot | 7:316c2dac06a5 | 216 | connectionManager.sendSM(num, " Wrong password sir... Try 'open' and I'll open! ;-) "); |
nherriot | 2:bcc9256ecaab | 217 | } |
nherriot | 2:bcc9256ecaab | 218 | |
nherriot | 2:bcc9256ecaab | 219 | |
nherriot | 2:bcc9256ecaab | 220 | |
nherriot | 0:5136cdfaebd0 | 221 | } |
nherriot | 6:5a892c3d738e | 222 | Thread::wait(500); |
nherriot | 0:5136cdfaebd0 | 223 | } |
nherriot | 0:5136cdfaebd0 | 224 | |
nherriot | 0:5136cdfaebd0 | 225 | } |
nherriot | 0:5136cdfaebd0 | 226 | |
nherriot | 0:5136cdfaebd0 | 227 | void keepAlive(void const*) { |
nherriot | 0:5136cdfaebd0 | 228 | while(1) |
nherriot | 0:5136cdfaebd0 | 229 | { |
nherriot | 8:1b4e84f4c451 | 230 | led2=!led2; |
nherriot | 0:5136cdfaebd0 | 231 | Thread::wait(500); |
nherriot | 0:5136cdfaebd0 | 232 | } |
nherriot | 0:5136cdfaebd0 | 233 | } |
nherriot | 0:5136cdfaebd0 | 234 | |
nherriot | 0:5136cdfaebd0 | 235 | void tick() |
nherriot | 0:5136cdfaebd0 | 236 | { |
nherriot | 0:5136cdfaebd0 | 237 | led4=!led4; |
nherriot | 0:5136cdfaebd0 | 238 | } |
nherriot | 0:5136cdfaebd0 | 239 | |
nherriot | 0:5136cdfaebd0 | 240 | int main() { |
nherriot | 16:9245c3a37491 | 241 | //Ticker t; |
nherriot | 16:9245c3a37491 | 242 | //t.attach(tick,1); |
nherriot | 0:5136cdfaebd0 | 243 | DBG_INIT(); |
nherriot | 12:e622e146b3cd | 244 | DBG_SET_SPEED(115200); |
nherriot | 0:5136cdfaebd0 | 245 | |
nherriot | 12:e622e146b3cd | 246 | Thread testTask(test, NULL, osPriorityNormal, 1024*5); |
nherriot | 16:9245c3a37491 | 247 | keepAlive(NULL); |
nherriot | 0:5136cdfaebd0 | 248 | |
nherriot | 0:5136cdfaebd0 | 249 | |
nherriot | 0:5136cdfaebd0 | 250 | return 0; |
nherriot | 0:5136cdfaebd0 | 251 | } |