Orefatoi
/
afero_poc15_171201
POC1.5 prototype 2 x color sensor 2 x LM75B 3 x AnalogIn 1 x accel
af_utils/af_attriburtes.cpp@5:eba500888787, 2017-12-05 (annotated)
- Committer:
- Rhyme
- Date:
- Tue Dec 05 00:46:52 2017 +0000
- Revision:
- 5:eba500888787
- Parent:
- 4:aa67eddf0ab1
- Child:
- 6:44ca704f2bc1
calibration related touch ups
Who changed what in which revision?
User | Revision | Line number | New 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 | 2:778a4d4436ff | 56 | { ATTR_TEMP0_PRESENT, "Temp0 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 57 | { ATTR_TEMP0_ENABLE, "Temp0 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 58 | { ATTR_TEMP0_INTERVAL, "Temp0 Interval", ATTRIBUTE_TYPE_SINT16, 2 }, |
Rhyme | 2:778a4d4436ff | 59 | { ATTR_TEMP0_VALUE, "Temp0 Value", ATTRIBUTE_TYPE_FIXED_15_16, 4}, |
Rhyme | 2:778a4d4436ff | 60 | /* second temperature sensor (SMTC502AT/Before) */ |
Rhyme | 2:778a4d4436ff | 61 | { ATTR_TEMP1_PRESENT, "Temp1 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 62 | { ATTR_TEMP1_ENABLE, "Temp1 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 63 | { ATTR_TEMP1_INTERVAL, "Temp1 Interval", ATTRIBUTE_TYPE_SINT16, 2 }, |
Rhyme | 2:778a4d4436ff | 64 | { ATTR_TEMP1_VALUE, "Temp1 Value", ATTRIBUTE_TYPE_FIXED_15_16, 4}, |
Rhyme | 2:778a4d4436ff | 65 | /* third temperature sensor (SMTC502AT/After) */ |
Rhyme | 2:778a4d4436ff | 66 | { ATTR_TEMP2_PRESENT, "Temp2 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 67 | { ATTR_TEMP2_ENABLE, "Temp2 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 68 | { ATTR_TEMP2_INTERVAL, "Temp2 Interval", ATTRIBUTE_TYPE_SINT16, 2 }, |
Rhyme | 2:778a4d4436ff | 69 | { ATTR_TEMP2_VALUE, "Temp2 Value", ATTRIBUTE_TYPE_FIXED_15_16, 4}, |
Rhyme | 2:778a4d4436ff | 70 | /* fouth temperateure sensor (LM75B) */ |
Rhyme | 2:778a4d4436ff | 71 | { ATTR_TEMP3_PRESENT, "Temp3 Present", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 72 | { ATTR_TEMP3_ENABLE, "Temp3 Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 73 | { ATTR_TEMP3_INTERVAL, "Temp3 Interval", ATTRIBUTE_TYPE_SINT16, 2 }, |
Rhyme | 2:778a4d4436ff | 74 | { ATTR_TEMP3_VALUE, "Temp3 Value", ATTRIBUTE_TYPE_FIXED_15_16, 4}, |
Rhyme | 2:778a4d4436ff | 75 | /* Gas Pressure sensor (PSE530) */ |
Rhyme | 2:778a4d4436ff | 76 | { ATTR_GAS_PRESENT, "Gas Pressure Present", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 77 | { ATTR_GAS_ENABLE, "Gas Pressure Enable", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 2:778a4d4436ff | 78 | { ATTR_GAS_INTERVAL, "Gas Pressure Interval", ATTRIBUTE_TYPE_SINT16, 2 }, |
Rhyme | 2:778a4d4436ff | 79 | { ATTR_GAS_VALUE, "Gas Pressure Value", ATTRIBUTE_TYPE_FIXED_15_16, 4}, |
Rhyme | 2:778a4d4436ff | 80 | /* Software Reset Request */ |
Rhyme | 2:778a4d4436ff | 81 | { ATTR_SOFTWARE_RESET, "Software Reset", ATTRIBUTE_TYPE_BOOLEAN, 1 }, |
Rhyme | 0:f0de320e23ac | 82 | |
Rhyme | 0:f0de320e23ac | 83 | { 1024, "LED", ATTRIBUTE_TYPE_SINT16, 2 }, |
Rhyme | 0:f0de320e23ac | 84 | { 1025, "I/O 0", ATTRIBUTE_TYPE_SINT64, 8 }, |
Rhyme | 0:f0de320e23ac | 85 | { 1026, "I/O 1", ATTRIBUTE_TYPE_SINT64, 8 }, |
Rhyme | 0:f0de320e23ac | 86 | { 1028, "I/O 2", ATTRIBUTE_TYPE_SINT64, 8 }, |
Rhyme | 0:f0de320e23ac | 87 | { 1030, "BUTTON", ATTRIBUTE_TYPE_BOOLEAN, 2 }, |
Rhyme | 0:f0de320e23ac | 88 | { 1031, "I/O 3", ATTRIBUTE_TYPE_SINT64, 8 }, |
Rhyme | 0:f0de320e23ac | 89 | { 2001, "Bootloader Version", ATTRIBUTE_TYPE_SINT64, 8 }, |
Rhyme | 0:f0de320e23ac | 90 | { 2002, "BLE Stack Version", ATTRIBUTE_TYPE_SINT64, 8 }, |
Rhyme | 0:f0de320e23ac | 91 | { 2003, "FW Application Version", ATTRIBUTE_TYPE_SINT64, 8 }, |
Rhyme | 0:f0de320e23ac | 92 | { 2004, "Device Description", ATTRIBUTE_TYPE_SINT64, 8 }, |
Rhyme | 0:f0de320e23ac | 93 | { 2006, "Wi-Fi chip", ATTRIBUTE_TYPE_SINT64, 8 }, |
Rhyme | 0:f0de320e23ac | 94 | { 59001, "Offline Schedules enable", ATTRIBUTE_TYPE_SINT16, 2 }, |
Rhyme | 0:f0de320e23ac | 95 | { 60000, "Security Enabled", ATTRIBUTE_TYPE_SINT8, 1 }, /* ? */ |
Rhyme | 0:f0de320e23ac | 96 | { 65001, "UTC offset data", ATTRIBUTE_TYPE_BYTES, 8 }, |
Rhyme | 0:f0de320e23ac | 97 | { 65004, "Configured SSID", ATTRIBUTE_TYPE_UTF8S, 10 }, /* ? */ |
Rhyme | 0:f0de320e23ac | 98 | { 65005, "Wi-Fi Bars", ATTRIBUTE_TYPE_SINT8, 1 }, |
Rhyme | 0:f0de320e23ac | 99 | { 65006, "Wi-Fi Steady State", ATTRIBUTE_TYPE_SINT8, 1 }, |
Rhyme | 0:f0de320e23ac | 100 | { 65012, "Command", ATTRIBUTE_TYPE_BYTES, 8 }, /* ? */ |
Rhyme | 0:f0de320e23ac | 101 | { 65013, "ASR State", ATTRIBUTE_TYPE_SINT8, 1 }, |
Rhyme | 0:f0de320e23ac | 102 | { 65014, "Low Battery Warning", ATTRIBUTE_TYPE_SINT8, 1 }, |
Rhyme | 3:cac964851bb6 | 103 | { ATTR_LINKED_TIMESTAMP, "Linked Timestamp", ATTRIBUTE_TYPE_SINT32, 4 }, |
Rhyme | 0:f0de320e23ac | 104 | { 65018, "Attribute ACK", ATTRIBUTE_TYPE_SINT16, 8 }, |
Rhyme | 0:f0de320e23ac | 105 | { 65019, "Reboot Reason", ATTRIBUTE_TYPE_UTF8S, 100 }, |
Rhyme | 0:f0de320e23ac | 106 | { 65020, "BLE Comms", ATTRIBUTE_TYPE_BYTES, 12 }, |
Rhyme | 0:f0de320e23ac | 107 | { 65021, "MCU Interface", ATTRIBUTE_TYPE_SINT8, 1 }, |
Rhyme | 0:f0de320e23ac | 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, ¤t_time) ; |
Rhyme | 0:f0de320e23ac | 246 | print_time(¤t_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(¤t_time) ; |
Rhyme | 0:f0de320e23ac | 255 | print_time(¤t_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 | 5:eba500888787 | 340 | afero->setAttributeComplete(requestId, attributeId, valueLen, value) ; |
Rhyme | 5:eba500888787 | 341 | if (value[0]) { /* do calibration! */ |
Rhyme | 5:eba500888787 | 342 | ((edge_color*)sensor[1])->calibrate(color0_target, color0_pwm, 10) ; |
Rhyme | 5:eba500888787 | 343 | afero->setAttribute32(ATTR_COLOR0_PWM_R, color0_pwm[0]) ; |
Rhyme | 5:eba500888787 | 344 | afero->setAttribute32(ATTR_COLOR0_PWM_G, color0_pwm[1]) ; |
Rhyme | 5:eba500888787 | 345 | afero->setAttribute32(ATTR_COLOR0_PWM_B, color0_pwm[2]) ; |
Rhyme | 5:eba500888787 | 346 | afero->setAttributeBool(ATTR_COLOR0_CALIBRATE, false) ; |
Rhyme | 5:eba500888787 | 347 | } |
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 | afero->setAttributeComplete(requestId, attributeId, valueLen, value) ; |
Rhyme | 5:eba500888787 | 403 | ((edge_color*)sensor[2])->calibrate(color1_target, color1_pwm, 10) ; |
Rhyme | 5:eba500888787 | 404 | afero->setAttribute32(ATTR_COLOR1_PWM_R, color1_pwm[0]) ; |
Rhyme | 5:eba500888787 | 405 | afero->setAttribute32(ATTR_COLOR1_PWM_G, color1_pwm[1]) ; |
Rhyme | 5:eba500888787 | 406 | afero->setAttribute32(ATTR_COLOR1_PWM_B, color1_pwm[2]) ; |
Rhyme | 5:eba500888787 | 407 | afero->setAttributeBool(ATTR_COLOR1_CALIBRATE, false) ; |
Rhyme | 5:eba500888787 | 408 | } |
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, ¤t_time) ; |
Rhyme | 0:f0de320e23ac | 476 | print_time(¤t_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(¤t_time) ; |
Rhyme | 0:f0de320e23ac | 482 | // print_time(¤t_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 | 0:f0de320e23ac | 487 | case AF_SYSTEM_ASR_STATE: |
Rhyme | 0:f0de320e23ac | 488 | printf("ASR state: ") ; |
Rhyme | 0:f0de320e23ac | 489 | switch(value[0]) { |
Rhyme | 0:f0de320e23ac | 490 | case MODULE_STATE_REBOOTED: |
Rhyme | 3:cac964851bb6 | 491 | gLinkedState = false ; |
Rhyme | 0:f0de320e23ac | 492 | printf("Rebooted\n") ; |
Rhyme | 0:f0de320e23ac | 493 | break ; |
Rhyme | 0:f0de320e23ac | 494 | case MODULE_STATE_LINKED: |
Rhyme | 3:cac964851bb6 | 495 | gLinkedState = true ; |
Rhyme | 0:f0de320e23ac | 496 | printf("Linked\n") ; |
Rhyme | 0:f0de320e23ac | 497 | break ; |
Rhyme | 0:f0de320e23ac | 498 | case MODULE_STATE_UPDATING: |
Rhyme | 3:cac964851bb6 | 499 | gLinkedState = false ; |
Rhyme | 0:f0de320e23ac | 500 | printf("Updating\n") ; |
Rhyme | 0:f0de320e23ac | 501 | break ; |
Rhyme | 0:f0de320e23ac | 502 | case MOUDLE_STATE_UPDATE_READY: |
Rhyme | 3:cac964851bb6 | 503 | gLinkedState = false ; |
Rhyme | 0:f0de320e23ac | 504 | printf("Update ready - rebooting\n") ; |
Rhyme | 0:f0de320e23ac | 505 | while(afero->setAttribute32(AF_SYSTEM_COMMAND, MODULE_COMMAND_REBOOT) != afSUCCESS) { |
Rhyme | 0:f0de320e23ac | 506 | afero->loop() ; |
Rhyme | 0:f0de320e23ac | 507 | wait(0.1) ; |
Rhyme | 0:f0de320e23ac | 508 | } |
Rhyme | 0:f0de320e23ac | 509 | break ; |
Rhyme | 0:f0de320e23ac | 510 | default: |
Rhyme | 0:f0de320e23ac | 511 | break ; |
Rhyme | 0:f0de320e23ac | 512 | } |
Rhyme | 0:f0de320e23ac | 513 | break ; |
Rhyme | 0:f0de320e23ac | 514 | default: |
Rhyme | 0:f0de320e23ac | 515 | break ; |
Rhyme | 0:f0de320e23ac | 516 | } |
Rhyme | 0:f0de320e23ac | 517 | if ((pending != 0)&&(pending->request->requestId == requestId)) { |
Rhyme | 0:f0de320e23ac | 518 | printf("Request [%d] replied in %d sec!\n", requestId, pending->replied_time - pending->submit_time) ; |
Rhyme | 0:f0de320e23ac | 519 | delete pending ; |
Rhyme | 0:f0de320e23ac | 520 | pending = 0 ; |
Rhyme | 0:f0de320e23ac | 521 | } |
Rhyme | 0:f0de320e23ac | 522 | } |