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 08 22:28:13 2016 +0000
Revision:
12:522a22a23f8a
Parent:
11:53e52f5f1051
Child:
14:76205d28fea2
RevD7 with AK09970. Release to Japan.

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