Own fork of MbedSmartRestMain
Dependencies: C027_Support C12832 LM75B MMA7660 MbedSmartRest mbed-rtos mbed
Fork of MbedSmartRestMain by
DeviceIntegration.cpp
00001 #include <stdio.h> 00002 #include "DeviceIntegration.h" 00003 #include "ComposedRecord.h" 00004 #include "CharValue.h" 00005 #include "IntegerValue.h" 00006 #include "SmartRestConf.h" 00007 #include "logging.h" 00008 00009 bool DeviceIntegration::init() 00010 { 00011 if (_init) 00012 return false; 00013 00014 // get device by identity 00015 // Usage: 100,<SERIAL/NR> 00016 if (!_tpl.add("10,100,GET,/identity/externalIds/c8y_Serial/%%,,application/vnd.com.nsn.cumulocity.externalId+json,%%,STRING,\r\n")) 00017 return false; 00018 00019 // get device id from identity 00020 // Response: 200,<DEVICE/ID> 00021 if (!_tpl.add("11,200,\"$.managedObject\",,\"$.id\"\r\n")) 00022 return false; 00023 00024 // Create device 00025 // Usage: 101,<SERIAL/NR> 00026 if (!_tpl.add("10,101,POST,/inventory/managedObjects,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,%%,STRING,\"{\"\"name\"\":\"\"Mbed Test Device\"\",\"\"type\"\":\"\"com_ublox_C027_REV-A\"\",\"\"c8y_Hardware\"\":{\"\"revision\"\":\"\"1\"\",\"\"model\"\":\"\"Ublox C027\"\",\"\"serialNumber\"\":\"\"%%\"\"},\"\"c8y_SupportedOperations\"\":[\"\"c8y_Relay\"\",\"\"c8y_Configuration\"\",\"\"c8y_Message\"\"],\"\"c8y_IsDevice\"\":{},\"\"com_cumulocity_model_Agent\"\":{}}\"\r\n")) 00027 return false; 00028 00029 // Get device id 00030 // Response: 201,<DEVICE/ID> 00031 if (!_tpl.add("11,201,,\"$.c8y_IsDevice\",\"$.id\"\r\n")) 00032 return false; 00033 00034 // Insert global ID 00035 // Usage: 102,<DEVICE/ID>,<SERIAL/NR> 00036 if (!_tpl.add("10,102,POST,/identity/globalIds/%%/externalIds,application/vnd.com.nsn.cumulocity.externalId+json,application/vnd.com.nsn.cumulocity.externalId+json,%%,UNSIGNED STRING,\"{\"\"type\"\":\"\"c8y_Serial\"\",\"\"externalId\"\":\"\"%%\"\"}\"\r\n")) 00037 return false; 00038 00039 // Update IMEI, CellId and iccid 00040 // Usage: 103,<DEVICE/ID>,<IMEI>,<CELL/ID>,<ICCID> 00041 if (!_tpl.add("10,103,PUT,/inventory/managedObjects/%%,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,%%,UNSIGNED STRING STRING STRING,\"{\"\"c8y_Mobile\"\":{\"\"imei\"\":\"\"%%\"\",\"\"cellId\"\":\"\"%%\"\",\"\"iccid\"\":\"\"%%\"\"}}\"\r\n")) 00042 return false; 00043 00044 _init = true; 00045 return true; 00046 } 00047 00048 bool DeviceIntegration::integrate() 00049 { 00050 if (deviceID != 0) 00051 return false; 00052 00053 // template bootstrapping process 00054 if (_client.bootstrap(_tpl) != SMARTREST_SUCCESS) { 00055 aError("Template bootstrap.\n"); 00056 return false; 00057 } 00058 00059 if ((!deviceExisting()) && ((!createDevice()) || (!addGlobalIdentifier()))) 00060 return false; 00061 00062 if (!updateDevice()) 00063 return false; 00064 00065 return true; 00066 } 00067 00068 bool DeviceIntegration::deviceExisting() 00069 { 00070 ComposedRecord record; 00071 ParsedRecord received; 00072 00073 IntegerValue msgId(100); 00074 CharValue imei(_deviceInfo.imei()); 00075 if ((!record.add(msgId)) || (!record.add(imei))) 00076 return false; 00077 00078 if (_client.send(record) != SMARTREST_SUCCESS) { 00079 aWarning("Send failed.\r\n"); 00080 _client.stop(); 00081 return false; 00082 } 00083 00084 if (_client.receive(received) != SMARTREST_SUCCESS) { 00085 aError("No device found.\n"); 00086 _client.stop(); 00087 return false; 00088 } 00089 _client.stop(); 00090 00091 if (received.values() == 0) { 00092 return false; 00093 } 00094 00095 if (received.value(0).integerValue() == 50) { 00096 return false; 00097 } 00098 00099 if (received.value(0).integerValue() != 200) { 00100 aError("Unknown msg %d.\n", received.value(0).integerValue()); 00101 return false; 00102 } 00103 setDeviceID(received.value(2).integerValue()); 00104 00105 return true; 00106 } 00107 00108 bool DeviceIntegration::createDevice() 00109 { 00110 ComposedRecord record; 00111 ParsedRecord received; 00112 00113 IntegerValue msgId(101); 00114 CharValue imei(_deviceInfo.imei()); 00115 if ((!record.add(msgId)) || (!record.add(imei))) 00116 return false; 00117 00118 if (_client.send(record) != SMARTREST_SUCCESS) { 00119 _client.stop(); 00120 return 0; 00121 } 00122 00123 if (_client.receive(received) != SMARTREST_SUCCESS) { 00124 aError("Create device.\n"); 00125 _client.stop(); 00126 return false; 00127 } 00128 _client.stop(); 00129 00130 if (received.values() != 3) { 00131 aError("%d/3 values received.\n", received.values()); 00132 return false; 00133 } 00134 00135 if (received.value(0).integerValue() != 201) { 00136 aError("Unknown msg %d.\n", received.value(0).integerValue()); 00137 return false; 00138 } 00139 00140 setDeviceID(received.value(2).integerValue()); 00141 return true; 00142 } 00143 00144 bool DeviceIntegration::addGlobalIdentifier() 00145 { 00146 ComposedRecord record; 00147 ParsedRecord received; 00148 00149 IntegerValue msgId(102); 00150 IntegerValue devId(deviceID); 00151 CharValue imei(_deviceInfo.imei()); 00152 if ((!record.add(msgId)) || (!record.add(devId)) || (!record.add(imei))) 00153 return false; 00154 00155 if (_client.send(record) != SMARTREST_SUCCESS) { 00156 aWarning("Add X-ID failed.\n"); 00157 _client.stop(); 00158 return false; 00159 } 00160 00161 if (_client.receive(received) != SMARTREST_SUCCESS) { 00162 aError("Receive X-ID failed.\n"); 00163 _client.stop(); 00164 return false; 00165 } 00166 _client.stop(); 00167 00168 if (received.values() != 3) { 00169 aError("%d/3 values received.\n", received.values()); 00170 return false; 00171 } 00172 00173 if (received.value(0).integerValue() != 200) { 00174 aError("Unknown msg %d\n", received.value(0).integerValue()); 00175 return false; 00176 } 00177 00178 return true; 00179 } 00180 00181 bool DeviceIntegration::updateDevice() 00182 { 00183 ComposedRecord record; 00184 ParsedRecord received; 00185 00186 IntegerValue msgId(103); 00187 IntegerValue devId(deviceID); 00188 CharValue imei(_deviceInfo.imei()); 00189 CharValue cellId(_deviceInfo.cellId()); 00190 CharValue iccid(_deviceInfo.iccid()); 00191 if ((!record.add(msgId)) || (!record.add(devId)) || (!record.add(imei)) || (!record.add(cellId)) || (!record.add(iccid))) 00192 return false; 00193 00194 if (_client.send(record) != SMARTREST_SUCCESS) { 00195 aError("Send.\n"); 00196 _client.stop(); 00197 return false; 00198 } 00199 00200 if (_client.receive(received) != SMARTREST_SUCCESS) { 00201 aError("Receive.\n"); 00202 _client.stop(); 00203 return false; 00204 } 00205 _client.stop(); 00206 00207 if (received.values() != 3) { 00208 aError("%d/3 values received.\n", received.values()); 00209 return false; 00210 } 00211 00212 if (received.value(0).integerValue() != 201) { 00213 aError("Unknown msg %d\n", received.value(0).integerValue()); 00214 return false; 00215 } 00216 00217 return true; 00218 }
Generated on Sat Jul 16 2022 07:10:59 by 1.7.2