UUIDの変更等を行いました。

Dependencies:   BLE_API mbed nRF51822

Committer:
kyowa_watanabe
Date:
Fri Jun 19 12:16:50 2015 +0000
Revision:
0:c3d581e41fb4
??????UUID???

Who changed what in which revision?

UserRevisionLine numberNew 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 }