gpio_item.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "gpio_item.h"
  2. #include <furi_hal_resources.h>
  3. typedef struct {
  4. const char* name;
  5. const GpioPin* pin;
  6. } GpioItem;
  7. static const GpioItem gpio_item[GPIO_ITEM_COUNT] = {
  8. {"1.2: PA7", &gpio_ext_pa7},
  9. {"1.3: PA6", &gpio_ext_pa6},
  10. {"1.4: PA4", &gpio_ext_pa4},
  11. {"1.5: PB3", &gpio_ext_pb3},
  12. {"1.6: PB2", &gpio_ext_pb2},
  13. {"1.7: PC3", &gpio_ext_pc3},
  14. {"2.7: PC1", &gpio_ext_pc1},
  15. {"2.8: PC0", &gpio_ext_pc0},
  16. };
  17. void gpio_item_configure_pin(uint8_t index, GpioMode mode) {
  18. furi_assert(index < GPIO_ITEM_COUNT);
  19. furi_hal_gpio_write(gpio_item[index].pin, false);
  20. furi_hal_gpio_init(gpio_item[index].pin, mode, GpioPullNo, GpioSpeedVeryHigh);
  21. }
  22. void gpio_item_configure_all_pins(GpioMode mode) {
  23. for(uint8_t i = 0; i < GPIO_ITEM_COUNT; i++) {
  24. gpio_item_configure_pin(i, mode);
  25. }
  26. }
  27. void gpio_item_set_pin(uint8_t index, bool level) {
  28. furi_assert(index < GPIO_ITEM_COUNT);
  29. furi_hal_gpio_write(gpio_item[index].pin, level);
  30. }
  31. void gpio_item_set_all_pins(bool level) {
  32. for(uint8_t i = 0; i < GPIO_ITEM_COUNT; i++) {
  33. gpio_item_set_pin(i, level);
  34. }
  35. }
  36. const char* gpio_item_get_pin_name(uint8_t index) {
  37. furi_assert(index < GPIO_ITEM_COUNT + 1);
  38. if(index == GPIO_ITEM_COUNT) {
  39. return "ALL";
  40. } else {
  41. return gpio_item[index].name;
  42. }
  43. }