OTA过程分析

1:硬件初始化

2:初始化设备:路由,Z3设备

3:初始化发送回调函数:messageSentCallbacks

4:端点初始化

  端点号,PROFILEID,设备ID,设备版本,

  簇的初始化:端点包含的簇的属性,服务端还是客户端,簇的初始化函数,属性属性变化函数

EmberAfGenericClusterFunction emberAfFuncArrayOtaBootloadClusterClient[] = { (EmberAfGenericClusterFunction)emberAfOtaBootloadClusterClientInitCallback,(EmberAfGenericClusterFunction)emberAfOtaBootloadClusterClientDefaultResponseCallback};

初始化函数只是初始化,现在并没有调用簇的初始化函数,属性只是分配空间,还没有赋值

5:emberAfInit

   初始化属性值,然后把NV里的值装到属性里

   初始化插件

 #define EMBER_AF_GENERATED_PLUGIN_INIT_FUNCTION_CALLS \

emberAfPluginBulbPwmDriverInitCallback(); \

emberAfPluginCountersInitCallback(); \

emberAfPluginEepromInitCallback(); \

emberAfPluginElectricalMeasurementServerInitCallback(); \

emberAfPluginLedDimPwmInitCallback(); \

emberAfPluginPowerMeterCs5463InitCallback(); \

emberAfPluginReportingInitCallback(); \

 

     调用簇的初始化函数

网络初始化

 EM_AF_NETWORK_INIT();

 

//========

网络状态起来的时候调用。

#define\

void emberAfPluginElectricalMeasurementServerStackStatusCallback(EmberStatus status); \
void emberAfPluginManufacturingLibraryOtaStackStatusCallback(EmberStatus status); \
void emberAfPluginMeteringServerStackStatusCallback(EmberStatus status); \
void emberAfPluginNetworkSteeringStackStatusCallback(EmberStatus status); \
void emberAfPluginOtaClientStackStatusCallback(EmberStatus status); \
void emberAfPluginReportingStackStatusCallback(EmberStatus status); \

 

6:

void emberAfPluginOtaClientStackStatusCallback(EmberStatus status)
{

enum BootloadState{
BOOTLOAD_STATE_NONE,
BOOTLOAD_STATE_DELAY,
BOOTLOAD_STATE_DISCOVER_SERVER,
BOOTLOAD_STATE_GET_SERVER_EUI,
BOOTLOAD_STATE_OBTAIN_LINK_KEY,
BOOTLOAD_STATE_QUERY_NEXT_IMAGE,
BOOTLOAD_STATE_DOWNLOAD,
BOOTLOAD_STATE_VERIFY_IMAGE,
BOOTLOAD_STATE_WAITING_FOR_UPGRADE_MESSAGE,
BOOTLOAD_STATE_COUNTDOWN_TO_UPGRADE,
BOOTLOAD_STATE_UPGRADE_VIA_OUT_OF_BAND,
};
typedef uint8_t BootloadState;

 

//升级状态,对应簇的属性ID:0x0006
static PGM uint8_t bootloadStateToExternalState[] = {
OTA_UPGRADE_STATUS_NORMAL,
OTA_UPGRADE_STATUS_NORMAL,
OTA_UPGRADE_STATUS_NORMAL,
OTA_UPGRADE_STATUS_NORMAL,
OTA_UPGRADE_STATUS_NORMAL,
OTA_UPGRADE_STATUS_NORMAL,
OTA_UPGRADE_STATUS_DOWNLOAD_IN_PROGRESS,
OTA_UPGRADE_STATUS_DOWNLOAD_COMPLETE,
OTA_UPGRADE_STATUS_WAIT,
OTA_UPGRADE_STATUS_COUNTDOWN,
OTA_UPGRADE_STATUS_WAIT_TO_UPGRADE_VIA_OUT_OF_BAND,
};


recordUpgradeStatus(BOOTLOAD_STATE_DELAY);  //
currentBootloadState=BOOTLOAD_STATE_DELAY;

emberAfScheduleClientTickExtended(myEndpoint,
ZCL_OTA_BOOTLOAD_CLUSTER_ID,
randomDelaySeconds * MILLISECOND_TICKS_PER_SECOND,
pollControl,
sleepControl);

{ 0x1, 0x19, true, EMBER_AF_LONG_POLL, EMBER_AF_OK_TO_SLEEP, &emberAfOtaBootloadClusterClientTickCallbackControl1}, \
}

7:有几个属性必须得设定

   

 

posted on 2018-09-08 15:26  朱光铭  阅读(496)  评论(0)    收藏  举报

导航