AKM Development Platform. This is the D7.014 version.

Dependencies:   AK09970 AK099XX AK7401 AK7451 AK8963X AK9750 AK9752 AkmSensor BLE_API I2CNano MCP342x SerialNano SpiNano TCA9554A mbed nRF51822

Fork of AKDP by Masahiko Fukasawa

Committer:
masahikofukasawa
Date:
Fri Jul 22 22:54:45 2016 +0000
Revision:
14:76205d28fea2
Parent:
12:522a22a23f8a
Child:
16:5343a852fea4
RevD7_004

Who changed what in which revision?

UserRevisionLine numberNew contents of line
masahikofukasawa 0:c240899240e7 1 #include <stdio.h>
masahikofukasawa 0:c240899240e7 2 #include <stdlib.h>
masahikofukasawa 0:c240899240e7 3 #include "mbed.h"
masahikofukasawa 0:c240899240e7 4 #include "ble/BLE.h"
masahikofukasawa 0:c240899240e7 5 #include "ble/services/UARTService.h"
masahikofukasawa 0:c240899240e7 6 #include "SerialNano.h"
masahikofukasawa 12:522a22a23f8a 7 #include "akmsensor.h"
masahikofukasawa 0:c240899240e7 8 #include "akmsensormanager.h"
masahikofukasawa 0:c240899240e7 9 #include "debug.h"
coisme 2:11a5873f8ec0 10 #include "tca9554a.h"
masahikofukasawa 0:c240899240e7 11
masahikofukasawa 0:c240899240e7 12 #define BLE_UUID_TXRX_SERVICE 0x0000 /**< The UUID of the Nordic UART Service. */
masahikofukasawa 0:c240899240e7 13 #define BLE_UUID_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */
masahikofukasawa 0:c240899240e7 14 #define BLE_UUIDS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */
masahikofukasawa 0:c240899240e7 15
masahikofukasawa 10:a710e8c3311c 16 #define BLE_BUF_LEN UARTService::BLE_UART_SERVICE_MAX_DATA_LEN+1
masahikofukasawa 10:a710e8c3311c 17 #define TXRX_LEN 50
masahikofukasawa 0:c240899240e7 18
masahikofukasawa 0:c240899240e7 19 #define CR '\r'
masahikofukasawa 0:c240899240e7 20 #define LF '\n'
masahikofukasawa 0:c240899240e7 21
masahikofukasawa 14:76205d28fea2 22 #define DEVICE_NAME "AKDP Rev.D7.004"
masahikofukasawa 11:53e52f5f1051 23
masahikofukasawa 0:c240899240e7 24 BLE ble;
masahikofukasawa 0:c240899240e7 25 UARTService* uartService;
coisme 2:11a5873f8ec0 26 #ifndef REV_D
coisme 2:11a5873f8ec0 27 SerialNano serial(P0_28, P0_29); // Rev.C pin configuration
coisme 2:11a5873f8ec0 28 #else
masahikofukasawa 7:f1f544deaaa3 29 SerialNano serial(P0_4, P0_5); // Rev.D pin configuration
masahikofukasawa 7:f1f544deaaa3 30 #endif
masahikofukasawa 4:749a21fd9c2d 31
masahikofukasawa 0:c240899240e7 32 AkmSensorManager* manager;
masahikofukasawa 12:522a22a23f8a 33 uint8_t id;
masahikofukasawa 12:522a22a23f8a 34 uint8_t subId;
masahikofukasawa 0:c240899240e7 35
masahikofukasawa 0:c240899240e7 36 void WrittenHandler(const GattWriteCallbackParams *Handler)
masahikofukasawa 0:c240899240e7 37 {
masahikofukasawa 10:a710e8c3311c 38 static char command[TXRX_LEN]="";
masahikofukasawa 10:a710e8c3311c 39 static uint16_t len=0;
masahikofukasawa 10:a710e8c3311c 40
masahikofukasawa 10:a710e8c3311c 41 uint8_t buf[BLE_BUF_LEN];
masahikofukasawa 0:c240899240e7 42 uint16_t bytesRead;
masahikofukasawa 10:a710e8c3311c 43
masahikofukasawa 0:c240899240e7 44 if (Handler->handle == uartService->getTXCharacteristicHandle())
masahikofukasawa 0:c240899240e7 45 {
masahikofukasawa 0:c240899240e7 46 ble.gattServer().read(uartService->getTXCharacteristicHandle(), buf, &bytesRead);
masahikofukasawa 10:a710e8c3311c 47
masahikofukasawa 10:a710e8c3311c 48 for(uint16_t i=0; i<bytesRead; i++){
masahikofukasawa 10:a710e8c3311c 49 if(buf[i] == CR)
masahikofukasawa 10:a710e8c3311c 50 {
masahikofukasawa 10:a710e8c3311c 51 ; // ignore CR
masahikofukasawa 10:a710e8c3311c 52 }
masahikofukasawa 10:a710e8c3311c 53 else if(buf[i] == LF || len > TXRX_LEN)
masahikofukasawa 0:c240899240e7 54 {
masahikofukasawa 10:a710e8c3311c 55 manager->commandReceived(command);
masahikofukasawa 10:a710e8c3311c 56 for(int j=0; j<TXRX_LEN; j++){
masahikofukasawa 10:a710e8c3311c 57 command[j] = 0;
masahikofukasawa 10:a710e8c3311c 58 }
masahikofukasawa 10:a710e8c3311c 59 len = 0;
masahikofukasawa 10:a710e8c3311c 60 }
masahikofukasawa 10:a710e8c3311c 61 else
masahikofukasawa 10:a710e8c3311c 62 {
masahikofukasawa 10:a710e8c3311c 63 command[len++] = (char)buf[i];
masahikofukasawa 0:c240899240e7 64 }
masahikofukasawa 0:c240899240e7 65 }
masahikofukasawa 0:c240899240e7 66 }
masahikofukasawa 0:c240899240e7 67 }
masahikofukasawa 0:c240899240e7 68
masahikofukasawa 0:c240899240e7 69 void usbUartCallback(void)
masahikofukasawa 0:c240899240e7 70 {
masahikofukasawa 10:a710e8c3311c 71 static char command[TXRX_LEN] = "";
masahikofukasawa 10:a710e8c3311c 72 static uint16_t len=0;
masahikofukasawa 10:a710e8c3311c 73
masahikofukasawa 0:c240899240e7 74 if(serial.readable())
masahikofukasawa 0:c240899240e7 75 {
masahikofukasawa 0:c240899240e7 76 uint8_t c = serial.getc();
masahikofukasawa 0:c240899240e7 77
masahikofukasawa 0:c240899240e7 78 // ignore CR
masahikofukasawa 0:c240899240e7 79 if(c==CR) return;
masahikofukasawa 0:c240899240e7 80
masahikofukasawa 10:a710e8c3311c 81 command[len++] = c;
masahikofukasawa 10:a710e8c3311c 82 if(len>=TXRX_LEN || c == LF)
masahikofukasawa 0:c240899240e7 83 {
masahikofukasawa 10:a710e8c3311c 84 manager->commandReceived(command);
masahikofukasawa 10:a710e8c3311c 85 for(int j=0; j<TXRX_LEN; j++){
masahikofukasawa 10:a710e8c3311c 86 command[j] = 0;
masahikofukasawa 10:a710e8c3311c 87 }
masahikofukasawa 10:a710e8c3311c 88 len = 0;
masahikofukasawa 0:c240899240e7 89 }
masahikofukasawa 0:c240899240e7 90 }
masahikofukasawa 0:c240899240e7 91 }
masahikofukasawa 0:c240899240e7 92
masahikofukasawa 0:c240899240e7 93 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
masahikofukasawa 0:c240899240e7 94 {
masahikofukasawa 0:c240899240e7 95 manager->setEventConnected();
masahikofukasawa 14:76205d28fea2 96 MSG("#Connected\r\n");
masahikofukasawa 0:c240899240e7 97 }
masahikofukasawa 0:c240899240e7 98
masahikofukasawa 0:c240899240e7 99 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
masahikofukasawa 0:c240899240e7 100 {
masahikofukasawa 0:c240899240e7 101 manager->setEventDisconnected();
masahikofukasawa 14:76205d28fea2 102 MSG("#Disconnected\r\n");
masahikofukasawa 0:c240899240e7 103 ble.gap().startAdvertising();
masahikofukasawa 0:c240899240e7 104 }
masahikofukasawa 0:c240899240e7 105
masahikofukasawa 12:522a22a23f8a 106 void bleSetup(){
masahikofukasawa 0:c240899240e7 107 ble.init();
masahikofukasawa 0:c240899240e7 108 // setup advertising
masahikofukasawa 0:c240899240e7 109 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
masahikofukasawa 0:c240899240e7 110 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
masahikofukasawa 0:c240899240e7 111 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
masahikofukasawa 11:53e52f5f1051 112 (const uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME) - 1);
masahikofukasawa 0:c240899240e7 113 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
masahikofukasawa 0:c240899240e7 114 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
masahikofukasawa 0:c240899240e7 115 ble.gap().onConnection(connectionCallback);
masahikofukasawa 0:c240899240e7 116 ble.gap().onDisconnection(disconnectionCallback);
masahikofukasawa 0:c240899240e7 117 ble.gattServer().onDataWritten(WrittenHandler);
masahikofukasawa 0:c240899240e7 118
masahikofukasawa 12:522a22a23f8a 119 // 100ms; in multiples of 0.625ms.
masahikofukasawa 12:522a22a23f8a 120 ble.gap().setAdvertisingInterval(100);
masahikofukasawa 0:c240899240e7 121 ble.gap().startAdvertising();
masahikofukasawa 12:522a22a23f8a 122 }
masahikofukasawa 0:c240899240e7 123
masahikofukasawa 12:522a22a23f8a 124
masahikofukasawa 12:522a22a23f8a 125 #ifdef REV_D
masahikofukasawa 12:522a22a23f8a 126 int16_t getAdcData(MCP342X *mcp3428, MCP342X::AdcChannel ch, MCP342X::SampleSetting s) {
masahikofukasawa 12:522a22a23f8a 127 const int WAIT_ADC_MS = 1;
masahikofukasawa 12:522a22a23f8a 128
masahikofukasawa 12:522a22a23f8a 129 // Configure channel and trigger.
masahikofukasawa 12:522a22a23f8a 130 mcp3428->setChannel(ch);
masahikofukasawa 12:522a22a23f8a 131 mcp3428->setSampleSetting(s);
masahikofukasawa 12:522a22a23f8a 132 mcp3428->trigger();
masahikofukasawa 12:522a22a23f8a 133
masahikofukasawa 12:522a22a23f8a 134 // polling data (!blocking)
masahikofukasawa 12:522a22a23f8a 135 MCP342X::Data data;
masahikofukasawa 12:522a22a23f8a 136 do {
masahikofukasawa 12:522a22a23f8a 137 wait_ms(WAIT_ADC_MS);
masahikofukasawa 12:522a22a23f8a 138 mcp3428->getData(&data);
masahikofukasawa 12:522a22a23f8a 139 } while(data.st == MCP342X::DATA_NOT_UPDATED);
masahikofukasawa 12:522a22a23f8a 140
masahikofukasawa 12:522a22a23f8a 141 return data.value;
masahikofukasawa 12:522a22a23f8a 142 }
masahikofukasawa 12:522a22a23f8a 143 #endif
masahikofukasawa 12:522a22a23f8a 144
masahikofukasawa 12:522a22a23f8a 145 uint8_t getId(PinName pin, uint8_t bits)
masahikofukasawa 12:522a22a23f8a 146 {
masahikofukasawa 12:522a22a23f8a 147 #ifndef REV_D
masahikofukasawa 12:522a22a23f8a 148 /* Rev.C */
masahikofukasawa 12:522a22a23f8a 149 AnalogIn id(pin);
masahikofukasawa 14:76205d28fea2 150 // MSG("#Voltage=%5.2f[V]\r\n",id*3.0);
masahikofukasawa 12:522a22a23f8a 151 double s = id + 1.0/(double)(pow(2.0,bits+1));
masahikofukasawa 12:522a22a23f8a 152 uint8_t value = (uint8_t)(s*pow(2.0,bits));
masahikofukasawa 12:522a22a23f8a 153 #else
masahikofukasawa 12:522a22a23f8a 154 /* Rev.D */
masahikofukasawa 14:76205d28fea2 155 // MSG("#GetID\r\n");
masahikofukasawa 12:522a22a23f8a 156
masahikofukasawa 12:522a22a23f8a 157 I2C i2c(I2C_SDA, I2C_SCL);
masahikofukasawa 12:522a22a23f8a 158 // ADC
masahikofukasawa 12:522a22a23f8a 159 MCP342X mcp342x(&i2c, MCP342X::SLAVE_ADDRESS_6EH);
masahikofukasawa 12:522a22a23f8a 160 mcp342x.setConversionMode(MCP342X::ONE_SHOT);
masahikofukasawa 12:522a22a23f8a 161 MCP342X::AdcChannel ch;
masahikofukasawa 12:522a22a23f8a 162 if (pin == ANALOG_SENSOR_ID) {
masahikofukasawa 12:522a22a23f8a 163 ch = MCP342X::ADC_CH1;
masahikofukasawa 12:522a22a23f8a 164 } else { // pin == ANALOG_SENSOR_ID_SUB
masahikofukasawa 12:522a22a23f8a 165 ch = MCP342X::ADC_CH2;
masahikofukasawa 12:522a22a23f8a 166 }
masahikofukasawa 12:522a22a23f8a 167 int16_t val = getAdcData(&mcp342x, ch, MCP342X::SAMPLE_240HZ_12BIT);
masahikofukasawa 14:76205d28fea2 168 // MSG("#12bit ADC Val = %d.\r\n", val);
masahikofukasawa 12:522a22a23f8a 169
masahikofukasawa 12:522a22a23f8a 170 const int16_t VAL_MAX = 3000-2048; // Corresponds to 3V
masahikofukasawa 12:522a22a23f8a 171 const int16_t VAL_MIN = -2048; // Corresponds to 0V
masahikofukasawa 12:522a22a23f8a 172
masahikofukasawa 12:522a22a23f8a 173 uint8_t value = (uint8_t)((val - VAL_MIN)/(float)(VAL_MAX - VAL_MIN) * (1 << bits) + 0.5);
masahikofukasawa 14:76205d28fea2 174 // MSG("#ID = %d.\r\n", value);
masahikofukasawa 12:522a22a23f8a 175
masahikofukasawa 12:522a22a23f8a 176 #endif
masahikofukasawa 12:522a22a23f8a 177 return value;
masahikofukasawa 12:522a22a23f8a 178 }
masahikofukasawa 12:522a22a23f8a 179
masahikofukasawa 12:522a22a23f8a 180
masahikofukasawa 12:522a22a23f8a 181 void releaseTWI(){
masahikofukasawa 12:522a22a23f8a 182 NRF_TWI0->ENABLE = TWI_ENABLE_ENABLE_Disabled << TWI_ENABLE_ENABLE_Pos;
masahikofukasawa 12:522a22a23f8a 183 NRF_TWI0->POWER = 0;
masahikofukasawa 12:522a22a23f8a 184 NRF_TWI1->ENABLE = TWI_ENABLE_ENABLE_Disabled << TWI_ENABLE_ENABLE_Pos;
masahikofukasawa 12:522a22a23f8a 185 NRF_TWI1->POWER = 0;
masahikofukasawa 12:522a22a23f8a 186 }
masahikofukasawa 12:522a22a23f8a 187
masahikofukasawa 14:76205d28fea2 188 bool initAkdpBoard(){
masahikofukasawa 12:522a22a23f8a 189
masahikofukasawa 14:76205d28fea2 190 // CSN High to activate I2C_GATE
masahikofukasawa 12:522a22a23f8a 191 DigitalOut _cs = DigitalOut(SPI_CS);
masahikofukasawa 12:522a22a23f8a 192 _cs.write(1);
masahikofukasawa 14:76205d28fea2 193 DigitalOut _sck = DigitalOut(SPI_SCK);
masahikofukasawa 14:76205d28fea2 194 _sck.write(1);
masahikofukasawa 12:522a22a23f8a 195
masahikofukasawa 12:522a22a23f8a 196 const int TIME_FOR_OE_MS = 100;
masahikofukasawa 12:522a22a23f8a 197 const TCA9554A::Port PORT_OE_LVS1 = TCA9554A::PORT_7;
masahikofukasawa 12:522a22a23f8a 198 const TCA9554A::Port PORT_OE_LVS2 = TCA9554A::PORT_6;
masahikofukasawa 12:522a22a23f8a 199 const TCA9554A::Port PORT_SPIN = TCA9554A::PORT_5;
masahikofukasawa 12:522a22a23f8a 200 const TCA9554A::Port PORT_RSV_RSTN = TCA9554A::PORT_0;
masahikofukasawa 12:522a22a23f8a 201
masahikofukasawa 12:522a22a23f8a 202 I2C i2c(I2C_SDA, I2C_SCL);
masahikofukasawa 12:522a22a23f8a 203 TCA9554A tca9554a(&i2c, TCA9554A::SLAVE_ADDRESS_38H);
masahikofukasawa 12:522a22a23f8a 204
masahikofukasawa 12:522a22a23f8a 205 // Initializes TCA9554A (I2C GPIO Expander)
masahikofukasawa 12:522a22a23f8a 206 tca9554a.configurePort(PORT_OE_LVS1, TCA9554A::DIR_OUTPUT);
masahikofukasawa 12:522a22a23f8a 207 tca9554a.configurePort(PORT_OE_LVS2, TCA9554A::DIR_OUTPUT);
masahikofukasawa 12:522a22a23f8a 208 tca9554a.configurePort(PORT_SPIN, TCA9554A::DIR_OUTPUT);
masahikofukasawa 12:522a22a23f8a 209 tca9554a.configurePort(PORT_RSV_RSTN, TCA9554A::DIR_OUTPUT);
masahikofukasawa 12:522a22a23f8a 210
masahikofukasawa 12:522a22a23f8a 211 // enable 5V level shifter
masahikofukasawa 12:522a22a23f8a 212 tca9554a.setPortLevel(PORT_OE_LVS1, TCA9554A::HIGH);
masahikofukasawa 12:522a22a23f8a 213 tca9554a.setPortLevel(PORT_OE_LVS2, TCA9554A::HIGH);
masahikofukasawa 12:522a22a23f8a 214 tca9554a.setPortLevel(PORT_RSV_RSTN, TCA9554A::HIGH);
masahikofukasawa 12:522a22a23f8a 215 tca9554a.setPortLevel(PORT_SPIN, TCA9554A::HIGH);
masahikofukasawa 14:76205d28fea2 216 wait_ms(TIME_FOR_OE_MS);
masahikofukasawa 12:522a22a23f8a 217
masahikofukasawa 12:522a22a23f8a 218 // disable 1.8V level shifter to read ID
masahikofukasawa 12:522a22a23f8a 219 tca9554a.setPortLevel(PORT_OE_LVS1, TCA9554A::LOW);
masahikofukasawa 12:522a22a23f8a 220 wait_ms(TIME_FOR_OE_MS);
masahikofukasawa 14:76205d28fea2 221 // MSG("#LVS1 Low.\r\n");
masahikofukasawa 12:522a22a23f8a 222
masahikofukasawa 12:522a22a23f8a 223 // read ID and subId from ADC
masahikofukasawa 12:522a22a23f8a 224 id = getId(ANALOG_SENSOR_ID,4);
masahikofukasawa 12:522a22a23f8a 225 uint8_t subid_bitlen = 4;
masahikofukasawa 12:522a22a23f8a 226 if(id == AkmSensor::AKM_PRIMARY_ID_AKD_SPI || id == AkmSensor::AKM_PRIMARY_ID_AKD_I2C){
masahikofukasawa 14:76205d28fea2 227 // MSG("#5 bit sub ID.\r\n");
masahikofukasawa 12:522a22a23f8a 228 subid_bitlen = 5;
masahikofukasawa 12:522a22a23f8a 229 }
masahikofukasawa 12:522a22a23f8a 230 subId = getId(ANALOG_SENSOR_ID_SUB,subid_bitlen);
masahikofukasawa 12:522a22a23f8a 231
masahikofukasawa 14:76205d28fea2 232 if( (id == 11 && subId == 11) || (id == 55 && subId == 55) ){
masahikofukasawa 14:76205d28fea2 233 return true;
masahikofukasawa 14:76205d28fea2 234 }
masahikofukasawa 14:76205d28fea2 235
masahikofukasawa 12:522a22a23f8a 236 // enable 1.8V level shifter
masahikofukasawa 12:522a22a23f8a 237 tca9554a.setPortLevel(PORT_OE_LVS1, TCA9554A::HIGH);
masahikofukasawa 14:76205d28fea2 238 // MSG("#LVS1 High.\r\n");
masahikofukasawa 12:522a22a23f8a 239 wait_ms(TIME_FOR_OE_MS);
masahikofukasawa 12:522a22a23f8a 240
masahikofukasawa 12:522a22a23f8a 241 // RSTN control
masahikofukasawa 12:522a22a23f8a 242 if(id == AkmSensor::AKM_PRIMARY_ID_AKD_SPI || id == AkmSensor::AKM_PRIMARY_ID_AKD_I2C){
masahikofukasawa 12:522a22a23f8a 243 tca9554a.setPortLevel(PORT_RSV_RSTN, TCA9554A::LOW);
masahikofukasawa 12:522a22a23f8a 244 wait_ms(TIME_FOR_OE_MS);
masahikofukasawa 12:522a22a23f8a 245 tca9554a.setPortLevel(PORT_RSV_RSTN, TCA9554A::HIGH);
masahikofukasawa 14:76205d28fea2 246 // MSG("#Detect AKD, RSTN control.\r\n");
masahikofukasawa 12:522a22a23f8a 247 }
masahikofukasawa 12:522a22a23f8a 248
masahikofukasawa 12:522a22a23f8a 249 // SPI disable/enable
masahikofukasawa 12:522a22a23f8a 250 if( id == AkmSensor::AKM_PRIMARY_ID_AKD_SPI || id == AkmSensor::AKM_PRIMARY_ID_ANGLE_SENSOR ){
masahikofukasawa 12:522a22a23f8a 251 tca9554a.setPortLevel(PORT_SPIN, TCA9554A::LOW);
masahikofukasawa 12:522a22a23f8a 252 // Disable 5.0V level shifter in order to ADC doesn't respond.
masahikofukasawa 12:522a22a23f8a 253 tca9554a.setPortLevel(PORT_OE_LVS2, TCA9554A::LOW);
masahikofukasawa 14:76205d28fea2 254 // MSG("#Detect SPI, set SPIN low.\r\n");
masahikofukasawa 12:522a22a23f8a 255 }
masahikofukasawa 12:522a22a23f8a 256 else{
masahikofukasawa 12:522a22a23f8a 257 tca9554a.setPortLevel(PORT_SPIN, TCA9554A::HIGH);
masahikofukasawa 12:522a22a23f8a 258 tca9554a.setPortLevel(PORT_OE_LVS2, TCA9554A::HIGH);
masahikofukasawa 12:522a22a23f8a 259 }
masahikofukasawa 12:522a22a23f8a 260
masahikofukasawa 12:522a22a23f8a 261 wait_ms(TIME_FOR_OE_MS);
masahikofukasawa 12:522a22a23f8a 262
masahikofukasawa 12:522a22a23f8a 263 releaseTWI();
masahikofukasawa 14:76205d28fea2 264
masahikofukasawa 14:76205d28fea2 265 return false;
masahikofukasawa 12:522a22a23f8a 266 }
masahikofukasawa 12:522a22a23f8a 267
masahikofukasawa 12:522a22a23f8a 268
masahikofukasawa 12:522a22a23f8a 269
masahikofukasawa 12:522a22a23f8a 270 int main(void)
masahikofukasawa 14:76205d28fea2 271 {
masahikofukasawa 14:76205d28fea2 272 // bool isFailedBoot = false;
masahikofukasawa 14:76205d28fea2 273
masahikofukasawa 12:522a22a23f8a 274 // USB serial
masahikofukasawa 12:522a22a23f8a 275 serial.baud(115200);
masahikofukasawa 12:522a22a23f8a 276
masahikofukasawa 12:522a22a23f8a 277 // serial port RX event
masahikofukasawa 12:522a22a23f8a 278 serial.attach(&usbUartCallback);
masahikofukasawa 12:522a22a23f8a 279
masahikofukasawa 12:522a22a23f8a 280 #ifdef DEBUG
masahikofukasawa 12:522a22a23f8a 281 Debug::setSerial(&serial);
masahikofukasawa 14:76205d28fea2 282 MSG("#Debug Mode.\r\n");
masahikofukasawa 12:522a22a23f8a 283 #endif
masahikofukasawa 12:522a22a23f8a 284
masahikofukasawa 12:522a22a23f8a 285 // initialize AKDP board
masahikofukasawa 14:76205d28fea2 286 if( initAkdpBoard() ){
masahikofukasawa 14:76205d28fea2 287 // isFailedBoot = true;
masahikofukasawa 14:76205d28fea2 288 MSG("#Error: AKDP boot failed.\r\n");
masahikofukasawa 14:76205d28fea2 289 }
masahikofukasawa 12:522a22a23f8a 290
masahikofukasawa 12:522a22a23f8a 291 // ble initialize
masahikofukasawa 12:522a22a23f8a 292 bleSetup();
masahikofukasawa 12:522a22a23f8a 293
masahikofukasawa 0:c240899240e7 294 // BLE UART service
masahikofukasawa 0:c240899240e7 295 uartService = new UARTService(ble);
masahikofukasawa 12:522a22a23f8a 296
masahikofukasawa 0:c240899240e7 297 // create sensor manager
masahikofukasawa 0:c240899240e7 298 manager = new AkmSensorManager(&serial, uartService);
masahikofukasawa 12:522a22a23f8a 299
masahikofukasawa 12:522a22a23f8a 300 if( manager->init(id, subId) == AkmSensorManager::ERROR){
masahikofukasawa 14:76205d28fea2 301 // isFailedBoot = true;
masahikofukasawa 14:76205d28fea2 302 MSG("#Error: sensor is NULL\r\n");
masahikofukasawa 0:c240899240e7 303 }
masahikofukasawa 11:53e52f5f1051 304
masahikofukasawa 14:76205d28fea2 305 MSG("#Connecting...\r\n");
masahikofukasawa 14:76205d28fea2 306 /*
masahikofukasawa 14:76205d28fea2 307 Message msg;
masahikofukasawa 14:76205d28fea2 308 msg.setCommand(Message::CMD_BOOT_STATUS);
masahikofukasawa 14:76205d28fea2 309 msg.setArgument( 0, isFailedBoot ? 1 : 0 );
masahikofukasawa 14:76205d28fea2 310 manager->throwMessage(&msg);
masahikofukasawa 14:76205d28fea2 311 */
masahikofukasawa 0:c240899240e7 312 // main loop
masahikofukasawa 0:c240899240e7 313 while(1)
masahikofukasawa 0:c240899240e7 314 {
masahikofukasawa 0:c240899240e7 315 if(manager->isEvent()){
masahikofukasawa 0:c240899240e7 316 manager->processEvent();
masahikofukasawa 0:c240899240e7 317 }else{
masahikofukasawa 0:c240899240e7 318 ble.waitForEvent();
masahikofukasawa 0:c240899240e7 319 }
masahikofukasawa 0:c240899240e7 320 }
masahikofukasawa 0:c240899240e7 321 }