You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.0 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. #include <stdbool.h> //定义布尔
  2. #include <string.h>
  3. #include "key.h"
  4. #include "port.h"
  5. #include "systicket.h"
  6. #include "this_device.h"
  7. static key_t s_keys[] = {
  8. s_key_init("powerkey", port_gpio_get_power_key_state),
  9. s_key_init("levelkey", port_gpio_get_level_key_state),
  10. s_key_init("timerkey", port_gpio_get_timer_key_state),
  11. s_key_init("intervalkey", port_gpio_get_interval_key_state),
  12. };
  13. static ThisDevice_t this_device;
  14. static void mf_init_all_subdevice_state() {
  15. port_debug_set(false);
  16. port_fan_set(false);
  17. port_led0_set(false);
  18. port_led1_set(false);
  19. port_led2_set(false);
  20. port_led3_set(false);
  21. port_led_r_set(false);
  22. port_led_g_set(false);
  23. port_led_b_set(false);
  24. }
  25. //开始工作
  26. static void startwork() { port_fan_set(true); }
  27. //停止工作
  28. static void stopwork() { port_fan_set(false); }
  29. static void poweron() {
  30. this_device.power = true;
  31. this_device.ozone_level = level_low;
  32. this_device.ozone_module = normal;
  33. startwork();
  34. return;
  35. }
  36. static void powerdown() {
  37. this_device.power = false;
  38. stopwork();
  39. return;
  40. }
  41. // 各个按键处理逻辑
  42. static void mf_process_poweron_key(key_t *key) {
  43. printf("key name:%s\n", key->name);
  44. if (!this_device.power) {
  45. poweron();
  46. } else {
  47. powerdown();
  48. }
  49. return;
  50. }
  51. static void mf_process_level_key(key_t *key) {
  52. if (!this_device.power) {
  53. return;
  54. }
  55. printf("key name:%s\n", key->name);
  56. return;
  57. }
  58. static void mf_process_timer_key(key_t *key) {
  59. if (!this_device.power) {
  60. return;
  61. }
  62. printf("key name:%s\n", key->name);
  63. return;
  64. }
  65. static void mf_process_interval_key(key_t *key) {
  66. if (!this_device.power) {
  67. return;
  68. }
  69. printf("key name:%s\n", key->name);
  70. return;
  71. }
  72. static void onkey(key_t *key, key_state_t key_state) {
  73. if /* */ (strcmp(key->name, "powerkey") == 0 && zks_rising_edge == key_state) {
  74. mf_process_poweron_key(key);
  75. } else if (strcmp(key->name, "levelkey") == 0 && zks_rising_edge == key_state) {
  76. mf_process_level_key(key);
  77. } else if (strcmp(key->name, "timerkey") == 0 && zks_rising_edge == key_state) {
  78. mf_process_timer_key(key);
  79. } else if (strcmp(key->name, "intervalkey") == 0 && zks_rising_edge == key_state) {
  80. mf_process_interval_key(key);
  81. }
  82. }
  83. key_module_t key_module = key_module_init(s_keys, onkey);
  84. void hardware_init() {
  85. SystemInit(); //配置系统时钟
  86. DeviceClockAllEnable(); //打开所有外设时钟
  87. systicket_init();
  88. port_init();
  89. }
  90. void hardware_default_settings() { mf_init_all_subdevice_state(); }
  91. void flip_debuf_light_level() {
  92. static uint8_t debug_led_state = 1;
  93. debug_led_state = !debug_led_state;
  94. port_debug_set(debug_led_state);
  95. }
  96. int main() {
  97. hardware_init();
  98. hardware_default_settings();
  99. key_init(&key_module);
  100. while (true) {
  101. // scan key
  102. DO_IT_EACH_MS(20) { key_do_loop_in_each_period(); };
  103. END();
  104. // debug light
  105. DO_IT_EACH_MS(150) { flip_debuf_light_level(); }
  106. END();
  107. }
  108. return 0;
  109. }