SmartSens.h:
  1. #ifndef __SMARTSENS_H
  2. #define __SMARTSENS_H
  3. #include "AF.h"
  4. /*********************************************************************
  5. * MACROS
  6. */
  7. #define OPEN_SMARTSENS 0x01
  8. #define CLOSE_SMARTSENS 0x00
  9. #define TOGGLE_SMARTSENS 0x02
  10. #define STATUS_SMARTSENS_ON 0x01
  11. #define STATUS_SMARTSENS_OFF 0x00
  12. #define OCCUPIED 1
  13. #define UNOCCUPIED 0
  14. /*********************************************************************
  15. * CONSTANTS
  16. */
  17. /*********************************************************************
  18. * TYPEDEFS
  19. */
  20. /*********************************************************************
  21. * FUNCTIONS
  22. */
  23. /**
  24. 初始化 AM312 的 GPIO 口
  25. */
  26. void Init_AM312_GPIO(void);
  27. /**
  28. 控制红外传感开关
  29. */
  30. void Set_SmartSens(uint8_t state);
  31. /**
  32. 获取红外传感的开关状态
  33. */
  34. uint8_t Get_SmartSensState(void);
  35. /**
  36. 红外感应装置中断处理函数
  37. */
  38. void SmartSens_Isr(void);
  39. void Send_Infrared(void);
  40. #endif

