Generic communication interface between the wireless board (mote) and the sensor board. Any kind of sensor board can be connected to the mote using this specification given it provides a SPI peripheral, one input pin with interrupt capability and one digital output. The sensor board must implement a special register set from which all required information can be retrieved. Protocol: http://is.gd/wuQorh Github: http://is.gd/ySj1L9
sens_itf/sens_itf_sensor.cpp@1:acdf490d94a7, 2014-04-08 (annotated)
- Committer:
- marcelobarrosalmeida
- Date:
- Tue Apr 08 16:34:20 2014 +0000
- Revision:
- 1:acdf490d94a7
Adding accel to sensor list
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
marcelobarrosalmeida | 1:acdf490d94a7 | 1 | #include <string.h> |
marcelobarrosalmeida | 1:acdf490d94a7 | 2 | #include <stdint.h> |
marcelobarrosalmeida | 1:acdf490d94a7 | 3 | #include "mbed.h" |
marcelobarrosalmeida | 1:acdf490d94a7 | 4 | #include "sens_itf.h" |
marcelobarrosalmeida | 1:acdf490d94a7 | 5 | #include "sens_util.h" |
marcelobarrosalmeida | 1:acdf490d94a7 | 6 | #include "../util/buf_io.h" |
marcelobarrosalmeida | 1:acdf490d94a7 | 7 | #include "../util/crc16.h" |
marcelobarrosalmeida | 1:acdf490d94a7 | 8 | #include "../pt/pt.h" |
marcelobarrosalmeida | 1:acdf490d94a7 | 9 | #include "SLCD.h" |
marcelobarrosalmeida | 1:acdf490d94a7 | 10 | #include "MMA8451Q.h" |
marcelobarrosalmeida | 1:acdf490d94a7 | 11 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 12 | #define SENS_ITF_SENSOR_DBG_FRAME 1 |
marcelobarrosalmeida | 1:acdf490d94a7 | 13 | #define SENS_ITF_DBG_FRAME 1 |
marcelobarrosalmeida | 1:acdf490d94a7 | 14 | #define SENS_ITF_SENSOR_NUM_OF_POINTS 5 |
marcelobarrosalmeida | 1:acdf490d94a7 | 15 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 16 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
marcelobarrosalmeida | 1:acdf490d94a7 | 17 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 18 | static uint8_t main_svr_addr[SENS_ITF_SERVER_ADDR_SIZE]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 19 | static uint8_t secon_svr_addr[SENS_ITF_SERVER_ADDR_SIZE]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 20 | static uint8_t rx_frame[SENS_ITF_MAX_FRAME_SIZE]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 21 | static volatile uint8_t num_rx_bytes; |
marcelobarrosalmeida | 1:acdf490d94a7 | 22 | static Timeout rx_trmout_timer ; |
marcelobarrosalmeida | 1:acdf490d94a7 | 23 | static Ticker acq_data_timer; |
marcelobarrosalmeida | 1:acdf490d94a7 | 24 | static sens_itf_point_ctrl_t sensor_points; |
marcelobarrosalmeida | 1:acdf490d94a7 | 25 | static sens_itf_cmd_brd_id_t board_info; |
marcelobarrosalmeida | 1:acdf490d94a7 | 26 | static struct pt pt_updt; |
marcelobarrosalmeida | 1:acdf490d94a7 | 27 | static struct pt pt_data; |
marcelobarrosalmeida | 1:acdf490d94a7 | 28 | static volatile uint8_t frame_timeout; |
marcelobarrosalmeida | 1:acdf490d94a7 | 29 | static volatile uint8_t acq_data ; |
marcelobarrosalmeida | 1:acdf490d94a7 | 30 | static DigitalOut greenLED(LED1); |
marcelobarrosalmeida | 1:acdf490d94a7 | 31 | static DigitalOut redLED(LED2); |
marcelobarrosalmeida | 1:acdf490d94a7 | 32 | static AnalogIn lightSensor(PTE22); |
marcelobarrosalmeida | 1:acdf490d94a7 | 33 | static SLCD sLCD; |
marcelobarrosalmeida | 1:acdf490d94a7 | 34 | static Serial pcSerial(USBTX, USBRX); |
marcelobarrosalmeida | 1:acdf490d94a7 | 35 | static MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); |
marcelobarrosalmeida | 1:acdf490d94a7 | 36 | static InterruptIn mode_switch(SW3); |
marcelobarrosalmeida | 1:acdf490d94a7 | 37 | static volatile uint8_t view_mode; |
marcelobarrosalmeida | 1:acdf490d94a7 | 38 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 39 | void scroll_message(char *message, unsigned char len) |
marcelobarrosalmeida | 1:acdf490d94a7 | 40 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 41 | sLCD.All_Segments(0); |
marcelobarrosalmeida | 1:acdf490d94a7 | 42 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 43 | for (int start = 0; start < len - 4; start++) |
marcelobarrosalmeida | 1:acdf490d94a7 | 44 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 45 | for (int digit = 0; digit < 4; digit++) |
marcelobarrosalmeida | 1:acdf490d94a7 | 46 | sLCD.putc(message[start + digit]); |
marcelobarrosalmeida | 1:acdf490d94a7 | 47 | wait(0.4); |
marcelobarrosalmeida | 1:acdf490d94a7 | 48 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 49 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 50 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 51 | static void dump_frame(uint8_t *frame, uint8_t size) |
marcelobarrosalmeida | 1:acdf490d94a7 | 52 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 53 | int n,m; |
marcelobarrosalmeida | 1:acdf490d94a7 | 54 | char buf[64]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 55 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 56 | buf[0] = buf[1] = buf[2] = buf[3] = ' '; |
marcelobarrosalmeida | 1:acdf490d94a7 | 57 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 58 | for(n = 0, m = 4; n < size ; n++, m+=3) |
marcelobarrosalmeida | 1:acdf490d94a7 | 59 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 60 | sprintf(&buf[m],"%02X_",frame[n]); |
marcelobarrosalmeida | 1:acdf490d94a7 | 61 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 62 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 63 | buf[m] = buf[m+1] = buf[m+2] = buf[m+3] = ' '; |
marcelobarrosalmeida | 1:acdf490d94a7 | 64 | buf[m+4] = '\0'; |
marcelobarrosalmeida | 1:acdf490d94a7 | 65 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 66 | m +=4; |
marcelobarrosalmeida | 1:acdf490d94a7 | 67 | scroll_message(buf,m); |
marcelobarrosalmeida | 1:acdf490d94a7 | 68 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 69 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 70 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 71 | static uint8_t sens_itf_get_point_type(uint8_t point) |
marcelobarrosalmeida | 1:acdf490d94a7 | 72 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 73 | return sensor_points.points[point].desc.type; |
marcelobarrosalmeida | 1:acdf490d94a7 | 74 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 75 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 76 | static uint8_t sens_itf_get_number_of_points(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 77 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 78 | return SENS_ITF_SENSOR_NUM_OF_POINTS; |
marcelobarrosalmeida | 1:acdf490d94a7 | 79 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 80 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 81 | static sens_itf_cmd_point_desc_t *sens_itf_get_point_desc(uint8_t point) |
marcelobarrosalmeida | 1:acdf490d94a7 | 82 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 83 | sens_itf_cmd_point_desc_t *d = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 84 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 85 | if (point < sens_itf_get_number_of_points()) |
marcelobarrosalmeida | 1:acdf490d94a7 | 86 | d = &sensor_points.points[point].desc; |
marcelobarrosalmeida | 1:acdf490d94a7 | 87 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 88 | return d; |
marcelobarrosalmeida | 1:acdf490d94a7 | 89 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 90 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 91 | static sens_itf_cmd_point_t *sens_itf_get_point_value(uint8_t point) |
marcelobarrosalmeida | 1:acdf490d94a7 | 92 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 93 | sens_itf_cmd_point_t *v = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 94 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 95 | if (point < sens_itf_get_number_of_points()) |
marcelobarrosalmeida | 1:acdf490d94a7 | 96 | v = &sensor_points.points[point].value; |
marcelobarrosalmeida | 1:acdf490d94a7 | 97 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 98 | return v; |
marcelobarrosalmeida | 1:acdf490d94a7 | 99 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 100 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 101 | static uint8_t sens_itf_set_point_value(uint8_t point, sens_itf_cmd_point_t *v) |
marcelobarrosalmeida | 1:acdf490d94a7 | 102 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 103 | uint8_t ret = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 104 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 105 | if (point < sens_itf_get_number_of_points()) |
marcelobarrosalmeida | 1:acdf490d94a7 | 106 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 107 | sensor_points.points[point].value = *v; |
marcelobarrosalmeida | 1:acdf490d94a7 | 108 | ret = 1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 109 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 110 | else |
marcelobarrosalmeida | 1:acdf490d94a7 | 111 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 112 | ret = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 113 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 114 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 115 | return ret; |
marcelobarrosalmeida | 1:acdf490d94a7 | 116 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 117 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 118 | static sens_itf_cmd_brd_id_t *sens_itf_get_board_info(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 119 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 120 | return &board_info; |
marcelobarrosalmeida | 1:acdf490d94a7 | 121 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 122 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 123 | static uint8_t sens_itf_sensor_send_frame(uint8_t *frame, uint8_t size) |
marcelobarrosalmeida | 1:acdf490d94a7 | 124 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 125 | //dump_frame(frame, size); |
marcelobarrosalmeida | 1:acdf490d94a7 | 126 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 127 | for(int n = 0 ; n < size ; n++) |
marcelobarrosalmeida | 1:acdf490d94a7 | 128 | pcSerial.putc((unsigned int )frame[n]); |
marcelobarrosalmeida | 1:acdf490d94a7 | 129 | //pcSerial.puts((char *)frame,size); // puts returns the size sent ? |
marcelobarrosalmeida | 1:acdf490d94a7 | 130 | return size; |
marcelobarrosalmeida | 1:acdf490d94a7 | 131 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 132 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 133 | static uint8_t sens_itf_sensor_check_register_map(sens_itf_cmd_req_t *cmd, sens_itf_cmd_res_t *ans, uint8_t *frame) |
marcelobarrosalmeida | 1:acdf490d94a7 | 134 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 135 | uint8_t size = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 136 | if ( // check global register map for valid address ranges |
marcelobarrosalmeida | 1:acdf490d94a7 | 137 | ((cmd->hdr.addr > SENS_ITF_REGMAP_SVR_SEC_ADDR) && |
marcelobarrosalmeida | 1:acdf490d94a7 | 138 | (cmd->hdr.addr < SENS_ITF_REGMAP_POINT_DESC_1)) || |
marcelobarrosalmeida | 1:acdf490d94a7 | 139 | (cmd->hdr.addr > SENS_ITF_REGMAP_WRITE_POINT_DATA_32) || |
marcelobarrosalmeida | 1:acdf490d94a7 | 140 | // check local register map - reading |
marcelobarrosalmeida | 1:acdf490d94a7 | 141 | ((cmd->hdr.addr >= SENS_ITF_REGMAP_READ_POINT_DATA_1) && |
marcelobarrosalmeida | 1:acdf490d94a7 | 142 | (cmd->hdr.addr <= SENS_ITF_REGMAP_READ_POINT_DATA_32) && |
marcelobarrosalmeida | 1:acdf490d94a7 | 143 | ((cmd->hdr.addr - SENS_ITF_REGMAP_READ_POINT_DATA_1) >= sens_itf_get_number_of_points())) || |
marcelobarrosalmeida | 1:acdf490d94a7 | 144 | // check local register map - writing |
marcelobarrosalmeida | 1:acdf490d94a7 | 145 | ((cmd->hdr.addr >= SENS_ITF_REGMAP_WRITE_POINT_DATA_1) && |
marcelobarrosalmeida | 1:acdf490d94a7 | 146 | (cmd->hdr.addr <= SENS_ITF_REGMAP_WRITE_POINT_DATA_32) && |
marcelobarrosalmeida | 1:acdf490d94a7 | 147 | ((cmd->hdr.addr - SENS_ITF_REGMAP_WRITE_POINT_DATA_1) >= sens_itf_get_number_of_points()))) |
marcelobarrosalmeida | 1:acdf490d94a7 | 148 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 149 | sens_util_log(SENS_ITF_SENSOR_DBG_FRAME, "Invalid register address %02X",cmd->hdr.addr); |
marcelobarrosalmeida | 1:acdf490d94a7 | 150 | ans->hdr.status = SENS_ITF_ANS_REGISTER_NOT_IMPLEMENTED; |
marcelobarrosalmeida | 1:acdf490d94a7 | 151 | size = sens_itf_pack_cmd_res(ans, frame); |
marcelobarrosalmeida | 1:acdf490d94a7 | 152 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 153 | return size; |
marcelobarrosalmeida | 1:acdf490d94a7 | 154 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 155 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 156 | static uint8_t sens_itf_sensor_writings(sens_itf_cmd_req_t *cmd, sens_itf_cmd_res_t *ans, uint8_t *frame) |
marcelobarrosalmeida | 1:acdf490d94a7 | 157 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 158 | uint8_t size = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 159 | if ((cmd->hdr.addr >= SENS_ITF_REGMAP_WRITE_POINT_DATA_1) && |
marcelobarrosalmeida | 1:acdf490d94a7 | 160 | (cmd->hdr.addr <= SENS_ITF_REGMAP_WRITE_POINT_DATA_32)) |
marcelobarrosalmeida | 1:acdf490d94a7 | 161 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 162 | uint8_t point = cmd->hdr.addr - SENS_ITF_REGMAP_WRITE_POINT_DATA_1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 163 | //sLCD.printf("R%dV%d",point,cmd->payload.point_value_cmd.value.u8); |
marcelobarrosalmeida | 1:acdf490d94a7 | 164 | //wait(0.5); |
marcelobarrosalmeida | 1:acdf490d94a7 | 165 | uint8_t acr = sens_itf_get_point_desc(point)->access_rights & SENS_ITF_ACCESS_WRITE_ONLY; |
marcelobarrosalmeida | 1:acdf490d94a7 | 166 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 167 | if (acr) |
marcelobarrosalmeida | 1:acdf490d94a7 | 168 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 169 | ans->hdr.status = SENS_ITF_ANS_OK; |
marcelobarrosalmeida | 1:acdf490d94a7 | 170 | sens_itf_set_point_value(point,&cmd->payload.point_value_cmd); |
marcelobarrosalmeida | 1:acdf490d94a7 | 171 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 172 | else |
marcelobarrosalmeida | 1:acdf490d94a7 | 173 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 174 | sens_util_log(SENS_ITF_SENSOR_DBG_FRAME, "Point %d does not allow writings",point); |
marcelobarrosalmeida | 1:acdf490d94a7 | 175 | ans->hdr.status = SENS_ITF_ANS_READY_ONLY; |
marcelobarrosalmeida | 1:acdf490d94a7 | 176 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 177 | size = sens_itf_pack_cmd_res(ans, frame); |
marcelobarrosalmeida | 1:acdf490d94a7 | 178 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 179 | return size; |
marcelobarrosalmeida | 1:acdf490d94a7 | 180 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 181 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 182 | static uint8_t sens_itf_sensor_readings(sens_itf_cmd_req_t *cmd, sens_itf_cmd_res_t *ans, uint8_t *frame) |
marcelobarrosalmeida | 1:acdf490d94a7 | 183 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 184 | uint8_t size = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 185 | if ((cmd->hdr.addr >= SENS_ITF_REGMAP_READ_POINT_DATA_1) && |
marcelobarrosalmeida | 1:acdf490d94a7 | 186 | (cmd->hdr.addr <= SENS_ITF_REGMAP_READ_POINT_DATA_32)) |
marcelobarrosalmeida | 1:acdf490d94a7 | 187 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 188 | uint8_t point = cmd->hdr.addr - SENS_ITF_REGMAP_READ_POINT_DATA_1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 189 | uint8_t acr = sens_itf_get_point_desc(point)->access_rights & SENS_ITF_ANS_READY_ONLY; |
marcelobarrosalmeida | 1:acdf490d94a7 | 190 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 191 | if (acr) |
marcelobarrosalmeida | 1:acdf490d94a7 | 192 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 193 | ans->hdr.status = SENS_ITF_ANS_OK; |
marcelobarrosalmeida | 1:acdf490d94a7 | 194 | ans->payload.point_value_cmd = *sens_itf_get_point_value(point); |
marcelobarrosalmeida | 1:acdf490d94a7 | 195 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 196 | else |
marcelobarrosalmeida | 1:acdf490d94a7 | 197 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 198 | sens_util_log(SENS_ITF_SENSOR_DBG_FRAME, "Point %d does not allow readings",point); |
marcelobarrosalmeida | 1:acdf490d94a7 | 199 | ans->hdr.status = SENS_ITF_ANS_WRITE_ONLY; |
marcelobarrosalmeida | 1:acdf490d94a7 | 200 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 201 | size = sens_itf_pack_cmd_res(ans, frame); |
marcelobarrosalmeida | 1:acdf490d94a7 | 202 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 203 | return size; |
marcelobarrosalmeida | 1:acdf490d94a7 | 204 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 205 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 206 | static uint8_t sens_itf_check_other_cmds(sens_itf_cmd_req_t *cmd, sens_itf_cmd_res_t *ans, uint8_t *frame) |
marcelobarrosalmeida | 1:acdf490d94a7 | 207 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 208 | uint8_t size = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 209 | switch (cmd->hdr.addr) |
marcelobarrosalmeida | 1:acdf490d94a7 | 210 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 211 | case SENS_ITF_REGMAP_ITF_VERSION: |
marcelobarrosalmeida | 1:acdf490d94a7 | 212 | ans->payload.itf_version_cmd.version = SENS_ITF_LATEST_VERSION; |
marcelobarrosalmeida | 1:acdf490d94a7 | 213 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 214 | case SENS_ITF_REGMAP_BRD_ID: |
marcelobarrosalmeida | 1:acdf490d94a7 | 215 | memcpy(&ans->payload.brd_id_cmd,sens_itf_get_board_info(),sizeof(sens_itf_cmd_brd_id_t)); |
marcelobarrosalmeida | 1:acdf490d94a7 | 216 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 217 | case SENS_ITF_REGMAP_BRD_STATUS: |
marcelobarrosalmeida | 1:acdf490d94a7 | 218 | ans->payload.brd_status_cmd.status = 0; // TBD |
marcelobarrosalmeida | 1:acdf490d94a7 | 219 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 220 | case SENS_ITF_REGMAP_BRD_CMD: |
marcelobarrosalmeida | 1:acdf490d94a7 | 221 | ans->payload.command_res_cmd.status = 0; // TBD |
marcelobarrosalmeida | 1:acdf490d94a7 | 222 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 223 | case SENS_ITF_REGMAP_READ_BAT_STATUS: |
marcelobarrosalmeida | 1:acdf490d94a7 | 224 | ans->payload.bat_status_cmd.status = 0; // TBD |
marcelobarrosalmeida | 1:acdf490d94a7 | 225 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 226 | case SENS_ITF_REGMAP_READ_BAT_CHARGE: |
marcelobarrosalmeida | 1:acdf490d94a7 | 227 | ans->payload.bat_charge_cmd.charge = 100; // TBD |
marcelobarrosalmeida | 1:acdf490d94a7 | 228 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 229 | case SENS_ITF_REGMAP_SVR_MAIN_ADDR: |
marcelobarrosalmeida | 1:acdf490d94a7 | 230 | memcpy(ans->payload.svr_addr_cmd.addr,main_svr_addr, SENS_ITF_SERVER_ADDR_SIZE); |
marcelobarrosalmeida | 1:acdf490d94a7 | 231 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 232 | case SENS_ITF_REGMAP_SVR_SEC_ADDR: |
marcelobarrosalmeida | 1:acdf490d94a7 | 233 | memcpy(ans->payload.svr_addr_cmd.addr,secon_svr_addr, SENS_ITF_SERVER_ADDR_SIZE); |
marcelobarrosalmeida | 1:acdf490d94a7 | 234 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 235 | default: |
marcelobarrosalmeida | 1:acdf490d94a7 | 236 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 237 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 238 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 239 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 240 | if ((cmd->hdr.addr >= SENS_ITF_REGMAP_POINT_DESC_1) && (cmd->hdr.addr <= SENS_ITF_REGMAP_POINT_DESC_32)) |
marcelobarrosalmeida | 1:acdf490d94a7 | 241 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 242 | uint8_t point = cmd->hdr.addr - SENS_ITF_REGMAP_POINT_DESC_1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 243 | memcpy(&ans->payload.point_desc_cmd, &sensor_points.points[point].desc, sizeof(sens_itf_cmd_point_desc_t)); |
marcelobarrosalmeida | 1:acdf490d94a7 | 244 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 245 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 246 | ans->hdr.status = SENS_ITF_ANS_OK; |
marcelobarrosalmeida | 1:acdf490d94a7 | 247 | size = sens_itf_pack_cmd_res(ans, frame); |
marcelobarrosalmeida | 1:acdf490d94a7 | 248 | return size; |
marcelobarrosalmeida | 1:acdf490d94a7 | 249 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 250 | static void sens_itf_process_cmd(uint8_t *frame, uint8_t num_rx_bytes) |
marcelobarrosalmeida | 1:acdf490d94a7 | 251 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 252 | uint8_t ret; |
marcelobarrosalmeida | 1:acdf490d94a7 | 253 | uint8_t size = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 254 | sens_itf_cmd_req_t cmd; |
marcelobarrosalmeida | 1:acdf490d94a7 | 255 | sens_itf_cmd_res_t ans; |
marcelobarrosalmeida | 1:acdf490d94a7 | 256 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 257 | ret = sens_itf_unpack_cmd_req(&cmd, frame, num_rx_bytes); |
marcelobarrosalmeida | 1:acdf490d94a7 | 258 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 259 | if (ret > 0) |
marcelobarrosalmeida | 1:acdf490d94a7 | 260 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 261 | ans.hdr.addr = cmd.hdr.addr; |
marcelobarrosalmeida | 1:acdf490d94a7 | 262 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 263 | size = sens_itf_sensor_check_register_map(&cmd, &ans,frame); |
marcelobarrosalmeida | 1:acdf490d94a7 | 264 | if (size == 0) |
marcelobarrosalmeida | 1:acdf490d94a7 | 265 | size = sens_itf_sensor_writings(&cmd, &ans,frame); |
marcelobarrosalmeida | 1:acdf490d94a7 | 266 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 267 | if (size == 0) |
marcelobarrosalmeida | 1:acdf490d94a7 | 268 | size = sens_itf_sensor_readings(&cmd, &ans,frame); |
marcelobarrosalmeida | 1:acdf490d94a7 | 269 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 270 | if (size == 0) |
marcelobarrosalmeida | 1:acdf490d94a7 | 271 | size = sens_itf_check_other_cmds(&cmd, &ans,frame); |
marcelobarrosalmeida | 1:acdf490d94a7 | 272 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 273 | if (size == 0) |
marcelobarrosalmeida | 1:acdf490d94a7 | 274 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 275 | ans.hdr.status = SENS_ITF_ANS_ERROR; |
marcelobarrosalmeida | 1:acdf490d94a7 | 276 | sLCD.printf(" D"); |
marcelobarrosalmeida | 1:acdf490d94a7 | 277 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 278 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 279 | size = sens_itf_pack_cmd_res(&ans,frame); |
marcelobarrosalmeida | 1:acdf490d94a7 | 280 | sens_itf_sensor_send_frame(frame, size); |
marcelobarrosalmeida | 1:acdf490d94a7 | 281 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 282 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 283 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 284 | void sens_itf_init_point_db(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 285 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 286 | uint8_t n; |
marcelobarrosalmeida | 1:acdf490d94a7 | 287 | char *point_names[SENS_ITF_POINT_NAME_SIZE] = { "LIGHT", "LEDG", "ACCX", "ACCY", "ACCXZ" }; |
marcelobarrosalmeida | 1:acdf490d94a7 | 288 | uint8_t data_types[SENS_ITF_POINT_NAME_SIZE] = {SENS_ITF_DT_U8, SENS_ITF_DT_U8, SENS_ITF_DT_FLOAT, SENS_ITF_DT_FLOAT, SENS_ITF_DT_FLOAT}; |
marcelobarrosalmeida | 1:acdf490d94a7 | 289 | uint8_t access_rights[SENS_ITF_POINT_NAME_SIZE] = { SENS_ITF_ACCESS_READ_ONLY, SENS_ITF_ACCESS_WRITE_ONLY, SENS_ITF_ACCESS_READ_ONLY, |
marcelobarrosalmeida | 1:acdf490d94a7 | 290 | SENS_ITF_ACCESS_READ_ONLY, SENS_ITF_ACCESS_READ_ONLY}; |
marcelobarrosalmeida | 1:acdf490d94a7 | 291 | uint32_t sampling_time[SENS_ITF_POINT_NAME_SIZE] = {4*10, 0, 4*15, 4*20, 4*25}; |
marcelobarrosalmeida | 1:acdf490d94a7 | 292 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 293 | memset(&sensor_points, 0, sizeof(sensor_points)); |
marcelobarrosalmeida | 1:acdf490d94a7 | 294 | memset(&board_info, 0, sizeof(board_info)); |
marcelobarrosalmeida | 1:acdf490d94a7 | 295 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 296 | strcpy((char *)board_info.model, "KL46Z"); |
marcelobarrosalmeida | 1:acdf490d94a7 | 297 | strcpy((char *)board_info.manufactor, "TESLA"); |
marcelobarrosalmeida | 1:acdf490d94a7 | 298 | board_info.sensor_id = 0xDEADBEEF; |
marcelobarrosalmeida | 1:acdf490d94a7 | 299 | board_info.hardware_revision = 0x01; |
marcelobarrosalmeida | 1:acdf490d94a7 | 300 | board_info.num_of_points = SENS_ITF_SENSOR_NUM_OF_POINTS; |
marcelobarrosalmeida | 1:acdf490d94a7 | 301 | board_info.cabalities = SENS_ITF_CAPABILITIES_DISPLAY | |
marcelobarrosalmeida | 1:acdf490d94a7 | 302 | SENS_ITF_CAPABILITIES_WPAN_STATUS | |
marcelobarrosalmeida | 1:acdf490d94a7 | 303 | SENS_ITF_CAPABILITIES_BATTERY_STATUS; |
marcelobarrosalmeida | 1:acdf490d94a7 | 304 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 305 | sensor_points.num_of_points = SENS_ITF_SENSOR_NUM_OF_POINTS; |
marcelobarrosalmeida | 1:acdf490d94a7 | 306 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 307 | for (n = 0; n < SENS_ITF_SENSOR_NUM_OF_POINTS; n++) |
marcelobarrosalmeida | 1:acdf490d94a7 | 308 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 309 | strcpy((char *)sensor_points.points[n].desc.name, point_names[n]); |
marcelobarrosalmeida | 1:acdf490d94a7 | 310 | sensor_points.points[n].desc.type = data_types[n]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 311 | sensor_points.points[n].desc.unit = 0; // TDB |
marcelobarrosalmeida | 1:acdf490d94a7 | 312 | sensor_points.points[n].desc.access_rights = access_rights[n]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 313 | sensor_points.points[n].desc.sampling_time_x250ms = sampling_time[n]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 314 | sensor_points.points[n].value.type = data_types[n]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 315 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 316 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 317 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 318 | static void sens_itf_rx_tmrout_timer_func(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 319 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 320 | //greenLED = greenLED == 1 ? 0 : 1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 321 | frame_timeout = 1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 322 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 323 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 324 | static void sens_itf_acq_data_timer_func(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 325 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 326 | redLED = redLED == 1 ? 0 : 1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 327 | acq_data = 1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 328 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 329 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 330 | static void sens_itf_rx_tmrout_timer_reesched(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 331 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 332 | rx_trmout_timer.detach(); |
marcelobarrosalmeida | 1:acdf490d94a7 | 333 | rx_trmout_timer.attach_us(sens_itf_rx_tmrout_timer_func,500*1000); |
marcelobarrosalmeida | 1:acdf490d94a7 | 334 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 335 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 336 | // Serial or SPI interrupt, called when a new byte is received |
marcelobarrosalmeida | 1:acdf490d94a7 | 337 | static void sens_itf_sensor_rx_byte(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 338 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 339 | uint8_t value; |
marcelobarrosalmeida | 1:acdf490d94a7 | 340 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 341 | // DISABLE INTERRUPTS |
marcelobarrosalmeida | 1:acdf490d94a7 | 342 | if (frame_timeout) |
marcelobarrosalmeida | 1:acdf490d94a7 | 343 | return; |
marcelobarrosalmeida | 1:acdf490d94a7 | 344 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 345 | value = (uint8_t) pcSerial.getc(); |
marcelobarrosalmeida | 1:acdf490d94a7 | 346 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 347 | if (num_rx_bytes < SENS_ITF_MAX_FRAME_SIZE) |
marcelobarrosalmeida | 1:acdf490d94a7 | 348 | rx_frame[num_rx_bytes] = value; |
marcelobarrosalmeida | 1:acdf490d94a7 | 349 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 350 | num_rx_bytes++; |
marcelobarrosalmeida | 1:acdf490d94a7 | 351 | if (num_rx_bytes >= SENS_ITF_MAX_FRAME_SIZE) |
marcelobarrosalmeida | 1:acdf490d94a7 | 352 | num_rx_bytes = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 353 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 354 | sens_itf_rx_tmrout_timer_reesched(); |
marcelobarrosalmeida | 1:acdf490d94a7 | 355 | // ENABLE INTERRUPTS |
marcelobarrosalmeida | 1:acdf490d94a7 | 356 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 357 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 358 | uint8_t sens_itf_sensor_init(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 359 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 360 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 361 | sens_itf_init_point_db(); |
marcelobarrosalmeida | 1:acdf490d94a7 | 362 | memcpy(main_svr_addr,"1212121212121212",SENS_ITF_SERVER_ADDR_SIZE); |
marcelobarrosalmeida | 1:acdf490d94a7 | 363 | memcpy(secon_svr_addr,"aabbccddeeff1122",SENS_ITF_SERVER_ADDR_SIZE); |
marcelobarrosalmeida | 1:acdf490d94a7 | 364 | num_rx_bytes = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 365 | acq_data = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 366 | frame_timeout = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 367 | greenLED = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 368 | redLED = 1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 369 | sens_itf_rx_tmrout_timer_reesched(); |
marcelobarrosalmeida | 1:acdf490d94a7 | 370 | acq_data_timer.attach(sens_itf_acq_data_timer_func,2); |
marcelobarrosalmeida | 1:acdf490d94a7 | 371 | pcSerial.attach(sens_itf_sensor_rx_byte); |
marcelobarrosalmeida | 1:acdf490d94a7 | 372 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 373 | return 1; |
marcelobarrosalmeida | 1:acdf490d94a7 | 374 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 375 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 376 | static int pt_data_func(struct pt *pt) |
marcelobarrosalmeida | 1:acdf490d94a7 | 377 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 378 | PT_BEGIN(pt); |
marcelobarrosalmeida | 1:acdf490d94a7 | 379 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 380 | while (1) |
marcelobarrosalmeida | 1:acdf490d94a7 | 381 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 382 | // wait a frame timeout |
marcelobarrosalmeida | 1:acdf490d94a7 | 383 | PT_WAIT_UNTIL(pt, frame_timeout == 1); |
marcelobarrosalmeida | 1:acdf490d94a7 | 384 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 385 | if (num_rx_bytes > 0) |
marcelobarrosalmeida | 1:acdf490d94a7 | 386 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 387 | // process it |
marcelobarrosalmeida | 1:acdf490d94a7 | 388 | sens_itf_process_cmd(rx_frame, num_rx_bytes); |
marcelobarrosalmeida | 1:acdf490d94a7 | 389 | num_rx_bytes = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 390 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 391 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 392 | // restart reception |
marcelobarrosalmeida | 1:acdf490d94a7 | 393 | frame_timeout = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 394 | sens_itf_rx_tmrout_timer_reesched(); |
marcelobarrosalmeida | 1:acdf490d94a7 | 395 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 396 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 397 | PT_END(pt); |
marcelobarrosalmeida | 1:acdf490d94a7 | 398 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 399 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 400 | static int pt_updt_func(struct pt *pt) |
marcelobarrosalmeida | 1:acdf490d94a7 | 401 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 402 | PT_BEGIN(pt); |
marcelobarrosalmeida | 1:acdf490d94a7 | 403 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 404 | while (1) |
marcelobarrosalmeida | 1:acdf490d94a7 | 405 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 406 | char buf[5]; |
marcelobarrosalmeida | 1:acdf490d94a7 | 407 | uint8_t v; |
marcelobarrosalmeida | 1:acdf490d94a7 | 408 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 409 | // wait job |
marcelobarrosalmeida | 1:acdf490d94a7 | 410 | PT_WAIT_UNTIL(pt, acq_data == 1); |
marcelobarrosalmeida | 1:acdf490d94a7 | 411 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 412 | v = (uint8_t)(lightSensor.read()*100); |
marcelobarrosalmeida | 1:acdf490d94a7 | 413 | sensor_points.points[0].value.value.u8 = v; |
marcelobarrosalmeida | 1:acdf490d94a7 | 414 | greenLED = sensor_points.points[1].value.value.u8; |
marcelobarrosalmeida | 1:acdf490d94a7 | 415 | sensor_points.points[2].value.value.fp32 = 1.0 - abs(acc.getAccX()); |
marcelobarrosalmeida | 1:acdf490d94a7 | 416 | sensor_points.points[3].value.value.fp32 = 1.0 - abs(acc.getAccY()); |
marcelobarrosalmeida | 1:acdf490d94a7 | 417 | sensor_points.points[4].value.value.fp32 = 1.0 - abs(acc.getAccZ()); |
marcelobarrosalmeida | 1:acdf490d94a7 | 418 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 419 | sLCD.All_Segments(0); |
marcelobarrosalmeida | 1:acdf490d94a7 | 420 | switch(view_mode) |
marcelobarrosalmeida | 1:acdf490d94a7 | 421 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 422 | case 0: |
marcelobarrosalmeida | 1:acdf490d94a7 | 423 | sprintf(buf,"L %2d",v); |
marcelobarrosalmeida | 1:acdf490d94a7 | 424 | sLCD.printf("%s",buf); |
marcelobarrosalmeida | 1:acdf490d94a7 | 425 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 426 | case 1: |
marcelobarrosalmeida | 1:acdf490d94a7 | 427 | sprintf(buf,"%4d",(uint16_t) (sensor_points.points[2].value.value.fp32*1000)); |
marcelobarrosalmeida | 1:acdf490d94a7 | 428 | sLCD.printf("%s",buf); |
marcelobarrosalmeida | 1:acdf490d94a7 | 429 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 430 | case 2: |
marcelobarrosalmeida | 1:acdf490d94a7 | 431 | sprintf(buf,"%4d",(uint16_t) (sensor_points.points[3].value.value.fp32*1000)); |
marcelobarrosalmeida | 1:acdf490d94a7 | 432 | sLCD.printf("%s",buf); |
marcelobarrosalmeida | 1:acdf490d94a7 | 433 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 434 | case 3: |
marcelobarrosalmeida | 1:acdf490d94a7 | 435 | sprintf(buf,"%4d",(uint16_t) (sensor_points.points[4].value.value.fp32*1000)); |
marcelobarrosalmeida | 1:acdf490d94a7 | 436 | sLCD.printf("%s",buf); |
marcelobarrosalmeida | 1:acdf490d94a7 | 437 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 438 | default: |
marcelobarrosalmeida | 1:acdf490d94a7 | 439 | break; |
marcelobarrosalmeida | 1:acdf490d94a7 | 440 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 441 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 442 | acq_data = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 443 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 444 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 445 | PT_END(pt); |
marcelobarrosalmeida | 1:acdf490d94a7 | 446 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 447 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 448 | void set_mode(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 449 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 450 | view_mode = ++view_mode > 3 ? 0 : view_mode; |
marcelobarrosalmeida | 1:acdf490d94a7 | 451 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 452 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 453 | void main(void) |
marcelobarrosalmeida | 1:acdf490d94a7 | 454 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 455 | frame_timeout = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 456 | acq_data = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 457 | view_mode = 0; |
marcelobarrosalmeida | 1:acdf490d94a7 | 458 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 459 | sLCD.All_Segments(0); |
marcelobarrosalmeida | 1:acdf490d94a7 | 460 | sLCD.DP2(0); |
marcelobarrosalmeida | 1:acdf490d94a7 | 461 | sLCD.printf("INIT"); |
marcelobarrosalmeida | 1:acdf490d94a7 | 462 | pcSerial.baud(115200); |
marcelobarrosalmeida | 1:acdf490d94a7 | 463 | sens_itf_sensor_init(); |
marcelobarrosalmeida | 1:acdf490d94a7 | 464 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 465 | mode_switch.rise(set_mode); |
marcelobarrosalmeida | 1:acdf490d94a7 | 466 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 467 | PT_INIT(&pt_data); |
marcelobarrosalmeida | 1:acdf490d94a7 | 468 | PT_INIT(&pt_updt); |
marcelobarrosalmeida | 1:acdf490d94a7 | 469 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 470 | |
marcelobarrosalmeida | 1:acdf490d94a7 | 471 | while(1) |
marcelobarrosalmeida | 1:acdf490d94a7 | 472 | { |
marcelobarrosalmeida | 1:acdf490d94a7 | 473 | pt_data_func(&pt_data); |
marcelobarrosalmeida | 1:acdf490d94a7 | 474 | pt_updt_func(&pt_updt); |
marcelobarrosalmeida | 1:acdf490d94a7 | 475 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 476 | } |
marcelobarrosalmeida | 1:acdf490d94a7 | 477 |