key_proc.c 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. #include "key_proc.h"
  2. #include "key.h"
  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. #include "led_task.h"
  6. #include "lcd_task.h"
  7. #include "All_define.h"
  8. #include "MB_RTU_deal_task.h"
  9. #include <SIM_EEPROM.h>
  10. #include "modbus.h"
  11. #include "key_operate.h"
  12. #include "system.h"
  13. #include "led.h"
  14. #include "protocol.h"
  15. extern uint8_t AirCondition_Sheiled_Set(void);
  16. extern uint8_t FloorHeating_Sheiled_Set(void);
  17. extern uint8_t AirFresh_Sheiled_Set(void);
  18. extern void mcu_join_zigbee(void);
  19. u16 SaveData[32] = {0};
  20. typedef enum
  21. {
  22. USER_BUTTON_1 = 0,
  23. USER_BUTTON_2 = 1,
  24. USER_BUTTON_3 = 2,
  25. USER_BUTTON_4 = 3,
  26. USER_BUTTON_5 = 4,
  27. USER_BUTTON_6 = 5,
  28. USER_BUTTON_7 = 6,
  29. USER_BUTTON_8 = 7,
  30. USER_BUTTON_MAX
  31. } user_button_t;
  32. static flex_button_t user_button[USER_BUTTON_MAX] = {0};
  33. static uint8_t common_btn_read(void *arg)
  34. {
  35. flex_button_t *btn = (flex_button_t *)arg;
  36. return Get_key_value(btn->id);
  37. }
  38. void LCD_key_handle(Key_Operate_t key, Zigbee_cmd zigbee_cmd_control)
  39. {
  40. printf("dis_page_param.face_plate_param.Panel_Shield %d\r\n", dis_page_param.face_plate_param.Panel_Shield);
  41. printf("key %d\r\n", key);
  42. u8 Data_need_write = 0;
  43. if (AirCondition_Sheiled_Set())
  44. {
  45. if (key == Key_Air_Conditioning_Mode)
  46. return;
  47. }
  48. if (FloorHeating_Sheiled_Set())
  49. {
  50. if (key == Key_Floor_Heating_Mode)
  51. return;
  52. }
  53. if (AirFresh_Sheiled_Set())
  54. {
  55. if (key == Key_Fresh_Air)
  56. return;
  57. }
  58. printf("dis_page_num.display_page %d\r\n", dis_page_num.display_page);
  59. switch (dis_page_num.display_page)
  60. {
  61. case dis_switch_interface:
  62. break;
  63. case dis_device_open:
  64. break;
  65. case dis_air_Conditioning:
  66. {
  67. printf("dis_page_num.Dis_air_Conditionin %d\r\n", dis_page_num.Dis_air_Conditioning);
  68. switch (dis_page_num.Dis_air_Conditioning)
  69. {
  70. case dis_air_Conditioning_close:
  71. Key_Handle_air_conditioning_close(&Data_need_write, key);
  72. break;
  73. case dis_air_Conditioning_open:
  74. Key_Handle_air_conditioning_open(&Data_need_write, key);
  75. break;
  76. case dis_air_Conditioning_sleep:
  77. Key_Handle_air_conditioning_sleep(&Data_need_write, key);
  78. break;
  79. default:
  80. break;
  81. }
  82. }
  83. break;
  84. case dis_floor_heating:
  85. {
  86. switch (dis_page_num.Dis_floor_heating)
  87. {
  88. case dis_floor_heating_close:
  89. Key_Handle_floor_heating_close(&Data_need_write, key);
  90. break;
  91. case dis_floor_heating_open:
  92. Key_Handle_floor_heating_open(&Data_need_write, key);
  93. break;
  94. case dis_floor_heating_sleep:
  95. Key_Handle_floor_heating_sleep(&Data_need_write, key);
  96. break;
  97. default:
  98. break;
  99. }
  100. }
  101. break;
  102. case dis_fresh_air:
  103. {
  104. switch (dis_page_num.Dis_fresh_air)
  105. {
  106. case dis_fresh_air_close:
  107. Key_Handle_fresh_air_close(&Data_need_write, key);
  108. break;
  109. case dis_fresh_air_open:
  110. Key_Handle_fresh_air_open(&Data_need_write, key);
  111. break;
  112. case dis_fresh_air_sleep:
  113. Key_Handle_fresh_air_sleep(&Data_need_write, key);
  114. break;
  115. default:
  116. break;
  117. }
  118. }
  119. break;
  120. case dis_new_air_Conditioning:
  121. {
  122. }
  123. break;
  124. case dis_message_read:
  125. {
  126. /*switch(dis_page_num.Dis_message_read)
  127. {
  128. case dis_real_time_temp:
  129. Key_Handle_real_time_temp(&Data_need_write,key);
  130. break;
  131. case dis_real_time_humidity:
  132. Key_Handle_real_time_humidity(&Data_need_write,key);
  133. break;
  134. case dis_slave_addr:
  135. Key_Handle_slave_addr(&Data_need_write,key);
  136. break;
  137. default:
  138. break;
  139. } */
  140. }
  141. break;
  142. case dis_advanced_set:
  143. {
  144. /*switch(dis_page_num.Dis_advanced_set)
  145. {
  146. case dis_compensates_temp_set:
  147. Key_Handle_compensates_temp_set(&Data_need_write,key);
  148. break;
  149. case dis_slave_addr_set:
  150. Key_Handle_slave_addr_set(&Data_need_write,key);
  151. break;
  152. case dis_led_brightness_set:
  153. Key_Handle_led_brightness_set(&Data_need_write,key);
  154. break;
  155. case dis_sleep_time_set:
  156. Key_Handle_sleep_time_set(&Data_need_write,key);
  157. break;
  158. case dis_LowTempProtect_set:
  159. Key_Handle_LowTempProtect_set(&Data_need_write,key);
  160. break;
  161. case dis_HeatingProtect_set:
  162. Key_Handle_HeatingProtect_set(&Data_need_write,key);
  163. break;
  164. case dis_lcd_brightness_set:
  165. Key_Handle_lcd_brightness_set(&Data_need_write,key);
  166. break;
  167. case dis_speed_relay_set:
  168. Key_Handle_speed_relay_set(&Data_need_write,key);
  169. break;
  170. default:
  171. break;
  172. } */
  173. }
  174. break;
  175. default:
  176. break;
  177. }
  178. if (zigbee_cmd.Is_zigbee_cmd == 0)
  179. all_data_update();
  180. if (Data_need_write >= 1)
  181. {
  182. xTaskNotify((TaskHandle_t)LEDTask_Handler,
  183. (uint32_t)Need_Write,
  184. (eNotifyAction)eSetBits);
  185. }
  186. }
  187. int i = 0;
  188. static void common_btn_evt_cb(void *arg)
  189. {
  190. #if 1
  191. Key_Operate_t key_value = Key_None;
  192. static u8 key1_flag = 0, key2_flag = 0, key3_flag = 0, key4_flag = 0, key5_flag = 0, key6_flag = 0, key7_flag = 0, key8_flag = 0;
  193. flex_button_t *btn = (flex_button_t *)arg;
  194. switch (btn->id)
  195. {
  196. case USER_BUTTON_1:
  197. if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_8]) == FLEX_BTN_PRESS_NONE)
  198. {
  199. key1_flag = 1;
  200. }
  201. if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_8]) == FLEX_BTN_PRESS_NONE && key1_flag == 1)
  202. {
  203. key1_flag = 0;
  204. key_value = Key_Subtract;
  205. }
  206. break;
  207. case USER_BUTTON_2:
  208. if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_7]) == FLEX_BTN_PRESS_NONE)
  209. {
  210. key2_flag = 1;
  211. }
  212. if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_7]) == FLEX_BTN_PRESS_NONE && key2_flag == 1)
  213. {
  214. key2_flag = 0;
  215. if (fuji_or_shuiji == 0)
  216. key_value = Key_Air_Conditioning_Mode;
  217. printf("Key_Air_Conditioning_Mode\r\n");
  218. }
  219. break;
  220. case USER_BUTTON_3:
  221. if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_6]) == FLEX_BTN_PRESS_NONE)
  222. {
  223. key3_flag = 1;
  224. }
  225. if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_6]) == FLEX_BTN_PRESS_NONE && key3_flag == 1)
  226. {
  227. key3_flag = 0;
  228. key_value = Key_Floor_Heating_Mode;
  229. }
  230. break;
  231. case USER_BUTTON_4:
  232. if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_5]) == FLEX_BTN_PRESS_NONE)
  233. {
  234. key4_flag = 1;
  235. }
  236. if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_5]) == FLEX_BTN_PRESS_NONE && key4_flag == 1)
  237. {
  238. key4_flag = 0;
  239. key_value = Key_switch;
  240. }
  241. break;
  242. case USER_BUTTON_5:
  243. if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_4]) == FLEX_BTN_PRESS_NONE)
  244. {
  245. key5_flag = 1;
  246. }
  247. if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_4]) == FLEX_BTN_PRESS_NONE && key5_flag == 1)
  248. {
  249. key5_flag = 0;
  250. key_value = Key_Wind_Speed;
  251. }
  252. break;
  253. case USER_BUTTON_6:
  254. if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_3]) == FLEX_BTN_PRESS_NONE)
  255. {
  256. key6_flag = 1;
  257. }
  258. if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_3]) == FLEX_BTN_PRESS_NONE && key6_flag == 1)
  259. {
  260. key6_flag = 0;
  261. key_value = Key_Mode_Switch;
  262. }
  263. break;
  264. case USER_BUTTON_7:
  265. if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_2]) == FLEX_BTN_PRESS_NONE)
  266. {
  267. key7_flag = 1;
  268. }
  269. if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_2]) == FLEX_BTN_PRESS_NONE && key7_flag == 1)
  270. {
  271. key7_flag = 0;
  272. key_value = Key_Fresh_Air;
  273. }
  274. break;
  275. case USER_BUTTON_8:
  276. if (btn->event == FLEX_BTN_PRESS_SHORT_START && flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_NONE)
  277. {
  278. key8_flag = 1;
  279. }
  280. if (btn->event == FLEX_BTN_PRESS_SHORT_UP && flex_button_event_read(&user_button[USER_BUTTON_1]) == FLEX_BTN_PRESS_NONE && key8_flag == 1)
  281. {
  282. key8_flag = 0;
  283. key_value = Key_Add;
  284. }
  285. break;
  286. default:
  287. break;
  288. }
  289. if (btn->id == USER_BUTTON_4 && btn->event == FLEX_BTN_PRESS_LONG_START)
  290. {
  291. key_value = Key_Switch_OnOff;
  292. printf("Key_Switch_OnOff\r\n");
  293. }
  294. if (flex_button_event_read(&user_button[USER_BUTTON_7]) == FLEX_BTN_PRESS_LONG_START && flex_button_event_read(&user_button[USER_BUTTON_2]) == FLEX_BTN_PRESS_LONG_START)
  295. {
  296. fuji_or_shuiji = !fuji_or_shuiji;
  297. printf("fuji_or_shuiji %d\r\n",fuji_or_shuiji);
  298. // key_value = Key_Advanced_setting;
  299. }
  300. if (btn->id == USER_BUTTON_5 && btn->event == FLEX_BTN_PRESS_LONG_HOLD_10000)
  301. {
  302. // product_info_update();
  303. mcu_join_zigbee();
  304. Is_blink = 1;
  305. Zigbee_led_blink();
  306. // printf("into peiwang\r\n");
  307. }
  308. zigbee_cmd.Is_zigbee_cmd = 0;
  309. LCD_key_handle(key_value, zigbee_cmd);
  310. #endif
  311. }
  312. void user_button_init(void)
  313. {
  314. int i;
  315. KEY_Init();
  316. for (i = 0; i < USER_BUTTON_MAX; i++)
  317. {
  318. user_button[i].id = i;
  319. user_button[i].usr_button_read = common_btn_read;
  320. user_button[i].cb = common_btn_evt_cb;
  321. user_button[i].pressed_logic_level = 0;
  322. user_button[i].short_press_start_tick = FLEX_MS_TO_SCAN_CNT(30);
  323. user_button[i].long_press_start_tick = FLEX_MS_TO_SCAN_CNT(2000);
  324. user_button[i].long_hold_start_tick = FLEX_MS_TO_SCAN_CNT(5000);
  325. user_button[i].long_hold_start_tick_10000 = FLEX_MS_TO_SCAN_CNT(10000);
  326. if (i == 1 || i == 6)
  327. {
  328. user_button[i].long_press_start_tick = FLEX_MS_TO_SCAN_CNT(3000);
  329. }
  330. flex_button_register(&user_button[i]);
  331. }
  332. }