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: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
Revision 52:8f1370084268, committed 2014-08-13
- Comitter:
- vwochnik
- Date:
- Wed Aug 13 10:55:11 2014 +0000
- Parent:
- 51:e193db6ac7cb
- Child:
- 54:7dcc8898d87d
- Commit message:
- minor refactoring and improvement
Changed in this revision
--- a/DeviceBootstrap.cpp Tue Jul 29 17:53:43 2014 +0000
+++ b/DeviceBootstrap.cpp Wed Aug 13 10:55:11 2014 +0000
@@ -8,9 +8,10 @@
#include "IntegerValue.h"
#include "ParsedRecord.h"
-DeviceBootstrap::DeviceBootstrap(SmartRest& client, MDMSerial& mdm, DeviceInfo& deviceInfo) :
+DeviceBootstrap::DeviceBootstrap(SmartRest& client, MDMSerial& mdm, DeviceIO& io, DeviceInfo& deviceInfo) :
_client(client),
_mdm(mdm),
+ _io(io),
_deviceInfo(deviceInfo)
{
*_username = *_password = '\0';
@@ -26,7 +27,6 @@
puts("Warning: Could not write credentials to file!");
}
- printf("Credentials: %s : %s\n", _username, _password);
if (_client.setAuthorization(_username, _password) != SMARTREST_SUCCESS)
return false;
return true;
@@ -65,16 +65,13 @@
bool DeviceBootstrap::obtainFromPlatform()
{
uint8_t ret;
- const char *id;
-
- id = _deviceInfo.imei();
- printf("Starting device bootstrap with '%s'\n", id);
+ uint8_t tries;
ComposedRecord record;
ParsedRecord recvdRecord;
IntegerValue msgId(61);
- CharValue identifier(id);
+ CharValue identifier(_deviceInfo.imei());
if ((!record.add(msgId)) || (!record.add(identifier)))
return false;
@@ -82,16 +79,17 @@
if (_client.setAuthorization(DEVICE_BOOTSTRAP_USERNAME, DEVICE_BOOTSTRAP_PASSWORD) != SMARTREST_SUCCESS)
return false;
- while (true) {
+ _io.lcdPrint("BOOTSTRAP", _deviceInfo.imei());
+
+ tries = 255;
+ do {
if (_client.send(record, "") != SMARTREST_SUCCESS) {
- puts("Connection unsuccessful. Retrying.");
_client.stop();
Thread::wait(2000);
continue;
}
if (_client.receive(recvdRecord) != SMARTREST_SUCCESS) {
- puts("Receiving failure.");
_client.stop();
Thread::wait(2000);
continue;
@@ -103,14 +101,12 @@
if ((recvdRecord.values() < 1) ||
(recvdRecord.value(0).integerValue() == 50)) {
- puts("No credentials available yet. Retrying.");
Thread::wait(2000);
continue;
}
if ((recvdRecord.value(0).integerValue() != 70) ||
(recvdRecord.values() != 6)) {
- puts("Bad credentials received.");
return false;
}
@@ -118,8 +114,12 @@
recvdRecord.value(4).characterValue(),
recvdRecord.value(5).characterValue());
+ _io.lcdPrint("BOOTSTRAP SUCCESSFUL", _username, _password);
+
return true;
- }
+ } while (--tries > 0);
+
+ _io.lcdPrint("BOOTSTRAP FAILURE");
return false;
}
--- a/DeviceBootstrap.h Tue Jul 29 17:53:43 2014 +0000
+++ b/DeviceBootstrap.h Wed Aug 13 10:55:11 2014 +0000
@@ -3,6 +3,7 @@
#include <stddef.h>
#include "MDM.h"
+#include "DeviceIO.h"
#include "SmartRest.h"
#include "DeviceInfo.h"
@@ -19,7 +20,7 @@
class DeviceBootstrap
{
public:
- DeviceBootstrap(SmartRest&, MDMSerial&, DeviceInfo&);
+ DeviceBootstrap(SmartRest&, MDMSerial&, DeviceIO&, DeviceInfo&);
bool setUpCredentials();
const char * username();
@@ -37,6 +38,7 @@
SmartRest& _client;
MDMSerial& _mdm;
DeviceInfo& _deviceInfo;
+ DeviceIO& _io;
char _username[DEVICE_BOOTSTRAP_CREDENTIALS_LENGTH],
_password[DEVICE_BOOTSTRAP_CREDENTIALS_LENGTH];
};
--- a/DeviceIO.cpp Tue Jul 29 17:53:43 2014 +0000
+++ b/DeviceIO.cpp Wed Aug 13 10:55:11 2014 +0000
@@ -1,5 +1,9 @@
#include "DeviceIO.h"
+#define DEF "\033[39m"
+#define GRE "\033[32m"
+#define CYA "\033[36m"
+
DeviceIO::DeviceIO(GPSI2C& gps) :
_gpsTracker(gps),
_resetButton(D4), // fire button on arduino app shield
@@ -42,12 +46,20 @@
void DeviceIO::lcdPrint(const char *line1, const char *line2, const char *line3)
{
+ printf(GRE "io::lcdPrint" DEF "\r\n");
_lcd.cls();
_lcd.locate(0, 0);
+
_lcd.printf("%s\n", line1);
+ printf(GRE "> " CYA "%s\r\n" DEF, line1);
+
if (line2 != NULL) {
_lcd.printf("%s\n", line2);
- if (line3 != NULL)
+ printf(GRE "> " CYA "%s\r\n" DEF, line2);
+
+ if (line3 != NULL) {
_lcd.printf("%s\n", line3);
+ printf(GRE "> " CYA "%s\r\n" DEF, line3);
+ }
}
}
--- a/DeviceIntegration.cpp Tue Jul 29 17:53:43 2014 +0000
+++ b/DeviceIntegration.cpp Wed Aug 13 10:55:11 2014 +0000
@@ -64,25 +64,11 @@
return false;
}
- puts("Hello.");
- if (!deviceExisting()) {
- puts("Creating device.");
- if (!createDevice()) {
- puts("Failed.");
- return false;
- }
- puts("Adding global identifier.");
- if (!addGlobalIdentifier()) {
- puts("Failed.");
- return false;
- }
- }
+ if ((!deviceExisting()) && ((!createDevice()) || (!addGlobalIdentifier())))
+ return false;
- puts("Updating device data.");
- if (!updateDevice()) {
- puts("Failed.");
+ if (!updateDevice())
return false;
- }
return true;
}
--- a/MbedAgent.cpp Tue Jul 29 17:53:43 2014 +0000
+++ b/MbedAgent.cpp Wed Aug 13 10:55:11 2014 +0000
@@ -6,7 +6,7 @@
_mdm(mdm),
_deviceInfo(deviceInfo),
_client(MBED_AGENT_HOST, MBED_AGENT_PORT, MBED_AGENT_DEVICE_IDENTIFIER),
- _bootstrap(_client, _mdm, _deviceInfo),
+ _bootstrap(_client, _mdm, _io, _deviceInfo),
_integration(_client, _tpl, _deviceId, _deviceInfo),
_signalQualityMeasurement(_client, _tpl, _deviceId, _deviceInfo),
_temperatureMeasurement(_client, _tpl, _deviceId, _io.temperatureSensor()),
@@ -34,25 +34,19 @@
bool MbedAgent::run()
{
// device bootstrapping process
- _io.lcdPrint("BOOTSTRAP", _deviceInfo.imei());
- if (!_bootstrap.setUpCredentials()) {
- _io.lcdPrint("BOOTSTRAP FAILURE");
- puts("Could not obtain credentials.");
+ if (!_bootstrap.setUpCredentials())
return false;
- }
- _io.lcdPrint("BOOTSTRAP SUCCESSFUL", _bootstrap.username(), _bootstrap.password());
+
Thread::wait(5000);
_io.lcdPrint("INTEGRATION");
if (!_integration.integrate()) {
- puts("Device integration process failed.");
return false;
}
char status[60];
snprintf(status, sizeof(status), "ID: %ld", _deviceId);
_io.lcdPrint("INTEGRATED", status);
- puts(status);
loop();
return true;
@@ -66,9 +60,7 @@
while (true) {
timer.reset();
- puts("Sending signal quality.");
- if (!_signalQualityMeasurement.run())
- puts("Failed signal str.");
+ _signalQualityMeasurement.run();
_temperatureMeasurement.run();
_accelerationMeasurement.run();
_analogMeasurement.run();
--- a/main.cpp Tue Jul 29 17:53:43 2014 +0000
+++ b/main.cpp Wed Aug 13 10:55:11 2014 +0000
@@ -7,28 +7,47 @@
#include "apndb.h"
#include "GPSTracker.h"
+/**
+ * SIM PIN. Null for no pin.
+ */
+#define SIM_PIN NULL
+
+/**
+ * SIM GPRS login data. Leave commented out for automatic setting.
+ */
+//#define SIM_APN ""
+//#define SIM_USER ""
+//#define SIM_PASS ""
+
int main()
{
MDMParser::DevStatus devStatus;
int res;
+ uint8_t status = 0;
+ apndb_t *apn;
MDMSerial mdm;
GPSI2C gps;
- //mdm.setDebug(4);
- if (!mdm.init(NULL, &devStatus)) {
- puts("Modem initialization failed. Check your PIN number.");
- return 1;
- }
- puts("Modem initialized");
-
- if (!gps.init()) {
- puts("GPS initialization failed.");
- return 1;
- }
- puts("Gps initialized.");
+ if (!mdm.init(SIM_PIN, &devStatus))
+ status = 1;
+ else if (!gps.init())
+ status = 2;
DeviceIO io(gps);
+
+ switch (status) {
+ case 1:
+ io.lcdPrint("MODEM INIT FAILURE", "REMOVE SIM PIN");
+ break;
+ case 2:
+ io.lcdPrint("GPS INIT FAILURE");
+ break;
+ }
+
+ if (status != 0)
+ goto error;
+
io.lcdPrint("DEVICE INIT");
/*if (io.resetButtonPressed()) {
@@ -46,59 +65,61 @@
io.lcdPrint("IMEI", devStatus.imei);
- // print out basic device data
- printf("IMEI: %s\n", devStatus.imei);
- printf("IMSI: %s\n", devStatus.imsi);
-
- puts("Searching for login...");
- apndb_t *apn = apndb_get(devStatus.imsi);
+#ifndef SIM_APN
+ apn = apndb_get(devStatus.imsi);
if (apn == NULL) {
- puts("No APN found. Stop.");
- io.lcdPrint("NO APN FOUND", "IMEI:", devStatus.imsi);
- return 1;
+ io.lcdPrint("NO CARRIER FOUND", "CHECK IMSI", devStatus.imsi);
+ goto error;
}
- puts("Connected.");
+#endif
if (!mdm.registerNet()) {
- puts("Network registration failed.");
io.lcdPrint("NETWORK REG ERROR");
- return 1;
+ goto error;
}
- printf("Carrier: %s\n", apn->carrier);
- puts("Joining Network.");
+#ifdef SIM_APN
+ if (mdm.join(SIM_APN, SIM_USER, SIM_PASS) == NOIP) {
+ io.lcdPrint("NETWORK JOIN FAILURE");
+ goto error;
+ }
+#else
io.lcdPrint("JOINING CARRIER", apn->carrier);
if (mdm.join(apn->apn) == NOIP) {
io.lcdPrint("NETWORK JOIN FAILURE");
- puts("Could not join network. Make sure chosen carrier is correct and no credentials are required.");
- return 1;
- }
-
- DeviceInfo deviceInfo(mdm, devStatus);
- MbedAgent agent(io, mdm, deviceInfo);
-
- puts("Starting agent ...");
- if (!agent.init()) {
- io.lcdPrint("AGENT INIT FAILURE");
- puts("Initialization failure.");
- mdm.disconnect();
- return 1;
+ goto error;
}
+#endif
- size_t tries = 3;
-
- do {
- io.lcdPrint("RUN AGENT");
- puts("Running agent ...");
+ {
+ uint8_t tries;
+ DeviceInfo deviceInfo(mdm, devStatus);
+ MbedAgent agent(io, mdm, deviceInfo);
+
+ io.lcdPrint("AGENT INIT");
+ if (!agent.init()) {
+ io.lcdPrint("AGENT INIT FAILURE");
+ goto error;
+ }
+
+ tries = 3;
+ do {
+ io.lcdPrint("AGENT RUN");
+ if (agent.run())
+ break;
+ } while (--tries > 0);
- if (!agent.run()) {
- puts("Agent failure.");
- continue;
- } else {
- break;
+ if (tries == 0) {
+ io.lcdPrint("AGENT RUN FAILURE");
+ goto error;
}
- } while (--tries > 0);
+ }
mdm.disconnect();
return 0;
+
+error:
+ io.lcdPrint("DISCONNECTING");
+ mdm.disconnect();
+ return 1;
}
