gpio_items.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "gpio_items.h"
  2. #include <furi_hal_resources.h>
  3. struct GPIOItems {
  4. GpioPinRecord* pins;
  5. size_t count;
  6. };
  7. GPIOItems* gpio_items_alloc() {
  8. GPIOItems* items = malloc(sizeof(GPIOItems));
  9. items->count = 0;
  10. for(size_t i = 0; i < gpio_pins_count; i++) {
  11. if(!gpio_pins[i].debug) {
  12. items->count++;
  13. }
  14. }
  15. items->pins = malloc(sizeof(GpioPinRecord) * items->count);
  16. for(size_t i = 0; i < items->count; i++) {
  17. if(!gpio_pins[i].debug) {
  18. items->pins[i].pin = gpio_pins[i].pin;
  19. items->pins[i].name = gpio_pins[i].name;
  20. }
  21. }
  22. return items;
  23. }
  24. void gpio_items_free(GPIOItems* items) {
  25. free(items->pins);
  26. free(items);
  27. }
  28. uint8_t gpio_items_get_count(GPIOItems* items) {
  29. return items->count;
  30. }
  31. void gpio_items_configure_pin(GPIOItems* items, uint8_t index, GpioMode mode) {
  32. furi_assert(index < items->count);
  33. furi_hal_gpio_write(items->pins[index].pin, false);
  34. furi_hal_gpio_init(items->pins[index].pin, mode, GpioPullNo, GpioSpeedVeryHigh);
  35. }
  36. void gpio_items_configure_all_pins(GPIOItems* items, GpioMode mode) {
  37. for(uint8_t i = 0; i < items->count; i++) {
  38. gpio_items_configure_pin(items, i, mode);
  39. }
  40. }
  41. void gpio_items_set_pin(GPIOItems* items, uint8_t index, bool level) {
  42. furi_assert(index < items->count);
  43. furi_hal_gpio_write(items->pins[index].pin, level);
  44. }
  45. void gpio_items_set_all_pins(GPIOItems* items, bool level) {
  46. for(uint8_t i = 0; i < items->count; i++) {
  47. gpio_items_set_pin(items, i, level);
  48. }
  49. }
  50. const char* gpio_items_get_pin_name(GPIOItems* items, uint8_t index) {
  51. furi_assert(index < items->count + 1);
  52. if(index == items->count) {
  53. return "ALL";
  54. } else {
  55. return items->pins[index].name;
  56. }
  57. }