20160215_jeffrey - silenceuncrio/diary GitHub Wiki
- 0920 - review & engineering notebook
- 1110 - 利用 CSR 的 Swift-LE Application
- 1320 - 使用 command
- 1350 - 參考 bpoint 來信-Set Plug on/off command
- 1425 - 使用 Android 上的 BLE Demo
過年放了一個禮拜
先 review 順便寫 engineering notebook
好好利用 CSR 的 Swift-LE Application
因為這個 application 有現成的 command 可以用
就相當於前些日子買的 DX-BT05 4.0 藍牙模快
先利用 scan
command scan 出 BLE 的 address
[CMD] scan 1
<< (11:09:42) CENTRAL_SCAN_REQ (0x4)
Scanning is: enabled
>> (11:09:42) CENTRAL_SCAN_RSP (0x104)
status: 0x0 ("success")
>> (11:09:42) SCAN_RESULT_IND (0x1002)
Device addr: d05fb80fa6a0
(Address is public)
>> (11:09:42) SCAN_RESULT_IND (0x1002)
Device addr: d05fb80fa6a0
(Address is public)
>> (11:09:42) SCAN_RESULT_IND (0x1002)
Device addr: d05fb80fa6a0
(Address is public)
>> (11:09:42) SCAN_RESULT_IND (0x1002)
Device addr: d05fb80fa37b
(Address is public)
[CMD] scan 0
<< (11:09:45) CENTRAL_SCAN_REQ (0x4)
Scanning is: disabled
>> (11:09:45) CENTRAL_SCAN_RSP (0x104)
status: 0x0 ("success")
待連接的 peripheral 的資訊 Device addr: d05fb80fa6a0
connect 的 command 使用方式如下
[CMD] conn
usage: conn <nap> <uap> <lap> <is random>
參考 BLUETOOTH SPECIFICATION Version 4.2 [Vol 2, Part B]
來拆解 Device addr: d05fb80fa6a0
- nap - d05f
- uap - b8
- lap - 0fa6a0
- is random - 0
connect 的 command 為 conn d05f b8 0fa6a0 0
使用 connect command conn d05f b8 0fa6a0 0
[CMD] conn d05f b8 0fa6a0 0
<< (13:22:58) CENTRAL_INIT_CONNECT_REQ (0xa)
Addr: 0xd05f 0xb8 0x0fa6a0
(This is a static address)
>> (13:22:58) CENTRAL_INIT_CONNECT_RSP (0x10a)
status: 0x1 ("initiated")
>> (13:22:58) CONNECTION_STATUS_IND (0x1003)
Now connected to: 0xd05f 0xb8 0x0fa6a0
(This is a non-random address)
>> (13:22:59) CONNECTION_STATUS_IND (0x1003)
Device is now disconnected
Device is now disconnected
? 再一次
[CMD] conn d05f b8 0fa6a0 0
<< (13:26:13) CENTRAL_INIT_CONNECT_REQ (0xa)
Addr: 0xd05f 0xb8 0x0fa6a0
(This is a static address)
>> (13:26:13) CENTRAL_INIT_CONNECT_RSP (0x10a)
status: 0x1 ("initiated")
>> (13:26:13) CONNECTION_STATUS_IND (0x1003)
Now connected to: 0xd05f 0xb8 0x0fa6a0
(This is a non-random address)
>> (13:26:14) SERVER_NOTIFICATION_IND (0x1011)
handle: 46
data: 0x41 0x54 0x52 0x10 0x0 0x0 0xf7 0x0 0x0 0x10 0x1 0xaa 0xaa 0xaa 0xaa 0xaa 0xaa 0x1 0x0 0x0
>> (13:26:19) CONNECTION_PARAMETERS_CHANGE_REQUEST_IND (0x1005)
handle: 0x8, identifier: 0x1
min interval: 6, max interval: 10
latency: 0, timeout: 1000
Respond using: rpm 0x8 0x1 <0|1>
使用 servs - (Client) Read the services supported by the server
[CMD] servs
<< (13:27:42) CLIENT_READ_SERVER_SUPPORTED_SERVICES_REQ (0xe)
>> (13:27:42) CLIENT_READ_SERVER_SUPPORTED_SERVICES_RSP (0x10e)
status: 0x1 ("initiated")
>> (13:27:42) SERVICE_INFO_IND (0x100b)
Service handle (16-bit) 0x1800 (GAP)
Handle range: 0x1 - 0xb
>> (13:27:42) SERVICE_INFO_IND (0x100b)
Service handle (16-bit) 0x1801 (GATT)
Handle range: 0xc - 0xf
>> (13:27:42) SERVICE_INFO_IND (0x100b)
Service handle (16-bit) 0x180a (DEVICE INFO)
Handle range: 0x10 - 0x22
>> (13:27:42) SERVICE_INFO_IND (0x100b)
Service handle (16-bit) 0xf186 (unknown)
Handle range: 0x23 - 0x33
>> (13:27:42) SERVICE_INFO_IND (0x100b)
Service handle (128-bit) (unknown)
(UUID: 0xf000ffc004514000b000000000000000)
Handle range: 0x34 - 0xffff
>> (13:27:42) CLIENT_READ_SERVER_SUPPORTED_SERVICES_RSP (0x10e)
status: 0x0 ("success")
host application 右欄出現
Remote server:
Serv: 0x1800 (GAP) 1-11
Serv: 0x1801 (GATT) 12-15
Serv: 0x180a (DEVICE INFO) 16-34
Serv: 0xf186 (unknown) 35-51
Serv: 0xf000 (unknown) 52-65535
使用 chars - (Client) Read the characteristics in a handle range
[CMD] chars
<< (13:30:45) CLIENT_READ_SERVER_CHAR_DECLARATIONS_REQ (0xf)
Handle range: 0x1 - 0xff
>> (13:30:46) CLIENT_READ_SERVER_CHAR_DECLARATIONS_RSP (0x10f)
status: 0x1 ("initiated")
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 1)
UUID (16-bit) 0x2800 (PRIM SERV)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 2)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 3)
UUID (16-bit) 0x2a00 (DEVICE NAME)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 4)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 5)
UUID (16-bit) 0x2a01 (APPEARANCE)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 6)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 7)
UUID (16-bit) 0x2a02 (PERIPH PRIV FLAG)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 8)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 9)
UUID (16-bit) 0x2a03 (RECON ADDRESS)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 10)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 11)
UUID (16-bit) 0x2a04 (PREF CON PARAMS)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 12)
UUID (16-bit) 0x2800 (PRIM SERV)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 13)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 14)
UUID (16-bit) 0x2a05 (SERVICE CHANGED)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 15)
UUID (16-bit) 0x2902 (CHAR CONF)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 16)
UUID (16-bit) 0x2800 (PRIM SERV)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 17)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 18)
UUID (16-bit) 0x2a23 (SYSTEM ID)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 19)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 20)
UUID (16-bit) 0x2a24 (MODEL NUMBER)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 21)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 22)
UUID (16-bit) 0x2a25 (SERIAL NUMBER)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 23)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 24)
UUID (16-bit) 0x2a26 (FW REVISION)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 25)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 26)
UUID (16-bit) 0x2a27 (HW REVISION)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 27)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 28)
UUID (16-bit) 0x2a28 (SW REVISION)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 29)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 30)
UUID (16-bit) 0x2a29 (MANUFAC NAME)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 31)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 32)
UUID (16-bit) 0x2a2a (IEEE11073 DATA)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 33)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 34)
UUID (16-bit) 0x2a50 (PnP INFO)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 35)
UUID (16-bit) 0x2800 (PRIM SERV)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 36)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 37)
UUID (16-bit) 0xf181 (unknown)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 38)
UUID (16-bit) 0x2901 (unknown)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 39)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 40)
UUID (16-bit) 0xf182 (unknown)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 41)
UUID (16-bit) 0x2901 (unknown)
>> (13:30:46) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 42)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 43)
UUID (16-bit) 0xf183 (unknown)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 44)
UUID (16-bit) 0x2901 (unknown)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 45)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 46)
UUID (16-bit) 0xf184 (unknown)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 47)
UUID (16-bit) 0x2902 (CHAR CONF)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 48)
UUID (16-bit) 0x2901 (unknown)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 49)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 50)
UUID (16-bit) 0xf185 (unknown)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 51)
UUID (16-bit) 0x2901 (unknown)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 52)
UUID (16-bit) 0x2800 (PRIM SERV)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 53)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 54)
Characteristic handle (128-bit) (unknown)
(UUID: 0xf000ffc104514000b000000000000000)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 55)
UUID (16-bit) 0x2902 (CHAR CONF)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 56)
UUID (16-bit) 0x2901 (unknown)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 57)
UUID (16-bit) 0x2803 (CHAR DECL)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 58)
Characteristic handle (128-bit) (unknown)
(UUID: 0xf000ffc204514000b000000000000000)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 59)
UUID (16-bit) 0x2902 (CHAR CONF)
>> (13:30:47) CHAR_INFO_IND (0x100c), status 0x0 (success)
(handle 60)
UUID (16-bit) 0x2901 (unknown)
>> (13:30:47) CLIENT_READ_SERVER_CHAR_VALUE_RSP (0x110)
status: 0x0 ("success")
右欄變成
Remote server:
Serv: 0x1800 (GAP) 1-11
Id: 3 (DEVICE NAME)
Value: (unk)
Props: (unk)
Id: 5 (APPEARANCE)
Value: (unk)
Props: (unk)
Id: 7 (PERIPH PRIV FLAG)
Value: (unk)
Props: (unk)
Id: 9 (RECON ADDRESS)
Value: (unk)
Props: (unk)
Id: 11 (PREF CON PARAMS)
Value: (unk)
Props: (unk)
Serv: 0x1801 (GATT) 12-15
Id: 14 (SERVICE CHANGED)
Value: (unk)
Props: (unk)
Serv: 0x180a (DEVICE INFO) 16-34
Id: 18 (SYSTEM ID)
Value: (unk)
Props: (unk)
Id: 20 (MODEL NUMBER)
Value: (unk)
Props: (unk)
Id: 22 (SERIAL NUMBER)
Value: (unk)
Props: (unk)
Id: 24 (FW REVISION)
Value: (unk)
Props: (unk)
Id: 26 (HW REVISION)
Value: (unk)
Props: (unk)
Id: 28 (SW REVISION)
Value: (unk)
Props: (unk)
Id: 30 (MANUFAC NAME)
Value: (unk)
Props: (unk)
Id: 32 (IEEE11073 DATA)
Value: (unk)
Props: (unk)
Id: 34 (PnP INFO)
Value: (unk)
Props: (unk)
Serv: 0xf186 (unknown) 35-51
Id: 37 (unknown)
Value: (unk)
Props: (unk)
Id: 40 (unknown)
Value: (unk)
Props: (unk)
Id: 43 (unknown)
Value: (unk)
Props: (unk)
Id: 46 (unknown)
Value: (unk)
Props: (unk)
Id: 50 (unknown)
Value: (unk)
Props: (unk)
Serv: 0xf000 (unknown) 52-65535
Id: 54 (unknown)
Value: (unk)
Props: (unk)
Id: 58 (unknown)
Value: (unk)
Props: (unk)
使用了下面兩個 command 過後
reads (Client) Read the values of all characteristics
props (Client) Read the properties of a characteristic
右欄變成
Remote server:
Serv: 0x1800 (GAP) 1-11
Id: 3 (DEVICE NAME)
Value: Osmart_Plug
Props: Readable
Id: 5 (APPEARANCE)
Value: not specified
Props: (unk)
Id: 7 (PERIPH PRIV FLAG)
Value: (unk)
Props: (unk)
Id: 9 (RECON ADDRESS)
Value: (unk)
Props: Perm Write
Id: 11 (PREF CON PARAMS)
Value: (unk)
Props: (unk)
Serv: 0x1801 (GATT) 12-15
Id: 14 (SERVICE CHANGED)
Value: (unk)
Props: (unk)
Serv: 0x180a (DEVICE INFO) 16-34
Id: 18 (SYSTEM ID)
Value: (unk)
Props: Readable
Id: 20 (MODEL NUMBER)
Value: Osmart Plug
Props: (unk)
Id: 22 (SERIAL NUMBER)
Value: Serial Number
Props: Readable
Id: 24 (FW REVISION)
Value: Osmart_V1512.05
Props: (unk)
Id: 26 (HW REVISION)
Value: Hardware Revision
Props: Readable
Id: 28 (SW REVISION)
Value: Software Revision
Props: (unk)
Id: 30 (MANUFAC NAME)
Value: reIDEA
Props: Readable
Id: 32 (IEEE11073 DATA)
Value: (unk)
Props: (unk)
Id: 34 (PnP INFO)
Value: (unk)
Props: Readable
Serv: 0xf186 (unknown) 35-51
Id: 37 (unknown)
Value: (unk)
Props: (unk)
Id: 40 (unknown)
Value: (unk)
Props: Readable
Id: 43 (unknown)
Value: (unk)
Props: (unk)
Id: 46 (unknown)
Value: (unk)
Props: Notifiable
Id: 50 (unknown)
Value: (unk)
Props: (unk)
Serv: 0xf000 (unknown) 52-65535
Id: 54 (unknown)
Value: (unk)
Props: (unk)
Id: 58 (unknown)
Value: (unk)
Props: W/pW/N
能被寫得只有 Id: 58 這一個
Serv: 0xf000 (unknown) 52-65535
Id: 54 (unknown)
Value: (unk)
Props: (unk)
Id: 58 (unknown)
Value: (unk)
Props: W/pW/N
使用 write - Write a value to a characteristic
[CMD] write
usage: write <handle> <type> <data byte...>
- handle - 就是 id
- type - 0
swift-le_structures.h
/*! This enumeration describes the type of characteristic write to be performed. */
typedef enum {
SLE_WRITE_REQUEST = 0x00, /*!< Send Write Request to the server */
SLE_WRITE_COMMAND = 0x40, /*!< Send Write Command to the server. */
SLE_AUTH_WRITE_SIGNED = 0x80 /*!< Send Signed Write to the server. Only Write Command can be signed. */
} SLE_WRITE_TYPE_T;
- data byte... - 參考 bpoint 來信說明
Hi, Jeffrey,
Please check below information for on-off controls of OSMART Plug...
Set Plug on/off command: “ATC” + ”P” + 0x00 + relay_control + checksum. relay_control: 0x01 => Plug on. relay_control: 0x00 => Plug off. Example: Plug on: ‘A’ + ’T’ + ‘C’ + ‘P’ + 0x00 + 0x01 + 0x29 Plug off: ‘A’ + ’T’ + ‘C’ + ‘P’ + 0x00 + 0x00 + 0x28
After successfully engages OSMART Plug with gateway, let's discuss about more command sets.
Thanks,
David Li
從我的 iPhone 傳送
- Plug on: ‘A’ + ’T’ + ‘C’ + ‘P’ + 0x00 + 0x01 + 0x29
- Plug off: ‘A’ + ’T’ + ‘C’ + ‘P’ + 0x00 + 0x00 + 0x28
- 'A' - 0x41
- 'T' - 0x54
- 'C' - 0x43
- 'P' - 0x50
做合上述情報
- Plug on:
write 58 0 41544350000129
- Plug off:
write 58 0 41544350000028
寫了沒反應ㄚ
難道是其他的 id ?
不過使用 Android 上的 BLE Demo
跟 Address D0:5F:B8:0F:A6:A0 的 Osmart_Plug connect 後
對著 UUID: 0000f181-0000-1000-8000-00805f9b34fb 寫竟然動了
- Plug on:
0x41544350000129
- Plug off:
0x41544350000028