simplemeter_data.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727
  1. /**************************************************************************************************
  2. Filename: simplemeter_data.c
  3. Revised: $Date: 2011-11-21 16:13:57 -0800 (Mon, 21 Nov 2011) $
  4. Revision: $Revision: 28440 $
  5. Description: File that contains attribute and simple descriptor
  6. definitions for the Simple Meter
  7. Copyright 2009-2011 Texas Instruments Incorporated. All rights reserved.
  8. IMPORTANT: Your use of this Software is limited to those specific rights
  9. granted under the terms of a software license agreement between the user
  10. who downloaded the software, his/her employer (which must be your employer)
  11. and Texas Instruments Incorporated (the "License"). You may not use this
  12. Software unless you agree to abide by the terms of the License. The License
  13. limits your use, and you acknowledge, that the Software may not be modified,
  14. copied or distributed unless embedded on a Texas Instruments microcontroller
  15. or used solely and exclusively in conjunction with a Texas Instruments radio
  16. frequency transceiver, which is integrated into your product. Other than for
  17. the foregoing purpose, you may not use, reproduce, copy, prepare derivative
  18. works of, modify, distribute, perform, display or sell this Software and/or
  19. its documentation for any purpose.
  20. YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
  21. PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
  22. INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
  23. NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
  24. TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
  25. NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
  26. LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
  27. INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
  28. OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
  29. OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
  30. (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
  31. Should you have any questions regarding your right to use this Software,
  32. contact Texas Instruments Incorporated at www.TI.com.
  33. **************************************************************************************************/
  34. /*********************************************************************
  35. * INCLUDES
  36. */
  37. #include "OSAL.h"
  38. #include "OSAL_Clock.h"
  39. #include "ZDConfig.h"
  40. #include "se.h"
  41. #include "simplemeter.h"
  42. #include "zcl_general.h"
  43. #include "zcl_se.h"
  44. #include "zcl_key_establish.h"
  45. /*********************************************************************
  46. * CONSTANTS
  47. */
  48. #define SIMPLEMETER_DEVICE_VERSION 0
  49. #define SIMPLEMETER_FLAGS 0
  50. #define SIMPLEMETER_HWVERSION 1
  51. #define SIMPLEMETER_ZCLVERSION 1
  52. /*********************************************************************
  53. * TYPEDEFS
  54. */
  55. /*********************************************************************
  56. * MACROS
  57. */
  58. /*********************************************************************
  59. * GLOBAL VARIABLES
  60. */
  61. // Basic Cluster
  62. const uint8 simpleMeterZCLVersion = SIMPLEMETER_ZCLVERSION;
  63. const uint8 simpleMeterHWVersion = SIMPLEMETER_HWVERSION;
  64. const uint8 simpleMeterManufacturerName[] = { 16, 'T','e','x','a','s','I','n','s','t','r','u','m','e','n','t','s' };
  65. const uint8 simpleMeterModelId[] = { 16, 'T','I','0','0','0','1',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ' };
  66. const uint8 simpleMeterDateCode[] = { 16, '2','0','0','6','0','8','3','1',' ',' ',' ',' ',' ',' ',' ',' ' };
  67. const uint8 simpleMeterPowerSource = POWER_SOURCE_MAINS_1_PHASE;
  68. uint8 simpleMeterLocationDescription[] = { 16, ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ' };
  69. uint8 simpleMeterPhysicalEnvironment = PHY_UNSPECIFIED_ENV;
  70. uint8 simpleMeterDeviceEnabled = DEVICE_ENABLED;
  71. // Identify Cluster Attributes
  72. uint16 simpleMeterIdentifyTime = 0;
  73. uint32 simpleMeterTime = 0;
  74. uint8 simpleMeterTimeStatus = 0x01;
  75. // Simple Metering Cluster - Reading Information Set Attributes
  76. uint8 simpleMeterCurrentSummationDelivered[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  77. uint8 simpleMeterCurrentSummationReceived[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  78. uint8 simpleMeterCurrentMaxDemandDelivered[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  79. uint8 simpleMeterCurrentMaxDemandReceived[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  80. uint8 simpleMeterCurrentTier1SummationDelivered[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  81. uint8 simpleMeterCurrentTier1SummationReceived[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  82. uint8 simpleMeterCurrentTier2SummationDelivered[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  83. uint8 simpleMeterCurrentTier2SummationReceived[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  84. uint8 simpleMeterCurrentTier3SummationDelivered[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  85. uint8 simpleMeterCurrentTier3SummationReceived[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  86. uint8 simpleMeterCurrentTier4SummationDelivered[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  87. uint8 simpleMeterCurrentTier4SummationReceived[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  88. uint8 simpleMeterCurrentTier5SummationDelivered[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  89. uint8 simpleMeterCurrentTier5SummationReceived[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  90. uint8 simpleMeterCurrentTier6SummationDelivered[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  91. uint8 simpleMeterCurrentTier6SummationReceived[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  92. uint8 simpleMeterDFTSummation[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 };
  93. uint16 simpleMeterDailyFreezeTime = 0x01;
  94. int8 simpleMeterPowerFactor = 0x01;
  95. UTCTime simpleMeterSnapshotTime = 0x00;
  96. UTCTime simpleMeterMaxDemandDeliverdTime = 0x00;
  97. UTCTime simpleMeterMaxDemandReceivedTime = 0x00;
  98. uint8 simpleMeterDefaultUpdatePeriod = 0x1E;
  99. uint8 simpleMeterFastPollUpdatePeriod = 0x05;
  100. // Simple Metering Cluster - Meter Status Attributes
  101. uint8 simpleMeterStatus = 0x12;
  102. // Simple Metering Cluster - Formatting Attributes
  103. uint8 simpleMeterUnitOfMeasure = 0x01;
  104. uint24 simpleMeterMultiplier = 0x01;
  105. uint24 simpleMeterDivisor = 0x01;
  106. uint8 simpleMeterSummationFormating = 0x01;
  107. uint8 simpleMeterDemandFormatting = 0x01;
  108. uint8 simpleMeterHistoricalConsumptionFormatting = 0x01;
  109. uint8 simpleMeterDeviceType = 0x00;
  110. // Simple Metering Cluster - SimpleMeter Historical Consumption Attributes
  111. int24 simpleMeterInstanteneousDemand = 0x01;
  112. uint24 simpleMeterCurrentdayConsumptionDelivered = 0x01;
  113. uint24 simpleMeterCurrentdayConsumptionReceived = 0x01;
  114. uint24 simpleMeterPreviousdayConsumptionDelivered = 0x01;
  115. uint24 simpleMeterPreviousdayConsumtpionReceived = 0x01;
  116. UTCTime simpleMeterCurPartProfileIntStartTimeDelivered = 0x1000;
  117. UTCTime simpleMeterCurPartProfileIntStartTimeReceived = 0x2000;
  118. uint24 simpleMeterCurPartProfileIntValueDelivered = 0x0001;
  119. uint24 simpleMeterCurPartProfileIntValueReceived = 0x0002;
  120. uint8 simpleMeterMaxNumberOfPeriodsDelivered = 0x01;
  121. // Key Establishment
  122. uint16 simpleMeterKeyEstablishmentSuite = CERTIFICATE_BASED_KEY_ESTABLISHMENT;
  123. /*********************************************************************
  124. * ATTRIBUTE DEFINITIONS - Uses Cluster IDs
  125. */
  126. CONST zclAttrRec_t simpleMeterAttrs[SIMPLEMETER_MAX_ATTRIBUTES] =
  127. {
  128. // *** General Basic Cluster Attributes ***
  129. {
  130. ZCL_CLUSTER_ID_GEN_BASIC, // Cluster IDs - defined in the foundation (ie. zcl.h)
  131. { // Attribute record
  132. ATTRID_BASIC_ZCL_VERSION, // Attribute ID - Found in Cluster Library header (ie. zcl_general.h)
  133. ZCL_DATATYPE_UINT8, // Data Type - found in zcl.h
  134. ACCESS_CONTROL_READ, // Variable access control - found in zcl.h
  135. (void *)&simpleMeterZCLVersion // Pointer to attribute variable
  136. }
  137. },
  138. {
  139. ZCL_CLUSTER_ID_GEN_BASIC,
  140. { // Attribute record
  141. ATTRID_BASIC_HW_VERSION,
  142. ZCL_DATATYPE_UINT8,
  143. ACCESS_CONTROL_READ,
  144. (void *)&simpleMeterHWVersion
  145. }
  146. },
  147. {
  148. ZCL_CLUSTER_ID_GEN_BASIC,
  149. { // Attribute record
  150. ATTRID_BASIC_MANUFACTURER_NAME,
  151. ZCL_DATATYPE_CHAR_STR,
  152. ACCESS_CONTROL_READ,
  153. (void *)simpleMeterManufacturerName
  154. }
  155. },
  156. {
  157. ZCL_CLUSTER_ID_GEN_BASIC,
  158. { // Attribute record
  159. ATTRID_BASIC_MODEL_ID,
  160. ZCL_DATATYPE_CHAR_STR,
  161. ACCESS_CONTROL_READ,
  162. (void *)simpleMeterModelId
  163. }
  164. },
  165. {
  166. ZCL_CLUSTER_ID_GEN_BASIC,
  167. { // Attribute record
  168. ATTRID_BASIC_DATE_CODE,
  169. ZCL_DATATYPE_CHAR_STR,
  170. ACCESS_CONTROL_READ,
  171. (void *)simpleMeterDateCode
  172. }
  173. },
  174. {
  175. ZCL_CLUSTER_ID_GEN_BASIC,
  176. { // Attribute record
  177. ATTRID_BASIC_POWER_SOURCE,
  178. ZCL_DATATYPE_ENUM8,
  179. ACCESS_CONTROL_READ,
  180. (void *)&simpleMeterPowerSource
  181. }
  182. },
  183. {
  184. ZCL_CLUSTER_ID_GEN_BASIC,
  185. { // Attribute record
  186. ATTRID_BASIC_LOCATION_DESC,
  187. ZCL_DATATYPE_CHAR_STR,
  188. (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
  189. (void *)simpleMeterLocationDescription
  190. }
  191. },
  192. {
  193. ZCL_CLUSTER_ID_GEN_BASIC,
  194. { // Attribute record
  195. ATTRID_BASIC_PHYSICAL_ENV,
  196. ZCL_DATATYPE_ENUM8,
  197. (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
  198. (void *)&simpleMeterPhysicalEnvironment
  199. }
  200. },
  201. {
  202. ZCL_CLUSTER_ID_GEN_BASIC,
  203. { // Attribute record
  204. ATTRID_BASIC_DEVICE_ENABLED,
  205. ZCL_DATATYPE_BOOLEAN,
  206. (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
  207. (void *)&simpleMeterDeviceEnabled
  208. }
  209. },
  210. // *** Identify Cluster Attribute ***
  211. {
  212. ZCL_CLUSTER_ID_GEN_IDENTIFY,
  213. { // Attribute record
  214. ATTRID_IDENTIFY_TIME,
  215. ZCL_DATATYPE_UINT16,
  216. (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
  217. (void *)&simpleMeterIdentifyTime
  218. }
  219. },
  220. // *** Time Cluster Attribute ***
  221. // In SE domain, only master clock will be used. Therefore
  222. // mark the access control to only readable.
  223. {
  224. ZCL_CLUSTER_ID_GEN_TIME,
  225. { // Attribute record
  226. ATTRID_TIME_TIME,
  227. ZCL_DATATYPE_UTC,
  228. ACCESS_CONTROL_READ,
  229. (void *)&simpleMeterTime
  230. }
  231. },
  232. // In SE domain, only master clock will be used. Therefore
  233. // mark the access control to only readable.
  234. {
  235. ZCL_CLUSTER_ID_GEN_TIME,
  236. { // Attribute record
  237. ATTRID_TIME_STATUS,
  238. ZCL_DATATYPE_BITMAP8,
  239. ACCESS_CONTROL_READ,
  240. (void *)&simpleMeterTimeStatus
  241. }
  242. },
  243. // SE Attributes
  244. {
  245. ZCL_CLUSTER_ID_SE_SIMPLE_METERING, // Cluster IDs - defined in the profile (ie. se.h)
  246. { // Attribute record
  247. ATTRID_SE_CURRENT_SUMMATION_DELIVERED, // Attribute ID - Found in Cluster Library header (ie. zcl_general.h)
  248. ZCL_DATATYPE_UINT48, // Data Type - found in zcl.h
  249. ACCESS_CONTROL_READ, // Variable access control - found in zcl.h
  250. (void *)simpleMeterCurrentSummationDelivered // Pointer to attribute variable
  251. }
  252. },
  253. {
  254. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  255. { // Attribute record
  256. ATTRID_SE_CURRENT_SUMMATION_RECEIVED,
  257. ZCL_DATATYPE_UINT48,
  258. ACCESS_CONTROL_READ,
  259. (void *)simpleMeterCurrentSummationReceived
  260. }
  261. },
  262. {
  263. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  264. { // Attribute record
  265. ATTRID_SE_CURRENT_MAX_DEMAND_DELIVERED,
  266. ZCL_DATATYPE_UINT48,
  267. ACCESS_CONTROL_READ,
  268. (void *)simpleMeterCurrentMaxDemandDelivered
  269. }
  270. },
  271. {
  272. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  273. { // Attribute record
  274. ATTRID_SE_CURRENT_MAX_DEMAND_RECEIVED,
  275. ZCL_DATATYPE_UINT48,
  276. ACCESS_CONTROL_READ,
  277. (void *)simpleMeterCurrentMaxDemandReceived
  278. }
  279. },
  280. {
  281. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  282. { // Attribute record
  283. ATTRID_SE_CURRENT_TIER1_SUMMATION_DELIVERED,
  284. ZCL_DATATYPE_UINT48,
  285. ACCESS_CONTROL_READ,
  286. (void *)simpleMeterCurrentTier1SummationDelivered
  287. }
  288. },
  289. {
  290. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  291. { // Attribute record
  292. ATTRID_SE_CURRENT_TIER1_SUMMATION_RECEIVED,
  293. ZCL_DATATYPE_UINT48,
  294. ACCESS_CONTROL_READ,
  295. (void *)simpleMeterCurrentTier1SummationReceived
  296. }
  297. },
  298. {
  299. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  300. { // Attribute record
  301. ATTRID_SE_CURRENT_TIER2_SUMMATION_DELIVERED,
  302. ZCL_DATATYPE_UINT48,
  303. ACCESS_CONTROL_READ,
  304. (void *)simpleMeterCurrentTier2SummationDelivered
  305. }
  306. },
  307. {
  308. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  309. { // Attribute record
  310. ATTRID_SE_CURRENT_TIER2_SUMMATION_RECEIVED,
  311. ZCL_DATATYPE_UINT48,
  312. ACCESS_CONTROL_READ,
  313. (void *)simpleMeterCurrentTier2SummationReceived
  314. }
  315. },
  316. {
  317. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  318. { // Attribute record
  319. ATTRID_SE_CURRENT_TIER3_SUMMATION_DELIVERED,
  320. ZCL_DATATYPE_UINT48,
  321. ACCESS_CONTROL_READ,
  322. (void *)simpleMeterCurrentTier3SummationDelivered
  323. }
  324. },
  325. {
  326. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  327. { // Attribute record
  328. ATTRID_SE_CURRENT_TIER3_SUMMATION_RECEIVED,
  329. ZCL_DATATYPE_UINT48,
  330. ACCESS_CONTROL_READ,
  331. (void *)simpleMeterCurrentTier3SummationReceived
  332. }
  333. },
  334. {
  335. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  336. { // Attribute record
  337. ATTRID_SE_CURRENT_TIER4_SUMMATION_DELIVERED,
  338. ZCL_DATATYPE_UINT48,
  339. ACCESS_CONTROL_READ,
  340. (void *)simpleMeterCurrentTier4SummationDelivered
  341. }
  342. },
  343. {
  344. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  345. { // Attribute record
  346. ATTRID_SE_CURRENT_TIER4_SUMMATION_RECEIVED,
  347. ZCL_DATATYPE_UINT48,
  348. ACCESS_CONTROL_READ,
  349. (void *)simpleMeterCurrentTier4SummationReceived
  350. }
  351. },
  352. {
  353. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  354. { // Attribute record
  355. ATTRID_SE_CURRENT_TIER5_SUMMATION_DELIVERED,
  356. ZCL_DATATYPE_UINT48,
  357. ACCESS_CONTROL_READ,
  358. (void *)simpleMeterCurrentTier5SummationDelivered
  359. }
  360. },
  361. {
  362. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  363. { // Attribute record
  364. ATTRID_SE_CURRENT_TIER5_SUMMATION_RECEIVED,
  365. ZCL_DATATYPE_UINT48,
  366. ACCESS_CONTROL_READ,
  367. (void *)simpleMeterCurrentTier5SummationReceived
  368. }
  369. },
  370. {
  371. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  372. { // Attribute record
  373. ATTRID_SE_CURRENT_TIER6_SUMMATION_DELIVERED,
  374. ZCL_DATATYPE_UINT48,
  375. ACCESS_CONTROL_READ,
  376. (void *)simpleMeterCurrentTier6SummationDelivered
  377. }
  378. },
  379. {
  380. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  381. { // Attribute record
  382. ATTRID_SE_CURRENT_TIER6_SUMMATION_RECEIVED,
  383. ZCL_DATATYPE_UINT48,
  384. ACCESS_CONTROL_READ,
  385. (void *)simpleMeterCurrentTier6SummationReceived
  386. }
  387. },
  388. {
  389. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  390. { // Attribute record
  391. ATTRID_SE_DFT_SUMMATION,
  392. ZCL_DATATYPE_UINT48,
  393. ACCESS_CONTROL_READ,
  394. (void *)simpleMeterDFTSummation
  395. }
  396. },
  397. {
  398. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  399. { // Attribute record
  400. ATTRID_SE_DAILY_FREEZE_TIME,
  401. ZCL_DATATYPE_UINT16,
  402. ACCESS_CONTROL_READ,
  403. (void *)&simpleMeterDailyFreezeTime
  404. }
  405. },
  406. {
  407. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  408. { // Attribute record
  409. ATTRID_SE_POWER_FACTOR,
  410. ZCL_DATATYPE_INT8,
  411. ACCESS_CONTROL_READ,
  412. (void *)&simpleMeterPowerFactor
  413. }
  414. },
  415. {
  416. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  417. { // Attribute record
  418. ATTRID_SE_READING_SNAPSHOT_TIME,
  419. ZCL_DATATYPE_UTC,
  420. ACCESS_CONTROL_READ,
  421. (void *)&simpleMeterSnapshotTime
  422. }
  423. },
  424. {
  425. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  426. { // Attribute record
  427. ATTRID_SE_CURRENT_MAX_DEMAND_DELIVERD_TIME,
  428. ZCL_DATATYPE_UTC,
  429. ACCESS_CONTROL_READ,
  430. (void *)&simpleMeterMaxDemandDeliverdTime
  431. }
  432. },
  433. {
  434. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  435. { // Attribute record
  436. ATTRID_SE_CURRENT_MAX_DEMAND_RECEIVED_TIME,
  437. ZCL_DATATYPE_UTC,
  438. ACCESS_CONTROL_READ,
  439. (void *)&simpleMeterMaxDemandReceivedTime
  440. }
  441. },
  442. {
  443. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  444. { // Attribute record
  445. ATTRID_SE_DEFAULT_UPDATE_PERIOD,
  446. ZCL_DATATYPE_UINT8,
  447. ACCESS_CONTROL_READ,
  448. (void *)&simpleMeterDefaultUpdatePeriod
  449. }
  450. },
  451. {
  452. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  453. { // Attribute record
  454. ATTRID_SE_FAST_POLL_UPDATE_PERIOD,
  455. ZCL_DATATYPE_UINT8,
  456. ACCESS_CONTROL_READ,
  457. (void *)&simpleMeterFastPollUpdatePeriod
  458. }
  459. },
  460. {
  461. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  462. { // Attribute record
  463. ATTRID_SE_STATUS,
  464. ZCL_DATATYPE_BITMAP8,
  465. ACCESS_CONTROL_READ,
  466. (void *)&simpleMeterStatus
  467. }
  468. },
  469. {
  470. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  471. { // Attribute record
  472. ATTRID_SE_UNIT_OF_MEASURE,
  473. ZCL_DATATYPE_ENUM8,
  474. ACCESS_CONTROL_READ,
  475. (void *)&simpleMeterUnitOfMeasure
  476. }
  477. },
  478. {
  479. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  480. { // Attribute record
  481. ATTRID_SE_MULTIPLIER,
  482. ZCL_DATATYPE_UINT24,
  483. ACCESS_CONTROL_READ,
  484. (void *)&simpleMeterMultiplier
  485. }
  486. },
  487. {
  488. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  489. { // Attribute record
  490. ATTRID_SE_DIVISOR,
  491. ZCL_DATATYPE_UINT24,
  492. ACCESS_CONTROL_READ,
  493. (void *)&simpleMeterDivisor
  494. }
  495. },
  496. {
  497. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  498. { // Attribute record
  499. ATTRID_SE_SUMMATION_FORMATTING,
  500. ZCL_DATATYPE_BITMAP8,
  501. ACCESS_CONTROL_READ,
  502. (void *)&simpleMeterSummationFormating
  503. }
  504. },
  505. {
  506. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  507. { // Attribute record
  508. ATTRID_SE_DEMAND_FORMATTING,
  509. ZCL_DATATYPE_BITMAP8,
  510. ACCESS_CONTROL_READ,
  511. (void *)&simpleMeterDemandFormatting
  512. }
  513. },
  514. {
  515. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  516. { // Attribute record
  517. ATTRID_SE_HISTORICAL_CONSUMPTION_FORMATTING,
  518. ZCL_DATATYPE_BITMAP8,
  519. ACCESS_CONTROL_READ,
  520. (void *)&simpleMeterHistoricalConsumptionFormatting
  521. }
  522. },
  523. {
  524. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  525. { // Attribute record
  526. ATTRID_SE_METERING_DEVICE_TYPE,
  527. ZCL_DATATYPE_BITMAP8,
  528. ACCESS_CONTROL_READ,
  529. (void *)&simpleMeterDeviceType
  530. }
  531. },
  532. {
  533. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  534. { // Attribute record
  535. ATTRID_SE_INSTANTANEOUS_DEMAND,
  536. ZCL_DATATYPE_INT24,
  537. ACCESS_CONTROL_READ,
  538. (void *)&simpleMeterInstanteneousDemand
  539. }
  540. },
  541. {
  542. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  543. { // Attribute record
  544. ATTRID_SE_CURRENTDAY_CONSUMPTION_DELIVERED,
  545. ZCL_DATATYPE_UINT24,
  546. ACCESS_CONTROL_READ,
  547. (void *)&simpleMeterCurrentdayConsumptionDelivered
  548. }
  549. },
  550. {
  551. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  552. { // Attribute record
  553. ATTRID_SE_CURRENTDAY_CONSUMPTION_RECEIVED,
  554. ZCL_DATATYPE_UINT24,
  555. ACCESS_CONTROL_READ,
  556. (void *)&simpleMeterCurrentdayConsumptionReceived
  557. }
  558. },
  559. {
  560. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  561. { // Attribute record
  562. ATTRID_SE_PREVIOUSDAY_CONSUMPTION_DELIVERED,
  563. ZCL_DATATYPE_UINT24,
  564. ACCESS_CONTROL_READ,
  565. (void *)&simpleMeterPreviousdayConsumptionDelivered
  566. }
  567. },
  568. {
  569. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  570. { // Attribute record
  571. ATTRID_SE_PREVIOUSDAY_CONSUMPTION_RECEIVED,
  572. ZCL_DATATYPE_UINT24,
  573. ACCESS_CONTROL_READ,
  574. (void *)&simpleMeterPreviousdayConsumtpionReceived
  575. }
  576. },
  577. {
  578. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  579. { // Attribute record
  580. ATTRID_SE_CUR_PART_PROFILE_INT_START_TIME_DELIVERED,
  581. ZCL_DATATYPE_UTC,
  582. ACCESS_CONTROL_READ,
  583. (void *)&simpleMeterCurPartProfileIntStartTimeDelivered
  584. }
  585. },
  586. {
  587. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  588. { // Attribute record
  589. ATTRID_SE_CUR_PART_PROFILE_INT_START_TIME_RECEIVED,
  590. ZCL_DATATYPE_UTC,
  591. ACCESS_CONTROL_READ,
  592. (void *)&simpleMeterCurPartProfileIntStartTimeReceived
  593. }
  594. },
  595. {
  596. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  597. { // Attribute record
  598. ATTRID_SE_CUR_PART_PROFILE_INT_VALUE_DELIVERED,
  599. ZCL_DATATYPE_UINT24,
  600. ACCESS_CONTROL_READ,
  601. (void *)&simpleMeterCurPartProfileIntValueDelivered
  602. }
  603. },
  604. {
  605. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  606. { // Attribute record
  607. ATTRID_SE_CUR_PART_PROFILE_INT_VALUE_RECEIVED,
  608. ZCL_DATATYPE_UINT24,
  609. ACCESS_CONTROL_READ,
  610. (void *)&simpleMeterCurPartProfileIntValueReceived
  611. }
  612. },
  613. {
  614. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  615. { // Attribute record
  616. ATTRID_SE_MAX_NUMBER_OF_PERIODS_DELIVERED,
  617. ZCL_DATATYPE_UINT8,
  618. ACCESS_CONTROL_READ,
  619. (void *)&simpleMeterMaxNumberOfPeriodsDelivered
  620. }
  621. },
  622. {
  623. ZCL_CLUSTER_ID_GEN_KEY_ESTABLISHMENT,
  624. { // Attribute record
  625. ATTRID_KEY_ESTABLISH_SUITE,
  626. ZCL_DATATYPE_BITMAP16,
  627. ACCESS_CONTROL_READ,
  628. (void *)&simpleMeterKeyEstablishmentSuite
  629. }
  630. },
  631. };
  632. /*********************************************************************
  633. * CLUSTER OPTION DEFINITIONS
  634. */
  635. zclOptionRec_t simpleMeterOptions[SIMPLEMETER_MAX_OPTIONS] =
  636. {
  637. // *** General Cluster Options ***
  638. {
  639. ZCL_CLUSTER_ID_GEN_TIME, // Cluster IDs - defined in the foundation (ie. zcl.h)
  640. ( AF_EN_SECURITY /*| AF_ACK_REQUEST*/ ), // Options - Found in AF header (ie. AF.h)
  641. },
  642. // *** Smart Energy Cluster Options ***
  643. {
  644. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  645. ( AF_EN_SECURITY ),
  646. },
  647. };
  648. /*********************************************************************
  649. * SIMPLE DESCRIPTOR
  650. */
  651. // This is the Cluster ID List and should be filled with Application
  652. // specific cluster IDs.
  653. #define SIMPLEMETER_MAX_INCLUSTERS 4
  654. const cId_t simpleMeterInClusterList[SIMPLEMETER_MAX_INCLUSTERS] =
  655. {
  656. ZCL_CLUSTER_ID_GEN_BASIC,
  657. ZCL_CLUSTER_ID_GEN_IDENTIFY,
  658. ZCL_CLUSTER_ID_GEN_TIME,
  659. ZCL_CLUSTER_ID_SE_SIMPLE_METERING
  660. };
  661. #define SIMPLEMETER_MAX_OUTCLUSTERS 4
  662. const cId_t simpleMeterOutClusterList[SIMPLEMETER_MAX_OUTCLUSTERS] =
  663. {
  664. ZCL_CLUSTER_ID_GEN_BASIC,
  665. ZCL_CLUSTER_ID_GEN_IDENTIFY,
  666. ZCL_CLUSTER_ID_GEN_TIME,
  667. ZCL_CLUSTER_ID_SE_SIMPLE_METERING
  668. };
  669. SimpleDescriptionFormat_t simpleMeterSimpleDesc =
  670. {
  671. SIMPLEMETER_ENDPOINT, // uint8 Endpoint;
  672. ZCL_SE_PROFILE_ID, // uint16 AppProfId[2];
  673. ZCL_SE_DEVICEID_METER, // uint16 AppDeviceId[2];
  674. SIMPLEMETER_DEVICE_VERSION, // int AppDevVer:4;
  675. SIMPLEMETER_FLAGS, // int AppFlags:4;
  676. SIMPLEMETER_MAX_INCLUSTERS, // uint8 AppNumInClusters;
  677. (cId_t *)simpleMeterInClusterList, // cId_t *pAppInClusterList;
  678. SIMPLEMETER_MAX_OUTCLUSTERS, // uint8 AppNumInClusters;
  679. (cId_t *)simpleMeterOutClusterList // cId_t *pAppInClusterList;
  680. };
  681. /*********************************************************************
  682. * GLOBAL FUNCTIONS
  683. */
  684. /*********************************************************************
  685. * LOCAL FUNCTIONS
  686. */
  687. /****************************************************************************
  688. ****************************************************************************/