123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- /******************************************************************************
- 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 */
|