我修改了这个工程,适配我们自己的硬件,广播的代码也进行了相应的修改,现在手机能够扫描到,并且能进入到user_on_connection (),
问题1:是不是进入到user_on_connection(),就代表连接上了吗?
问题2:连接上了之后我想发送传感器的数据给手机,在哪个回调函数下操作?
问题3:我每次点击手机上的连接程序都会停止在这个函数的第一个ASSERT_WARNING(0);请问这个问题该怎么解决啊?
无效app_easy_timer_cancel(const timer_hnd timer_id)
{
如果APP_EASY_TIMER_HND_IS_VALID (timer_id)
{
如果((timer_callbacks [APP_EASY_TIMER_HND_TO_IDX (timer_id)] ! = NULL) & & \
(timer_callbacks [APP_EASY_TIMER_HND_TO_IDX (timer_id)] ! = app_easy_timer_canceled_handler))
{
ke_timer_clear (APP_EASY_TIMER_HND_TO_MSG_ID (timer_id) TASK_APP);
timer_callbacks [APP_EASY_TIMER_HND_TO_IDX (timer_id)] = app_easy_timer_canceled_handler;
struct cancel_timer_struct *req = KE_MSG_ALLOC(APP_CANCEL_TIMER, TASK_APP, TASK_APP,
cancel_timer_struct);
申请- > timer_id = timer_id;
ke_msg_send(要求的);
}
其他的
ASSERT_WARNING (0);
}
其他的
ASSERT_WARNING (0);
}
第一次用对话框开发发品,水平有点菜,希望谅解,谢谢解答
1. user_on_connection()函数实际上就是在gapc_connection_req_ind_handler函数下调用的EXECUTE_CALLBACK_PARAM1_PARAM2 (app_on_connection connection_idx, param);
可以认为连上了
2 .以user_add_sensor_report为前缀的几个函数都是。最后都会在dws_val_ntf_req_handler里面处理,并给手机发送通知的消息
3 .如果停在第一个断言,应该是这个计时器在之前已经被释放掉了,或者是在刚运行完函数app_easy_timer_cancel准备释放阶段。
Const struct ke_msg_handler dws_connected[] =
{
(ke_msg_func_t) gattc_write_cmd_ind_handler}, {GATTC_WRITE_CMD_IND
(ke_msg_func_t) gattc_cmp_evt_handler}, {GATTC_CMP_EVT
(ke_msg_func_t) dws_val_ntf_req_handler}, {DWS_VAL_NTF_REQ
(ke_msg_func_t) dws_val_set_req_handler}, {DWS_VAL_SET_REQ
/ / {DWS_VAL_IND_REQ (ke_msg_func_t) dws_val_ind_req_handler},
};
像这个状态中的处理函数,DWS_VAL_NTF_REQ, DWS_VAL_NTF_REQ对应的函数是怎么被调用的呢?是不是在event_process中通过这个KE_MSG_ALLOC_DRN(),然后由ke_msg_send()函数往内核发消息,之后调用执行的吗?
1 .设定任务的时候都会有这么一个结构,静态的const struct ke_task_desc TASK_DESC_DWS = {dws_state_handler, &dws_default_handler, dws_state, DWS_STATE_MAX, DWS_IDX_MAX};
然后会传递上面的参数,并创建任务和设定状态
ke_task_create (TASK_DWS &TASK_DESC_DWS);
ke_state_set (TASK_DWS DWS_DISABLED);
2 .芯片罗里固化有一个消息处理函数ke_task_schedule,用于分派消息,并根据当前的状态,找到相应的处理函数
状态就是指DWS_DISABLE DWS_IDLE,还是DWS_CONNECTED
const struct ke_state_handler dws_state_handler[DWS_STATE_MAX] =
{
[DWS_DISABLED] = KE_STATE_HANDLER (DWS_DISABLED),
[DWS_IDLE] = KE_STATE_HANDLER (DWS_IDLE),
[DWS_CONNECTED] = KE_STATE_HANDLER (DWS_CONNECTED),
};
如果没找到对应的函数,就调用dws_default_handler。消息处理的流程就是这样。
你提到的“像这个状态中的处理函数,DWS_VAL_NTF_REQ, DWS_VAL_NTF_REQ对应的函数是怎么被调用的呢?是不是在event_process中通过这个KE_MSG_ALLOC_DRN(),然后由ke_msg_send()函数往内核发消息,之后调用执行的?”//没错