417 lines
14 KiB
C
417 lines
14 KiB
C
/******************************************************************************
|
|
Filename: zcl_ota.h
|
|
Revised: $Date: 2012-03-05 15:03:17 -0800 (Mon, 05 Mar 2012) $
|
|
Revision: $Revision: 29627 $
|
|
|
|
Description: ZCL Over-the-Air Upgrade Cluster definitions.
|
|
|
|
|
|
Copyright 2010-2012 Texas Instruments Incorporated. All rights reserved.
|
|
|
|
IMPORTANT: Your use of this Software is limited to those specific rights
|
|
granted under the terms of a software license agreement between the user
|
|
who downloaded the software, his/her employer (which must be your employer)
|
|
and Texas Instruments Incorporated (the "License"). You may not use this
|
|
Software unless you agree to abide by the terms of the License. The License
|
|
limits your use, and you acknowledge, that the Software may not be modified,
|
|
copied or distributed unless embedded on a Texas Instruments microcontroller
|
|
or used solely and exclusively in conjunction with a Texas Instruments radio
|
|
frequency transceiver, which is integrated into your product. Other than for
|
|
the foregoing purpose, you may not use, reproduce, copy, prepare derivative
|
|
works of, modify, distribute, perform, display or sell this Software and/or
|
|
its documentation for any purpose.
|
|
|
|
YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
|
|
PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
|
|
INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
|
|
NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
|
|
TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
|
|
NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
|
|
LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
|
|
INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
|
|
OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
|
|
OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
|
|
(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
|
|
|
|
Should you have any questions regarding your right to use this Software,
|
|
contact Texas Instruments Incorporated at www.TI.com.
|
|
******************************************************************************/
|
|
|
|
#ifndef ZCL_OTA_H
|
|
#define ZCL_OTA_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
/******************************************************************************
|
|
* INCLUDES
|
|
*/
|
|
#include "zcl.h"
|
|
#include "ota_common.h"
|
|
|
|
/******************************************************************************
|
|
* CONSTANTS
|
|
*/
|
|
#define ZCL_SE_PROFILE_ID 0x0109
|
|
#define ZCL_HA_PROFILE_ID 0x0104
|
|
|
|
#define ZCL_SE_DEVICEID_PHYSICAL 0x0507
|
|
|
|
#define OTA_MIN_FILENAME_LEN 27
|
|
#define OTA_MAX_MTU 32
|
|
#define OTA_MAX_BLOCK_RETRIES 10
|
|
#define OTA_MAX_END_REQ_RETRIES 2
|
|
#define OTA_MAX_BLOCK_RSP_WAIT_TIME ((uint16)5000)
|
|
|
|
// Simple descriptor values
|
|
#define ZCL_OTA_ENDPOINT 14
|
|
#ifdef OTA_HA
|
|
#define ZCL_OTA_SAMPLE_PROFILE_ID ZCL_HA_PROFILE_ID
|
|
#define ZCL_OTA_SAMPLE_DEVICEID 0
|
|
#else
|
|
#define ZCL_OTA_SAMPLE_PROFILE_ID ZCL_SE_PROFILE_ID
|
|
#define ZCL_OTA_SAMPLE_DEVICEID ZCL_SE_DEVICEID_PHYSICAL
|
|
#endif
|
|
#define ZCL_OTA_DEVICE_VERSION 0
|
|
#define ZCL_OTA_FLAGS 0
|
|
|
|
// OTA Device ID values
|
|
#define OTA_MANUFACTURER_ID 0x5678
|
|
#define OTA_TYPE_ID 0x1234
|
|
|
|
// OTA Header Version
|
|
#define OTA_HDR_VERSION 0x0100
|
|
|
|
// OTA Header Field Control Bits
|
|
#define OTA_HDR_FC_SEC_CRED_PRESENT 0x01
|
|
#define OTA_HDR_FC_DEV_SPEC_FILE 0x02
|
|
#define OTA_HDR_FC_HW_VER_PRESENT 0x04
|
|
|
|
// OTA Header Manufacturer ID 'Match All'
|
|
#define OTA_HDR_MFG_MATCH_ALL 0xFFFF
|
|
|
|
// OTA Header Image Type
|
|
#define OTA_HDR_IMAGE_SEC_CRED 0xFFC0
|
|
#define OTA_HDR_IMAGE_CONFIG 0xFFC1
|
|
#define OTA_HDR_IMAGE_LOG 0xFFC2
|
|
#define OTA_HDR_IMAGE_MATCH_ALL 0xFFFF
|
|
|
|
// OTA Header File Version 'Match All'
|
|
#define OTA_HDR_FILE_VER_MATCH_ALL 0xFFFFFFFF
|
|
|
|
// OTA ZigBee Stack Version
|
|
#define OTA_STACK_VER_2006 0x0000
|
|
#define OTA_STACK_VER_2007 0x0001
|
|
#define OTA_STACK_VER_PRO 0x0002
|
|
#define OTA_STACK_VER_IP 0x0003
|
|
|
|
// OTA Security Credential Version
|
|
#define OTA_SEC_CRED_VER_10 0x00
|
|
#define OTA_SEC_CRED_VER_1X 0x01
|
|
#define OTA_SEC_CRED_VER_20 0x02
|
|
|
|
// OTA Attribute IDs
|
|
#define ATTRID_UPGRADE_SERVER_ID 0x0000
|
|
#define ATTRID_FILE_OFFSET 0x0001
|
|
#define ATTRID_CURRENT_FILE_VERSION 0x0002
|
|
#define ATTRID_CURRENT_ZIGBEE_STACK_VERSION 0x0003
|
|
#define ATTRID_DOWNLOADED_FILE_VERSION 0x0004
|
|
#define ATTRID_DOWNLOADED_ZIGBEE_STACK_VERSION 0x0005
|
|
#define ATTRID_IMAGE_UPGRADE_STATUS 0x0006
|
|
|
|
// OTA Upgrade Status
|
|
#define OTA_STATUS_NORMAL 0x00
|
|
#define OTA_STATUS_IN_PROGRESS 0x01
|
|
#define OTA_STATUS_COMPLETE 0x02
|
|
#define OTA_STATUS_UPGRADE_WAIT 0x03
|
|
#define OTA_STATUS_COUNTDOWN 0x04
|
|
#define OTA_STATUS_WAIT_FOR_MORE 0x05
|
|
|
|
// OTA Upgrade Time 'wait for upgrade'
|
|
#define OTA_UPGRADE_TIME_WAIT 0xFFFFFFFF
|
|
|
|
// OTA Cluster Command Frames
|
|
#define COMMAND_IMAGE_NOTIFY 0x00
|
|
#define COMMAND_QUERY_NEXT_IMAGE_REQ 0x01
|
|
#define COMMAND_QUERY_NEXT_IMAGE_RSP 0x02
|
|
#define COMMAND_IMAGE_BLOCK_REQ 0x03
|
|
#define COMMAND_IMAGE_PAGE_REQ 0x04
|
|
#define COMMAND_IMAGE_BLOCK_RSP 0x05
|
|
#define COMMAND_UPGRADE_END_REQ 0x06
|
|
#define COMMAND_UPGRADE_END_RSP 0x07
|
|
#define COMMAND_QUERY_SPECIFIC_FILE_REQ 0x08
|
|
#define COMMAND_QUERY_SPECIFIC_FILE_RSP 0x09
|
|
|
|
// OTA Cluster Command Frame Payload Lengths
|
|
#define PAYLOAD_MAX_LEN_IMAGE_NOTIFY 10
|
|
#define PAYLOAD_MAX_LEN_QUERY_NEXT_IMAGE_REQ 11
|
|
#define PAYLOAD_MAX_LEN_QUERY_NEXT_IMAGE_RSP 13
|
|
#define PAYLOAD_MAX_LEN_IMAGE_BLOCK_REQ 22
|
|
#define PAYLOAD_MAX_LEN_IMAGE_PAGE_REQ 26
|
|
#define PAYLOAD_MAX_LEN_IMAGE_BLOCK_RSP 14
|
|
#define PAYLOAD_MAX_LEN_UPGRADE_END_REQ 9
|
|
#define PAYLOAD_MAX_LEN_UPGRADE_END_RSP 16
|
|
#define PAYLOAD_MAX_LEN_QUERY_SPECIFIC_FILE_REQ 18
|
|
#define PAYLOAD_MAX_LEN_QUERY_SPECIFIC_FILE_RSP 13
|
|
|
|
#define PAYLOAD_MIN_LEN_IMAGE_NOTIFY 2
|
|
#define PAYLOAD_MIN_LEN_QUERY_NEXT_IMAGE_REQ 9
|
|
#define PAYLOAD_MIN_LEN_QUERY_NEXT_IMAGE_RSP 1
|
|
#define PAYLOAD_MIN_LEN_IMAGE_BLOCK_REQ 14
|
|
#define PAYLOAD_MIN_LEN_IMAGE_PAGE_REQ 18
|
|
#define PAYLOAD_MIN_LEN_IMAGE_BLOCK_RSP 14
|
|
#define PAYLOAD_MIN_LEN_IMAGE_BLOCK_WAIT 9
|
|
#define PAYLOAD_MIN_LEN_UPGRADE_END_REQ 1
|
|
#define PAYLOAD_MIN_LEN_UPGRADE_END_RSP 16
|
|
#define PAYLOAD_MIN_LEN_QUERY_SPECIFIC_FILE_REQ 18
|
|
#define PAYLOAD_MIN_LEN_QUERY_SPECIFIC_FILE_RSP 1
|
|
|
|
// Image Notify Command Payload Type
|
|
#define NOTIFY_PAYLOAD_JITTER 0x00
|
|
#define NOTIFY_PAYLOAD_JITTER_MFG 0x01
|
|
#define NOTIFY_PAYLOAD_JITTER_MFG_TYPE 0x02
|
|
#define NOTIFY_PAYLOAD_JITTER_MFG_TYPE_VERS 0x03
|
|
|
|
// Client Task Events
|
|
#define ZCL_OTA_IMAGE_BLOCK_WAIT_EVT 0x0001
|
|
#define ZCL_OTA_UPGRADE_WAIT_EVT 0x0002
|
|
#define ZCL_OTA_QUERY_SERVER_EVT 0x0004
|
|
#define ZCL_OTA_BLOCK_RSP_TO_EVT 0x0008
|
|
#define ZCL_OTA_IMAGE_QUERY_TO_EVT 0x0010
|
|
|
|
// The OTA Upgrade delay is the number of seconds before the client
|
|
// should wait before switching to the upgrade image
|
|
#define OTA_UPGRADE_DELAY 60
|
|
#define OTA_SEND_BLOCK_WAIT 5
|
|
|
|
// Callback events to application from OTA
|
|
#define ZCL_OTA_START_CALLBACK 0
|
|
#define ZCL_OTA_DL_COMPLETE_CALLBACK 1
|
|
|
|
// OTA Element Tag Identifiers
|
|
#define OTA_UPGRADE_IMAGE_TAG_ID 0
|
|
#define OTA_ECDSA_SIGNATURE_TAG_ID 1
|
|
#define OTA_ECDSA_CERT_TAG_ID 2
|
|
|
|
// OTA Client process data states
|
|
#define ZCL_OTA_PD_MAGIC_0_STATE 0
|
|
#define ZCL_OTA_PD_MAGIC_1_STATE 1
|
|
#define ZCL_OTA_PD_MAGIC_2_STATE 2
|
|
#define ZCL_OTA_PD_MAGIC_3_STATE 3
|
|
#define ZCL_OTA_PD_HDR_LEN1_STATE 4
|
|
#define ZCL_OTA_PD_HDR_LEN2_STATE 5
|
|
#define ZCL_OTA_PD_STK_VER1_STATE 6
|
|
#define ZCL_OTA_PD_STK_VER2_STATE 7
|
|
#define ZCL_OTA_PD_CONT_HDR_STATE 8
|
|
#define ZCL_OTA_PD_ELEM_TAG1_STATE 9
|
|
#define ZCL_OTA_PD_ELEM_TAG2_STATE 10
|
|
#define ZCL_OTA_PD_ELEM_LEN1_STATE 11
|
|
#define ZCL_OTA_PD_ELEM_LEN2_STATE 12
|
|
#define ZCL_OTA_PD_ELEM_LEN3_STATE 13
|
|
#define ZCL_OTA_PD_ELEM_LEN4_STATE 14
|
|
#define ZCL_OTA_PD_ELEMENT_STATE 15
|
|
|
|
/******************************************************************************
|
|
* TYPEDEFS
|
|
*/
|
|
// Message Parameter Structures
|
|
typedef struct
|
|
{
|
|
uint8 payloadType;
|
|
uint8 queryJitter;
|
|
zclOTA_FileID_t fileId;
|
|
} zclOTA_ImageNotifyParams_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint8 fieldControl;
|
|
zclOTA_FileID_t fileId;
|
|
uint16 hardwareVersion;
|
|
} zclOTA_QueryNextImageReqParams_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint8 status;
|
|
zclOTA_FileID_t fileId;
|
|
uint32 imageSize;
|
|
} zclOTA_QueryImageRspParams_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint8 fieldControl;
|
|
zclOTA_FileID_t fileId;
|
|
uint32 fileOffset;
|
|
uint8 maxDataSize;
|
|
uint8 nodeAddr[Z_EXTADDR_LEN];
|
|
} zclOTA_ImageBlockReqParams_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint8 fieldControl;
|
|
zclOTA_FileID_t fileId;
|
|
uint32 fileOffset;
|
|
uint8 maxDataSize;
|
|
uint16 pageSize;
|
|
uint16 responseSpacing;
|
|
uint8 nodeAddr[Z_EXTADDR_LEN];
|
|
} zclOTA_ImagePageReqParams_t;
|
|
|
|
typedef struct
|
|
{
|
|
zclOTA_FileID_t fileId;
|
|
uint32 fileOffset;
|
|
uint8 dataSize;
|
|
uint8 *pData;
|
|
} imageBlockRspSuccess_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint32 currentTime;
|
|
uint32 requestTime;
|
|
} imageBlockRspWait_t;
|
|
|
|
typedef union
|
|
{
|
|
imageBlockRspSuccess_t success;
|
|
imageBlockRspWait_t wait;
|
|
} imageBlockRsp_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint8 status;
|
|
imageBlockRsp_t rsp;
|
|
} zclOTA_ImageBlockRspParams_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint8 status;
|
|
zclOTA_FileID_t fileId;
|
|
} zclOTA_UpgradeEndReqParams_t;
|
|
|
|
typedef struct
|
|
{
|
|
zclOTA_FileID_t fileId;
|
|
uint32 currentTime;
|
|
uint32 upgradeTime;
|
|
} zclOTA_UpgradeEndRspParams_t;
|
|
|
|
typedef struct
|
|
{
|
|
uint8 nodeAddr[Z_EXTADDR_LEN];
|
|
zclOTA_FileID_t fileId;
|
|
uint16 stackVersion;
|
|
} zclOTA_QuerySpecificFileReqParams_t;
|
|
|
|
typedef union
|
|
{
|
|
zclOTA_QueryImageRspParams_t queryNextImageRsp;
|
|
zclOTA_ImageBlockRspParams_t imageBlockRsp;
|
|
zclOTA_UpgradeEndRspParams_t upgradeEndRsp;
|
|
zclOTA_QueryImageRspParams_t querySpecificFileRsp;
|
|
} zclOTA_RspParams_t;
|
|
|
|
typedef struct
|
|
{
|
|
osal_event_hdr_t hdr;
|
|
uint8 ota_event;
|
|
} zclOTA_CallbackMsg_t;
|
|
|
|
/******************************************************************************
|
|
* GLOBAL VARIABLES
|
|
*/
|
|
// OTA Cluster
|
|
extern uint8 zclOTA_UpgradeServerID[Z_EXTADDR_LEN];
|
|
extern uint32 zclOTA_FileOffset;
|
|
extern uint32 zclOTA_CurrentFileVersion;
|
|
extern uint16 zclOTA_CurrentZigBeeStackVersion;
|
|
extern uint32 zclOTA_DownloadedFileVersion;
|
|
extern uint16 zclOTA_DownloadedZigBeeStackVersion;
|
|
extern uint8 zclOTA_ImageUpgradeStatus;
|
|
extern uint16 zclOTA_ManufacturerId;
|
|
extern uint16 zclOTA_ImageType;
|
|
|
|
/******************************************************************************
|
|
* FUNCTIONS
|
|
*/
|
|
|
|
/******************************************************************************
|
|
* @fn zclOTA_Register
|
|
*
|
|
* @brief Called by an application to register for callback messages
|
|
* from the OTA.
|
|
*
|
|
* @param callbackTask - Application Task ID
|
|
*
|
|
* @return ZStatus_t
|
|
*/
|
|
extern void zclOTA_Register(uint8 applicationTaskId);
|
|
|
|
/******************************************************************************
|
|
* @fn zclOTA_RequestNextUpdate
|
|
*
|
|
* @brief Called by an application after discovery of the OTA server
|
|
* to initiate the query next image of the OTA server.
|
|
*
|
|
* @param srvAddr - Short address of the server
|
|
* @param srvEndPoint - Endpoint on the server
|
|
*
|
|
* @return ZStatus_t
|
|
*/
|
|
extern void zclOTA_RequestNextUpdate(uint16 srvAddr, uint8 srvEndPoint);
|
|
|
|
/******************************************************************************
|
|
* @fn zclOTA_PermitOta
|
|
*
|
|
* @brief Called to enable/disable OTA operation.
|
|
*
|
|
* @param permit - TRUE to enable OTA, FALSE to diable OTA
|
|
*
|
|
* @return none
|
|
*/
|
|
extern void zclOTA_PermitOta(uint8 permit);
|
|
|
|
/******************************************************************************
|
|
* @fn zclOTA_Init
|
|
*
|
|
* @brief Call to initialize the OTA Client Task
|
|
*
|
|
* @param task_id
|
|
*
|
|
* @return none
|
|
*/
|
|
extern void zclOTA_Init( uint8 task_id );
|
|
|
|
/******************************************************************************
|
|
* @fn zclOTA_event_loop
|
|
*
|
|
* @brief Event Loop Processor for OTA Client task.
|
|
*
|
|
* @param task_id - TaskId
|
|
* events - events
|
|
*
|
|
* @return Unprocessed event bits
|
|
*/
|
|
extern uint16 zclOTA_event_loop( uint8 task_id, uint16 events );
|
|
|
|
#if defined(OTA_SERVER) && (OTA_SERVER == TRUE)
|
|
/******************************************************************************
|
|
* @fn zclOTA_SendImageNotify
|
|
*
|
|
* @brief Called by a server to send an Image Notify to an OTA client.
|
|
*
|
|
* @param dstAddr - Short address of the client
|
|
* @param pParams - Parameters of the Image Notify message
|
|
*
|
|
* @return ZStatus_t
|
|
*/
|
|
extern ZStatus_t zclOTA_SendImageNotify(afAddrType_t *dstAddr, zclOTA_ImageNotifyParams_t *pParams);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* ZCL_OTA_H */
|