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.
Fork of MTS-Cellular by
Cellular/CellularFactory.cpp@41:8b9b5098696f, 2014-07-30 (annotated)
- Committer:
- Vanger
- Date:
- Wed Jul 30 20:22:23 2014 +0000
- Revision:
- 41:8b9b5098696f
- Parent:
- 30:1326b623919a
- Child:
- 51:ffc556ba33f7
Rewrote sendCommand() function in Cellular.cpp, and fixed failure to find radio type error in CellularFactory.cpp caused by unsolicited response #STN
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Mike Fiore |
11:4e428f689069 | 1 | #include "mbed.h" |
| Mike Fiore |
11:4e428f689069 | 2 | #include "CellularFactory.h" |
| Mike Fiore |
11:4e428f689069 | 3 | #include "MTSLog.h" |
| Mike Fiore |
11:4e428f689069 | 4 | #include <string> |
| Mike Fiore |
11:4e428f689069 | 5 | |
| Mike Fiore |
11:4e428f689069 | 6 | using namespace mts; |
| Mike Fiore |
11:4e428f689069 | 7 | |
| Mike Fiore |
11:4e428f689069 | 8 | Cellular* CellularFactory::create(MTSBufferedIO* io) { |
| Mike Fiore |
11:4e428f689069 | 9 | bool uip; |
| Mike Fiore |
11:4e428f689069 | 10 | std::string model; |
| Mike Fiore |
11:4e428f689069 | 11 | std::string reply; |
| Mike Fiore |
11:4e428f689069 | 12 | Cellular::Radio type; |
| Mike Fiore |
11:4e428f689069 | 13 | Cellular* cell; |
| Vanger | 30:1326b623919a | 14 | |
| Mike Fiore |
11:4e428f689069 | 15 | /* wait for radio to get into a good state */ |
| Mike Fiore |
11:4e428f689069 | 16 | while (true) { |
| Mike Fiore |
11:4e428f689069 | 17 | if (sendCommand(io, "AT", 1000).find("OK") != string::npos) { |
| mfiore | 14:614952fb3af3 | 18 | logTrace("radio replied"); |
| Mike Fiore |
11:4e428f689069 | 19 | break; |
| Mike Fiore |
11:4e428f689069 | 20 | } else { |
| mfiore | 14:614952fb3af3 | 21 | logTrace("waiting on radio..."); |
| Mike Fiore |
11:4e428f689069 | 22 | } |
| Mike Fiore |
11:4e428f689069 | 23 | wait(1); |
| Mike Fiore |
11:4e428f689069 | 24 | } |
| Vanger | 30:1326b623919a | 25 | |
| Mike Fiore |
11:4e428f689069 | 26 | /* "ATI4" gets us the model (HE910, DE910, etc) */ |
| mfiore | 16:1bc3e44d4746 | 27 | for (int i = 0; i < 5; i++) { |
| Vanger | 41:8b9b5098696f | 28 | model = sendCommand(io, "ATI4", 3000); |
| Vanger | 30:1326b623919a | 29 | if (model.find("error") == string::npos && model.find("ERROR") == string::npos && !model.empty()) { |
| mfiore | 16:1bc3e44d4746 | 30 | /* didn't get an error - keep going */ |
| Vanger | 41:8b9b5098696f | 31 | if(model.find("#STN") != string::npos) { |
| Vanger | 41:8b9b5098696f | 32 | //If response found is from unsolicited response #STN: from the radio, |
| Vanger | 41:8b9b5098696f | 33 | //then we got a "corrupted" response, and to try again. |
| Vanger | 41:8b9b5098696f | 34 | continue; |
| Vanger | 41:8b9b5098696f | 35 | } |
| Vanger | 41:8b9b5098696f | 36 | break; |
| mfiore | 16:1bc3e44d4746 | 37 | } |
| mfiore | 16:1bc3e44d4746 | 38 | |
| mfiore | 16:1bc3e44d4746 | 39 | wait(1); |
| mfiore | 16:1bc3e44d4746 | 40 | } |
| Mike Fiore |
11:4e428f689069 | 41 | |
| Vanger | 26:2b769ed8de4f | 42 | /* AT#VVERSION is a UIP specific AT command |
| Mike Fiore |
11:4e428f689069 | 43 | * if we get an error response, we're not using a UIP board */ |
| Mike Fiore |
11:4e428f689069 | 44 | reply = sendCommand(io, "AT#VVERSION", 2000); |
| Vanger | 27:ec44d5a9544f | 45 | if ((reply.find("ERROR") != string::npos) || (reply.find("error") != string::npos)) { |
| Mike Fiore |
11:4e428f689069 | 46 | uip = false; |
| Mike Fiore |
11:4e428f689069 | 47 | } else { |
| Mike Fiore |
11:4e428f689069 | 48 | uip = true; |
| Mike Fiore |
11:4e428f689069 | 49 | } |
| Vanger | 26:2b769ed8de4f | 50 | |
| Mike Fiore |
11:4e428f689069 | 51 | |
| Mike Fiore |
11:4e428f689069 | 52 | if (uip && model.find("HE910") != string::npos) { |
| Mike Fiore |
11:4e428f689069 | 53 | type = Cellular::MTSMC_H5_IP; |
| mfiore | 16:1bc3e44d4746 | 54 | logDebug("radio model: HE910"); |
| Mike Fiore |
11:4e428f689069 | 55 | cell = new UIP(type); |
| Mike Fiore |
11:4e428f689069 | 56 | } else if (uip && model.find("DE910") != string::npos) { |
| Mike Fiore |
11:4e428f689069 | 57 | type = Cellular::MTSMC_EV3_IP; |
| mfiore | 16:1bc3e44d4746 | 58 | logDebug("radio model: DE910"); |
| Mike Fiore |
11:4e428f689069 | 59 | cell = new UIP(type); |
| Mike Fiore |
11:4e428f689069 | 60 | } else if (uip && model.find("CE910") != string::npos) { |
| Mike Fiore |
11:4e428f689069 | 61 | type = Cellular::MTSMC_C2_IP; |
| mfiore | 16:1bc3e44d4746 | 62 | logDebug("radio model: CE910"); |
| Mike Fiore |
11:4e428f689069 | 63 | cell = new UIP(type); |
| Vanger | 26:2b769ed8de4f | 64 | |
| Mike Fiore |
11:4e428f689069 | 65 | } else if (model.find("HE910") != string::npos) { |
| Mike Fiore |
11:4e428f689069 | 66 | type = Cellular::MTSMC_H5; |
| mfiore | 16:1bc3e44d4746 | 67 | logDebug("radio model: HE910"); |
| Mike Fiore |
11:4e428f689069 | 68 | cell = new EasyIP(type); |
| Mike Fiore |
11:4e428f689069 | 69 | } else if (model.find("DE910") != string::npos) { |
| Mike Fiore |
11:4e428f689069 | 70 | type = Cellular::MTSMC_EV3; |
| mfiore | 16:1bc3e44d4746 | 71 | logDebug("radio model: DE910"); |
| Mike Fiore |
11:4e428f689069 | 72 | cell = new EasyIP(type); |
| Mike Fiore |
11:4e428f689069 | 73 | } else if (model.find("GE910") != string::npos) { |
| Mike Fiore |
11:4e428f689069 | 74 | type = Cellular::MTSMC_G3; |
| mfiore | 16:1bc3e44d4746 | 75 | logDebug("radio model: GE910"); |
| Mike Fiore |
11:4e428f689069 | 76 | cell = new EasyIP(type); |
| Mike Fiore |
11:4e428f689069 | 77 | } else if (model.find("CE910") != string::npos) { |
| Mike Fiore |
11:4e428f689069 | 78 | type = Cellular::MTSMC_C2; |
| mfiore | 16:1bc3e44d4746 | 79 | logDebug("radio model: CE910"); |
| Mike Fiore |
11:4e428f689069 | 80 | cell = new EasyIP(type); |
| Vanger | 26:2b769ed8de4f | 81 | |
| Mike Fiore |
11:4e428f689069 | 82 | } else { |
| Mike Fiore |
11:4e428f689069 | 83 | logError("cannot continue - could not determine radio type"); |
| Mike Fiore |
11:4e428f689069 | 84 | return NULL; |
| Mike Fiore |
11:4e428f689069 | 85 | } |
| Mike Fiore |
11:4e428f689069 | 86 | |
| Mike Fiore |
11:4e428f689069 | 87 | if (! cell->init(io)) { |
| Mike Fiore |
11:4e428f689069 | 88 | logError("cellular initialization failed"); |
| Mike Fiore |
11:4e428f689069 | 89 | return NULL; |
| Mike Fiore |
11:4e428f689069 | 90 | } |
| Mike Fiore |
11:4e428f689069 | 91 | |
| Mike Fiore |
11:4e428f689069 | 92 | return cell; |
| Mike Fiore |
11:4e428f689069 | 93 | } |
