lwm2m 的notify 的机制

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);
        }
原文地址:https://www.cnblogs.com/429512065qhq/p/15576153.html