UUIDの変更等を行いました。
Dependencies: BLE_API mbed nRF51822
main.cpp@0:c3d581e41fb4, 2015-06-19 (annotated)
- Committer:
- kyowa_watanabe
- Date:
- Fri Jun 19 12:16:50 2015 +0000
- Revision:
- 0:c3d581e41fb4
??????UUID???
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kyowa_watanabe | 0:c3d581e41fb4 | 1 | // ヘッダのインクルード |
kyowa_watanabe | 0:c3d581e41fb4 | 2 | #include "mbed.h" |
kyowa_watanabe | 0:c3d581e41fb4 | 3 | #include "BLEDevice.h" |
kyowa_watanabe | 0:c3d581e41fb4 | 4 | |
kyowa_watanabe | 0:c3d581e41fb4 | 5 | #define CHARACTERISTIC_LEN 100 |
kyowa_watanabe | 0:c3d581e41fb4 | 6 | |
kyowa_watanabe | 0:c3d581e41fb4 | 7 | // デバイス名の登録 |
kyowa_watanabe | 0:c3d581e41fb4 | 8 | const static char DEVICE_NAME[] = "mbed_HRM1017"; |
kyowa_watanabe | 0:c3d581e41fb4 | 9 | |
kyowa_watanabe | 0:c3d581e41fb4 | 10 | // UUIDの登録 |
kyowa_watanabe | 0:c3d581e41fb4 | 11 | static const uint8_t UUID_BRIL_SERVICE[] = {0x4d,0x92,0x37,0xc0,0xbd,0x5b,0x45,0x93,0xad,0x55,0xd8,0xf5,0x95,0xcf,0xe2,0xea}; |
kyowa_watanabe | 0:c3d581e41fb4 | 12 | static const uint8_t UUID_CHAR_DATA[] = {0xe5,0xc1,0xcf,0x6e,0xe0,0x57,0x40,0x08,0x98,0x21,0x17,0x71,0x10,0x24,0xe8,0x85}; |
kyowa_watanabe | 0:c3d581e41fb4 | 13 | |
kyowa_watanabe | 0:c3d581e41fb4 | 14 | // |
kyowa_watanabe | 0:c3d581e41fb4 | 15 | uint8_t gRwData[CHARACTERISTIC_LEN] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; |
kyowa_watanabe | 0:c3d581e41fb4 | 16 | int g_conflg = 0; |
kyowa_watanabe | 0:c3d581e41fb4 | 17 | int g_test = 0; |
kyowa_watanabe | 0:c3d581e41fb4 | 18 | int g_receiveflg = 0; |
kyowa_watanabe | 0:c3d581e41fb4 | 19 | uint8_t g_txdata[100]; |
kyowa_watanabe | 0:c3d581e41fb4 | 20 | uint8_t g_rxdata[100]; |
kyowa_watanabe | 0:c3d581e41fb4 | 21 | |
kyowa_watanabe | 0:c3d581e41fb4 | 22 | BLEDevice ble; |
kyowa_watanabe | 0:c3d581e41fb4 | 23 | Serial pc(USBTX, USBRX); |
kyowa_watanabe | 0:c3d581e41fb4 | 24 | |
kyowa_watanabe | 0:c3d581e41fb4 | 25 | uint8_t txTempPayload[100]; |
kyowa_watanabe | 0:c3d581e41fb4 | 26 | |
kyowa_watanabe | 0:c3d581e41fb4 | 27 | GattCharacteristic gDataCharacteristic ( UUID_CHAR_DATA, gRwData, sizeof(gRwData), sizeof(gRwData), |
kyowa_watanabe | 0:c3d581e41fb4 | 28 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE); |
kyowa_watanabe | 0:c3d581e41fb4 | 29 | |
kyowa_watanabe | 0:c3d581e41fb4 | 30 | GattCharacteristic txChar( 0x3A01, txTempPayload, 100, 100, |
kyowa_watanabe | 0:c3d581e41fb4 | 31 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE | |
kyowa_watanabe | 0:c3d581e41fb4 | 32 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | |
kyowa_watanabe | 0:c3d581e41fb4 | 33 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE ); |
kyowa_watanabe | 0:c3d581e41fb4 | 34 | |
kyowa_watanabe | 0:c3d581e41fb4 | 35 | // バッテリーレベル用変数 |
kyowa_watanabe | 0:c3d581e41fb4 | 36 | uint8_t rxTempPayload[100]; |
kyowa_watanabe | 0:c3d581e41fb4 | 37 | |
kyowa_watanabe | 0:c3d581e41fb4 | 38 | // バッテリーレベル用GATT |
kyowa_watanabe | 0:c3d581e41fb4 | 39 | GattCharacteristic rxChar( 0x3A02, rxTempPayload, 100, 100, |
kyowa_watanabe | 0:c3d581e41fb4 | 40 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | |
kyowa_watanabe | 0:c3d581e41fb4 | 41 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | |
kyowa_watanabe | 0:c3d581e41fb4 | 42 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE ); |
kyowa_watanabe | 0:c3d581e41fb4 | 43 | |
kyowa_watanabe | 0:c3d581e41fb4 | 44 | // |
kyowa_watanabe | 0:c3d581e41fb4 | 45 | GattCharacteristic *txChars[] = {&txChar, }; |
kyowa_watanabe | 0:c3d581e41fb4 | 46 | GattCharacteristic *rxChars[] = {&rxChar, }; |
kyowa_watanabe | 0:c3d581e41fb4 | 47 | GattCharacteristic *RwDataChars[] = {&gDataCharacteristic}; |
kyowa_watanabe | 0:c3d581e41fb4 | 48 | |
kyowa_watanabe | 0:c3d581e41fb4 | 49 | GattService txService( 0x181C, txChars, sizeof(txChars) / sizeof(GattCharacteristic * ) ); |
kyowa_watanabe | 0:c3d581e41fb4 | 50 | GattService rxService( 0x181C, rxChars, sizeof(rxChars) / sizeof(GattCharacteristic * ) ); |
kyowa_watanabe | 0:c3d581e41fb4 | 51 | |
kyowa_watanabe | 0:c3d581e41fb4 | 52 | GattService gBrilService = GattService(UUID_BRIL_SERVICE, RwDataChars, sizeof(RwDataChars) / sizeof(GattCharacteristic *)); |
kyowa_watanabe | 0:c3d581e41fb4 | 53 | |
kyowa_watanabe | 0:c3d581e41fb4 | 54 | uint16_t uuid16_list[] = { 0x181C, }; |
kyowa_watanabe | 0:c3d581e41fb4 | 55 | |
kyowa_watanabe | 0:c3d581e41fb4 | 56 | static Gap::ConnectionParams_t connectionParams; |
kyowa_watanabe | 0:c3d581e41fb4 | 57 | |
kyowa_watanabe | 0:c3d581e41fb4 | 58 | void onDisconnectionCallback( Gap::Handle_t handle, Gap::DisconnectionReason_t reason ){ |
kyowa_watanabe | 0:c3d581e41fb4 | 59 | |
kyowa_watanabe | 0:c3d581e41fb4 | 60 | g_conflg = 0; |
kyowa_watanabe | 0:c3d581e41fb4 | 61 | ble.startAdvertising(); |
kyowa_watanabe | 0:c3d581e41fb4 | 62 | pc.printf( "Disconnect!!\r\n" ); |
kyowa_watanabe | 0:c3d581e41fb4 | 63 | |
kyowa_watanabe | 0:c3d581e41fb4 | 64 | } |
kyowa_watanabe | 0:c3d581e41fb4 | 65 | |
kyowa_watanabe | 0:c3d581e41fb4 | 66 | void onConnectionCallback( Gap::Handle_t handle, Gap::addr_type_t type, const Gap::address_t addr, |
kyowa_watanabe | 0:c3d581e41fb4 | 67 | Gap::addr_type_t addr_type_townAddrType, const Gap::address_t ownAddr, |
kyowa_watanabe | 0:c3d581e41fb4 | 68 | const Gap::ConnectionParams_t *params ){ |
kyowa_watanabe | 0:c3d581e41fb4 | 69 | |
kyowa_watanabe | 0:c3d581e41fb4 | 70 | g_conflg = 1; |
kyowa_watanabe | 0:c3d581e41fb4 | 71 | pc.printf( "Connect!!\r\n" ); |
kyowa_watanabe | 0:c3d581e41fb4 | 72 | |
kyowa_watanabe | 0:c3d581e41fb4 | 73 | } |
kyowa_watanabe | 0:c3d581e41fb4 | 74 | |
kyowa_watanabe | 0:c3d581e41fb4 | 75 | void onDataWrittenCallback( const GattCharacteristicWriteCBParams *params ){ |
kyowa_watanabe | 0:c3d581e41fb4 | 76 | int i; |
kyowa_watanabe | 0:c3d581e41fb4 | 77 | |
kyowa_watanabe | 0:c3d581e41fb4 | 78 | uint16_t bytesread = params->len; |
kyowa_watanabe | 0:c3d581e41fb4 | 79 | |
kyowa_watanabe | 0:c3d581e41fb4 | 80 | pc.printf( "Written %d Bytes.\r\n", bytesread ); |
kyowa_watanabe | 0:c3d581e41fb4 | 81 | for( i = 0; i < bytesread; i++ ){ |
kyowa_watanabe | 0:c3d581e41fb4 | 82 | pc.printf( "%02x",params->data[i] ); |
kyowa_watanabe | 0:c3d581e41fb4 | 83 | if( ( i + 1 ) < bytesread ){ |
kyowa_watanabe | 0:c3d581e41fb4 | 84 | pc.printf( ", " ); |
kyowa_watanabe | 0:c3d581e41fb4 | 85 | } |
kyowa_watanabe | 0:c3d581e41fb4 | 86 | } |
kyowa_watanabe | 0:c3d581e41fb4 | 87 | pc.printf( "\r\n" ); |
kyowa_watanabe | 0:c3d581e41fb4 | 88 | |
kyowa_watanabe | 0:c3d581e41fb4 | 89 | |
kyowa_watanabe | 0:c3d581e41fb4 | 90 | ble.updateCharacteristicValue( txChar.getValueAttribute().getHandle(), params->data, bytesread ); |
kyowa_watanabe | 0:c3d581e41fb4 | 91 | |
kyowa_watanabe | 0:c3d581e41fb4 | 92 | } |
kyowa_watanabe | 0:c3d581e41fb4 | 93 | |
kyowa_watanabe | 0:c3d581e41fb4 | 94 | int main( void ) |
kyowa_watanabe | 0:c3d581e41fb4 | 95 | { |
kyowa_watanabe | 0:c3d581e41fb4 | 96 | |
kyowa_watanabe | 0:c3d581e41fb4 | 97 | // 初期設定 |
kyowa_watanabe | 0:c3d581e41fb4 | 98 | ble.init(); |
kyowa_watanabe | 0:c3d581e41fb4 | 99 | // コールバック関数の設定 |
kyowa_watanabe | 0:c3d581e41fb4 | 100 | ble.onDisconnection( onDisconnectionCallback ); |
kyowa_watanabe | 0:c3d581e41fb4 | 101 | ble.onConnection( onConnectionCallback ); |
kyowa_watanabe | 0:c3d581e41fb4 | 102 | ble.onDataWritten(onDataWrittenCallback); |
kyowa_watanabe | 0:c3d581e41fb4 | 103 | |
kyowa_watanabe | 0:c3d581e41fb4 | 104 | ble.getPreferredConnectionParams( &connectionParams ); |
kyowa_watanabe | 0:c3d581e41fb4 | 105 | |
kyowa_watanabe | 0:c3d581e41fb4 | 106 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
kyowa_watanabe | 0:c3d581e41fb4 | 107 | // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t*)uuid16_list, sizeof(uuid16_list)); |
kyowa_watanabe | 0:c3d581e41fb4 | 108 | // ble.accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_THERMOMETER); |
kyowa_watanabe | 0:c3d581e41fb4 | 109 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); |
kyowa_watanabe | 0:c3d581e41fb4 | 110 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
kyowa_watanabe | 0:c3d581e41fb4 | 111 | ble.setAdvertisingInterval(160); // 100ms; in multiples of 0.625ms |
kyowa_watanabe | 0:c3d581e41fb4 | 112 | ble.setAdvertisingTimeout(0); // アドバタイジングモードのタイムアウト無効 |
kyowa_watanabe | 0:c3d581e41fb4 | 113 | |
kyowa_watanabe | 0:c3d581e41fb4 | 114 | // アドバタイズモード開始 |
kyowa_watanabe | 0:c3d581e41fb4 | 115 | ble.startAdvertising(); |
kyowa_watanabe | 0:c3d581e41fb4 | 116 | |
kyowa_watanabe | 0:c3d581e41fb4 | 117 | // サービスの追加 |
kyowa_watanabe | 0:c3d581e41fb4 | 118 | ble.addService( txService ); |
kyowa_watanabe | 0:c3d581e41fb4 | 119 | ble.addService( rxService ); |
kyowa_watanabe | 0:c3d581e41fb4 | 120 | |
kyowa_watanabe | 0:c3d581e41fb4 | 121 | while(1){ |
kyowa_watanabe | 0:c3d581e41fb4 | 122 | |
kyowa_watanabe | 0:c3d581e41fb4 | 123 | ble.waitForEvent(); |
kyowa_watanabe | 0:c3d581e41fb4 | 124 | |
kyowa_watanabe | 0:c3d581e41fb4 | 125 | } |
kyowa_watanabe | 0:c3d581e41fb4 | 126 | } |