Cellular library for MTS Socket Modem Arduino Shield devices from Multi-Tech Systems
Dependents: mtsas mtsas mtsas mtsas
Cellular/CellularFactory.cpp@82:5b33b670adb7, 2018-02-19 (annotated)
- Committer:
- Leon Lindenfelser
- Date:
- Mon Feb 19 14:25:58 2018 -0600
- Revision:
- 82:5b33b670adb7
- Parent:
- 81:2e12915f892e
Add support for MTQ-LAT3(LE910-NA1) adn MTQ-LVW3(LE910-sv1)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Leon Lindenfelser |
82:5b33b670adb7 | 1 | #include "mbed.h" |
Leon Lindenfelser |
82:5b33b670adb7 | 2 | #include "CellularFactory.h" |
Leon Lindenfelser |
82:5b33b670adb7 | 3 | #include "MTSLog.h" |
Leon Lindenfelser |
82:5b33b670adb7 | 4 | #include <string> |
Leon Lindenfelser |
82:5b33b670adb7 | 5 | |
Leon Lindenfelser |
82:5b33b670adb7 | 6 | using namespace mts; |
Leon Lindenfelser |
82:5b33b670adb7 | 7 | |
Leon Lindenfelser |
82:5b33b670adb7 | 8 | Cellular* CellularFactory::create(MTSBufferedIO* io) { |
Leon Lindenfelser |
82:5b33b670adb7 | 9 | bool uip; |
Leon Lindenfelser |
82:5b33b670adb7 | 10 | std::string model; |
Leon Lindenfelser |
82:5b33b670adb7 | 11 | std::string reply; |
Leon Lindenfelser |
82:5b33b670adb7 | 12 | Cellular::Radio type = Cellular::NA; |
Leon Lindenfelser |
82:5b33b670adb7 | 13 | Cellular* cell; |
Leon Lindenfelser |
82:5b33b670adb7 | 14 | |
Leon Lindenfelser |
82:5b33b670adb7 | 15 | /* wait for radio to get into a good state */ |
Leon Lindenfelser |
82:5b33b670adb7 | 16 | while (true) { |
Leon Lindenfelser |
82:5b33b670adb7 | 17 | if (sendCommand(io, "AT", 1000).find("OK") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 18 | logTrace("radio replied"); |
Leon Lindenfelser |
82:5b33b670adb7 | 19 | break; |
Leon Lindenfelser |
82:5b33b670adb7 | 20 | } else { |
Leon Lindenfelser |
82:5b33b670adb7 | 21 | logTrace("waiting on radio..."); |
Leon Lindenfelser |
82:5b33b670adb7 | 22 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 23 | wait(1); |
Leon Lindenfelser |
82:5b33b670adb7 | 24 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 25 | |
Leon Lindenfelser |
82:5b33b670adb7 | 26 | while (true) { |
Leon Lindenfelser |
82:5b33b670adb7 | 27 | /* AT#VVERSION is a UIP specific AT command |
Leon Lindenfelser |
82:5b33b670adb7 | 28 | * if we get an error response, we're not using a UIP board */ |
Leon Lindenfelser |
82:5b33b670adb7 | 29 | reply = sendCommand(io, "AT#VVERSION", 2000); |
Leon Lindenfelser |
82:5b33b670adb7 | 30 | if ((reply.find("ERROR") != string::npos) || (reply.find("error") != string::npos)) { |
Leon Lindenfelser |
82:5b33b670adb7 | 31 | uip = false; |
Leon Lindenfelser |
82:5b33b670adb7 | 32 | break; |
Leon Lindenfelser |
82:5b33b670adb7 | 33 | } else if (reply.find("VVERSION:") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 34 | uip = true; |
Leon Lindenfelser |
82:5b33b670adb7 | 35 | break; |
Leon Lindenfelser |
82:5b33b670adb7 | 36 | } else { |
Leon Lindenfelser |
82:5b33b670adb7 | 37 | logTrace("Checking for UIP chip"); |
Leon Lindenfelser |
82:5b33b670adb7 | 38 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 39 | wait(1); |
Leon Lindenfelser |
82:5b33b670adb7 | 40 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 41 | |
Leon Lindenfelser |
82:5b33b670adb7 | 42 | /* "ATI4" gets us the model (HE910, DE910, etc) */ |
Leon Lindenfelser |
82:5b33b670adb7 | 43 | while (true) { |
Leon Lindenfelser |
82:5b33b670adb7 | 44 | string mNumber; |
Leon Lindenfelser |
82:5b33b670adb7 | 45 | model = sendCommand(io, "ATI4", 3000); |
Leon Lindenfelser |
82:5b33b670adb7 | 46 | if (uip) { |
Leon Lindenfelser |
82:5b33b670adb7 | 47 | if (model.find("HE910") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 48 | type = Cellular::MTSMC_H5_IP; |
Leon Lindenfelser |
82:5b33b670adb7 | 49 | mNumber = "HE910"; |
Leon Lindenfelser |
82:5b33b670adb7 | 50 | } else if (model.find("DE910") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 51 | type = Cellular::MTSMC_EV3_IP; |
Leon Lindenfelser |
82:5b33b670adb7 | 52 | mNumber = "DE910"; |
Leon Lindenfelser |
82:5b33b670adb7 | 53 | } else if (model.find("CE910") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 54 | type = Cellular::MTSMC_C2_IP; |
Leon Lindenfelser |
82:5b33b670adb7 | 55 | mNumber = "CE910"; |
Leon Lindenfelser |
82:5b33b670adb7 | 56 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 57 | if (type != Cellular::NA) { |
Leon Lindenfelser |
82:5b33b670adb7 | 58 | cell = new UIP(type); |
Leon Lindenfelser |
82:5b33b670adb7 | 59 | logDebug("UIP radio model: %s", mNumber.c_str()); |
Leon Lindenfelser |
82:5b33b670adb7 | 60 | break; |
Leon Lindenfelser |
82:5b33b670adb7 | 61 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 62 | } else { |
Leon Lindenfelser |
82:5b33b670adb7 | 63 | if (model.find("HE910") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 64 | type = Cellular::MTSMC_H5; |
Leon Lindenfelser |
82:5b33b670adb7 | 65 | mNumber = "HE910"; |
Leon Lindenfelser |
82:5b33b670adb7 | 66 | } else if (model.find("DE910") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 67 | type = Cellular::MTSMC_EV3; |
Leon Lindenfelser |
82:5b33b670adb7 | 68 | mNumber = "DE910"; |
Leon Lindenfelser |
82:5b33b670adb7 | 69 | } else if (model.find("CE910") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 70 | type = Cellular::MTSMC_C2; |
Leon Lindenfelser |
82:5b33b670adb7 | 71 | mNumber = "CE910"; |
Leon Lindenfelser |
82:5b33b670adb7 | 72 | } else if (model.find("GE910") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 73 | type = Cellular::MTSMC_G3; |
Leon Lindenfelser |
82:5b33b670adb7 | 74 | mNumber = "GE910"; |
Leon Lindenfelser |
82:5b33b670adb7 | 75 | } else if (model.find("LE910-NAG") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 76 | type = Cellular::MTSMC_LAT1; |
Leon Lindenfelser |
82:5b33b670adb7 | 77 | mNumber = "LE910-NAG"; |
Leon Lindenfelser |
82:5b33b670adb7 | 78 | } else if (model.find("LE910-SVG") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 79 | type = Cellular::MTSMC_LVW2; |
Leon Lindenfelser |
82:5b33b670adb7 | 80 | mNumber = "LE910-SVG"; |
Leon Lindenfelser |
82:5b33b670adb7 | 81 | } else if (model.find("LE910-EUG") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 82 | type = Cellular::MTSMC_LEU1; |
Leon Lindenfelser |
82:5b33b670adb7 | 83 | mNumber = "LE910-EUG"; |
Leon Lindenfelser |
82:5b33b670adb7 | 84 | } else if (model.find("LE910-NA1") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 85 | type = Cellular::MTQ_LAT3; |
Leon Lindenfelser |
82:5b33b670adb7 | 86 | mNumber = "LE910-NA1"; |
Leon Lindenfelser |
82:5b33b670adb7 | 87 | } else if (model.find("LE910-SV1") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 88 | type = Cellular::MTQ_LVW3; |
Leon Lindenfelser |
82:5b33b670adb7 | 89 | mNumber = "LE910-SV1"; |
Leon Lindenfelser |
82:5b33b670adb7 | 90 | } else if (model.find("ME910C1-NA") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 91 | type = Cellular::MTQ_MAT1; |
Leon Lindenfelser |
82:5b33b670adb7 | 92 | mNumber = "ME910C1-NA"; |
Leon Lindenfelser |
82:5b33b670adb7 | 93 | } else if (model.find("ME910C1-NV") != string::npos) { |
Leon Lindenfelser |
82:5b33b670adb7 | 94 | type = Cellular::MTQ_MVW1; |
Leon Lindenfelser |
82:5b33b670adb7 | 95 | mNumber = "ME910C1-NV"; |
Leon Lindenfelser |
82:5b33b670adb7 | 96 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 97 | if (type != Cellular::NA) { |
Leon Lindenfelser |
82:5b33b670adb7 | 98 | cell = new EasyIP(type); |
Leon Lindenfelser |
82:5b33b670adb7 | 99 | logDebug("EasyIP radio model: %s", mNumber.c_str()); |
Leon Lindenfelser |
82:5b33b670adb7 | 100 | break; |
Leon Lindenfelser |
82:5b33b670adb7 | 101 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 102 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 103 | logTrace("Determining radio type"); |
Leon Lindenfelser |
82:5b33b670adb7 | 104 | wait(1); |
Leon Lindenfelser |
82:5b33b670adb7 | 105 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 106 | |
Leon Lindenfelser |
82:5b33b670adb7 | 107 | if (! cell->init(io)) { |
Leon Lindenfelser |
82:5b33b670adb7 | 108 | logError("cellular initialization failed"); |
Leon Lindenfelser |
82:5b33b670adb7 | 109 | return NULL; |
Leon Lindenfelser |
82:5b33b670adb7 | 110 | } |
Leon Lindenfelser |
82:5b33b670adb7 | 111 | |
Leon Lindenfelser |
82:5b33b670adb7 | 112 | return cell; |
Leon Lindenfelser |
82:5b33b670adb7 | 113 | } |