Skip to content

Commit a12b77b

Browse files
committed
Fix off-by-one error, add ConnectTest
1 parent ef7ea65 commit a12b77b

File tree

4 files changed

+67
-17
lines changed

4 files changed

+67
-17
lines changed

scripts/generate_bg_api.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def __init__(self, type, numBytes, isSigned = True):
2323
'uint32' : CSharpType(CSharpType.TYPE_LONG, 4, False),
2424
'int16' : CSharpType(CSharpType.TYPE_INT, 2),
2525
'uint8array' : CSharpType(CSharpType.TYPE_BYTEARRAY, 0),
26-
'bd_addr' : CSharpType(CSharpType.TYPE_BD_ADDR, 0),
26+
'bd_addr' : CSharpType(CSharpType.TYPE_BD_ADDR, 6),
2727
}
2828

2929
class BgApiParam(object):

src/BgApi.cs

+1-6
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,10 @@ public partial class BgApi
4747
/// </summary>
4848
private SerialDataReceivedEventHandler m_serialDataReceivedEventHandler;
4949

50-
/// <summary>
51-
/// Assumes that the maximum message size in bytes that ever goes over the wire in both directions is less than this value.
52-
/// </summary>
53-
public const int MAX_MESSAGE = 256;
54-
5550
/// <summary>
5651
/// The maximum receive message size in bytes.
5752
/// </summary>
58-
public const int MAX_RECEIVE_MESSAGE = MAX_MESSAGE;
53+
public const int MAX_RECEIVE_MESSAGE = 65536;
5954

6055
/// <summary>
6156
/// The size of the header in bytes.

src/BgApi.g.cs

