1. AT指令的回调函数
void AT_CmdFunc_lwm2mNOTIFY(atCommand_t *pParam)
在回调函数中用
rc = lwm2mClientNotify(reqHandle, lwm2mclientId, &uri);
在notify 里面要发送邮箱信息
osiMessageQueuePut(lwm2m_atcmd_handle, &msg);
这时要说到第一个任务,AT命令处理的主任务了。lwm2m_resource_value_changed 会标志有值改变了。在这个函数中会查看有没有 订阅者,有的话watcherP->update = true;
void lwm2mAtcmdProcessing(void *argument)
{
case MSG_LWM2M_NOTIFY:
memcpy(&uri, &msg.uri, sizeof(lwm2m_uri_t));
lwm2m_resource_value_changed(pContext->context, &uri);
break;
}
然后说到另外一个任务
void lwm2mMainLoop(void *arg) 调用 result = lwm2m_step(lwm2mH, (time_t*)&(tv.tv_sec)); 调用 observe_step(contextP, tv_sec, timeoutP); 开始组包数据 coap_init_message(message, COAP_TYPE_NON, COAP_205_CONTENT, 0); coap_set_header_content_type(message, watcherP->format); coap_set_payload(message, buffer, length);
在这里有CON , 和NON,那么如果改成CON,或许会收到数据 ACK。
这里处理接收到的数据
lwm2m_handle_packet(lwm2mH, buffer, numBytes, connP);
加上,不知道行不行啊
if (message->type == COAP_TYPE_ACK) { //如果收到了ACK lwm2mSendInd("RECV ACK",NULL); }