![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Firmware for Keewi v1 electronic board
Dependencies: BLE_API mbed nRF51822
Fork of Keewi_v1 by
Revision 3:6e08445f54f3, committed 2014-08-20
- Comitter:
- clemberto
- Date:
- Wed Aug 20 08:59:22 2014 +0000
- Parent:
- 2:8ebada2e4924
- Commit message:
- Bluetooth service (CSC, NUS, LBS) - simulated data
Changed in this revision
--- a/BLE_API.lib Fri Jul 18 16:54:16 2014 +0000 +++ b/BLE_API.lib Wed Aug 20 08:59:22 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#c163aa495b58 +http://mbed.org/users/clemberto/code/BLE_API/#c163aa495b58
--- a/main.cpp Fri Jul 18 16:54:16 2014 +0000 +++ b/main.cpp Wed Aug 20 08:59:22 2014 +0000 @@ -169,38 +169,52 @@ GattCharacteristic *cscChars[] = {&cscMeasurement, &cscFeature, &cscLocation, }; // &cscControlPoint, GattService cscService(GattService::UUID_CYCLING_SPEED_AND_CADENCE, cscChars, sizeof(cscChars) / sizeof(GattCharacteristic *)); -/* Custom LBS service (led & button service) +/* Led & button service (LBS) Switch: Front & rear lights - Led: Alarm unlock + Led: Alarm state */ #define LBS_UUID_BASE {0x23, 0xD1, 0xBC, 0xEA, 0x5F, 0x78, 0x23, 0x15, 0xDE, 0xEF, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00} #define LBS_UUID_LED_CHAR 0x1525 #define LBS_UUID_BUTTON_CHAR 0x1524 -static bool alarmState = false; static bool rLightState = true; static bool fLightState = true; -static uint8_t lbs_sw_flags = (fLightState << 2) + (rLightState << 1) + alarmState; -GattCharacteristic lbsSwitches(LBS_UUID_BUTTON_CHAR, - (uint8_t *)&lbs_sw_flags, sizeof(lbs_sw_flags), sizeof(lbs_sw_flags), +static uint8_t lbs_butt_flags = fLightState + (rLightState << 1); +GattCharacteristic lbsButtons(LBS_UUID_BUTTON_CHAR, + (uint8_t *)&lbs_butt_flags, sizeof(lbs_butt_flags), sizeof(lbs_butt_flags), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE); -GattCharacteristic lbsIndicators(LBS_UUID_LED_CHAR, - (uint8_t *)&location, sizeof(location), sizeof(location), +static bool alarmState = false; +static uint8_t lbs_led_flags = alarmState; +GattCharacteristic lbsLeds(LBS_UUID_LED_CHAR, + (uint8_t *)&lbs_led_flags, sizeof(lbs_led_flags), sizeof(lbs_led_flags), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); -GattCharacteristic *lbsChars[] = {&lbsSwitches, &lbsIndicators, }; +GattCharacteristic *lbsChars[] = {&lbsButtons, &lbsLeds, }; #define LBS_UUID_SERVICE 0x1523 GattService lbsService(LBS_UUID_SERVICE, lbsChars, sizeof(lbsChars) / sizeof(GattCharacteristic *)); -/* Custom UART Service for sending ride data - +/* Nordic UART Service (nus) + TX: sending ride data + RX: receiving ack, unlocking alarm */ #define BLE_UUID_NUS_SERVICE 0x0001 /**< The UUID of the Nordic UART Service. */ #define BLE_UUID_NUS_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */ #define BLE_UUID_NUS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */ #define BLE_NUS_MAX_DATA_LEN (GATT_MTU_SIZE_DEFAULT - 3) /**< Maximum length of data (in bytes) that can be transmitted by the Nordic UART service module to the peer. */ #define BLE_NUS_MAX_RX_CHAR_LEN BLE_NUS_MAX_DATA_LEN /**< Maximum length of the RX Characteristic (in bytes). */ -#define BLE_NUS_MAX_TX_CHAR_LEN 20 /**< Maximum length of the TX Characteristic (in bytes). */ - - +#define BLE_NUS_MAX_TX_CHAR_LEN 9 /**< Maximum length of the TX Characteristic (in bytes). */ +static const uint8_t uart_base_uuid[] = {0x6e, 0x40, 0x00, 0x01, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e}; +static const uint8_t uart_tx_uuid[] = {0x6e, 0x40, 0x00, 0x02, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e}; +static const uint8_t uart_rx_uuid[] = {0x6e, 0x40, 0x00, 0x03, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e}; +static const uint8_t uart_base_uuid_rev[] = {0x9e, 0xca, 0xdc, 0x24, 0x0e, 0xe5, 0xa9, 0xe0, 0x93, 0xf3, 0xa3, 0xb5, 0x01, 0x00, 0x40, 0x6e}; +uint8_t nus_rx_buffer[BLE_NUS_MAX_RX_CHAR_LEN] = {0,}; +GattCharacteristic nusRx(uart_rx_uuid, + (uint8_t *)&nus_rx_buffer, sizeof(nus_rx_buffer), BLE_NUS_MAX_RX_CHAR_LEN, + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); +uint8_t nus_tx_buffer[BLE_NUS_MAX_TX_CHAR_LEN] = {0,}; +GattCharacteristic nusTx(uart_tx_uuid, + (uint8_t *)&nus_tx_buffer, sizeof(nus_tx_buffer), BLE_NUS_MAX_TX_CHAR_LEN, + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); +GattCharacteristic *nusChars[] = {&nusTx, &nusRx, }; +GattService nusService(uart_base_uuid, nusChars, sizeof(nusChars) / sizeof(GattCharacteristic *)); /* List of all available services */ static const uint16_t uuid16_list[] = { @@ -208,6 +222,7 @@ GattService::UUID_BATTERY_SERVICE, GattService::UUID_CURRENT_TIME_SERVICE, LBS_UUID_SERVICE, + BLE_UUID_NUS_SERVICE, }; @@ -247,10 +262,11 @@ ble.updateCharacteristicValue(cscMeasurement.getHandle(), new_csc_mes, sizeof(new_csc_mes)); // Notify alarm & lights status - static uint8_t new_lbs_sw_flags = (fLightState << 2) + (rLightState << 1) + alarmState; - ble.updateCharacteristicValue(lbsSwitches.getHandle(), new_lbs_sw_flags, sizeof(new_lbs_sw_flags)); + alarmState ^= 1; + uint8_t new_lbs_butt_flags = (uint8_t)alarmState; + ble.updateCharacteristicValue(lbsLeds.getHandle(), &new_lbs_butt_flags, sizeof(new_lbs_butt_flags)); - DEBUG("led val = %d - mes val = %d\r\n", csc_feat_flags, csc_mes_flags); + DEBUG("led val = %d\r\n", new_lbs_butt_flags); } } @@ -268,7 +284,10 @@ /* setup advertising */ ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); // - ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t*)uuid16_list, sizeof(uuid16_list)); + ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, + (uint8_t*)uuid16_list, sizeof(uuid16_list)); + ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, + (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid)); ble.accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_CYCLING); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); @@ -281,7 +300,7 @@ //ble.addService(firmwareService); ble.addService(manufacturerService); ble.addService(lbsService); - ble.addService(temperatureService); + ble.addService(nusService); DEBUG("Initialized the BLE stack\n\r");
--- a/mbed.bld Fri Jul 18 16:54:16 2014 +0000 +++ b/mbed.bld Wed Aug 20 08:59:22 2014 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/04dd9b1680ae \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/9327015d4013 \ No newline at end of file