Skip to content

Commit 4bb88a2

Browse files
committed
Fix Jira 834 Unexpected increase in compiled sketch image size
1. Reconstruct the initial process to avoid call BLE API Changed files BLEDeviceManager.cpp - Change the init order ble_client.c - Add new call ble_service.h - Add new API declaration ble_service.c - Modify init logic ble_service_api.c - Delete unsed file nble_driver.c - Modify init logic
1 parent efdbe66 commit 4bb88a2

File tree

7 files changed

+135
-205
lines changed

7 files changed

+135
-205
lines changed

libraries/CurieBLE/src/internal/BLEDeviceManager.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,17 +130,18 @@ bool BLEDeviceManager::begin(BLEDevice *device)
130130
{
131131
if (NULL == _local_ble)
132132
{
133+
// TODO: Olny allow call one time
134+
ble_client_init (bleConnectEventHandler, this,
135+
bleDisconnectEventHandler, this,
136+
bleParamUpdatedEventHandler, this);
137+
133138
_local_ble = device;
134139
bt_le_set_mac_address(_local_bda);
135140

136141
// Set device name
137142
setDeviceName();
138143
_state = BLE_PERIPH_STATE_READY;
139144
delay(4);
140-
// TODO: Olny allow call one time
141-
ble_client_init (bleConnectEventHandler, this,
142-
bleDisconnectEventHandler, this,
143-
bleParamUpdatedEventHandler, this);
144145
return true;
145146
}
146147
else

libraries/CurieBLE/src/internal/ble_client.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#include "infra/version.h"
4343
#include "curie_factory_data.h"
4444
#include "portable.h"
45+
#include "services/ble/ble_service.h"
4546

4647
#include "uart.h"
4748
#include "ipc_uart_ns16550.h"
@@ -193,7 +194,9 @@ void ble_client_init(ble_client_connect_event_cb_t connect_cb, void* connect_par
193194
ble_client_disconnect_event_cb_t disconnect_cb, void* disconnect_param,
194195
ble_client_update_param_event_cb_t update_param_cb, void* update_param_param)
195196
{
196-
//uint32_t delay_until;
197+
// Enable the HW
198+
ble_enable();
199+
197200
pr_info(LOG_MODULE_BLE, "%s", __FUNCTION__);
198201
ble_client_connect_event_cb = connect_cb;
199202
ble_client_connect_event_param = connect_param;

system/libarc32_arduino101/framework/include/services/ble/ble_service.h

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -217,20 +217,7 @@ struct ble_dbg_req_rsp {
217217
uint32_t u1;
218218
};
219219

220-
/** Enable/Disable BLE stack. To be called before any BLE service related call.
221-
*
222-
* @param p_service_conn client service connection (cfw service connection)
223-
* @param enable 1: enable BLE stack 0: disable BLE stack
224-
* @param p_config configuration parameters when enabling BLE. shall be null in case of BLE disable. @ref ble_enable_config
225-
* @param p_priv pointer to private structure returned in a response
226-
*
227-
* @return @ref OS_ERR_TYPE
228-
* @note Expected notification:
229-
* - Message with @ref MSG_ID_BLE_ENABLE_RSP and type @ref ble_enable_rsp.
230-
*/
231-
int ble_service_enable(cfw_service_conn_t * p_service_conn, uint8_t enable,
232-
const struct ble_enable_config * p_config,
233-
void *p_priv);
220+
void ble_enable();
234221

235222
/** @endcond */
236223
/** @}*/

system/libarc32_arduino101/framework/src/services/ble_service/ble_service.c

Lines changed: 119 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -68,175 +68,175 @@ static const struct bt_conn_auth_cb auth_callbacks;
6868
#endif
6969

7070
static service_t ble_service = {
71-
.service_id = BLE_SERVICE_ID,
72-
.client_connected = ble_client_connected,
73-
.client_disconnected = ble_client_disconnected,
71+
.service_id = BLE_SERVICE_ID,
72+
.client_connected = ble_client_connected,
73+
.client_disconnected = ble_client_disconnected,
7474
};
7575

7676
static void ble_is_not_enabled_rsp(struct cfw_message *msg, int status)
7777
{
78-
struct ble_enable_rsp *resp =
79-
(struct ble_enable_rsp *)cfw_alloc_rsp_msg(msg,
80-
/* translate msg from req to rsp */
81-
(CFW_MESSAGE_ID(msg) ^ MSG_ID_BLE_SERVICE_BASE)
82-
| MSG_ID_BLE_SERVICE_RSP,
83-
sizeof(*resp));
84-
resp->status = status;
85-
cfw_send_message(resp);
78+
struct ble_enable_rsp *resp =
79+
(struct ble_enable_rsp *)cfw_alloc_rsp_msg(msg,
80+
/* translate msg from req to rsp */
81+
(CFW_MESSAGE_ID(msg) ^ MSG_ID_BLE_SERVICE_BASE)
82+
| MSG_ID_BLE_SERVICE_RSP,
83+
sizeof(*resp));
84+
resp->status = status;
85+
cfw_send_message(resp);
8686
}
8787

8888
#ifdef CONFIG_TCMD_BLE_DEBUG
8989
static void handle_msg_id_ble_dbg(struct cfw_message *msg)
9090
{
91-
struct nble_dbg_req params;
92-
struct ble_dbg_req_rsp *resp = (void *)
93-
cfw_alloc_rsp_msg(msg, MSG_ID_BLE_DBG_RSP, sizeof(*resp));
94-
struct ble_dbg_req_rsp *req = (struct ble_dbg_req_rsp *) msg;
91+
struct nble_dbg_req params;
92+
struct ble_dbg_req_rsp *resp = (void *)
93+
cfw_alloc_rsp_msg(msg, MSG_ID_BLE_DBG_RSP, sizeof(*resp));
94+
struct ble_dbg_req_rsp *req = (struct ble_dbg_req_rsp *) msg;
9595

96-
params.u0 = req->u0;
97-
params.u1 = req->u1;
96+
params.u0 = req->u0;
97+
params.u1 = req->u1;
9898
params.user_data = (void *)resp;
99-
nble_dbg_req(&params);
99+
nble_dbg_req(&params);
100100
}
101101
#endif /* CONFIG_TCMD_BLE_DEBUG */
102102

103103
void on_nble_dbg_rsp(const struct nble_dbg_rsp *params)
104104
{
105105
#ifdef CONFIG_TCMD_BLE_DEBUG
106-
struct ble_dbg_req_rsp *resp = params->user_data;
107-
if (!resp)
108-
return;
109-
resp->u0 = params->u0;
110-
resp->u1 = params->u1;
111-
cfw_send_message(resp);
106+
struct ble_dbg_req_rsp *resp = params->user_data;
107+
if (!resp)
108+
return;
109+
resp->u0 = params->u0;
110+
resp->u1 = params->u1;
111+
cfw_send_message(resp);
112112
#endif /* CONFIG_TCMD_BLE_DEBUG */
113113
}
114114

115115

116116
static void handle_msg_id_ble_rpc_callin(struct message *msg, void *priv)
117117
{
118-
struct ble_rpc_callin *rpc = container_of(msg, struct ble_rpc_callin, msg);
119-
/* handle incoming message */
118+
struct ble_rpc_callin *rpc = container_of(msg, struct ble_rpc_callin, msg);
119+
/* handle incoming message */
120120
//pr_debug(LOG_MODULE_BLE, "%s-%d", __FUNCTION__, __LINE__);
121-
rpc_deserialize(rpc->p_data, rpc->len);
122-
bfree(rpc->p_data);
123-
message_free(msg);
121+
rpc_deserialize(rpc->p_data, rpc->len);
122+
bfree(rpc->p_data);
123+
message_free(msg);
124124
//pr_debug(LOG_MODULE_BLE, "%s-%d", __FUNCTION__, __LINE__);
125125
}
126126

127127
static void ble_set_bda_cb(int status,
128128
void *user_data,
129129
const bt_addr_le_t *bda)
130130
{
131-
struct ble_enable_req *req = user_data;
131+
struct ble_enable_req *req = user_data;
132132

133-
if (!req)
134-
return;
133+
if (!req)
134+
return;
135135

136-
struct ble_enable_rsp *resp = (void *)cfw_alloc_rsp_msg(&req->header,
136+
struct ble_enable_rsp *resp = (void *)cfw_alloc_rsp_msg(&req->header,
137137
MSG_ID_BLE_ENABLE_RSP,
138138
sizeof(*resp));
139-
resp->status = status;
140-
141-
if (status == 0) {
142-
resp->enable = 1;
143-
144-
//nble_read_bda_req(resp);
145-
} else {
146-
/* error case */
147-
resp->enable = 0;
148-
cfw_send_message(resp);
149-
}
150-
bfree(req);
139+
resp->status = status;
140+
141+
if (status == 0) {
142+
resp->enable = 1;
143+
144+
//nble_read_bda_req(resp);
145+
} else {
146+
/* error case */
147+
resp->enable = 0;
148+
cfw_send_message(resp);
149+
}
150+
bfree(req);
151151
}
152152

153153
static void handle_ble_enable(struct ble_enable_req *req,
154154
struct _ble_service_cb *p_cb)
155155
{
156-
pr_info(LOG_MODULE_BLE, "ble_enable: state %d", p_cb->ble_state);
156+
pr_info(LOG_MODULE_BLE, "ble_enable: state %d", p_cb->ble_state);
157157

158-
p_cb->ble_state = BLE_ST_ENABLED;
158+
p_cb->ble_state = BLE_ST_ENABLED;
159159

160-
if (req->bda_present) {
161-
struct nble_set_bda_req params;
160+
if (req->bda_present) {
161+
struct nble_set_bda_req params;
162162

163-
params.cb = ble_set_bda_cb;
164-
params.user_data = req;
165-
params.bda = req->bda;
163+
params.cb = ble_set_bda_cb;
164+
params.user_data = req;
165+
params.bda = req->bda;
166166

167-
nble_set_bda_req(&params);
168-
} else {
169-
ble_set_bda_cb(0, req, NULL);
170-
}
167+
nble_set_bda_req(&params);
168+
} else {
169+
ble_set_bda_cb(0, req, NULL);
170+
}
171171
}
172172

173173
static void handle_ble_disable(struct ble_enable_req *req, struct _ble_service_cb *p_cb)
174174
{
175-
struct ble_enable_rsp *resp;
175+
struct ble_enable_rsp *resp;
176176

177-
pr_debug(LOG_MODULE_BLE, "ble_disable");
178-
p_cb->ble_state = BLE_ST_DISABLED;
177+
pr_debug(LOG_MODULE_BLE, "ble_disable");
178+
p_cb->ble_state = BLE_ST_DISABLED;
179179

180-
bt_le_adv_stop();
180+
bt_le_adv_stop();
181181

182-
resp = (void *)cfw_alloc_rsp_msg(&req->header,
183-
MSG_ID_BLE_ENABLE_RSP,
184-
sizeof(*resp));
185-
cfw_send_message(resp); // Sid. KW warning ack.
182+
resp = (void *)cfw_alloc_rsp_msg(&req->header,
183+
MSG_ID_BLE_ENABLE_RSP,
184+
sizeof(*resp));
185+
cfw_send_message(resp); // Sid. KW warning ack.
186186

187187
}
188188

189189
static void ble_service_message_handler(struct cfw_message *msg, void *param)
190190
{
191-
bool free_msg = true;
192-
struct _ble_service_cb *p_cb = param;
193-
uint16_t msg_id = CFW_MESSAGE_ID(msg);
194-
195-
if (p_cb->ble_state < BLE_ST_ENABLED &&
196-
msg_id != MSG_ID_BLE_ENABLE_REQ) {
197-
ble_is_not_enabled_rsp(msg, -ENODEV);
198-
goto out;
199-
}
200-
201-
switch (msg_id) {
202-
case MSG_ID_BLE_ENABLE_REQ: {
203-
struct ble_enable_req *req =
204-
container_of(msg, struct ble_enable_req, header);
205-
if (p_cb->ble_state) {
206-
if (req->enable) {
207-
handle_ble_enable(req, p_cb);
208-
free_msg = false;
209-
} else
210-
handle_ble_disable(req, p_cb);
211-
} else {
212-
pr_debug(LOG_MODULE_BLE, "ble_hdl_msg: core service not opened!");
213-
/* core service is not yet up */
214-
struct ble_enable_rsp *resp = (void *)cfw_alloc_rsp_msg(msg,
215-
MSG_ID_BLE_ENABLE_RSP, sizeof(*resp));
216-
resp->status = -EINPROGRESS;
217-
resp->enable = 0;
218-
cfw_send_message(resp); // Sid. KW warning ack.
219-
}
220-
}
221-
break;
191+
bool free_msg = true;
192+
struct _ble_service_cb *p_cb = param;
193+
uint16_t msg_id = CFW_MESSAGE_ID(msg);
194+
195+
if (p_cb->ble_state < BLE_ST_ENABLED &&
196+
msg_id != MSG_ID_BLE_ENABLE_REQ) {
197+
ble_is_not_enabled_rsp(msg, -ENODEV);
198+
goto out;
199+
}
200+
201+
switch (msg_id) {
202+
case MSG_ID_BLE_ENABLE_REQ: {
203+
struct ble_enable_req *req =
204+
container_of(msg, struct ble_enable_req, header);
205+
if (p_cb->ble_state) {
206+
if (req->enable) {
207+
handle_ble_enable(req, p_cb);
208+
free_msg = false;
209+
} else
210+
handle_ble_disable(req, p_cb);
211+
} else {
212+
pr_debug(LOG_MODULE_BLE, "ble_hdl_msg: core service not opened!");
213+
/* core service is not yet up */
214+
struct ble_enable_rsp *resp = (void *)cfw_alloc_rsp_msg(msg,
215+
MSG_ID_BLE_ENABLE_RSP, sizeof(*resp));
216+
resp->status = -EINPROGRESS;
217+
resp->enable = 0;
218+
cfw_send_message(resp); // Sid. KW warning ack.
219+
}
220+
}
221+
break;
222222
#ifdef CONFIG_TCMD_BLE_DEBUG
223-
case MSG_ID_BLE_DBG_REQ:
224-
handle_msg_id_ble_dbg(msg);
225-
break;
223+
case MSG_ID_BLE_DBG_REQ:
224+
handle_msg_id_ble_dbg(msg);
225+
break;
226226
#endif
227-
default:
228-
pr_warning(LOG_MODULE_BLE, "unsupported %d", msg_id);
229-
break;
230-
}
227+
default:
228+
pr_warning(LOG_MODULE_BLE, "unsupported %d", msg_id);
229+
break;
230+
}
231231
out:
232-
if (free_msg)
233-
cfw_msg_free(msg);
232+
if (free_msg)
233+
cfw_msg_free(msg);
234234
}
235235

236236
static void ble_client_connected(conn_handle_t *instance)
237237
{
238-
if (_ble_cb.ble_state == BLE_ST_NOT_READY)
239-
pr_warning(LOG_MODULE_BLE, "BLE_CORE service is not registered");
238+
if (_ble_cb.ble_state == BLE_ST_NOT_READY)
239+
pr_warning(LOG_MODULE_BLE, "BLE_CORE service is not registered");
240240
}
241241

242242
static void ble_client_disconnected(conn_handle_t *instance)
@@ -246,26 +246,30 @@ static void ble_client_disconnected(conn_handle_t *instance)
246246
void ble_bt_rdy(int err)
247247
{
248248
BT_SERVICE_ASSERT(err == 0);
249-
_ble_cb.ble_state = BLE_ST_DISABLED;
249+
_ble_cb.ble_state = BLE_ST_DISABLED;
250250
ble_inited = true;
251251

252-
/* register BLE service */
253-
if (cfw_register_service(_ble_cb.queue,
252+
/* register BLE service */
253+
if (cfw_register_service(_ble_cb.queue,
254254
&ble_service,
255255
ble_service_message_handler,
256256
&_ble_cb) == -1) {
257-
panic(0xb1eb1e);
258-
}
257+
panic(0xb1eb1e);
258+
}
259259
}
260260

261261
void ble_cfw_service_init(int service_id, T_QUEUE queue)
262262
{
263-
uint32_t time_stamp_last = 0;
264-
_ble_cb.queue = queue;
265-
_ble_cb.ble_state = BLE_ST_NOT_READY;
263+
_ble_cb.queue = queue;
264+
_ble_cb.ble_state = BLE_ST_NOT_READY;
265+
}
266266

267+
void ble_enable()
268+
{
269+
uint32_t time_stamp_last = 0;
270+
267271
#ifdef CONFIG_IPC_UART_NS16550
268-
nble_driver_configure(queue, handle_msg_id_ble_rpc_callin);
272+
nble_driver_configure(_ble_cb.queue, handle_msg_id_ble_rpc_callin);
269273
#endif
270274

271275
ble_inited = false;

0 commit comments

Comments
 (0)