POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel

Dependencies:   mbed vt100

Committer:
Rhyme
Date:
Wed Dec 06 00:35:56 2017 +0000
Revision:
6:44ca704f2bc1
Parent:
5:eba500888787
Child:
8:5590f55bdf41
some ota (over the air) update messages added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:f0de320e23ac 1 #include "mbed.h"
Rhyme 0:f0de320e23ac 2 #include <ctype.h>
Rhyme 0:f0de320e23ac 3 #include "af_attributes.h"
Rhyme 0:f0de320e23ac 4 #include "edge_time.h"
Rhyme 0:f0de320e23ac 5 #include "edge_sensor.h"
Rhyme 0:f0de320e23ac 6 #include "edge_accel.h"
Rhyme 0:f0de320e23ac 7 #include "edge_color.h"
Rhyme 0:f0de320e23ac 8 #include "edge_temp.h"
Rhyme 0:f0de320e23ac 9 #include "edge_pressure.h"
Rhyme 0:f0de320e23ac 10 #include "edge_mgr.h"
Rhyme 1:66c21c62c449 11 #include "edge_reset_mgr.h"
Rhyme 1:66c21c62c449 12 #include "SO1602A.h"
Rhyme 0:f0de320e23ac 13 #include "pending.h"
Rhyme 0:f0de320e23ac 14
Rhyme 3:cac964851bb6 15 extern SO1602A *display ;
Rhyme 0:f0de320e23ac 16 extern pending_class *pending ;
Rhyme 0:f0de320e23ac 17
Rhyme 0:f0de320e23ac 18 static const af_attribute_type af_attr[] = {
Rhyme 2:778a4d4436ff 19 /* ID, Description, Type, Size */
Rhyme 2:778a4d4436ff 20 { ATTR_SENSE_VAL, "Sensor Value", ATTRIBUTE_TYPE_UTF8S, 255 },
Rhyme 2:778a4d4436ff 21 { ATTR_ACCEL_PRESENT, "Accel Present", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 2:778a4d4436ff 22 { ATTR_ACCEL_ENABLE, "Accel Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 2:778a4d4436ff 23 { ATTR_ACCEL_INTERVAL, "Accel Interval", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 24 { ATTR_ACCEL_VALUE, "Accel Value", ATTRIBUTE_TYPE_FIXED_15_16, 4},
Rhyme 2:778a4d4436ff 25 /* first color sensor (VEML6040) and LED set */
Rhyme 2:778a4d4436ff 26 { ATTR_COLOR0_PRESENT, "Color0 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 2:778a4d4436ff 27 { ATTR_COLOR0_ENABLE, "Color0 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 2:778a4d4436ff 28 { ATTR_COLOR0_INTERVAL, "Color0 Interval", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 29 { ATTR_COLOR0_TRIGMODE, "Color0 Trigger Mode", ATTRIBUTE_TYPE_SINT8, 1 },
Rhyme 2:778a4d4436ff 30 { ATTR_COLOR0_ITIME, "Color0 Integration Time", ATTRIBUTE_TYPE_SINT8, 1 },
Rhyme 2:778a4d4436ff 31 { ATTR_COLOR0_CALIBRATE, "Color0 Calibrate", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 2:778a4d4436ff 32 { ATTR_COLOR0_PWM_R, "Color0 PWM R", ATTRIBUTE_TYPE_SINT32, 4 },
Rhyme 2:778a4d4436ff 33 { ATTR_COLOR0_PWM_G, "Color0 PWM G", ATTRIBUTE_TYPE_SINT32, 4 },
Rhyme 2:778a4d4436ff 34 { ATTR_COLOR0_PWM_B, "Color0 PWM B", ATTRIBUTE_TYPE_SINT32, 4 },
Rhyme 2:778a4d4436ff 35 { ATTR_COLOR0_PWM_PERIOD, "Color0 PWM Period", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 36 { ATTR_COLOR0_PWM_TARGET, "Color0 PWM Target", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 37 { ATTR_COLOR0_R_VALUE, "Color0 R", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 38 { ATTR_COLOR0_G_VALUE, "Color0 G", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 39 { ATTR_COLOR0_B_VALUE, "Color0 B", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 40 /* second color sensor (VEML6040) and LED set */
Rhyme 2:778a4d4436ff 41 { ATTR_COLOR1_PRESENT, "Color1 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 2:778a4d4436ff 42 { ATTR_COLOR1_ENABLE, "Color1 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 2:778a4d4436ff 43 { ATTR_COLOR1_INTERVAL, "Color1 Interval", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 44 { ATTR_COLOR1_TRIGMODE, "Color1 Trigger Mode", ATTRIBUTE_TYPE_SINT8, 1 },
Rhyme 2:778a4d4436ff 45 { ATTR_COLOR0_ITIME, "Color1 Integration Time", ATTRIBUTE_TYPE_SINT8, 1 },
Rhyme 2:778a4d4436ff 46 { ATTR_COLOR0_CALIBRATE, "Color1 Calibrate", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 2:778a4d4436ff 47 { ATTR_COLOR1_PWM_R, "Color1 PWM R", ATTRIBUTE_TYPE_SINT32, 4 },
Rhyme 2:778a4d4436ff 48 { ATTR_COLOR1_PWM_G, "Color1 PWM G", ATTRIBUTE_TYPE_SINT32, 4 },
Rhyme 2:778a4d4436ff 49 { ATTR_COLOR1_PWM_B, "Color1 PWM B", ATTRIBUTE_TYPE_SINT32, 4 },
Rhyme 2:778a4d4436ff 50 { ATTR_COLOR1_PWM_PERIOD, "Color1 PWM Period", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 51 { ATTR_COLOR1_PWM_TARGET, "Color1 PWM Target", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 52 { ATTR_COLOR1_R_VALUE, "Color1 R", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 53 { ATTR_COLOR1_G_VALUE, "Color1 G", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 54 { ATTR_COLOR1_B_VALUE, "Color1 B", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 2:778a4d4436ff 55 /* first temperature sensor (LM75B) */
Rhyme 6:44ca704f2bc1 56 { ATTR_TEMP0_PRESENT, "Temp0 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 57 { ATTR_TEMP0_ENABLE, "Temp0 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 58 { ATTR_TEMP0_INTERVAL, "Temp0 Interval", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 6:44ca704f2bc1 59 { ATTR_TEMP0_VALUE, "Temp0 Value", ATTRIBUTE_TYPE_FIXED_15_16, 4},
Rhyme 2:778a4d4436ff 60 /* second temperature sensor (SMTC502AT/Before) */
Rhyme 6:44ca704f2bc1 61 { ATTR_TEMP1_PRESENT, "Temp1 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 62 { ATTR_TEMP1_ENABLE, "Temp1 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 63 { ATTR_TEMP1_INTERVAL, "Temp1 Interval", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 6:44ca704f2bc1 64 { ATTR_TEMP1_VALUE, "Temp1 Value", ATTRIBUTE_TYPE_FIXED_15_16, 4},
Rhyme 2:778a4d4436ff 65 /* third temperature sensor (SMTC502AT/After) */
Rhyme 6:44ca704f2bc1 66 { ATTR_TEMP2_PRESENT, "Temp2 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 67 { ATTR_TEMP2_ENABLE, "Temp2 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 68 { ATTR_TEMP2_INTERVAL, "Temp2 Interval", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 6:44ca704f2bc1 69 { ATTR_TEMP2_VALUE, "Temp2 Value", ATTRIBUTE_TYPE_FIXED_15_16, 4},
Rhyme 2:778a4d4436ff 70 /* fouth temperateure sensor (LM75B) */
Rhyme 6:44ca704f2bc1 71 { ATTR_TEMP3_PRESENT, "Temp3 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 72 { ATTR_TEMP3_ENABLE, "Temp3 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 73 { ATTR_TEMP3_INTERVAL, "Temp3 Interval", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 6:44ca704f2bc1 74 { ATTR_TEMP3_VALUE, "Temp3 Value", ATTRIBUTE_TYPE_FIXED_15_16, 4},
Rhyme 2:778a4d4436ff 75 /* Gas Pressure sensor (PSE530) */
Rhyme 6:44ca704f2bc1 76 { ATTR_GAS_PRESENT, "Gas Pressure Present", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 77 { ATTR_GAS_ENABLE, "Gas Pressure Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 6:44ca704f2bc1 78 { ATTR_GAS_INTERVAL, "Gas Pressure Interval", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 6:44ca704f2bc1 79 { ATTR_GAS_VALUE, "Gas Pressure Value", ATTRIBUTE_TYPE_FIXED_15_16, 4},
Rhyme 2:778a4d4436ff 80 /* Software Reset Request */
Rhyme 6:44ca704f2bc1 81 { ATTR_SOFTWARE_RESET, "Software Reset", ATTRIBUTE_TYPE_BOOLEAN, 1 },
Rhyme 0:f0de320e23ac 82
Rhyme 6:44ca704f2bc1 83 { ATTR_LED, "LED", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 6:44ca704f2bc1 84 { ATTR_IO0, "I/O 0", ATTRIBUTE_TYPE_SINT64, 8 },
Rhyme 6:44ca704f2bc1 85 { ATTR_IO1, "I/O 1", ATTRIBUTE_TYPE_SINT64, 8 },
Rhyme 6:44ca704f2bc1 86 { ATTR_IO2, "I/O 2", ATTRIBUTE_TYPE_SINT64, 8 },
Rhyme 6:44ca704f2bc1 87 { ATTR_BUTTON, "BUTTON", ATTRIBUTE_TYPE_BOOLEAN, 2 },
Rhyme 6:44ca704f2bc1 88 { ATTR_IO3, "I/O 3", ATTRIBUTE_TYPE_SINT64, 8 },
Rhyme 6:44ca704f2bc1 89 { ATTR_BOOT_LOADER_VER, "Bootloader Version", ATTRIBUTE_TYPE_SINT64, 8 },
Rhyme 6:44ca704f2bc1 90 { ATTR_BLE_STACK_VER, "BLE Stack Version", ATTRIBUTE_TYPE_SINT64, 8 },
Rhyme 6:44ca704f2bc1 91 { ATTR_FW_APP_VER, "FW Application Version", ATTRIBUTE_TYPE_SINT64, 8 },
Rhyme 6:44ca704f2bc1 92 { ATTR_DEVICE_DESC, "Device Description", ATTRIBUTE_TYPE_SINT64, 8 },
Rhyme 6:44ca704f2bc1 93 { ATTR_WIFI_VER, "Wi-Fi chip", ATTRIBUTE_TYPE_SINT64, 8 },
Rhyme 6:44ca704f2bc1 94 { ATTR_OFFLINE_SCHED, "Offline Schedules enable", ATTRIBUTE_TYPE_SINT16, 2 },
Rhyme 6:44ca704f2bc1 95 { ATTR_SECURITY_ENABLED, "Security Enabled", ATTRIBUTE_TYPE_SINT8, 1 }, /* ? */
Rhyme 6:44ca704f2bc1 96 { ATTR_UTC_OFFSET, "UTC offset data", ATTRIBUTE_TYPE_BYTES, 8 },
Rhyme 6:44ca704f2bc1 97 { ATTR_CONFIGURES_SSID, "Configured SSID", ATTRIBUTE_TYPE_UTF8S, 10 }, /* ? */
Rhyme 6:44ca704f2bc1 98 { ATTR_WIFI_BARS, "Wi-Fi Bars", ATTRIBUTE_TYPE_SINT8, 1 },
Rhyme 6:44ca704f2bc1 99 { ATTR_WIFI_STDY_STATE, "Wi-Fi Steady State", ATTRIBUTE_TYPE_SINT8, 1 },
Rhyme 6:44ca704f2bc1 100 { ATTR_COMMAND, "Command", ATTRIBUTE_TYPE_BYTES, 8 }, /* ? */
Rhyme 6:44ca704f2bc1 101 { ATTR_ASR_STATE, "ASR State", ATTRIBUTE_TYPE_SINT8, 1 },
Rhyme 6:44ca704f2bc1 102 { ATTR_LOW_BATTERY, "Low Battery Warning", ATTRIBUTE_TYPE_SINT8, 1 },
Rhyme 6:44ca704f2bc1 103 { ATTR_LINKED_TIMESTAMP, "Linked Timestamp", ATTRIBUTE_TYPE_SINT32, 4 },
Rhyme 6:44ca704f2bc1 104 { ATTR_ATTR_ACK, "Attribute ACK", ATTRIBUTE_TYPE_SINT16, 8 },
Rhyme 6:44ca704f2bc1 105 { ATTR_REBOOT_REASON, "Reboot Reason", ATTRIBUTE_TYPE_UTF8S, 100 },
Rhyme 6:44ca704f2bc1 106 { ATTR_BLE_COMMS, "BLE Comms", ATTRIBUTE_TYPE_BYTES, 12 },
Rhyme 6:44ca704f2bc1 107 { ATTR_MCU_INTERFACE, "MCU Interface", ATTRIBUTE_TYPE_SINT8, 1 },
Rhyme 6:44ca704f2bc1 108 { 0, 0, 0, 0 }
Rhyme 0:f0de320e23ac 109 } ;
Rhyme 0:f0de320e23ac 110
Rhyme 0:f0de320e23ac 111 int get_af_attr(uint16_t id)
Rhyme 0:f0de320e23ac 112 {
Rhyme 0:f0de320e23ac 113 int i ;
Rhyme 0:f0de320e23ac 114 for (i = 0 ; af_attr[i].id != 0 ; i++ ) {
Rhyme 0:f0de320e23ac 115 if (id == af_attr[i].id) {
Rhyme 0:f0de320e23ac 116 break ;
Rhyme 0:f0de320e23ac 117 }
Rhyme 0:f0de320e23ac 118 }
Rhyme 0:f0de320e23ac 119 return (i) ;
Rhyme 0:f0de320e23ac 120 }
Rhyme 0:f0de320e23ac 121
Rhyme 0:f0de320e23ac 122 void print_af_error(int resultCode)
Rhyme 0:f0de320e23ac 123 {
Rhyme 0:f0de320e23ac 124 switch(resultCode) {
Rhyme 0:f0de320e23ac 125 case afSUCCESS:
Rhyme 0:f0de320e23ac 126 printf("Operation completed successfully\n") ;
Rhyme 0:f0de320e23ac 127 break ;
Rhyme 0:f0de320e23ac 128 case afERROR_NO_SUCH_ATTRIBUTE:
Rhyme 0:f0de320e23ac 129 printf("Request was made for unknown attribute id\n") ;
Rhyme 0:f0de320e23ac 130 break ;
Rhyme 0:f0de320e23ac 131 case afERROR_BUSY:
Rhyme 0:f0de320e23ac 132 printf("Request already in progress, try again\n") ;
Rhyme 0:f0de320e23ac 133 break ;
Rhyme 0:f0de320e23ac 134 case afERROR_INVALID_COMMAND:
Rhyme 0:f0de320e23ac 135 printf("Command could not be parsed\n") ;
Rhyme 0:f0de320e23ac 136 break ;
Rhyme 0:f0de320e23ac 137 case afERROR_QUEUE_OVERFLOW:
Rhyme 0:f0de320e23ac 138 printf("Queue is full\n") ;
Rhyme 0:f0de320e23ac 139 break ;
Rhyme 0:f0de320e23ac 140 case afERROR_QUEUE_UNDERFLOW:
Rhyme 0:f0de320e23ac 141 printf("Queue is empty\n") ;
Rhyme 0:f0de320e23ac 142 break ;
Rhyme 0:f0de320e23ac 143 case afERROR_INVALID_PARAM:
Rhyme 0:f0de320e23ac 144 printf("Bad input parameter\n") ;
Rhyme 0:f0de320e23ac 145 break ;
Rhyme 0:f0de320e23ac 146 default:
Rhyme 0:f0de320e23ac 147 printf("Unknown error code %d\n", resultCode) ;
Rhyme 0:f0de320e23ac 148 break ;
Rhyme 0:f0de320e23ac 149 }
Rhyme 0:f0de320e23ac 150 }
Rhyme 0:f0de320e23ac 151
Rhyme 0:f0de320e23ac 152 void af_print_values(
Rhyme 0:f0de320e23ac 153 const uint8_t requestId,
Rhyme 0:f0de320e23ac 154 const uint16_t attributeId,
Rhyme 0:f0de320e23ac 155 const uint16_t valueLen,
Rhyme 0:f0de320e23ac 156 const uint8_t *value
Rhyme 0:f0de320e23ac 157 )
Rhyme 0:f0de320e23ac 158 {
Rhyme 0:f0de320e23ac 159 int i, id ;
Rhyme 0:f0de320e23ac 160
Rhyme 0:f0de320e23ac 161 id = get_af_attr(attributeId) ;
Rhyme 0:f0de320e23ac 162
Rhyme 0:f0de320e23ac 163 if (af_attr[id].id != 0) {
Rhyme 0:f0de320e23ac 164 printf(af_attr[id].description) ;
Rhyme 0:f0de320e23ac 165 printf(" : ") ;
Rhyme 0:f0de320e23ac 166 switch(af_attr[id].attribute_type) {
Rhyme 0:f0de320e23ac 167 case ATTRIBUTE_TYPE_BOOLEAN:
Rhyme 0:f0de320e23ac 168 case ATTRIBUTE_TYPE_SINT8:
Rhyme 0:f0de320e23ac 169 if (valueLen >= 1) {
Rhyme 0:f0de320e23ac 170 printf("%02X\n", value[0]) ;
Rhyme 0:f0de320e23ac 171 }
Rhyme 0:f0de320e23ac 172 break ;
Rhyme 0:f0de320e23ac 173 case ATTRIBUTE_TYPE_SINT16:
Rhyme 0:f0de320e23ac 174 if (valueLen >= 2) {
Rhyme 0:f0de320e23ac 175 printf("%02X%02X\n", value[1], value[0]) ;
Rhyme 0:f0de320e23ac 176 }
Rhyme 0:f0de320e23ac 177 break ;
Rhyme 0:f0de320e23ac 178 case ATTRIBUTE_TYPE_SINT32:
Rhyme 0:f0de320e23ac 179 if (valueLen >= 4) {
Rhyme 0:f0de320e23ac 180 printf("%02X%02X%02X%02X\n",
Rhyme 0:f0de320e23ac 181 value[3],value[2],value[1],value[0]) ;
Rhyme 0:f0de320e23ac 182 }
Rhyme 0:f0de320e23ac 183 break ;
Rhyme 0:f0de320e23ac 184 case ATTRIBUTE_TYPE_SINT64:
Rhyme 0:f0de320e23ac 185 if (valueLen >= 8) {
Rhyme 0:f0de320e23ac 186 printf("%02X%02X %02X%02X %02X%02X %02X%02X\n",
Rhyme 0:f0de320e23ac 187 value[7], value[6], value[5], value[4],
Rhyme 0:f0de320e23ac 188 value[3], value[2], value[1], value[0]) ;
Rhyme 0:f0de320e23ac 189 }
Rhyme 0:f0de320e23ac 190 break ;
Rhyme 0:f0de320e23ac 191 case ATTRIBUTE_TYPE_UTF8S:
Rhyme 0:f0de320e23ac 192 if (valueLen > 0) {
Rhyme 0:f0de320e23ac 193 for (i = 0 ; i < valueLen ; i++) {
Rhyme 0:f0de320e23ac 194 if (isprint(value[i])) {
Rhyme 0:f0de320e23ac 195 printf("%c", value[i]) ;
Rhyme 0:f0de320e23ac 196 } else if (value[i] == 0) { /* string terminator NULL */
Rhyme 0:f0de320e23ac 197 break ;
Rhyme 0:f0de320e23ac 198 } else {
Rhyme 0:f0de320e23ac 199 printf("\'%02X\'",value[i]) ;
Rhyme 0:f0de320e23ac 200 }
Rhyme 0:f0de320e23ac 201 }
Rhyme 0:f0de320e23ac 202 printf("\n") ;
Rhyme 0:f0de320e23ac 203 }
Rhyme 0:f0de320e23ac 204 break ;
Rhyme 0:f0de320e23ac 205 case ATTRIBUTE_TYPE_BYTES:
Rhyme 0:f0de320e23ac 206 default:
Rhyme 0:f0de320e23ac 207 if (valueLen > 0) {
Rhyme 0:f0de320e23ac 208 for (i = 0 ; i < valueLen ; i++ ) {
Rhyme 0:f0de320e23ac 209 printf("%02X ", value[i]) ;
Rhyme 0:f0de320e23ac 210 }
Rhyme 0:f0de320e23ac 211 printf("\n") ;
Rhyme 0:f0de320e23ac 212 }
Rhyme 0:f0de320e23ac 213 break ;
Rhyme 0:f0de320e23ac 214 }
Rhyme 0:f0de320e23ac 215 } else {
Rhyme 0:f0de320e23ac 216 if (valueLen > 0) {
Rhyme 0:f0de320e23ac 217 for (i = 0 ; i < valueLen ; i++ ) {
Rhyme 0:f0de320e23ac 218 printf("%02X ", value[i]) ;
Rhyme 0:f0de320e23ac 219 }
Rhyme 0:f0de320e23ac 220 printf("\n") ;
Rhyme 0:f0de320e23ac 221 }
Rhyme 0:f0de320e23ac 222 }
Rhyme 0:f0de320e23ac 223 // printf("\n") ;
Rhyme 0:f0de320e23ac 224 }
Rhyme 0:f0de320e23ac 225
Rhyme 0:f0de320e23ac 226 /*
Rhyme 0:f0de320e23ac 227 * Callback that allows ASR to request an MCU attribute be changed.
Rhyme 0:f0de320e23ac 228 * You should define this function in your MCU firmware to perform application-specific actions
Rhyme 0:f0de320e23ac 229 * your code must take (e.g., updating the state of the hardware),
Rhyme 0:f0de320e23ac 230 * in light of the attribute value change.
Rhyme 0:f0de320e23ac 231 */
Rhyme 0:f0de320e23ac 232 void attributeChangeRequest(
Rhyme 0:f0de320e23ac 233 const uint8_t requestId,
Rhyme 0:f0de320e23ac 234 const uint16_t attributeId,
Rhyme 0:f0de320e23ac 235 const uint16_t valueLen,
Rhyme 0:f0de320e23ac 236 const uint8_t *value
Rhyme 0:f0de320e23ac 237 )
Rhyme 0:f0de320e23ac 238 {
Rhyme 0:f0de320e23ac 239 // int result ;
Rhyme 0:f0de320e23ac 240 uint32_t timestamp = edge_time ;
Rhyme 0:f0de320e23ac 241 if ((pending != 0)&&(pending->request->requestId == requestId)) {
Rhyme 0:f0de320e23ac 242 pending->replied_time = timestamp ;
Rhyme 0:f0de320e23ac 243
Rhyme 0:f0de320e23ac 244 }
Rhyme 0:f0de320e23ac 245 ts2time(timestamp, &current_time) ;
Rhyme 0:f0de320e23ac 246 print_time(&current_time) ;
Rhyme 0:f0de320e23ac 247 printf(" %5d ASR requested [%d] : ", attributeId, requestId) ;
Rhyme 0:f0de320e23ac 248 af_print_values(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 249 switch(attributeId) {
Rhyme 3:cac964851bb6 250 case ATTR_LINKED_TIMESTAMP: /* timestamp */
Rhyme 0:f0de320e23ac 251 set_time(valueLen, value) ;
Rhyme 4:aa67eddf0ab1 252 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 253 printf("timestampe = %d\n", timestamp) ;
Rhyme 0:f0de320e23ac 254 // print_date(&current_time) ;
Rhyme 0:f0de320e23ac 255 print_time(&current_time) ;
Rhyme 0:f0de320e23ac 256 break ;
Rhyme 1:66c21c62c449 257 case ATTR_SOFTWARE_RESET: /* software reset requested! */
Rhyme 1:66c21c62c449 258 if (value[0]) {
Rhyme 1:66c21c62c449 259 printf("Software Reset Requested!\n") ;
Rhyme 3:cac964851bb6 260 if (display != 0) {
Rhyme 3:cac964851bb6 261 display->clearDisplay() ;
Rhyme 3:cac964851bb6 262 display->locate(0,0) ;
Rhyme 3:cac964851bb6 263 display->putStr("System Rebooting!") ;
Rhyme 1:66c21c62c449 264 }
Rhyme 4:aa67eddf0ab1 265 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 1:66c21c62c449 266 wait(1) ;
Rhyme 1:66c21c62c449 267 software_reset() ;
Rhyme 1:66c21c62c449 268 }
Rhyme 1:66c21c62c449 269 break ;
Rhyme 0:f0de320e23ac 270 case ATTR_ACCEL_ENABLE: /* accel enable */
Rhyme 0:f0de320e23ac 271 if (sensor[0]) {
Rhyme 0:f0de320e23ac 272 if (value[0]) {
Rhyme 0:f0de320e23ac 273 printf("Accel Enabled\n") ;
Rhyme 0:f0de320e23ac 274 sensor[0]->reset() ;
Rhyme 0:f0de320e23ac 275 sensor[0]->enable() ;
Rhyme 0:f0de320e23ac 276 } else if (sensor[0]){
Rhyme 0:f0de320e23ac 277 printf("Accel Disabled\n") ;
Rhyme 0:f0de320e23ac 278 sensor[0]->disable() ;
Rhyme 0:f0de320e23ac 279 }
Rhyme 4:aa67eddf0ab1 280 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 281 }
Rhyme 0:f0de320e23ac 282 break ;
Rhyme 0:f0de320e23ac 283 case ATTR_ACCEL_INTERVAL:
Rhyme 0:f0de320e23ac 284 if (sensor[0]) {
Rhyme 0:f0de320e23ac 285 sensor[0]->setInterval((value[1] << 8) | value[0]) ;
Rhyme 4:aa67eddf0ab1 286 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 287 }
Rhyme 0:f0de320e23ac 288 break ;
Rhyme 0:f0de320e23ac 289 case ATTR_COLOR0_ENABLE: /* color0 enable */
Rhyme 0:f0de320e23ac 290 if (sensor[1]) {
Rhyme 0:f0de320e23ac 291 if (value[0]) {
Rhyme 0:f0de320e23ac 292 sensor[1]->reset() ;
Rhyme 0:f0de320e23ac 293 sensor[1]->enable() ;
Rhyme 0:f0de320e23ac 294 } else {
Rhyme 0:f0de320e23ac 295 sensor[1]->disable() ;
Rhyme 0:f0de320e23ac 296 }
Rhyme 4:aa67eddf0ab1 297 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 298 }
Rhyme 0:f0de320e23ac 299 break ;
Rhyme 0:f0de320e23ac 300 case ATTR_COLOR0_INTERVAL:
Rhyme 0:f0de320e23ac 301 if (sensor[1]) {
Rhyme 0:f0de320e23ac 302 sensor[1]->setInterval((value[1] << 8) | value[0]) ;
Rhyme 4:aa67eddf0ab1 303 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 304 }
Rhyme 0:f0de320e23ac 305 break ;
Rhyme 0:f0de320e23ac 306 case ATTR_COLOR0_TRIGMODE: /* color0 config */
Rhyme 0:f0de320e23ac 307 if (sensor[1]) {
Rhyme 0:f0de320e23ac 308 uint8_t config = ((edge_color*)sensor[1])->getConfig() & 0x70 ;
Rhyme 0:f0de320e23ac 309 if (value[0]) {
Rhyme 0:f0de320e23ac 310 config = config | 0x06 ;
Rhyme 0:f0de320e23ac 311 }
Rhyme 0:f0de320e23ac 312 ((edge_color*)sensor[1])->setConfig(config) ;
Rhyme 4:aa67eddf0ab1 313 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 314 }
Rhyme 0:f0de320e23ac 315 break ;
Rhyme 0:f0de320e23ac 316 case ATTR_COLOR0_ITIME: /* color0 config */
Rhyme 0:f0de320e23ac 317 if (sensor[1]) {
Rhyme 0:f0de320e23ac 318 uint8_t config = ((edge_color*)sensor[1])->getConfig() & 0x07 ;
Rhyme 0:f0de320e23ac 319 config = (value[0] << 4) | config ;
Rhyme 0:f0de320e23ac 320 ((edge_color*)sensor[1])->setConfig(config) ;
Rhyme 4:aa67eddf0ab1 321 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 322 }
Rhyme 0:f0de320e23ac 323 break ;
Rhyme 0:f0de320e23ac 324 case ATTR_COLOR0_PWM_PERIOD: /* color0 pwm period */
Rhyme 0:f0de320e23ac 325 if (sensor[1]) {
Rhyme 0:f0de320e23ac 326 ((edge_color*)sensor[1])->set_pwm_period((value[1] << 8) | value[0]) ;
Rhyme 4:aa67eddf0ab1 327 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 328 }
Rhyme 0:f0de320e23ac 329 break ;
Rhyme 0:f0de320e23ac 330 case ATTR_COLOR0_PWM_TARGET: /* color0 pwm calibration target */
Rhyme 0:f0de320e23ac 331 if (sensor[1]) {
Rhyme 0:f0de320e23ac 332 color0_target[0] = (value[1] << 8) | value[0] ;
Rhyme 0:f0de320e23ac 333 color0_target[1] = color0_target[0] ;
Rhyme 0:f0de320e23ac 334 color0_target[2] = color0_target[1] ;
Rhyme 4:aa67eddf0ab1 335 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 336 }
Rhyme 0:f0de320e23ac 337 break ;
Rhyme 0:f0de320e23ac 338 case ATTR_COLOR0_CALIBRATE: /* calibrate color0 */
Rhyme 5:eba500888787 339 if (sensor[1]) {
Rhyme 6:44ca704f2bc1 340 if (value[0]) { /* do calibration! */
Rhyme 5:eba500888787 341 ((edge_color*)sensor[1])->calibrate(color0_target, color0_pwm, 10) ;
Rhyme 5:eba500888787 342 afero->setAttribute32(ATTR_COLOR0_PWM_R, color0_pwm[0]) ;
Rhyme 5:eba500888787 343 afero->setAttribute32(ATTR_COLOR0_PWM_G, color0_pwm[1]) ;
Rhyme 5:eba500888787 344 afero->setAttribute32(ATTR_COLOR0_PWM_B, color0_pwm[2]) ;
Rhyme 5:eba500888787 345 }
Rhyme 6:44ca704f2bc1 346 // afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 6:44ca704f2bc1 347 afero->setAttributeBool(ATTR_COLOR0_CALIBRATE, false) ;
Rhyme 0:f0de320e23ac 348 }
Rhyme 0:f0de320e23ac 349 break ;
Rhyme 0:f0de320e23ac 350 case ATTR_COLOR1_ENABLE: /* color1 enable */
Rhyme 0:f0de320e23ac 351 if (sensor[2]) {
Rhyme 0:f0de320e23ac 352 if (value[0]) {
Rhyme 0:f0de320e23ac 353 sensor[2]->reset() ;
Rhyme 0:f0de320e23ac 354 sensor[2]->enable() ;
Rhyme 0:f0de320e23ac 355 } else {
Rhyme 0:f0de320e23ac 356 sensor[2]->disable() ;
Rhyme 0:f0de320e23ac 357 }
Rhyme 4:aa67eddf0ab1 358 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 359 }
Rhyme 0:f0de320e23ac 360 break ;
Rhyme 0:f0de320e23ac 361 case ATTR_COLOR1_INTERVAL:
Rhyme 0:f0de320e23ac 362 if (sensor[2]) {
Rhyme 0:f0de320e23ac 363 sensor[2]->setInterval((value[1] << 8) | value[0]) ;
Rhyme 4:aa67eddf0ab1 364 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 365 }
Rhyme 0:f0de320e23ac 366 break ;
Rhyme 0:f0de320e23ac 367 case ATTR_COLOR1_TRIGMODE: /* color0 config */
Rhyme 0:f0de320e23ac 368 if (sensor[2]) {
Rhyme 0:f0de320e23ac 369 uint8_t config = ((edge_color*)sensor[2])->getConfig() & 0x70 ;
Rhyme 0:f0de320e23ac 370 if (value[0]) {
Rhyme 0:f0de320e23ac 371 config = config | 0x06 ;
Rhyme 0:f0de320e23ac 372 }
Rhyme 0:f0de320e23ac 373 ((edge_color*)sensor[2])->setConfig(config) ;
Rhyme 4:aa67eddf0ab1 374 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 375 }
Rhyme 0:f0de320e23ac 376 break ;
Rhyme 0:f0de320e23ac 377 case ATTR_COLOR1_ITIME: /* color0 config */
Rhyme 0:f0de320e23ac 378 if (sensor[2]) {
Rhyme 0:f0de320e23ac 379 uint8_t config = ((edge_color*)sensor[2])->getConfig() & 0x07 ;
Rhyme 0:f0de320e23ac 380 config = (value[0] << 4) | config ;
Rhyme 0:f0de320e23ac 381 ((edge_color*)sensor[2])->setConfig(config) ;
Rhyme 4:aa67eddf0ab1 382 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 383 }
Rhyme 0:f0de320e23ac 384 break ;
Rhyme 0:f0de320e23ac 385 case ATTR_COLOR1_PWM_PERIOD: /* color0 pwm period */
Rhyme 0:f0de320e23ac 386 if (sensor[2]) {
Rhyme 0:f0de320e23ac 387 ((edge_color*)sensor[2])->set_pwm_period((value[1] << 8) | value[0]) ;
Rhyme 4:aa67eddf0ab1 388 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 389 }
Rhyme 0:f0de320e23ac 390 break ;
Rhyme 0:f0de320e23ac 391 case ATTR_COLOR1_PWM_TARGET: /* color0 pwm calibration target */
Rhyme 0:f0de320e23ac 392 if (sensor[2]) {
Rhyme 0:f0de320e23ac 393 color1_target[0] = (value[1] << 8) | value[0] ;
Rhyme 5:eba500888787 394 color1_target[1] = color1_target[0] ;
Rhyme 5:eba500888787 395 color1_target[2] = color1_target[1] ;
Rhyme 4:aa67eddf0ab1 396 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 397 }
Rhyme 0:f0de320e23ac 398 break ;
Rhyme 0:f0de320e23ac 399 case ATTR_COLOR1_CALIBRATE: /* calibrate color1 */
Rhyme 5:eba500888787 400 if (sensor[2]) {
Rhyme 5:eba500888787 401 if (value[0]) { /* do calibration! */
Rhyme 5:eba500888787 402 ((edge_color*)sensor[2])->calibrate(color1_target, color1_pwm, 10) ;
Rhyme 5:eba500888787 403 afero->setAttribute32(ATTR_COLOR1_PWM_R, color1_pwm[0]) ;
Rhyme 5:eba500888787 404 afero->setAttribute32(ATTR_COLOR1_PWM_G, color1_pwm[1]) ;
Rhyme 5:eba500888787 405 afero->setAttribute32(ATTR_COLOR1_PWM_B, color1_pwm[2]) ;
Rhyme 5:eba500888787 406 }
Rhyme 6:44ca704f2bc1 407 // afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 6:44ca704f2bc1 408 afero->setAttributeBool(ATTR_COLOR1_CALIBRATE, false) ;
Rhyme 0:f0de320e23ac 409 }
Rhyme 5:eba500888787 410
Rhyme 0:f0de320e23ac 411 break ;
Rhyme 0:f0de320e23ac 412 case ATTR_TEMP0_ENABLE: /* temp0 is used to control temp-sensors */
Rhyme 0:f0de320e23ac 413 if (sensor[3]) {
Rhyme 0:f0de320e23ac 414 if (value[0]) {
Rhyme 0:f0de320e23ac 415 sensor[3]->reset() ;
Rhyme 0:f0de320e23ac 416 sensor[3]->enable() ;
Rhyme 0:f0de320e23ac 417 } else {
Rhyme 0:f0de320e23ac 418 sensor[3]->disable() ;
Rhyme 0:f0de320e23ac 419 }
Rhyme 4:aa67eddf0ab1 420 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 421 }
Rhyme 0:f0de320e23ac 422 break ;
Rhyme 0:f0de320e23ac 423 case ATTR_TEMP0_INTERVAL:
Rhyme 0:f0de320e23ac 424 if (sensor[3]) {
Rhyme 0:f0de320e23ac 425 sensor[3]->setInterval((value[1] << 8) | value[0]) ;
Rhyme 4:aa67eddf0ab1 426 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 427 }
Rhyme 0:f0de320e23ac 428 break ;
Rhyme 0:f0de320e23ac 429 case ATTR_TEMP3_ENABLE: /* temp3 enable */
Rhyme 0:f0de320e23ac 430 break ;
Rhyme 0:f0de320e23ac 431 case ATTR_GAS_ENABLE: /* pressure enable */
Rhyme 0:f0de320e23ac 432 if (sensor[4]) {
Rhyme 0:f0de320e23ac 433 if (value[0]) {
Rhyme 0:f0de320e23ac 434 sensor[4]->reset() ;
Rhyme 0:f0de320e23ac 435 sensor[4]->enable() ;
Rhyme 0:f0de320e23ac 436 } else {
Rhyme 0:f0de320e23ac 437 sensor[4]->disable() ;
Rhyme 0:f0de320e23ac 438 }
Rhyme 4:aa67eddf0ab1 439 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 440 }
Rhyme 0:f0de320e23ac 441 break ;
Rhyme 0:f0de320e23ac 442 case ATTR_GAS_INTERVAL:
Rhyme 0:f0de320e23ac 443 if (sensor[4]) {
Rhyme 0:f0de320e23ac 444 sensor[4]->setInterval((value[1] << 8) | value[0]) ;
Rhyme 4:aa67eddf0ab1 445 afero->setAttributeComplete(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 446 }
Rhyme 0:f0de320e23ac 447 break ;
Rhyme 0:f0de320e23ac 448 default:
Rhyme 0:f0de320e23ac 449 break ;
Rhyme 0:f0de320e23ac 450 }
Rhyme 0:f0de320e23ac 451 // af_print_values(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 452 if ((pending != 0)&&(pending->request->requestId == requestId)) {
Rhyme 0:f0de320e23ac 453 printf("Request [%d] replied in %d sec!\n", requestId, pending->replied_time - pending->submit_time) ;
Rhyme 0:f0de320e23ac 454 delete pending ;
Rhyme 0:f0de320e23ac 455 pending = 0 ;
Rhyme 0:f0de320e23ac 456 }
Rhyme 0:f0de320e23ac 457 }
Rhyme 0:f0de320e23ac 458
Rhyme 0:f0de320e23ac 459 /*
Rhyme 0:f0de320e23ac 460 * Application callback that allows afLib to notify that an attribute has changed.
Rhyme 0:f0de320e23ac 461 * This method will be called in response to a getAttribute call from the application
Rhyme 0:f0de320e23ac 462 * and whenever a ASR module attribute changes.
Rhyme 0:f0de320e23ac 463 */
Rhyme 0:f0de320e23ac 464 void attributeUpdatedReport(
Rhyme 0:f0de320e23ac 465 const uint8_t requestId,
Rhyme 0:f0de320e23ac 466 const uint16_t attributeId,
Rhyme 0:f0de320e23ac 467 const uint16_t valueLen,
Rhyme 0:f0de320e23ac 468 const uint8_t *value
Rhyme 0:f0de320e23ac 469 )
Rhyme 0:f0de320e23ac 470 {
Rhyme 0:f0de320e23ac 471 uint32_t timestamp = edge_time ;
Rhyme 0:f0de320e23ac 472 if ((pending != 0)&&(pending->request->requestId == requestId)) {
Rhyme 0:f0de320e23ac 473 pending->replied_time = timestamp ;
Rhyme 0:f0de320e23ac 474 }
Rhyme 0:f0de320e23ac 475 ts2time(timestamp, &current_time) ;
Rhyme 0:f0de320e23ac 476 print_time(&current_time) ;
Rhyme 0:f0de320e23ac 477 printf(" %5d ASR reported [%d]: ", attributeId, requestId) ;
Rhyme 3:cac964851bb6 478 if (attributeId == ATTR_LINKED_TIMESTAMP) { /* timestamp! */
Rhyme 0:f0de320e23ac 479 set_time(valueLen, value) ;
Rhyme 0:f0de320e23ac 480 printf("timestampe = %d\n", timestamp) ;
Rhyme 0:f0de320e23ac 481 print_date(&current_time) ;
Rhyme 0:f0de320e23ac 482 // print_time(&current_time) ;
Rhyme 0:f0de320e23ac 483 printf("\n") ;
Rhyme 0:f0de320e23ac 484 }
Rhyme 0:f0de320e23ac 485 af_print_values(requestId, attributeId, valueLen, value) ;
Rhyme 0:f0de320e23ac 486 switch(attributeId) {
Rhyme 6:44ca704f2bc1 487 case ATTR_REBOOT_REASON:
Rhyme 6:44ca704f2bc1 488 printf("Reboot Reason: ") ;
Rhyme 6:44ca704f2bc1 489 switch(value[0]) {
Rhyme 6:44ca704f2bc1 490 case 1: printf("Reset pin asserted\n") ; break ;
Rhyme 6:44ca704f2bc1 491 case 2: printf("Watchdog reset\n") ; break ;
Rhyme 6:44ca704f2bc1 492 case 4: printf("Software reset\n") ; break ;
Rhyme 6:44ca704f2bc1 493 case 8: printf("CPU Lock up\n") ; break ;
Rhyme 6:44ca704f2bc1 494 }
Rhyme 6:44ca704f2bc1 495 break ;
Rhyme 6:44ca704f2bc1 496 case ATTR_MCU_INTERFACE:
Rhyme 6:44ca704f2bc1 497 printf("MCU Interface: ") ;
Rhyme 6:44ca704f2bc1 498 switch(value[0]) {
Rhyme 6:44ca704f2bc1 499 case 0: printf("No MCU\n") ; break ;
Rhyme 6:44ca704f2bc1 500 case 1: printf("SPI Slave\n") ; break ;
Rhyme 6:44ca704f2bc1 501 case 2: printf("UART\n") ; break ;
Rhyme 6:44ca704f2bc1 502 default: printf("Unknown\n") ; break ;
Rhyme 6:44ca704f2bc1 503 }
Rhyme 6:44ca704f2bc1 504 break ;
Rhyme 0:f0de320e23ac 505 case AF_SYSTEM_ASR_STATE:
Rhyme 0:f0de320e23ac 506 printf("ASR state: ") ;
Rhyme 0:f0de320e23ac 507 switch(value[0]) {
Rhyme 0:f0de320e23ac 508 case MODULE_STATE_REBOOTED:
Rhyme 3:cac964851bb6 509 gLinkedState = false ;
Rhyme 0:f0de320e23ac 510 printf("Rebooted\n") ;
Rhyme 0:f0de320e23ac 511 break ;
Rhyme 0:f0de320e23ac 512 case MODULE_STATE_LINKED:
Rhyme 3:cac964851bb6 513 gLinkedState = true ;
Rhyme 0:f0de320e23ac 514 printf("Linked\n") ;
Rhyme 0:f0de320e23ac 515 break ;
Rhyme 0:f0de320e23ac 516 case MODULE_STATE_UPDATING:
Rhyme 6:44ca704f2bc1 517 gLinkedState = true ;
Rhyme 0:f0de320e23ac 518 printf("Updating\n") ;
Rhyme 6:44ca704f2bc1 519 if (display) {
Rhyme 6:44ca704f2bc1 520 display->clearDisplay() ;
Rhyme 6:44ca704f2bc1 521 display->putStr("FW Updating...") ;
Rhyme 6:44ca704f2bc1 522 }
Rhyme 0:f0de320e23ac 523 break ;
Rhyme 0:f0de320e23ac 524 case MOUDLE_STATE_UPDATE_READY:
Rhyme 3:cac964851bb6 525 gLinkedState = false ;
Rhyme 0:f0de320e23ac 526 printf("Update ready - rebooting\n") ;
Rhyme 6:44ca704f2bc1 527 if (display) {
Rhyme 6:44ca704f2bc1 528 display->clearDisplay() ;
Rhyme 6:44ca704f2bc1 529 display->putStr("Rebooting...") ;
Rhyme 6:44ca704f2bc1 530 }
Rhyme 0:f0de320e23ac 531 while(afero->setAttribute32(AF_SYSTEM_COMMAND, MODULE_COMMAND_REBOOT) != afSUCCESS) {
Rhyme 0:f0de320e23ac 532 afero->loop() ;
Rhyme 6:44ca704f2bc1 533 wait_us(100) ;
Rhyme 0:f0de320e23ac 534 }
Rhyme 6:44ca704f2bc1 535 software_reset() ;
Rhyme 0:f0de320e23ac 536 break ;
Rhyme 0:f0de320e23ac 537 default:
Rhyme 0:f0de320e23ac 538 break ;
Rhyme 0:f0de320e23ac 539 }
Rhyme 0:f0de320e23ac 540 break ;
Rhyme 0:f0de320e23ac 541 default:
Rhyme 0:f0de320e23ac 542 break ;
Rhyme 0:f0de320e23ac 543 }
Rhyme 0:f0de320e23ac 544 if ((pending != 0)&&(pending->request->requestId == requestId)) {
Rhyme 0:f0de320e23ac 545 printf("Request [%d] replied in %d sec!\n", requestId, pending->replied_time - pending->submit_time) ;
Rhyme 0:f0de320e23ac 546 delete pending ;
Rhyme 0:f0de320e23ac 547 pending = 0 ;
Rhyme 0:f0de320e23ac 548 }
Rhyme 0:f0de320e23ac 549 }