OTA的实现在zigbee/ota/ota.c
status_t zcl_otaCb(zclIncomingAddrInfo_t *pAddrInfo, u8 cmdId, void *cmdPayload)
{
status_t status = ZCL_STA_SUCCESS;
if (pAddrInfo->dstEp == g_otaCtx.simpleDesc->endpoint) {
if (pAddrInfo->dirCluster == ZCL_FRAME_CLIENT_SERVER_DIR) {
switch (cmdId) {
case ZCL_CMD_OTA_QUERY_NEXT_IMAGE_REQ:
status = ota_queryNextImageReqHandler(pAddrInfo, (ota_queryNextImageReq_t *)cmdPayload);
break;
case ZCL_CMD_OTA_IMAGE_BLOCK_REQ:
status = ota_imageBlockReqHandler(pAddrInfo, (ota_imageBlockReq_t *)cmdPayload);
break;
case ZCL_CMD_OTA_IMAGE_PAGE_REQ:
status = ota_imagePageReqHandler(pAddrInfo, (ota_imagePageReq_t *)cmdPayload);
break;
case ZCL_CMD_OTA_UPGRADE_END_REQ:
status = ota_upgradeEndReqHandler(pAddrInfo, (ota_upgradeEndReq_t *)cmdPayload);
break;
case ZCL_CMD_OTA_QUERY_DEVICE_SPECIFIC_FILE_REQ:
status = ota_queryDevSpecFileReqHandler(pAddrInfo, (ota_querySpecFileReq_t *)cmdPayload);
break;
default:
status = ZCL_STA_UNSUP_CLUSTER_COMMAND;
break;
}
} else {
switch (cmdId) {
case ZCL_CMD_OTA_IMAGE_NOTIFY:
status = ota_imageNotifyHandler(pAddrInfo, (ota_imageNotify_t *)cmdPayload);
break;
case ZCL_CMD_OTA_QUERY_NEXT_IMAGE_RSP:
status = ota_queryNextImageRspHandler(pAddrInfo, (ota_queryNextImageRsp_t *)cmdPayload);
break;
case ZCL_CMD_OTA_IMAGE_BLOCK_RSP:
status = ota_imageBlockRspHandler(pAddrInfo, (ota_imageBlockRsp_t *)cmdPayload);
break;
case ZCL_CMD_OTA_UPGRADE_END_RSP:
status = ota_upgradeEndRspHandler(pAddrInfo, (ota_upgradeEndRsp_t *)cmdPayload);
break;
case ZCL_CMD_OTA_QUERY_DEVICE_SPECIFIC_FILE_RSP:
status = ota_queryDevSpecFileRspHandler(pAddrInfo, (ota_querySpecFileRsp_t *)cmdPayload);
break;
default:
status = ZCL_STA_UNSUP_CLUSTER_COMMAND;
break;
}
}
}
return status;
}
|