SmartSens.c:
  1. #include <iocc2530.h>
  2. #include "hal_mcu.h"
  3. #include "hal_defs.h"
  4. #include "hal_types.h"
  5. #include "hal_board.h"
  6. #include "hal_drivers.h"
  7. #include "hal_adc.h"
  8. #include "hal_key.h"
  9. #include "osal.h"
  10. #include "AF.h"
  11. #include "SmartSens.h"
  12. #include "Coordinator.h"
  13. /*********************************************************************
  14. * MACROS
  15. */
  16. #define ATTRID_OCCUPANCY 0x0000
  17. /*********************************************************************
  18. * CONSTANTS
  19. */
  20. /*********************************************************************
  21. * TYPEDEFS
  22. */
  23. /*********************************************************************
  24. * GLOBAL VARIABLES
  25. */
  26. uint8_t g_smartsens_onoff = 0;
  27. /*********************************************************************
  28. * GLOBAL FUNCTIONS
  29. */
  30. /*********************************************************************
  31. * LOCAL VARIABLES
  32. */
  33. /*********************************************************************
  34. * LOCAL FUNCTIONS
  35. */
  36. /*********************************************************************
  37. * EXTERN VARIABLES
  38. */
  39. /*********************************************************************
  40. * EXTERN FUNCTIONS
  41. */
  42. /************************************************************************
  43. * 函数名:void Init_AM312_GPIO(void)
  44. * 功能:初始化 AM312 的 GPIO 口
  45. * 参数:NONE
  46. * 返回值:NONE
  47. * 调用函数:NONE
  48. * 引用全局变量:NONE
  49. * 函数全局变量:NONE
  50. * 作者:Jesse_嘉伟
  51. * 时间:2016/5/17
  52. * 最后修改时间:
  53. * 说明:Jesse_嘉伟的专栏(https://blog.csdn.net/u012993936)
  54. AM312 的数据口为 P0_0 口
  55. 设置 P0_0 口为外部中断模式,且为上升沿中断
  56. *************************************************************************/
  57. void Init_AM312_GPIO(void)
  58. {
  59. // 清除中断标志位
  60. P0IF = 0;
  61. P0IFG &= ~(1<<0);
  62. // P0_0寄存器设置
  63. P0SEL &= ~(1<<0); // P0_0通用功能
  64. P0DIR &= ~(1<<0); // P0_0输入方向
  65. P0INP &= ~(1<<0); // P0_0上拉/下拉模式
  66. P2INP |= (1<<5); // 将端口0设为下拉输入
  67. PICTL &= ~(1<<0); //选择端口0的输入选择中断请求条件为“上升沿中断”,捕捉上升沿
  68. // 设置 SFR 寄存器中的中断使能位
  69. P0IEN |= (1<<0); // P0_0中断使能
  70. // 设置IEN1中的中断使能位
  71. IEN1 |= (1<<5); // 使能端口0中断
  72. }
  73. /************************************************************************
  74. * 函数名:void SmartSens_ISR(void)
  75. * 功能:红外感应装置的中断处理函数
  76. * 参数:NONE
  77. * 返回值:NONE
  78. * 调用函数:NONE
  79. * 引用全局变量:NONE
  80. * 函数全局变量:NONE
  81. * 作者:Jesse_嘉伟
  82. * 时间:2016/5/17
  83. * 最后修改时间:
  84. * 说明:Jesse_嘉伟的专栏(https://blog.csdn.net/u012993936)
  85. *************************************************************************/
  86. void SmartSens_Isr(void)
  87. {
  88. Send_Infrared();
  89. }
  90. /************************************************************************
  91. * 函数名:static void Update_SmartSemsState(uint8_t state)
  92. * 功能:更新“红外感应装置”状态
  93. * 参数:
  94. state:红外感应装置状态
  95. * 返回值:NONE
  96. * 调用函数:NONE
  97. * 引用全局变量:
  98. g_smartsens_onoff:红外感应装置状态
  99. * 函数全局变量:NONE
  100. * 作者:Jesse_嘉伟
  101. * 时间:2016/5/17
  102. * 最后修改时间:
  103. * 说明:Jesse_嘉伟的专栏(https://blog.csdn.net/u012993936)
  104. *************************************************************************/
  105. static void Update_SmartSemsState(uint8_t state)
  106. {
  107. g_smartsens_onoff = state;
  108. }
  109. /************************************************************************
  110. * 函数名:static void Toggle_SmartSems(void)
  111. * 功能:取反“红外感应装置”
  112. * 参数:NONE
  113. * 返回值:NONE
  114. * 调用函数:
  115. uint8_t Get_SmartSensState(void)
  116. void Set_SmartSens(uint8_t state)
  117. * 引用全局变量:NONE
  118. * 函数全局变量:NONE
  119. * 作者:Jesse_嘉伟
  120. * 时间:2016/5/17
  121. * 最后修改时间:
  122. * 说明:Jesse_嘉伟的专栏(https://blog.csdn.net/u012993936)
  123. *************************************************************************/
  124. static void Toggle_SmartSems(void)
  125. {
  126. if(Get_SmartSensState()==OPEN_SMARTSENS)
  127. {
  128. Set_SmartSens(CLOSE_SMARTSENS);
  129. }
  130. else
  131. {
  132. Set_SmartSens(OPEN_SMARTSENS);
  133. }
  134. }
  135. /************************************************************************
  136. * 函数名:uint8_t Get_SmartSensState(void)
  137. * 功能:获取红外传感状态
  138. * 参数:NONE
  139. * 返回值:红外传感状态
  140. * 调用函数:NONE
  141. * 引用全局变量:
  142. smartsens_state:红外传感状态
  143. * 函数全局变量:NONE
  144. * 作者:Jesse_嘉伟
  145. * 时间:2016/5/17
  146. * 最后修改时间:
  147. * 说明:Jesse_嘉伟的专栏(https://blog.csdn.net/u012993936)
  148. *************************************************************************/
  149. uint8_t Get_SmartSensState(void)
  150. {
  151. return (g_smartsens_onoff);
  152. }
  153. /************************************************************************
  154. * 函数名:void Set_SmartSens(uint8_t state)
  155. * 功能:控制红外传感开关
  156. * 参数:
  157. state:
  158. OPEN_SMARTSENS:开启红外传感
  159. CLOSE_SMARTSENS:关闭红外传感
  160. * 返回值:NONE
  161. * 调用函数:
  162. static void Update_SmartSemsState(uint8_t state)
  163. static void Toggle_SmartSems(void)
  164. * 引用全局变量:NONE
  165. * 函数全局变量:NONE
  166. * 作者:Jesse_嘉伟
  167. * 时间:2016/5/17
  168. * 最后修改时间:
  169. * 说明:Jesse_嘉伟的专栏(https://blog.csdn.net/u012993936)
  170. *************************************************************************/
  171. void Set_SmartSens(uint8_t state)
  172. {
  173. switch(state)
  174. {
  175. case OPEN_SMARTSENS:
  176. P0IEN |= (1<<0); // 使能“红外感应装置”
  177. Update_SmartSemsState(STATUS_SMARTSENS_ON); // 更新红外感应装置“开关属性”
  178. break;
  179. case CLOSE_SMARTSENS:
  180. P0IEN &= ~(1<<0); // 失能“红外感应装置”
  181. Update_SmartSemsState(STATUS_SMARTSENS_OFF); // 更新红外感应装置“开关属性”
  182. break;
  183. case TOGGLE_SMARTSENS:
  184. Toggle_SmartSems();
  185. break;
  186. default:
  187. break;
  188. }
  189. }
  190. /************************************************************************
  191. * 函数名:void Send_Infrared(void)
  192. * 功能:发送热红外感应装置状态给协调器
  193. * 参数:NONE
  194. * 返回值:NONE
  195. * 调用函数:
  196. * 引用全局变量:NONE
  197. * 函数全局变量:NONE
  198. * 作者:Jesse_嘉伟
  199. * 时间:2016/5/17
  200. * 最后修改时间:
  201. * 说明:Jesse_嘉伟的专栏(https://blog.csdn.net/u012993936)
  202. *************************************************************************/
  203. void Send_Infrared(void)
  204. {
  205. afAddrType_t dstaddr;
  206. uint8_t cmd[6] = {0};
  207. uint8_t devtype = DEV_INFRARED;
  208. uint16_t nwk = 0;
  209. uint16_t pnwk = 0;
  210. uint8_t valueinfrared = 0;
  211. dstaddr.addr.shortAddr = 0x0000;
  212. dstaddr.addrMode = (afAddrMode_t)Addr16Bit;
  213. dstaddr.endPoint = GenericApp_SimpleDesc.EndPoint;
  214. nwk = NLME_GetShortAddr();
  215. pnwk = NLME_GetCoordShortAddr();
  216. valueinfrared = 1;
  217. osal_memcpy(&cmd[0], &devtype, 1);
  218. osal_memcpy(&cmd[1], &nwk, 2);
  219. osal_memcpy(&cmd[3], &pnwk, 2);
  220. osal_memcpy(&cmd[5], &valueinfrared, 1);
  221. AF_DataRequest(&dstaddr,
  222. &GenericApp_epDesc,
  223. GenericApp_epDesc.simpleDesc->pAppOutClusterList[0],
  224. sizeof(cmd)/sizeof(uint8_t),
  225. cmd,
  226. 0,
  227. AF_DISCV_ROUTE,
  228. AF_DEFAULT_RADIUS
  229. );
  230. }

qrcode_for_gh_e95b474fcf08_344.jpg