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:
Thu May 05 00:20:26 2016 +0000
Revision:
1:0914af311974
Parent:
0:c240899240e7
Child:
2:11a5873f8ec0
Final firmware for revC board

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 0:c240899240e7 7 #include "akmsensormanager.h"
masahikofukasawa 0:c240899240e7 8 #include "debug.h"
masahikofukasawa 0:c240899240e7 9
masahikofukasawa 0:c240899240e7 10 #define BLE_UUID_TXRX_SERVICE 0x0000 /**< The UUID of the Nordic UART Service. */
masahikofukasawa 0:c240899240e7 11 #define BLE_UUID_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */
masahikofukasawa 0:c240899240e7 12 #define BLE_UUIDS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */
masahikofukasawa 0:c240899240e7 13
masahikofukasawa 0:c240899240e7 14 //#define TXRX_LEN UARTService::BLE_UART_SERVICE_MAX_DATA_LEN+1
masahikofukasawa 0:c240899240e7 15 #define TXRX_LEN 50 // Temp
masahikofukasawa 0:c240899240e7 16
masahikofukasawa 0:c240899240e7 17 #define CR '\r'
masahikofukasawa 0:c240899240e7 18 #define LF '\n'
masahikofukasawa 0:c240899240e7 19
masahikofukasawa 0:c240899240e7 20 BLE ble;
masahikofukasawa 0:c240899240e7 21 UARTService* uartService;
masahikofukasawa 0:c240899240e7 22 SerialNano serial(P0_28, P0_29);
masahikofukasawa 0:c240899240e7 23 AkmSensorManager* manager;
masahikofukasawa 0:c240899240e7 24
masahikofukasawa 0:c240899240e7 25 static char commandStr[TXRX_LEN];
masahikofukasawa 0:c240899240e7 26 static uint16_t rx_len=0;
masahikofukasawa 0:c240899240e7 27
masahikofukasawa 0:c240899240e7 28 /*
masahikofukasawa 0:c240899240e7 29 void WrittenHandler(const GattWriteCallbackParams *Handler)
masahikofukasawa 0:c240899240e7 30 {
masahikofukasawa 0:c240899240e7 31 uint8_t buf[TXRX_LEN];
masahikofukasawa 0:c240899240e7 32 uint16_t bytesRead;
masahikofukasawa 0:c240899240e7 33 if (Handler->handle == uartService->getTXCharacteristicHandle())
masahikofukasawa 0:c240899240e7 34 {
masahikofukasawa 0:c240899240e7 35 ble.gattServer().read(uartService->getTXCharacteristicHandle(), buf, &bytesRead);
masahikofukasawa 0:c240899240e7 36 int len = 0;
masahikofukasawa 0:c240899240e7 37 for(int i=0; i<bytesRead; i++){
masahikofukasawa 0:c240899240e7 38 commandStr[len++] = buf[i];
masahikofukasawa 0:c240899240e7 39 if(i>=TXRX_LEN || buf[i]==LF )
masahikofukasawa 0:c240899240e7 40 {
masahikofukasawa 0:c240899240e7 41 manager->commandReceived(commandStr);
masahikofukasawa 0:c240899240e7 42 return;
masahikofukasawa 0:c240899240e7 43 }
masahikofukasawa 0:c240899240e7 44 }
masahikofukasawa 0:c240899240e7 45 }
masahikofukasawa 0:c240899240e7 46 }
masahikofukasawa 0:c240899240e7 47 */
masahikofukasawa 0:c240899240e7 48
masahikofukasawa 0:c240899240e7 49 void WrittenHandler(const GattWriteCallbackParams *Handler)
masahikofukasawa 0:c240899240e7 50 {
masahikofukasawa 0:c240899240e7 51 uint8_t buf[TXRX_LEN];
masahikofukasawa 0:c240899240e7 52 uint16_t bytesRead;
masahikofukasawa 0:c240899240e7 53
masahikofukasawa 0:c240899240e7 54 if (Handler->handle == uartService->getTXCharacteristicHandle())
masahikofukasawa 0:c240899240e7 55 {
masahikofukasawa 0:c240899240e7 56 ble.gattServer().read(uartService->getTXCharacteristicHandle(), buf, &bytesRead);
masahikofukasawa 0:c240899240e7 57 char command[TXRX_LEN];
masahikofukasawa 0:c240899240e7 58 int len = 0;
masahikofukasawa 0:c240899240e7 59 for(int i=0; i<bytesRead; i++){
masahikofukasawa 0:c240899240e7 60 if(i>=TXRX_LEN || buf[i]==CR )
masahikofukasawa 0:c240899240e7 61 {
masahikofukasawa 0:c240899240e7 62 break;
masahikofukasawa 0:c240899240e7 63 }
masahikofukasawa 0:c240899240e7 64 else
masahikofukasawa 0:c240899240e7 65 {
masahikofukasawa 0:c240899240e7 66 if(buf[i] != LF)
masahikofukasawa 0:c240899240e7 67 {
masahikofukasawa 0:c240899240e7 68 command[len++] = (char)buf[i];
masahikofukasawa 0:c240899240e7 69 }
masahikofukasawa 0:c240899240e7 70 }
masahikofukasawa 0:c240899240e7 71 }
masahikofukasawa 0:c240899240e7 72 manager->commandReceived(command);
masahikofukasawa 0:c240899240e7 73 }
masahikofukasawa 0:c240899240e7 74 }
masahikofukasawa 0:c240899240e7 75
masahikofukasawa 0:c240899240e7 76
masahikofukasawa 0:c240899240e7 77 /*
masahikofukasawa 0:c240899240e7 78 void usbUartCallback(void)
masahikofukasawa 0:c240899240e7 79 {
masahikofukasawa 0:c240899240e7 80 if(serial.readable())
masahikofukasawa 0:c240899240e7 81 {
masahikofukasawa 0:c240899240e7 82 uint8_t c = serial.getc();
masahikofukasawa 0:c240899240e7 83 if(rx_len>=TXRX_LEN || c == CR )
masahikofukasawa 0:c240899240e7 84 {
masahikofukasawa 0:c240899240e7 85 manager->commandReceived(commandStr);
masahikofukasawa 0:c240899240e7 86 rx_len = 0;
masahikofukasawa 0:c240899240e7 87 }
masahikofukasawa 0:c240899240e7 88 else{
masahikofukasawa 0:c240899240e7 89 if(c != LF)
masahikofukasawa 0:c240899240e7 90 {
masahikofukasawa 0:c240899240e7 91 commandStr[rx_len++] = c;
masahikofukasawa 0:c240899240e7 92 }
masahikofukasawa 0:c240899240e7 93 }
masahikofukasawa 0:c240899240e7 94 }
masahikofukasawa 0:c240899240e7 95 }
masahikofukasawa 0:c240899240e7 96 */
masahikofukasawa 0:c240899240e7 97 void usbUartCallback(void)
masahikofukasawa 0:c240899240e7 98 {
masahikofukasawa 0:c240899240e7 99 if(serial.readable())
masahikofukasawa 0:c240899240e7 100 {
masahikofukasawa 0:c240899240e7 101 uint8_t c = serial.getc();
masahikofukasawa 0:c240899240e7 102
masahikofukasawa 0:c240899240e7 103 // ignore CR
masahikofukasawa 0:c240899240e7 104 if(c==CR) return;
masahikofukasawa 0:c240899240e7 105
masahikofukasawa 0:c240899240e7 106 commandStr[rx_len++] = c;
masahikofukasawa 0:c240899240e7 107 if(rx_len>=TXRX_LEN || c == LF)
masahikofukasawa 0:c240899240e7 108 {
masahikofukasawa 0:c240899240e7 109 manager->commandReceived(commandStr);
masahikofukasawa 0:c240899240e7 110 rx_len = 0;
masahikofukasawa 0:c240899240e7 111 }
masahikofukasawa 0:c240899240e7 112 }
masahikofukasawa 0:c240899240e7 113 }
masahikofukasawa 0:c240899240e7 114
masahikofukasawa 0:c240899240e7 115 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
masahikofukasawa 0:c240899240e7 116 {
masahikofukasawa 0:c240899240e7 117 manager->setEventConnected();
masahikofukasawa 0:c240899240e7 118 MSG("#Connected\r\n");
masahikofukasawa 0:c240899240e7 119 }
masahikofukasawa 0:c240899240e7 120
masahikofukasawa 0:c240899240e7 121 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
masahikofukasawa 0:c240899240e7 122 {
masahikofukasawa 0:c240899240e7 123 manager->setEventDisconnected();
masahikofukasawa 0:c240899240e7 124 MSG("#Disconnected \r\n");
masahikofukasawa 0:c240899240e7 125 ble.gap().startAdvertising();
masahikofukasawa 0:c240899240e7 126 }
masahikofukasawa 0:c240899240e7 127
masahikofukasawa 0:c240899240e7 128 int main(void)
masahikofukasawa 0:c240899240e7 129 {
masahikofukasawa 0:c240899240e7 130 // USB serial
masahikofukasawa 0:c240899240e7 131 serial.baud(115200);
masahikofukasawa 0:c240899240e7 132
masahikofukasawa 0:c240899240e7 133 #ifdef DEBUG
masahikofukasawa 0:c240899240e7 134 Debug::setSerial(&serial);
masahikofukasawa 0:c240899240e7 135 MSG("#Debug Mode.\n");
masahikofukasawa 0:c240899240e7 136 #endif
masahikofukasawa 0:c240899240e7 137
masahikofukasawa 0:c240899240e7 138 ble.init();
masahikofukasawa 0:c240899240e7 139 // setup advertising
masahikofukasawa 0:c240899240e7 140 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
masahikofukasawa 0:c240899240e7 141 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
masahikofukasawa 0:c240899240e7 142 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
masahikofukasawa 1:0914af311974 143 (const uint8_t *)"AKDP RevC 001", sizeof("AKDP RevC 001") - 1);
masahikofukasawa 0:c240899240e7 144 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
masahikofukasawa 0:c240899240e7 145 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
masahikofukasawa 0:c240899240e7 146 ble.gap().onConnection(connectionCallback);
masahikofukasawa 0:c240899240e7 147 ble.gap().onDisconnection(disconnectionCallback);
masahikofukasawa 0:c240899240e7 148 ble.gattServer().onDataWritten(WrittenHandler);
masahikofukasawa 0:c240899240e7 149
masahikofukasawa 0:c240899240e7 150 // 100ms; in multiples of 0.625ms.
masahikofukasawa 0:c240899240e7 151 ble.gap().setAdvertisingInterval(80);
masahikofukasawa 0:c240899240e7 152 ble.gap().startAdvertising();
masahikofukasawa 0:c240899240e7 153
masahikofukasawa 0:c240899240e7 154 // BLE UART service
masahikofukasawa 0:c240899240e7 155 uartService = new UARTService(ble);
masahikofukasawa 0:c240899240e7 156
masahikofukasawa 0:c240899240e7 157 // serial port RX event
masahikofukasawa 0:c240899240e7 158 serial.attach(&usbUartCallback);
masahikofukasawa 0:c240899240e7 159
masahikofukasawa 0:c240899240e7 160 // create sensor manager
masahikofukasawa 0:c240899240e7 161 manager = new AkmSensorManager(&serial, uartService);
masahikofukasawa 0:c240899240e7 162 if( manager->init() == AkmSensorManager::ERROR){
masahikofukasawa 0:c240899240e7 163 MSG("#Error: sensor is NULL\n");
masahikofukasawa 0:c240899240e7 164 }
masahikofukasawa 0:c240899240e7 165
masahikofukasawa 0:c240899240e7 166 // main loop
masahikofukasawa 0:c240899240e7 167 while(1)
masahikofukasawa 0:c240899240e7 168 {
masahikofukasawa 0:c240899240e7 169 if(manager->isEvent()){
masahikofukasawa 0:c240899240e7 170 manager->processEvent();
masahikofukasawa 0:c240899240e7 171 }else{
masahikofukasawa 0:c240899240e7 172 ble.waitForEvent();
masahikofukasawa 0:c240899240e7 173 }
masahikofukasawa 0:c240899240e7 174 }
masahikofukasawa 0:c240899240e7 175 }