Official reference client implementation for Cumulocity SmartREST on u-blox C027.

Dependencies:   C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed

Fork of MbedSmartRestMain by Vincent Wochnik

Committer:
xinlei
Date:
Fri May 15 14:07:51 2015 +0000
Revision:
113:3872569be2af
Parent:
110:b7a403dbceb6
Child:
117:5de54f09f754
data smoothing for pots readings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Cumulocity 41:804f6a0bda26 1 #include <stdlib.h>
Cumulocity 41:804f6a0bda26 2 #include <stdio.h>
Cumulocity 41:804f6a0bda26 3 #include <string.h>
xinlei 113:3872569be2af 4 #include "rtos.h"
xinlei 93:0acd11870c6a 5 #include "DeviceBootstrap.h"
xinlei 105:fd3571349e5d 6 #include "Storage.h"
xinlei 96:5dfdc8568e9f 7 #include "LCDDisplay.h"
Cumulocity 41:804f6a0bda26 8 #include "ComposedRecord.h"
Cumulocity 41:804f6a0bda26 9 #include "CharValue.h"
Cumulocity 41:804f6a0bda26 10 #include "IntegerValue.h"
Cumulocity 41:804f6a0bda26 11 #include "ParsedRecord.h"
xinlei 93:0acd11870c6a 12 #include "SmartRestConf.h"
xinlei 72:c5709ae7b193 13 #include "logging.h"
Cumulocity 41:804f6a0bda26 14
xinlei 113:3872569be2af 15 // Device bootstrap tenant, username and password
xinlei 113:3872569be2af 16 #define BOOTSTRAP_TENANT "management"
xinlei 113:3872569be2af 17 #define BOOTSTRAP_USERNAME "devicebootstrap"
xinlei 101:dbcd3bc51758 18 #define BOOTSTRAP_PASSWORD "Fhdt1bb1f"
xinlei 101:dbcd3bc51758 19
xinlei 96:5dfdc8568e9f 20 DeviceBootstrap::DeviceBootstrap(AbstractSmartRest& client,
xinlei 113:3872569be2af 21 DeviceInfo& deviceInfo):
Cumulocity 41:804f6a0bda26 22 _client(client),
xinlei 98:9f2de96941c4 23 _deviceInfo(deviceInfo)
Cumulocity 41:804f6a0bda26 24 {
Cumulocity 41:804f6a0bda26 25 }
Cumulocity 41:804f6a0bda26 26
xinlei 113:3872569be2af 27 bool DeviceBootstrap::bootstrap()
Cumulocity 41:804f6a0bda26 28 {
xinlei 113:3872569be2af 29 char tenant[CREDENTIAL_LENGTH];
xinlei 113:3872569be2af 30 char username[CREDENTIAL_LENGTH];
xinlei 113:3872569be2af 31 char password[CREDENTIAL_LENGTH];
xinlei 113:3872569be2af 32 if (loadCredential(tenant, username, password, CREDENTIAL_LENGTH)) {
xinlei 113:3872569be2af 33 setAuth(tenant, username, password);
xinlei 113:3872569be2af 34 aInfo("Set auth: %s/%s:%s(%s)\n", srTenant, srUsername, srPassword, srAuthStr);
xinlei 101:dbcd3bc51758 35 return true;
xinlei 101:dbcd3bc51758 36 } else if (obtainFromPlatform()) {
xinlei 113:3872569be2af 37 if (!saveCredential(srTenant, srUsername, srPassword, CREDENTIAL_LENGTH))
xinlei 113:3872569be2af 38 aError("Save credentials!\n");
xinlei 101:dbcd3bc51758 39 return true;
xinlei 101:dbcd3bc51758 40 } else {
xinlei 101:dbcd3bc51758 41 return false;
Cumulocity 41:804f6a0bda26 42 }
Cumulocity 41:804f6a0bda26 43 }
Cumulocity 41:804f6a0bda26 44
Cumulocity 41:804f6a0bda26 45 bool DeviceBootstrap::obtainFromPlatform()
xinlei 101:dbcd3bc51758 46 {
Cumulocity 41:804f6a0bda26 47 ComposedRecord record;
Cumulocity 41:804f6a0bda26 48 ParsedRecord recvdRecord;
Cumulocity 41:804f6a0bda26 49
Cumulocity 41:804f6a0bda26 50 IntegerValue msgId(61);
vwochnik 52:8f1370084268 51 CharValue identifier(_deviceInfo.imei());
xinlei 93:0acd11870c6a 52 if (!record.add(msgId) || !record.add(identifier))
Cumulocity 41:804f6a0bda26 53 return false;
Cumulocity 41:804f6a0bda26 54
xinlei 96:5dfdc8568e9f 55 LCDDisplay::inst().setLines("Bootstrap", _deviceInfo.imei());
xinlei 93:0acd11870c6a 56
xinlei 113:3872569be2af 57 // set authorization for bootstrap
xinlei 113:3872569be2af 58 setAuth(BOOTSTRAP_TENANT, BOOTSTRAP_USERNAME, BOOTSTRAP_PASSWORD);
xinlei 113:3872569be2af 59 for (uint8_t tries = 255; tries; --tries) {
Cumulocity 41:804f6a0bda26 60 if (_client.send(record, "") != SMARTREST_SUCCESS) {
Cumulocity 41:804f6a0bda26 61 _client.stop();
Cumulocity 41:804f6a0bda26 62 Thread::wait(2000);
Cumulocity 41:804f6a0bda26 63 continue;
xinlei 90:0525121f307e 64 }
Cumulocity 41:804f6a0bda26 65 if (_client.receive(recvdRecord) != SMARTREST_SUCCESS) {
Cumulocity 41:804f6a0bda26 66 _client.stop();
Cumulocity 41:804f6a0bda26 67 Thread::wait(2000);
Cumulocity 41:804f6a0bda26 68 continue;
Cumulocity 41:804f6a0bda26 69 }
Cumulocity 42:104746744af8 70 _client.stop();
xinlei 93:0acd11870c6a 71
Cumulocity 41:804f6a0bda26 72 if ((recvdRecord.values() < 1) ||
Cumulocity 41:804f6a0bda26 73 (recvdRecord.value(0).integerValue() == 50)) {
Cumulocity 41:804f6a0bda26 74 Thread::wait(2000);
Cumulocity 41:804f6a0bda26 75 continue;
Cumulocity 41:804f6a0bda26 76 }
Cumulocity 41:804f6a0bda26 77 if ((recvdRecord.value(0).integerValue() != 70) ||
Cumulocity 41:804f6a0bda26 78 (recvdRecord.values() != 6)) {
Cumulocity 41:804f6a0bda26 79 return false;
Cumulocity 41:804f6a0bda26 80 }
xinlei 113:3872569be2af 81
xinlei 113:3872569be2af 82 setAuth(recvdRecord.value(3).characterValue(),
xinlei 113:3872569be2af 83 recvdRecord.value(4).characterValue(),
xinlei 113:3872569be2af 84 recvdRecord.value(5).characterValue());
xinlei 113:3872569be2af 85 LCDDisplay::inst().setLines("Bootstrap Success", srTenant, srUsername);
xinlei 113:3872569be2af 86 aInfo("Set auth: %s/%s:%s(%s)\n", srTenant, srUsername, srPassword, srAuthStr);
Cumulocity 41:804f6a0bda26 87 return true;
xinlei 113:3872569be2af 88 }
xinlei 96:5dfdc8568e9f 89 LCDDisplay::inst().setLines("Bootstrap Failure");
Cumulocity 41:804f6a0bda26 90 return false;
xinlei 113:3872569be2af 91 }