test_gpio.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. /*
  2. * Copyright (c) 2019-2025 Allwinner Technology Co., Ltd. ALL rights reserved.
  3. *
  4. * Allwinner is a trademark of Allwinner Technology Co.,Ltd., registered in
  5. * the the People's Republic of China and other countries.
  6. * All Allwinner Technology Co.,Ltd. trademarks are used with permission.
  7. *
  8. * DISCLAIMER
  9. * THIRD PARTY LICENCES MAY BE REQUIRED TO IMPLEMENT THE SOLUTION/PRODUCT.
  10. * IF YOU NEED TO INTEGRATE THIRD PARTY’S TECHNOLOGY (SONY, DTS, DOLBY, AVS OR MPEGLA, ETC.)
  11. * IN ALLWINNERS’SDK OR PRODUCTS, YOU SHALL BE SOLELY RESPONSIBLE TO OBTAIN
  12. * ALL APPROPRIATELY REQUIRED THIRD PARTY LICENCES.
  13. * ALLWINNER SHALL HAVE NO WARRANTY, INDEMNITY OR OTHER OBLIGATIONS WITH RESPECT TO MATTERS
  14. * COVERED UNDER ANY REQUIRED THIRD PARTY LICENSE.
  15. * YOU ARE SOLELY RESPONSIBLE FOR YOUR USAGE OF THIRD PARTY’S TECHNOLOGY.
  16. *
  17. *
  18. * THIS SOFTWARE IS PROVIDED BY ALLWINNER"AS IS" AND TO THE MAXIMUM EXTENT
  19. * PERMITTED BY LAW, ALLWINNER EXPRESSLY DISCLAIMS ALL WARRANTIES OF ANY KIND,
  20. * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION REGARDING
  21. * THE TITLE, NON-INFRINGEMENT, ACCURACY, CONDITION, COMPLETENESS, PERFORMANCE
  22. * OR MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  23. * IN NO EVENT SHALL ALLWINNER BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  24. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  25. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  26. * LOSS OF USE, DATA, OR PROFITS, OR BUSINESS INTERRUPTION)
  27. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  28. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  29. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  30. * OF THE POSSIBILITY OF SUCH DAMAGE.
  31. */
  32. #include <stdint.h>
  33. #include <hal_log.h>
  34. #include <hal_cmd.h>
  35. #include <hal_interrupt.h>
  36. #include <hal_gpio.h>
  37. #include "test_conf.h"
  38. static irqreturn_t gpio_irq_test(int unused, void *data)
  39. {
  40. hal_log_info("fake gpio interrupt handler");
  41. return 0;
  42. }
  43. int cmd_test_gpio(int argc, char **argv)
  44. {
  45. uint32_t irq;
  46. int ret = 0;
  47. gpio_pull_status_t pull_state;
  48. gpio_direction_t gpio_direction;
  49. gpio_data_t gpio_data;
  50. hal_log_info("Setting: pull state: %d, dir: %d, data: 0x%x",
  51. GPIO_PULL_UP, GPIO_DIRECTION_OUTPUT, GPIO_DATA_HIGH);
  52. hal_gpio_set_pull(GPIO_TEST, GPIO_PULL_UP);
  53. hal_gpio_set_direction(GPIO_TEST, GPIO_DIRECTION_OUTPUT);
  54. hal_gpio_set_data(GPIO_TEST, GPIO_DATA_HIGH);
  55. hal_gpio_get_pull(GPIO_TEST, &pull_state);
  56. hal_gpio_get_direction(GPIO_TEST, &gpio_direction);
  57. hal_gpio_get_data(GPIO_TEST, &gpio_data);
  58. hal_log_info("Results: pull state: %d, dir: %d, data: 0x%0x",
  59. pull_state, gpio_direction, gpio_data);
  60. if (pull_state == GPIO_PULL_UP
  61. && gpio_direction == GPIO_DIRECTION_OUTPUT
  62. && gpio_data == GPIO_DATA_HIGH)
  63. {
  64. hal_log_info("Test hal_gpio_set_pull API success!");
  65. hal_log_info("Test hal_gpio_set_direction API success!");
  66. hal_log_info("Test hal_gpio_set_data API success!");
  67. hal_log_info("Test hal_gpio_get_pull API success!");
  68. hal_log_info("Test hal_gpio_get_direction API success!");
  69. hal_log_info("Test hal_gpio_get_data API success!");
  70. } else {
  71. goto failed;
  72. }
  73. ret = hal_gpio_to_irq(GPIO_TEST, &irq);
  74. if (ret < 0)
  75. {
  76. hal_log_err("gpio to irq error, irq num:%lu error num: %d", irq, ret);
  77. goto failed;
  78. } else {
  79. hal_log_info("Test hal_gpio_to_irq API success!");
  80. }
  81. ret = hal_gpio_irq_request(irq, gpio_irq_test, IRQ_TYPE_EDGE_RISING, NULL);
  82. if (ret < 0)
  83. {
  84. hal_log_err("request irq error, irq num:%lu error num: %d", irq, ret);
  85. goto failed;
  86. } else {
  87. hal_log_info("Test hal_gpio_irq_request API success!");
  88. }
  89. ret = hal_gpio_irq_enable(irq);
  90. if (ret < 0)
  91. {
  92. hal_log_err("request irq error, error num: %d", ret);
  93. goto failed;
  94. } else {
  95. hal_log_info("Test hal_gpio_irq_enable API success!");
  96. }
  97. ret = hal_gpio_irq_disable(irq);
  98. if (ret < 0)
  99. {
  100. hal_log_err("disable irq error, irq num:%lu, error num: %d", irq, ret);
  101. goto failed;
  102. } else {
  103. hal_log_info("Test hal_gpio_irq_disable API success!");
  104. }
  105. ret = hal_gpio_irq_free(irq);
  106. if (ret < 0)
  107. {
  108. hal_log_err("free irq error, error num: %d", ret);
  109. goto failed;
  110. } else {
  111. hal_log_info("Test hal_gpio_irq_free API success!");
  112. }
  113. hal_log_info("Test gpio hal APIs success!");
  114. return 0;
  115. failed:
  116. hal_log_err("Test gpio hal APIs failed!");
  117. return -1;
  118. }
  119. MSH_CMD_EXPORT_ALIAS(cmd_test_gpio, hal_gpio, gpio hal APIs tests);