20160215_jeffrey - silenceuncrio/diary GitHub Wiki

Index

  • 0920 - review & engineering notebook
  • 1110 - 利用 CSR 的 Swift-LE Application
  • 1320 - 使用 command
  • 1350 - 參考 bpoint 來信-Set Plug on/off command
  • 1425 - 使用 Android 上的 BLE Demo

0920

過年放了一個禮拜
先 review 順便寫 engineering notebook

1110

好好利用 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]

image

來拆解 Device addr: d05fb80fa6a0

  • nap - d05f
  • uap - b8
  • lap - 0fa6a0
  • is random - 0

connect 的 command 為 conn d05f b8 0fa6a0 0

1320

使用 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)

1350

使用了下面兩個 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 來信說明

David Li 於 2016/2/4 下午 11:37 寫道:

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 ?

1425

不過使用 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
⚠️ **GitHub.com Fallback** ⚠️