zcl_ota.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. /******************************************************************************
  2. Filename: zcl_ota.h
  3. Revised: $Date: 2012-03-05 15:03:17 -0800 (Mon, 05 Mar 2012) $
  4. Revision: $Revision: 29627 $
  5. Description: ZCL Over-the-Air Upgrade Cluster definitions.
  6. Copyright 2010-2012 Texas Instruments Incorporated. All rights reserved.
  7. IMPORTANT: Your use of this Software is limited to those specific rights
  8. granted under the terms of a software license agreement between the user
  9. who downloaded the software, his/her employer (which must be your employer)
  10. and Texas Instruments Incorporated (the "License"). You may not use this
  11. Software unless you agree to abide by the terms of the License. The License
  12. limits your use, and you acknowledge, that the Software may not be modified,
  13. copied or distributed unless embedded on a Texas Instruments microcontroller
  14. or used solely and exclusively in conjunction with a Texas Instruments radio
  15. frequency transceiver, which is integrated into your product. Other than for
  16. the foregoing purpose, you may not use, reproduce, copy, prepare derivative
  17. works of, modify, distribute, perform, display or sell this Software and/or
  18. its documentation for any purpose.
  19. YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
  20. PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
  21. INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
  22. NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
  23. TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
  24. NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
  25. LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
  26. INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
  27. OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
  28. OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
  29. (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
  30. Should you have any questions regarding your right to use this Software,
  31. contact Texas Instruments Incorporated at www.TI.com.
  32. ******************************************************************************/
  33. #ifndef ZCL_OTA_H
  34. #define ZCL_OTA_H
  35. #ifdef __cplusplus
  36. extern "C"
  37. {
  38. #endif
  39. /******************************************************************************
  40. * INCLUDES
  41. */
  42. #include "zcl.h"
  43. #include "ota_common.h"
  44. /******************************************************************************
  45. * CONSTANTS
  46. */
  47. #define ZCL_SE_PROFILE_ID 0x0109
  48. #define ZCL_HA_PROFILE_ID 0x0104
  49. #define ZCL_SE_DEVICEID_PHYSICAL 0x0507
  50. #define OTA_MIN_FILENAME_LEN 27
  51. #define OTA_MAX_MTU 32
  52. #define OTA_MAX_BLOCK_RETRIES 10
  53. #define OTA_MAX_END_REQ_RETRIES 2
  54. #define OTA_MAX_BLOCK_RSP_WAIT_TIME ((uint16)5000)
  55. // Simple descriptor values
  56. #define ZCL_OTA_ENDPOINT 14
  57. #ifdef OTA_HA
  58. #define ZCL_OTA_SAMPLE_PROFILE_ID ZCL_HA_PROFILE_ID
  59. #define ZCL_OTA_SAMPLE_DEVICEID 0
  60. #else
  61. #define ZCL_OTA_SAMPLE_PROFILE_ID ZCL_SE_PROFILE_ID
  62. #define ZCL_OTA_SAMPLE_DEVICEID ZCL_SE_DEVICEID_PHYSICAL
  63. #endif
  64. #define ZCL_OTA_DEVICE_VERSION 0
  65. #define ZCL_OTA_FLAGS 0
  66. // OTA Device ID values
  67. #define OTA_MANUFACTURER_ID 0x5678
  68. #define OTA_TYPE_ID 0x1234
  69. // OTA Header Version
  70. #define OTA_HDR_VERSION 0x0100
  71. // OTA Header Field Control Bits
  72. #define OTA_HDR_FC_SEC_CRED_PRESENT 0x01
  73. #define OTA_HDR_FC_DEV_SPEC_FILE 0x02
  74. #define OTA_HDR_FC_HW_VER_PRESENT 0x04
  75. // OTA Header Manufacturer ID 'Match All'
  76. #define OTA_HDR_MFG_MATCH_ALL 0xFFFF
  77. // OTA Header Image Type
  78. #define OTA_HDR_IMAGE_SEC_CRED 0xFFC0
  79. #define OTA_HDR_IMAGE_CONFIG 0xFFC1
  80. #define OTA_HDR_IMAGE_LOG 0xFFC2
  81. #define OTA_HDR_IMAGE_MATCH_ALL 0xFFFF
  82. // OTA Header File Version 'Match All'
  83. #define OTA_HDR_FILE_VER_MATCH_ALL 0xFFFFFFFF
  84. // OTA ZigBee Stack Version
  85. #define OTA_STACK_VER_2006 0x0000
  86. #define OTA_STACK_VER_2007 0x0001
  87. #define OTA_STACK_VER_PRO 0x0002
  88. #define OTA_STACK_VER_IP 0x0003
  89. // OTA Security Credential Version
  90. #define OTA_SEC_CRED_VER_10 0x00
  91. #define OTA_SEC_CRED_VER_1X 0x01
  92. #define OTA_SEC_CRED_VER_20 0x02
  93. // OTA Attribute IDs
  94. #define ATTRID_UPGRADE_SERVER_ID 0x0000
  95. #define ATTRID_FILE_OFFSET 0x0001
  96. #define ATTRID_CURRENT_FILE_VERSION 0x0002
  97. #define ATTRID_CURRENT_ZIGBEE_STACK_VERSION 0x0003
  98. #define ATTRID_DOWNLOADED_FILE_VERSION 0x0004
  99. #define ATTRID_DOWNLOADED_ZIGBEE_STACK_VERSION 0x0005
  100. #define ATTRID_IMAGE_UPGRADE_STATUS 0x0006
  101. // OTA Upgrade Status
  102. #define OTA_STATUS_NORMAL 0x00
  103. #define OTA_STATUS_IN_PROGRESS 0x01
  104. #define OTA_STATUS_COMPLETE 0x02
  105. #define OTA_STATUS_UPGRADE_WAIT 0x03
  106. #define OTA_STATUS_COUNTDOWN 0x04
  107. #define OTA_STATUS_WAIT_FOR_MORE 0x05
  108. // OTA Upgrade Time 'wait for upgrade'
  109. #define OTA_UPGRADE_TIME_WAIT 0xFFFFFFFF
  110. // OTA Cluster Command Frames
  111. #define COMMAND_IMAGE_NOTIFY 0x00
  112. #define COMMAND_QUERY_NEXT_IMAGE_REQ 0x01
  113. #define COMMAND_QUERY_NEXT_IMAGE_RSP 0x02
  114. #define COMMAND_IMAGE_BLOCK_REQ 0x03
  115. #define COMMAND_IMAGE_PAGE_REQ 0x04
  116. #define COMMAND_IMAGE_BLOCK_RSP 0x05
  117. #define COMMAND_UPGRADE_END_REQ 0x06
  118. #define COMMAND_UPGRADE_END_RSP 0x07
  119. #define COMMAND_QUERY_SPECIFIC_FILE_REQ 0x08
  120. #define COMMAND_QUERY_SPECIFIC_FILE_RSP 0x09
  121. // OTA Cluster Command Frame Payload Lengths
  122. #define PAYLOAD_MAX_LEN_IMAGE_NOTIFY 10
  123. #define PAYLOAD_MAX_LEN_QUERY_NEXT_IMAGE_REQ 11
  124. #define PAYLOAD_MAX_LEN_QUERY_NEXT_IMAGE_RSP 13
  125. #define PAYLOAD_MAX_LEN_IMAGE_BLOCK_REQ 22
  126. #define PAYLOAD_MAX_LEN_IMAGE_PAGE_REQ 26
  127. #define PAYLOAD_MAX_LEN_IMAGE_BLOCK_RSP 14
  128. #define PAYLOAD_MAX_LEN_UPGRADE_END_REQ 9
  129. #define PAYLOAD_MAX_LEN_UPGRADE_END_RSP 16
  130. #define PAYLOAD_MAX_LEN_QUERY_SPECIFIC_FILE_REQ 18
  131. #define PAYLOAD_MAX_LEN_QUERY_SPECIFIC_FILE_RSP 13
  132. #define PAYLOAD_MIN_LEN_IMAGE_NOTIFY 2
  133. #define PAYLOAD_MIN_LEN_QUERY_NEXT_IMAGE_REQ 9
  134. #define PAYLOAD_MIN_LEN_QUERY_NEXT_IMAGE_RSP 1
  135. #define PAYLOAD_MIN_LEN_IMAGE_BLOCK_REQ 14
  136. #define PAYLOAD_MIN_LEN_IMAGE_PAGE_REQ 18
  137. #define PAYLOAD_MIN_LEN_IMAGE_BLOCK_RSP 14
  138. #define PAYLOAD_MIN_LEN_IMAGE_BLOCK_WAIT 9
  139. #define PAYLOAD_MIN_LEN_UPGRADE_END_REQ 1
  140. #define PAYLOAD_MIN_LEN_UPGRADE_END_RSP 16
  141. #define PAYLOAD_MIN_LEN_QUERY_SPECIFIC_FILE_REQ 18
  142. #define PAYLOAD_MIN_LEN_QUERY_SPECIFIC_FILE_RSP 1
  143. // Image Notify Command Payload Type
  144. #define NOTIFY_PAYLOAD_JITTER 0x00
  145. #define NOTIFY_PAYLOAD_JITTER_MFG 0x01
  146. #define NOTIFY_PAYLOAD_JITTER_MFG_TYPE 0x02
  147. #define NOTIFY_PAYLOAD_JITTER_MFG_TYPE_VERS 0x03
  148. // Client Task Events
  149. #define ZCL_OTA_IMAGE_BLOCK_WAIT_EVT 0x0001
  150. #define ZCL_OTA_UPGRADE_WAIT_EVT 0x0002
  151. #define ZCL_OTA_QUERY_SERVER_EVT 0x0004
  152. #define ZCL_OTA_BLOCK_RSP_TO_EVT 0x0008
  153. #define ZCL_OTA_IMAGE_QUERY_TO_EVT 0x0010
  154. // The OTA Upgrade delay is the number of seconds before the client
  155. // should wait before switching to the upgrade image
  156. #define OTA_UPGRADE_DELAY 60
  157. #define OTA_SEND_BLOCK_WAIT 5
  158. // Callback events to application from OTA
  159. #define ZCL_OTA_START_CALLBACK 0
  160. #define ZCL_OTA_DL_COMPLETE_CALLBACK 1
  161. // OTA Element Tag Identifiers
  162. #define OTA_UPGRADE_IMAGE_TAG_ID 0
  163. #define OTA_ECDSA_SIGNATURE_TAG_ID 1
  164. #define OTA_ECDSA_CERT_TAG_ID 2
  165. // OTA Client process data states
  166. #define ZCL_OTA_PD_MAGIC_0_STATE 0
  167. #define ZCL_OTA_PD_MAGIC_1_STATE 1
  168. #define ZCL_OTA_PD_MAGIC_2_STATE 2
  169. #define ZCL_OTA_PD_MAGIC_3_STATE 3
  170. #define ZCL_OTA_PD_HDR_LEN1_STATE 4
  171. #define ZCL_OTA_PD_HDR_LEN2_STATE 5
  172. #define ZCL_OTA_PD_STK_VER1_STATE 6
  173. #define ZCL_OTA_PD_STK_VER2_STATE 7
  174. #define ZCL_OTA_PD_CONT_HDR_STATE 8
  175. #define ZCL_OTA_PD_ELEM_TAG1_STATE 9
  176. #define ZCL_OTA_PD_ELEM_TAG2_STATE 10
  177. #define ZCL_OTA_PD_ELEM_LEN1_STATE 11
  178. #define ZCL_OTA_PD_ELEM_LEN2_STATE 12
  179. #define ZCL_OTA_PD_ELEM_LEN3_STATE 13
  180. #define ZCL_OTA_PD_ELEM_LEN4_STATE 14
  181. #define ZCL_OTA_PD_ELEMENT_STATE 15
  182. /******************************************************************************
  183. * TYPEDEFS
  184. */
  185. // Message Parameter Structures
  186. typedef struct
  187. {
  188. uint8 payloadType;
  189. uint8 queryJitter;
  190. zclOTA_FileID_t fileId;
  191. } zclOTA_ImageNotifyParams_t;
  192. typedef struct
  193. {
  194. uint8 fieldControl;
  195. zclOTA_FileID_t fileId;
  196. uint16 hardwareVersion;
  197. } zclOTA_QueryNextImageReqParams_t;
  198. typedef struct
  199. {
  200. uint8 status;
  201. zclOTA_FileID_t fileId;
  202. uint32 imageSize;
  203. } zclOTA_QueryImageRspParams_t;
  204. typedef struct
  205. {
  206. uint8 fieldControl;
  207. zclOTA_FileID_t fileId;
  208. uint32 fileOffset;
  209. uint8 maxDataSize;
  210. uint8 nodeAddr[Z_EXTADDR_LEN];
  211. } zclOTA_ImageBlockReqParams_t;
  212. typedef struct
  213. {
  214. uint8 fieldControl;
  215. zclOTA_FileID_t fileId;
  216. uint32 fileOffset;
  217. uint8 maxDataSize;
  218. uint16 pageSize;
  219. uint16 responseSpacing;
  220. uint8 nodeAddr[Z_EXTADDR_LEN];
  221. } zclOTA_ImagePageReqParams_t;
  222. typedef struct
  223. {
  224. zclOTA_FileID_t fileId;
  225. uint32 fileOffset;
  226. uint8 dataSize;
  227. uint8 *pData;
  228. } imageBlockRspSuccess_t;
  229. typedef struct
  230. {
  231. uint32 currentTime;
  232. uint32 requestTime;
  233. } imageBlockRspWait_t;
  234. typedef union
  235. {
  236. imageBlockRspSuccess_t success;
  237. imageBlockRspWait_t wait;
  238. } imageBlockRsp_t;
  239. typedef struct
  240. {
  241. uint8 status;
  242. imageBlockRsp_t rsp;
  243. } zclOTA_ImageBlockRspParams_t;
  244. typedef struct
  245. {
  246. uint8 status;
  247. zclOTA_FileID_t fileId;
  248. } zclOTA_UpgradeEndReqParams_t;
  249. typedef struct
  250. {
  251. zclOTA_FileID_t fileId;
  252. uint32 currentTime;
  253. uint32 upgradeTime;
  254. } zclOTA_UpgradeEndRspParams_t;
  255. typedef struct
  256. {
  257. uint8 nodeAddr[Z_EXTADDR_LEN];
  258. zclOTA_FileID_t fileId;
  259. uint16 stackVersion;
  260. } zclOTA_QuerySpecificFileReqParams_t;
  261. typedef union
  262. {
  263. zclOTA_QueryImageRspParams_t queryNextImageRsp;
  264. zclOTA_ImageBlockRspParams_t imageBlockRsp;
  265. zclOTA_UpgradeEndRspParams_t upgradeEndRsp;
  266. zclOTA_QueryImageRspParams_t querySpecificFileRsp;
  267. } zclOTA_RspParams_t;
  268. typedef struct
  269. {
  270. osal_event_hdr_t hdr;
  271. uint8 ota_event;
  272. } zclOTA_CallbackMsg_t;
  273. /******************************************************************************
  274. * GLOBAL VARIABLES
  275. */
  276. // OTA Cluster
  277. extern uint8 zclOTA_UpgradeServerID[Z_EXTADDR_LEN];
  278. extern uint32 zclOTA_FileOffset;
  279. extern uint32 zclOTA_CurrentFileVersion;
  280. extern uint16 zclOTA_CurrentZigBeeStackVersion;
  281. extern uint32 zclOTA_DownloadedFileVersion;
  282. extern uint16 zclOTA_DownloadedZigBeeStackVersion;
  283. extern uint8 zclOTA_ImageUpgradeStatus;
  284. extern uint16 zclOTA_ManufacturerId;
  285. extern uint16 zclOTA_ImageType;
  286. /******************************************************************************
  287. * FUNCTIONS
  288. */
  289. /******************************************************************************
  290. * @fn zclOTA_Register
  291. *
  292. * @brief Called by an application to register for callback messages
  293. * from the OTA.
  294. *
  295. * @param callbackTask - Application Task ID
  296. *
  297. * @return ZStatus_t
  298. */
  299. extern void zclOTA_Register(uint8 applicationTaskId);
  300. /******************************************************************************
  301. * @fn zclOTA_RequestNextUpdate
  302. *
  303. * @brief Called by an application after discovery of the OTA server
  304. * to initiate the query next image of the OTA server.
  305. *
  306. * @param srvAddr - Short address of the server
  307. * @param srvEndPoint - Endpoint on the server
  308. *
  309. * @return ZStatus_t
  310. */
  311. extern void zclOTA_RequestNextUpdate(uint16 srvAddr, uint8 srvEndPoint);
  312. /******************************************************************************
  313. * @fn zclOTA_PermitOta
  314. *
  315. * @brief Called to enable/disable OTA operation.
  316. *
  317. * @param permit - TRUE to enable OTA, FALSE to diable OTA
  318. *
  319. * @return none
  320. */
  321. extern void zclOTA_PermitOta(uint8 permit);
  322. /******************************************************************************
  323. * @fn zclOTA_Init
  324. *
  325. * @brief Call to initialize the OTA Client Task
  326. *
  327. * @param task_id
  328. *
  329. * @return none
  330. */
  331. extern void zclOTA_Init( uint8 task_id );
  332. /******************************************************************************
  333. * @fn zclOTA_event_loop
  334. *
  335. * @brief Event Loop Processor for OTA Client task.
  336. *
  337. * @param task_id - TaskId
  338. * events - events
  339. *
  340. * @return Unprocessed event bits
  341. */
  342. extern uint16 zclOTA_event_loop( uint8 task_id, uint16 events );
  343. #if defined(OTA_SERVER) && (OTA_SERVER == TRUE)
  344. /******************************************************************************
  345. * @fn zclOTA_SendImageNotify
  346. *
  347. * @brief Called by a server to send an Image Notify to an OTA client.
  348. *
  349. * @param dstAddr - Short address of the client
  350. * @param pParams - Parameters of the Image Notify message
  351. *
  352. * @return ZStatus_t
  353. */
  354. extern ZStatus_t zclOTA_SendImageNotify(afAddrType_t *dstAddr, zclOTA_ImageNotifyParams_t *pParams);
  355. #endif
  356. #ifdef __cplusplus
  357. }
  358. #endif
  359. #endif /* ZCL_OTA_H */