@@ -80,26 +80,56 @@ ble_gatt_att_reg_t matter_csvc_atts[CSVC_IDX_NB] = {
80
80
SONATA_PERM (UUID_LEN, UUID_128) },
81
81
{ 0 , 0 } },
82
82
[CSVC_IDX_TX_CFG] = { { { 0X02 , 0X29 , 0 }, PRD_NA | PWR_NA, 2 , PRI }, { matter_tx_CCCD_write_cb, matter_tx_CCCD_read_cb } },
83
+ #if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING
84
+ [CSVC_IDX_C3_CHAR] = { { { 0X03 , 0X28 , 0 }, PRD_NA, 0 , 0 }, { 0 , 0 } },
85
+ [CSVC_IDX_C3_VAL] = { { { 0x04 , 0x8F , 0x21 , 0x83 , 0x8A , 0x74 , 0x7D , 0xB8 , 0xF2 , 0x45 , 0x72 , 0x87 , 0x38 , 0x02 , 0x63 , 0x64 },
86
+ PRD_NA,
87
+ 512 ,
88
+ PRI | SONATA_PERM (UUID_LEN, UUID_128) },
89
+ { 0 , matter_c3_char_read_cb } },
90
+ #endif
83
91
};
84
92
/*
85
93
* FUNCTION DEFINITIONS
86
94
****************************************************************************************
87
95
*/
88
96
void matter_ble_stack_open (void )
89
97
{
90
- ChipLogProgress (DeviceLayer, " matter_ble_stack_open\r\n " );
98
+ ChipLogProgress (DeviceLayer, " matter_ble_stack_open" );
91
99
app_ble_stack_start (USER_MATTER_MODULE_ID);
92
100
}
93
101
94
- void matter_ble_start_adv (void )
102
+ void matter_ble_start_adv (bool fast )
95
103
{
96
104
ble_adv_data_t data;
97
105
ble_scan_data_t scan_data;
106
+ sonata_gap_directed_adv_create_param_t param = { 0 };
107
+
98
108
memset (&data, 0 , sizeof (ble_adv_data_t ));
99
109
memset (&scan_data, 0 , sizeof (ble_scan_data_t ));
100
110
BLEMgrImpl ().SetAdvertisingData ((uint8_t *) &data.ble_advdata , (uint8_t *) &data.ble_advdataLen );
101
111
BLEMgrImpl ().SetScanRspData ((uint8_t *) &scan_data.ble_respdata , (uint8_t *) &scan_data.ble_respdataLen );
102
- app_ble_advertising_start (APP_MATTER_ADV_IDX, &data, &scan_data);
112
+
113
+ param.disc_mode = SONATA_GAP_ADV_MODE_GEN_DISC;
114
+ param.prop = SONATA_GAP_ADV_PROP_UNDIR_CONN_MASK;
115
+ param.max_tx_pwr = 0xE2 ;
116
+ param.filter_pol = SONATA_ADV_ALLOW_SCAN_ANY_CON_ANY;
117
+ param.addr_type = SONATA_GAP_STATIC_ADDR;
118
+ param.chnl_map = 0x07 ;
119
+ param.phy = SONATA_GAP_PHY_LE_1MBPS;
120
+ if (fast)
121
+ {
122
+ param.adv_intv_min = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MIN;
123
+ param.adv_intv_max = CHIP_DEVICE_CONFIG_BLE_FAST_ADVERTISING_INTERVAL_MAX;
124
+ ChipLogProgress (DeviceLayer, " fast advertising" );
125
+ }
126
+ else
127
+ {
128
+ param.adv_intv_min = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MIN;
129
+ param.adv_intv_max = CHIP_DEVICE_CONFIG_BLE_SLOW_ADVERTISING_INTERVAL_MAX;
130
+ ChipLogProgress (DeviceLayer, " slow advertising" );
131
+ }
132
+ app_ble_start_advertising_with_param (APP_MATTER_ADV_IDX, SONATA_GAP_STATIC_ADDR, ¶m, &data, &scan_data);
103
133
}
104
134
105
135
void matter_ble_stop_adv (void )
@@ -112,31 +142,43 @@ void matter_ble_add_service()
112
142
ret = app_ble_gatt_add_svc_helper (&service_handle, sizeof (matter_csvc_atts) / sizeof (ble_gatt_att_reg_t ), 1 , matter_csvc_atts);
113
143
if (ret != 0 )
114
144
{
115
- ChipLogError (DeviceLayer, " matter_ble_add_service add service failed\r\n " );
145
+ ChipLogError (DeviceLayer, " matter_ble_add_service add service failed" );
116
146
}
117
147
else
118
148
{
119
- ChipLogProgress (DeviceLayer, " matter_ble_add_service add service service_handle=%d\r\n " , service_handle);
149
+ ChipLogProgress (DeviceLayer, " matter_ble_add_service add service service_handle=%d" , service_handle);
120
150
}
121
151
}
122
152
void matter_set_connection_id (uint8_t conId)
123
153
{
124
- ChipLogProgress (DeviceLayer, " matter_set_connection_id conId=%d\r\n " , conId);
154
+ ChipLogProgress (DeviceLayer, " matter_set_connection_id conId=%d" , conId);
125
155
BLEMgrImpl ().AllocConnectionState (conId);
126
156
current_connect_id = conId;
127
157
}
128
158
159
+ void matter_close_connection (uint8_t conId)
160
+ {
161
+ if (current_connect_id != SONATA_ADDR_NONE && conId != current_connect_id)
162
+ {
163
+ ChipLogError (DeviceLayer, " wrong connection id" );
164
+ }
165
+ sonata_ble_gap_disconnect (conId, 0 );
166
+ }
167
+
129
168
uint16_t matter_ble_complete_event_handler (int opt_id, uint8_t status, uint16_t param, uint32_t dwparam)
130
169
{
131
170
uint16_t ret = MATTER_EVENT_DONE_CONTINUE;
132
171
133
172
switch (opt_id)
134
173
{
174
+ case SONATA_GAP_CMP_BLE_ON:
175
+ matter_ble_add_service ();
176
+ BLEMgrImpl ().SetStackInit ();
177
+ break ;
135
178
case SONATA_GAP_CMP_ADVERTISING_START: // 0x0F06
136
179
if (is_matter_activity (param))
137
180
{
138
181
BLEMgrImpl ().SetAdvStartFlag ();
139
- matter_ble_add_service ();
140
182
}
141
183
break ;
142
184
case SONATA_GAP_CMP_ADVERTISING_STOP:
@@ -189,7 +231,12 @@ void matter_tx_CCCD_read_cb(uint8_t * data, uint16_t * size)
189
231
{
190
232
BLEMgrImpl ().HandleTXCharCCCDRead (current_connect_id, size, data);
191
233
}
192
-
234
+ #if CHIP_ENABLE_ADDITIONAL_DATA_ADVERTISING
235
+ void matter_c3_char_read_cb (uint8_t * data, uint16_t * size)
236
+ {
237
+ BLEMgrImpl ().HandleC3CharRead (current_connect_id, size, data);
238
+ }
239
+ #endif
193
240
void matter_tx_char_send_indication (uint8_t conId, uint16_t size, uint8_t * data)
194
241
{
195
242
ChipLogProgress (DeviceLayer, " matter_tx_char_send_indication conId=%d size=%d data=%p service_handle=%d" , conId, size, data,
0 commit comments