動作テスト用
Dependencies: BLE_API mbed nRF51822
main.cpp
- Committer:
- kyowa_watanabe
- Date:
- 2015-07-03
- Revision:
- 0:0a44e398fe09
File content as of revision 0:0a44e398fe09:
// ヘッダのインクルード #include "mbed.h" #include "BLEDevice.h" #include "ble_gap.h" #include "Gap.h" #define CHARACTERISTIC_LEN 100 // デバイス名の登録 const static char DEVICE_NAME[] = "mbed_HRM1017"; // UUIDの登録 static const uint8_t UUID_BRIL_SERVICE[] = {0x4d,0x92,0x37,0xc0,0xbd,0x5b,0x45,0x93,0xad,0x55,0xd8,0xf5,0x95,0xcf,0xe2,0xea}; static const uint8_t UUID_CHAR_DATA[] = {0xe5,0xc1,0xcf,0x6e,0xe0,0x57,0x40,0x08,0x98,0x21,0x17,0x71,0x10,0x24,0xe8,0x85}; // ble_gap_evt_scan_req_report_t report_rssi; // uint8_t gRwData[CHARACTERISTIC_LEN] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; uint8_t g_txdata[100]; uint8_t g_rxdata[100]; BLEDevice ble; Serial pc(USBTX, USBRX); GattCharacteristic gDataCharacteristic ( UUID_CHAR_DATA, gRwData, sizeof(gRwData), sizeof(gRwData), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE); // 送信用バッファ uint8_t txTempPayload[100]; // タイマ送信用バッファ uint8_t txUpdate[5] = { 0, 0, 0, 0, 0 }; // 送信用GATTの宣言 GattCharacteristic txChar( 0x3A01, txTempPayload, 100, 100, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE ); // 受信用バッファ uint8_t rxTempPayload[100]; // 受信用GATTの宣言 GattCharacteristic rxChar( 0x3A02, rxTempPayload, 100, 100, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE ); // RSSI値用変数 int8_t g_rssi; // RSSI値用GATTの宣言 GattCharacteristic rssiChar( 0x3A03, (uint8_t *)g_rssi, 1, 1, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE ); GattCharacteristic *txChars[] = {&txChar, }; GattCharacteristic *rxChars[] = {&rxChar, }; GattCharacteristic *rssiChars[] = {&rssiChar, }; GattCharacteristic *RwDataChars[] = {&gDataCharacteristic}; GattService txService( 0x181C, txChars, sizeof(txChars) / sizeof( GattCharacteristic * ) ); GattService rxService( 0x181C, rxChars, sizeof(rxChars) / sizeof( GattCharacteristic * ) ); GattService rssiService( 0x181C, rssiChars, sizeof(rssiChars) / sizeof( GattCharacteristic * ) ); GattService gBrilService = GattService(UUID_BRIL_SERVICE, RwDataChars, sizeof(RwDataChars) / sizeof(GattCharacteristic *)); uint16_t uuid16_list[] = { 0x181C, }; static Gap::ConnectionParams_t connectionParams; void onDisconnectionCallback( Gap::Handle_t handle, Gap::DisconnectionReason_t reason ){ ble.startAdvertising(); pc.printf( "Disconnect!!\r\n" ); } void onConnectionCallback( Gap::Handle_t handle, Gap::addr_type_t type, const Gap::address_t addr, Gap::addr_type_t addr_type_townAddrType, const Gap::address_t ownAddr, const Gap::ConnectionParams_t *params ){ pc.printf( "Connect!!\r\n" ); } void onDataWrittenCallback( const GattCharacteristicWriteCBParams *params ){ int i; int8_t p_rssi=0; int error = 0; uint16_t bytesread = params->len; pc.printf( "Written: %d Bytes.\r\n", bytesread ); for( i = 0; i < bytesread; i++ ){ pc.printf( "%02x",params->data[i] ); if( ( i + 1 ) < bytesread ){ pc.printf( ", " ); } } // ble.updateCharacteristicValue( txChar.getValueAttribute().getHandle(), params->data, bytesread ); error = sd_ble_gap_rssi_get( rxChar.getValueAttribute().getHandle(), ( int8_t * )p_rssi ); sd_ble_gap_rssi_stop( rxChar.getValueAttribute().getHandle() ); sd_ble_gap_rssi_start( rxChar.getValueAttribute().getHandle(), 0x00, 0x00 ); pc.printf( " RSSI: %d, ", p_rssi ); pc.printf( "ERROR: %d\r\n", error ); ble.updateCharacteristicValue( rssiChar.getValueAttribute().getHandle(), (uint8_t *)p_rssi, sizeof( p_rssi ) ); } void tickerCallback( void ){ uint16_t byteswrite = 1; ble.updateCharacteristicValue( txChar.getValueAttribute().getHandle(), txUpdate, byteswrite ); txUpdate[0]++; } int main( void ) { // 初期設定 ble.init(); // コールバック関数の設定 ble.onDisconnection( onDisconnectionCallback ); ble.onConnection( onConnectionCallback ); ble.onDataWritten(onDataWrittenCallback); ble.getPreferredConnectionParams( &connectionParams ); 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::GENERIC_THERMOMETER); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.setAdvertisingInterval(160); // 100ms; in multiples of 0.625ms ble.setAdvertisingTimeout(0); // アドバタイジングモードのタイムアウト無効 sd_ble_gap_rssi_start( rxChar.getValueAttribute().getHandle(), 0x00, 0x00 ); // アドバタイズモード開始 ble.startAdvertising(); // サービスの追加 ble.addService( txService ); ble.addService( rxService ); ble.addService( rssiService ); // タイマーの設定 Ticker ticker; ticker.attach( tickerCallback, 0.5 ); while(1){ ble.waitForEvent(); } }