gpio_item.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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, GpioPull pull) {
  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, pull, GpioSpeedVeryHigh);
  21. }
  22. void gpio_item_configure_all_pins(GpioMode mode) {
  23. GpioPull pull = GpioPullNo;
  24. if(mode == GpioModeInput) {
  25. pull = GpioPullDown;
  26. }
  27. for(uint8_t i = 0; i < GPIO_ITEM_COUNT; i++) {
  28. gpio_item_configure_pin(i, mode, pull);
  29. }
  30. }
  31. void gpio_item_set_pin(uint8_t index, bool level) {
  32. furi_assert(index < GPIO_ITEM_COUNT);
  33. furi_hal_gpio_write(gpio_item[index].pin, level);
  34. }
  35. bool gpio_item_get_pin(uint8_t index) {
  36. furi_assert(index < GPIO_ITEM_COUNT);
  37. return furi_hal_gpio_read(gpio_item[index].pin);
  38. }
  39. void gpio_item_set_all_pins(bool level) {
  40. for(uint8_t i = 0; i < GPIO_ITEM_COUNT; i++) {
  41. gpio_item_set_pin(i, level);
  42. }
  43. }
  44. const char* gpio_item_get_pin_name(uint8_t index) {
  45. furi_assert(index < GPIO_ITEM_COUNT + 1);
  46. if(index == GPIO_ITEM_COUNT) {
  47. return "ALL";
  48. } else {
  49. return gpio_item[index].name;
  50. }
  51. }