+10-10
Original file line numberDiff line numberDiff line change
@@ -1081,11 +1081,11 @@ public async Task<ble_msg_system_endpoint_tx_rsp_t> ble_cmd_system_endpoint_tx(i
10811081
public async Task<ble_msg_system_whitelist_append_rsp_t> ble_cmd_system_whitelist_append(bd_addr address, int address_type)
10821082
{
10831083
log("ble_cmd_system_whitelist_append_id");
1084-
byte[] _data = new byte[SIZE_HEADER + 0 + 1 + address.Length + 1];
1084+
byte[] _data = new byte[SIZE_HEADER + 0 + 6 + 1];
10851085
int idx = 0;
10861086
// header
10871087
_data[idx++] = (byte)ble_dev_types.ble_dev_type_ble|(byte)ble_msg_types.ble_msg_type_cmd|0x0;
1088-
_data[idx++] = (byte)(0 + 1 + address.Length + 1);
1088+
_data[idx++] = (byte)(0 + 6 + 1);
10891089
_data[idx++] = (byte)ble_classes.ble_cls_system;
10901090
_data[idx++] = (byte)ble_command_ids.ble_cmd_system_whitelist_append_id;
10911091
// data
@@ -1102,11 +1102,11 @@ public async Task<ble_msg_system_whitelist_append_rsp_t> ble_cmd_system_whitelis
11021102
public async Task<ble_msg_system_whitelist_remove_rsp_t> ble_cmd_system_whitelist_remove(bd_addr address, int address_type)
11031103
{
11041104
log("ble_cmd_system_whitelist_remove_id");
1105-
byte[] _data = new byte[SIZE_HEADER + 0 + 1 + address.Length + 1];
1105+
byte[] _data = new byte[SIZE_HEADER + 0 + 6 + 1];
11061106
int idx = 0;
11071107
// header
11081108
_data[idx++] = (byte)ble_dev_types.ble_dev_type_ble|(byte)ble_msg_types.ble_msg_type_cmd|0x0;
1109-
_data[idx++] = (byte)(0 + 1 + address.Length + 1);
1109+
_data[idx++] = (byte)(0 + 6 + 1);
11101110
_data[idx++] = (byte)ble_classes.ble_cls_system;
11111111
_data[idx++] = (byte)ble_command_ids.ble_cmd_system_whitelist_remove_id;
11121112
// data
@@ -2240,11 +2240,11 @@ public async Task<ble_msg_gap_discover_rsp_t> ble_cmd_gap_discover(int mode)
22402240
public async Task<ble_msg_gap_connect_direct_rsp_t> ble_cmd_gap_connect_direct(bd_addr address, int addr_type, int conn_interval_min, int conn_interval_max, int timeout, int latency)
22412241
{
22422242
log("ble_cmd_gap_connect_direct_id");
2243-
byte[] _data = new byte[SIZE_HEADER + 0 + 1 + address.Length + 1 + 2 + 2 + 2 + 2];
2243+
byte[] _data = new byte[SIZE_HEADER + 0 + 6 + 1 + 2 + 2 + 2 + 2];
22442244
int idx = 0;
22452245
// header
22462246
_data[idx++] = (byte)ble_dev_types.ble_dev_type_ble|(byte)ble_msg_types.ble_msg_type_cmd|0x0;
2247-
_data[idx++] = (byte)(0 + 1 + address.Length + 1 + 2 + 2 + 2 + 2);
2247+
_data[idx++] = (byte)(0 + 6 + 1 + 2 + 2 + 2 + 2);
22482248
_data[idx++] = (byte)ble_classes.ble_cls_gap;
22492249
_data[idx++] = (byte)ble_command_ids.ble_cmd_gap_connect_direct_id;
22502250
// data
@@ -2391,11 +2391,11 @@ public async Task<ble_msg_gap_set_adv_data_rsp_t> ble_cmd_gap_set_adv_data(int s
23912391
public async Task<ble_msg_gap_set_directed_connectable_mode_rsp_t> ble_cmd_gap_set_directed_connectable_mode(bd_addr address, int addr_type)
23922392
{
23932393
log("ble_cmd_gap_set_directed_connectable_mode_id");
2394-
byte[] _data = new byte[SIZE_HEADER + 0 + 1 + address.Length + 1];
2394+
byte[] _data = new byte[SIZE_HEADER + 0 + 6 + 1];
23952395
int idx = 0;
23962396
// header
23972397
_data[idx++] = (byte)ble_dev_types.ble_dev_type_ble|(byte)ble_msg_types.ble_msg_type_cmd|0x0;
2398-
_data[idx++] = (byte)(0 + 1 + address.Length + 1);
2398+
_data[idx++] = (byte)(0 + 6 + 1);
23992399
_data[idx++] = (byte)ble_classes.ble_cls_gap;
24002400
_data[idx++] = (byte)ble_command_ids.ble_cmd_gap_set_directed_connectable_mode_id;
24012401
// data
@@ -2432,11 +2432,11 @@ public async Task<ble_msg_gap_set_initiating_con_parameters_rsp_t> ble_cmd_gap_s
24322432
public async Task<ble_msg_gap_set_nonresolvable_address_rsp_t> ble_cmd_gap_set_nonresolvable_address(bd_addr address)
24332433
{
24342434
log("ble_cmd_gap_set_nonresolvable_address_id");
2435-
byte[] _data = new byte[SIZE_HEADER + 0 + 1 + address.Length];
2435+
byte[] _data = new byte[SIZE_HEADER + 0 + 6];
24362436
int idx = 0;
24372437
// header
24382438
_data[idx++] = (byte)ble_dev_types.ble_dev_type_ble|(byte)ble_msg_types.ble_msg_type_cmd|0x0;
2439-
_data[idx++] = (byte)(0 + 1 + address.Length);
2439+
_data[idx++] = (byte)(0 + 6);
24402440
_data[idx++] = (byte)ble_classes.ble_cls_gap;
24412441
_data[idx++] = (byte)ble_command_ids.ble_cmd_gap_set_nonresolvable_address_id;
24422442
// data

tests/CommandTests.cs

+55
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,60 @@ public async Task DiscoverTest()
9898
var rsp4 = await dongle.ble_cmd_gap_end_procedure();
9999
Assert.AreEqual(0, rsp4.result);
100100
}
101+
102+
[TestMethod]
103+
[TestCategory("Integration")]
104+
public async Task ConnectTest()
105+
{
106+
// FIXME: update manually
107+
var device2Connect = new[] { (byte)0x92, (byte)0xfc, (byte)0xab, (byte)0x06, (byte)0xde, (byte)0x50 };
108+
109+
// setup callback
110+
dongle.BgApiEventHandler = evt => {
111+
Assert.AreEqual(evt.GetType(), typeof(BgApi.ble_msg_gap_scan_response_evt_t));
112+
113+
var e = (BgApi.ble_msg_gap_scan_response_evt_t)evt;
114+
Console.WriteLine($"rssi: {e.rssi}, packet type: {e.packet_type}, sender: {e.sender}, address type: {e.address_type}, bond: {e.bond}");
115+
return Task.FromResult(true);
116+
};
117+
118+
// start discovering
119+
var rsp3 = await dongle.ble_cmd_gap_discover(1);
120+
Assert.AreEqual(0, rsp3.result);
121+
122+
// discovering
123+
await Task.Delay(5000);
124+
125+
var tcs = new TaskCompletionSource();
126+
// setup callback, wait for connection to complete
127+
dongle.BgApiEventHandler = evt => {
128+
if (evt.GetType().Equals(typeof(BgApi.ble_msg_connection_version_ind_evt_t))) {
129+
var e = (BgApi.ble_msg_connection_version_ind_evt_t)evt;
130+
Console.WriteLine($"version: {e.vers_nr}, packet type: {e.comp_id}, sender: {e.sub_vers_nr}");
131+
// signal connection result received
132+
tcs.TrySetResult();
133+
}
134+
return Task.FromResult(true);
135+
};
136+
137+
// connect to specific device
138+
var rsp4 = await dongle.ble_cmd_gap_connect_direct(
139+
new bd_addr() { Address = device2Connect },
140+
0, 60, 76, 100, 0);
141+
Assert.AreEqual(0, rsp4.result);
142+
int connection_handle = rsp4.connection_handle;
143+
144+
// wait for connection to complete
145+
await tcs.Task;
146+
147+
var rsp5 = await dongle.ble_cmd_attclient_read_by_group_type(connection_handle, 1, 65535, new byte[] { 0x00, 0x28 } );
148+
Assert.AreEqual(0, rsp5.result);
149+
150+
// wait for all attributes read
151+
await Task.Delay(3000);
152+
153+
var rsp6 = await dongle.ble_cmd_connection_disconnect(connection_handle);
154+
Assert.AreEqual(0, rsp6.result);
155+
}
101156
}
102157
}

0 commit comments

Comments
 (0)