simplemeter_data.c 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. /**************************************************************************************************
  2. Filename: simplemeter_data.c
  3. Revised: $Date: 2007-08-29 10:52:11 -0700 (Wed, 29 Aug 2007) $
  4. Revision: $Revision: 15242 $
  5. Description: File that contains attribute and simple descriptor
  6. definitions for the Simple Meter
  7. Copyright 2009 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. // Simple Metering Cluster - Meter Status Attributes
  99. uint8 simpleMeterStatus = 0x12;
  100. // Simple Metering Cluster - Formatting Attributes
  101. uint8 simpleMeterUnitOfMeasure = 0x01;
  102. uint24 simpleMeterMultiplier = 0x01;
  103. uint24 simpleMeterDivisor = 0x01;
  104. uint8 simpleMeterSummationFormating = 0x01;
  105. uint8 simpleMeterDemandFormatting = 0x01;
  106. uint8 simpleMeterHistoricalConsumptionFormatting = 0x01;
  107. // Simple Metering Cluster - SimpleMeter Historical Consumption Attributes
  108. uint24 simpleMeterInstanteneousDemand = 0x01;
  109. uint24 simpleMeterCurrentdayConsumptionDelivered = 0x01;
  110. uint24 simpleMeterCurrentdayConsumptionReceived = 0x01;
  111. uint24 simpleMeterPreviousdayConsumptionDelivered = 0x01;
  112. uint24 simpleMeterPreviousdayConsumtpionReceived = 0x01;
  113. UTCTime simpleMeterCurrentPartialProfileIntervalStartTime = 0x1000;
  114. uint24 simpleMeterCurrentPartialProfileIntervalValue = 0x0001;
  115. uint8 simpleMeterMaxNumberOfPeriodsDelivered = 0x01;
  116. // Key Establishment
  117. uint16 simpleMeterKeyEstablishmentSuite = CERTIFICATE_BASED_KEY_ESTABLISHMENT;
  118. /*********************************************************************
  119. * ATTRIBUTE DEFINITIONS - Uses Cluster IDs
  120. */
  121. CONST zclAttrRec_t simpleMeterAttrs[SIMPLEMETER_MAX_ATTRIBUTES] =
  122. {
  123. // *** General Basic Cluster Attributes ***
  124. {
  125. ZCL_CLUSTER_ID_GEN_BASIC, // Cluster IDs - defined in the foundation (ie. zcl.h)
  126. { // Attribute record
  127. ATTRID_BASIC_ZCL_VERSION, // Attribute ID - Found in Cluster Library header (ie. zcl_general.h)
  128. ZCL_DATATYPE_UINT8, // Data Type - found in zcl.h
  129. ACCESS_CONTROL_READ, // Variable access control - found in zcl.h
  130. (void *)&simpleMeterZCLVersion // Pointer to attribute variable
  131. }
  132. },
  133. {
  134. ZCL_CLUSTER_ID_GEN_BASIC,
  135. { // Attribute record
  136. ATTRID_BASIC_HW_VERSION,
  137. ZCL_DATATYPE_UINT8,
  138. ACCESS_CONTROL_READ,
  139. (void *)&simpleMeterHWVersion
  140. }
  141. },
  142. {
  143. ZCL_CLUSTER_ID_GEN_BASIC,
  144. { // Attribute record
  145. ATTRID_BASIC_MANUFACTURER_NAME,
  146. ZCL_DATATYPE_CHAR_STR,
  147. ACCESS_CONTROL_READ,
  148. (void *)simpleMeterManufacturerName
  149. }
  150. },
  151. {
  152. ZCL_CLUSTER_ID_GEN_BASIC,
  153. { // Attribute record
  154. ATTRID_BASIC_MODEL_ID,
  155. ZCL_DATATYPE_CHAR_STR,
  156. ACCESS_CONTROL_READ,
  157. (void *)simpleMeterModelId
  158. }
  159. },
  160. {
  161. ZCL_CLUSTER_ID_GEN_BASIC,
  162. { // Attribute record
  163. ATTRID_BASIC_DATE_CODE,
  164. ZCL_DATATYPE_CHAR_STR,
  165. ACCESS_CONTROL_READ,
  166. (void *)simpleMeterDateCode
  167. }
  168. },
  169. {
  170. ZCL_CLUSTER_ID_GEN_BASIC,
  171. { // Attribute record
  172. ATTRID_BASIC_POWER_SOURCE,
  173. ZCL_DATATYPE_ENUM8,
  174. ACCESS_CONTROL_READ,
  175. (void *)&simpleMeterPowerSource
  176. }
  177. },
  178. {
  179. ZCL_CLUSTER_ID_GEN_BASIC,
  180. { // Attribute record
  181. ATTRID_BASIC_LOCATION_DESC,
  182. ZCL_DATATYPE_CHAR_STR,
  183. (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
  184. (void *)simpleMeterLocationDescription
  185. }
  186. },
  187. {
  188. ZCL_CLUSTER_ID_GEN_BASIC,
  189. { // Attribute record
  190. ATTRID_BASIC_PHYSICAL_ENV,
  191. ZCL_DATATYPE_ENUM8,
  192. (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
  193. (void *)&simpleMeterPhysicalEnvironment
  194. }
  195. },
  196. {
  197. ZCL_CLUSTER_ID_GEN_BASIC,
  198. { // Attribute record
  199. ATTRID_BASIC_DEVICE_ENABLED,
  200. ZCL_DATATYPE_BOOLEAN,
  201. (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
  202. (void *)&simpleMeterDeviceEnabled
  203. }
  204. },
  205. // *** Identify Cluster Attribute ***
  206. {
  207. ZCL_CLUSTER_ID_GEN_IDENTIFY,
  208. { // Attribute record
  209. ATTRID_IDENTIFY_TIME,
  210. ZCL_DATATYPE_UINT16,
  211. (ACCESS_CONTROL_READ | ACCESS_CONTROL_WRITE),
  212. (void *)&simpleMeterIdentifyTime
  213. }
  214. },
  215. // *** Time Cluster Attribute ***
  216. // In SE domain, only master clock will be used. Therefore
  217. // mark the access control to only readable.
  218. {
  219. ZCL_CLUSTER_ID_GEN_TIME,
  220. { // Attribute record
  221. ATTRID_TIME_TIME,
  222. ZCL_DATATYPE_UTC,
  223. ACCESS_CONTROL_READ,
  224. (void *)&simpleMeterTime
  225. }
  226. },
  227. // In SE domain, only master clock will be used. Therefore
  228. // mark the access control to only readable.
  229. {
  230. ZCL_CLUSTER_ID_GEN_TIME,
  231. { // Attribute record
  232. ATTRID_TIME_STATUS,
  233. ZCL_DATATYPE_BITMAP8,
  234. ACCESS_CONTROL_READ,
  235. (void *)&simpleMeterTimeStatus
  236. }
  237. },
  238. // SE Attributes
  239. {
  240. ZCL_CLUSTER_ID_SE_SIMPLE_METERING, // Cluster IDs - defined in the profile (ie. se.h)
  241. { // Attribute record
  242. ATTRID_SE_CURRENT_SUMMATION_DELIVERED, // Attribute ID - Found in Cluster Library header (ie. zcl_general.h)
  243. ZCL_DATATYPE_UINT48, // Data Type - found in zcl.h
  244. ACCESS_CONTROL_READ, // Variable access control - found in zcl.h
  245. (void *)simpleMeterCurrentSummationDelivered // Pointer to attribute variable
  246. }
  247. },
  248. {
  249. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  250. { // Attribute record
  251. ATTRID_SE_CURRENT_SUMMATION_RECEIVED,
  252. ZCL_DATATYPE_UINT48,
  253. ACCESS_CONTROL_READ,
  254. (void *)simpleMeterCurrentSummationReceived
  255. }
  256. },
  257. {
  258. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  259. { // Attribute record
  260. ATTRID_SE_CURRENT_MAX_DEMAND_DELIVERED,
  261. ZCL_DATATYPE_UINT48,
  262. ACCESS_CONTROL_READ,
  263. (void *)simpleMeterCurrentMaxDemandDelivered
  264. }
  265. },
  266. {
  267. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  268. { // Attribute record
  269. ATTRID_SE_CURRENT_MAX_DEMAND_RECEIVED,
  270. ZCL_DATATYPE_UINT48,
  271. ACCESS_CONTROL_READ,
  272. (void *)simpleMeterCurrentMaxDemandReceived
  273. }
  274. },
  275. {
  276. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  277. { // Attribute record
  278. ATTRID_SE_CURRENT_TIER1_SUMMATION_DELIVERED,
  279. ZCL_DATATYPE_UINT48,
  280. ACCESS_CONTROL_READ,
  281. (void *)simpleMeterCurrentTier1SummationDelivered
  282. }
  283. },
  284. {
  285. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  286. { // Attribute record
  287. ATTRID_SE_CURRENT_TIER1_SUMMATION_RECEIVED,
  288. ZCL_DATATYPE_UINT48,
  289. ACCESS_CONTROL_READ,
  290. (void *)simpleMeterCurrentTier1SummationReceived
  291. }
  292. },
  293. {
  294. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  295. { // Attribute record
  296. ATTRID_SE_CURRENT_TIER2_SUMMATION_DELIVERED,
  297. ZCL_DATATYPE_UINT48,
  298. ACCESS_CONTROL_READ,
  299. (void *)simpleMeterCurrentTier2SummationDelivered
  300. }
  301. },
  302. {
  303. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  304. { // Attribute record
  305. ATTRID_SE_CURRENT_TIER2_SUMMATION_RECEIVED,
  306. ZCL_DATATYPE_UINT48,
  307. ACCESS_CONTROL_READ,
  308. (void *)simpleMeterCurrentTier2SummationReceived
  309. }
  310. },
  311. {
  312. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  313. { // Attribute record
  314. ATTRID_SE_CURRENT_TIER3_SUMMATION_DELIVERED,
  315. ZCL_DATATYPE_UINT48,
  316. ACCESS_CONTROL_READ,
  317. (void *)simpleMeterCurrentTier3SummationDelivered
  318. }
  319. },
  320. {
  321. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  322. { // Attribute record
  323. ATTRID_SE_CURRENT_TIER3_SUMMATION_RECEIVED,
  324. ZCL_DATATYPE_UINT48,
  325. ACCESS_CONTROL_READ,
  326. (void *)simpleMeterCurrentTier3SummationReceived
  327. }
  328. },
  329. {
  330. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  331. { // Attribute record
  332. ATTRID_SE_CURRENT_TIER4_SUMMATION_DELIVERED,
  333. ZCL_DATATYPE_UINT48,
  334. ACCESS_CONTROL_READ,
  335. (void *)simpleMeterCurrentTier4SummationDelivered
  336. }
  337. },
  338. {
  339. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  340. { // Attribute record
  341. ATTRID_SE_CURRENT_TIER4_SUMMATION_RECEIVED,
  342. ZCL_DATATYPE_UINT48,
  343. ACCESS_CONTROL_READ,
  344. (void *)simpleMeterCurrentTier4SummationReceived
  345. }
  346. },
  347. {
  348. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  349. { // Attribute record
  350. ATTRID_SE_CURRENT_TIER5_SUMMATION_DELIVERED,
  351. ZCL_DATATYPE_UINT48,
  352. ACCESS_CONTROL_READ,
  353. (void *)simpleMeterCurrentTier5SummationDelivered
  354. }
  355. },
  356. {
  357. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  358. { // Attribute record
  359. ATTRID_SE_CURRENT_TIER5_SUMMATION_RECEIVED,
  360. ZCL_DATATYPE_UINT48,
  361. ACCESS_CONTROL_READ,
  362. (void *)simpleMeterCurrentTier5SummationReceived
  363. }
  364. },
  365. {
  366. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  367. { // Attribute record
  368. ATTRID_SE_CURRENT_TIER6_SUMMATION_DELIVERED,
  369. ZCL_DATATYPE_UINT48,
  370. ACCESS_CONTROL_READ,
  371. (void *)simpleMeterCurrentTier5SummationDelivered
  372. }
  373. },
  374. {
  375. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  376. { // Attribute record
  377. ATTRID_SE_CURRENT_TIER6_SUMMATION_RECEIVED,
  378. ZCL_DATATYPE_UINT48,
  379. ACCESS_CONTROL_READ,
  380. (void *)simpleMeterCurrentTier5SummationReceived
  381. }
  382. },
  383. {
  384. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  385. { // Attribute record
  386. ATTRID_SE_DFT_SUMMATION,
  387. ZCL_DATATYPE_UINT48,
  388. ACCESS_CONTROL_READ,
  389. (void *)simpleMeterDFTSummation
  390. }
  391. },
  392. {
  393. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  394. { // Attribute record
  395. ATTRID_SE_DAILY_FREEZE_TIME,
  396. ZCL_DATATYPE_UINT16,
  397. ACCESS_CONTROL_READ,
  398. (void *)&simpleMeterDailyFreezeTime
  399. }
  400. },
  401. {
  402. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  403. { // Attribute record
  404. ATTRID_SE_POWER_FACTOR,
  405. ZCL_DATATYPE_INT8,
  406. ACCESS_CONTROL_READ,
  407. (void *)&simpleMeterPowerFactor
  408. }
  409. },
  410. {
  411. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  412. { // Attribute record
  413. ATTRID_SE_READING_SNAPSHOT_TIME,
  414. ZCL_DATATYPE_UTC,
  415. ACCESS_CONTROL_READ,
  416. (void *)&simpleMeterSnapshotTime
  417. }
  418. },
  419. {
  420. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  421. { // Attribute record
  422. ATTRID_SE_CURRENT_MAX_DEMAND_DELIVERD_TIME,
  423. ZCL_DATATYPE_UTC,
  424. ACCESS_CONTROL_READ,
  425. (void *)&simpleMeterMaxDemandDeliverdTime
  426. }
  427. },
  428. {
  429. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  430. { // Attribute record
  431. ATTRID_SE_CURRENT_MAX_DEMAND_RECEIVED_TIME,
  432. ZCL_DATATYPE_UTC,
  433. ACCESS_CONTROL_READ,
  434. (void *)&simpleMeterMaxDemandReceivedTime
  435. }
  436. },
  437. {
  438. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  439. { // Attribute record
  440. ATTRID_SE_STATUS,
  441. ZCL_DATATYPE_BITMAP8,
  442. ACCESS_CONTROL_READ,
  443. (void *)&simpleMeterStatus
  444. }
  445. },
  446. {
  447. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  448. { // Attribute record
  449. ATTRID_SE_UNIT_OF_MEASURE,
  450. ZCL_DATATYPE_ENUM8,
  451. ACCESS_CONTROL_READ,
  452. (void *)&simpleMeterUnitOfMeasure
  453. }
  454. },
  455. {
  456. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  457. { // Attribute record
  458. ATTRID_SE_MULTIPLIER,
  459. ZCL_DATATYPE_UINT24,
  460. ACCESS_CONTROL_READ,
  461. (void *)&simpleMeterMultiplier
  462. }
  463. },
  464. {
  465. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  466. { // Attribute record
  467. ATTRID_SE_DIVISOR,
  468. ZCL_DATATYPE_UINT24,
  469. ACCESS_CONTROL_READ,
  470. (void *)&simpleMeterDivisor
  471. }
  472. },
  473. {
  474. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  475. { // Attribute record
  476. ATTRID_SE_SUMMATION_FORMATTING,
  477. ZCL_DATATYPE_BITMAP8,
  478. ACCESS_CONTROL_READ,
  479. (void *)&simpleMeterSummationFormating
  480. }
  481. },
  482. {
  483. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  484. { // Attribute record
  485. ATTRID_SE_DEMAND_FORMATTING,
  486. ZCL_DATATYPE_BITMAP8,
  487. ACCESS_CONTROL_READ,
  488. (void *)&simpleMeterDemandFormatting
  489. }
  490. },
  491. {
  492. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  493. { // Attribute record
  494. ATTRID_SE_HISTORICAL_CONSUMPTION_FORMATTING,
  495. ZCL_DATATYPE_BITMAP8,
  496. ACCESS_CONTROL_READ,
  497. (void *)&simpleMeterHistoricalConsumptionFormatting
  498. }
  499. },
  500. {
  501. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  502. { // Attribute record
  503. ATTRID_SE_INSTANTANEOUS_DEMAND,
  504. ZCL_DATATYPE_UINT24,
  505. ACCESS_CONTROL_READ,
  506. (void *)&simpleMeterInstanteneousDemand
  507. }
  508. },
  509. {
  510. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  511. { // Attribute record
  512. ATTRID_SE_CURRENTDAY_CONSUMPTION_DELIVERED,
  513. ZCL_DATATYPE_UINT24,
  514. ACCESS_CONTROL_READ,
  515. (void *)&simpleMeterCurrentdayConsumptionDelivered
  516. }
  517. },
  518. {
  519. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  520. { // Attribute record
  521. ATTRID_SE_CURRENTDAY_CONSUMPTION_RECEIVED,
  522. ZCL_DATATYPE_UINT24,
  523. ACCESS_CONTROL_READ,
  524. (void *)&simpleMeterCurrentdayConsumptionReceived
  525. }
  526. },
  527. {
  528. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  529. { // Attribute record
  530. ATTRID_SE_PREVIOUSDAY_CONSUMPTION_DELIVERED,
  531. ZCL_DATATYPE_UINT24,
  532. ACCESS_CONTROL_READ,
  533. (void *)&simpleMeterPreviousdayConsumptionDelivered
  534. }
  535. },
  536. {
  537. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  538. { // Attribute record
  539. ATTRID_SE_PREVIOUSDAY_CONSUMPTION_RECEIVED,
  540. ZCL_DATATYPE_UINT24,
  541. ACCESS_CONTROL_READ,
  542. (void *)&simpleMeterPreviousdayConsumtpionReceived
  543. }
  544. },
  545. {
  546. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  547. { // Attribute record
  548. ATTRID_SE_CURRENT_PARTIAL_PROFILE_INTERVAL_START_TIME,
  549. ZCL_DATATYPE_UTC,
  550. ACCESS_CONTROL_READ,
  551. (void *)&simpleMeterCurrentPartialProfileIntervalStartTime
  552. }
  553. },
  554. {
  555. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  556. { // Attribute record
  557. ATTRID_SE_CURRENT_PARTIAL_PROFILE_INTERVAL_VALUE,
  558. ZCL_DATATYPE_UINT24,
  559. ACCESS_CONTROL_READ,
  560. (void *)&simpleMeterCurrentPartialProfileIntervalValue
  561. }
  562. },
  563. {
  564. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  565. { // Attribute record
  566. ATTRID_SE_MAX_NUMBER_OF_PERIODS_DELIVERED,
  567. ZCL_DATATYPE_UINT8,
  568. ACCESS_CONTROL_READ,
  569. (void *)&simpleMeterMaxNumberOfPeriodsDelivered
  570. }
  571. },
  572. {
  573. ZCL_CLUSTER_ID_GEN_KEY_ESTABLISHMENT,
  574. { // Attribute record
  575. ATTRID_KEY_ESTABLISH_SUITE,
  576. ZCL_DATATYPE_BITMAP16,
  577. ACCESS_CONTROL_READ,
  578. (void *)&simpleMeterKeyEstablishmentSuite
  579. }
  580. },
  581. };
  582. /*********************************************************************
  583. * CLUSTER OPTION DEFINITIONS
  584. */
  585. zclOptionRec_t simpleMeterOptions[SIMPLEMETER_MAX_OPTIONS] =
  586. {
  587. // *** General Cluster Options ***
  588. {
  589. ZCL_CLUSTER_ID_GEN_TIME, // Cluster IDs - defined in the foundation (ie. zcl.h)
  590. ( AF_EN_SECURITY /*| AF_ACK_REQUEST*/ ), // Options - Found in AF header (ie. AF.h)
  591. },
  592. // *** Smart Energy Cluster Options ***
  593. {
  594. ZCL_CLUSTER_ID_SE_SIMPLE_METERING,
  595. ( AF_EN_SECURITY ),
  596. },
  597. };
  598. /*********************************************************************
  599. * SIMPLE DESCRIPTOR
  600. */
  601. // This is the Cluster ID List and should be filled with Application
  602. // specific cluster IDs.
  603. #define SIMPLEMETER_MAX_INCLUSTERS 3
  604. const cId_t simpleMeterInClusterList[SIMPLEMETER_MAX_INCLUSTERS] =
  605. {
  606. ZCL_CLUSTER_ID_GEN_BASIC,
  607. ZCL_CLUSTER_ID_GEN_IDENTIFY,
  608. ZCL_CLUSTER_ID_SE_SIMPLE_METERING
  609. };
  610. #define SIMPLEMETER_MAX_OUTCLUSTERS 3
  611. const cId_t simpleMeterOutClusterList[SIMPLEMETER_MAX_OUTCLUSTERS] =
  612. {
  613. ZCL_CLUSTER_ID_GEN_BASIC,
  614. ZCL_CLUSTER_ID_GEN_IDENTIFY,
  615. ZCL_CLUSTER_ID_SE_SIMPLE_METERING
  616. };
  617. SimpleDescriptionFormat_t simpleMeterSimpleDesc =
  618. {
  619. SIMPLEMETER_ENDPOINT, // uint8 Endpoint;
  620. ZCL_SE_PROFILE_ID, // uint16 AppProfId[2];
  621. ZCL_SE_DEVICEID_METER, // uint16 AppDeviceId[2];
  622. SIMPLEMETER_DEVICE_VERSION, // int AppDevVer:4;
  623. SIMPLEMETER_FLAGS, // int AppFlags:4;
  624. SIMPLEMETER_MAX_INCLUSTERS, // uint8 AppNumInClusters;
  625. (cId_t *)simpleMeterInClusterList, // cId_t *pAppInClusterList;
  626. SIMPLEMETER_MAX_OUTCLUSTERS, // uint8 AppNumInClusters;
  627. (cId_t *)simpleMeterOutClusterList // cId_t *pAppInClusterList;
  628. };
  629. /*********************************************************************
  630. * GLOBAL FUNCTIONS
  631. */
  632. /*********************************************************************
  633. * LOCAL FUNCTIONS
  634. */
  635. /****************************************************************************
  636. ****************************************************************************/