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.
 
 
 
 

143 lines
4.2 KiB

  1. /**
  2. *
  3. * \file
  4. *
  5. * \brief WINC3400 Peripherials Application Interface.
  6. *
  7. * Copyright (c) 2017-2018 Microchip Technology Inc. and its subsidiaries.
  8. *
  9. * \asf_license_start
  10. *
  11. * \page License
  12. *
  13. * Subject to your compliance with these terms, you may use Microchip
  14. * software and any derivatives exclusively with Microchip products.
  15. * It is your responsibility to comply with third party license terms applicable
  16. * to your use of third party software (including open source software) that
  17. * may accompany Microchip software.
  18. *
  19. * THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS". NO WARRANTIES,
  20. * WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
  21. * INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
  22. * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP BE
  23. * LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE, INCIDENTAL OR CONSEQUENTIAL
  24. * LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND WHATSOEVER RELATED TO THE
  25. * SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS BEEN ADVISED OF THE
  26. * POSSIBILITY OR THE DAMAGES ARE FORESEEABLE. TO THE FULLEST EXTENT
  27. * ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL CLAIMS IN ANY WAY
  28. * RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF FEES, IF ANY,
  29. * THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
  30. *
  31. * \asf_license_stop
  32. *
  33. */
  34. /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
  35. INCLUDES
  36. *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
  37. #include "driver/include/m2m_periph.h"
  38. #include "driver/source/nmasic.h"
  39. #include "m2m_hif.h"
  40. #ifdef CONF_PERIPH
  41. /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
  42. MACROS
  43. *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
  44. #define GPIO_OP_DIR 0
  45. #define GPIO_OP_SET 1
  46. #define GPIO_OP_GET 2
  47. /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
  48. DATA TYPES
  49. *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
  50. /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
  51. STATIC FUNCTIONS
  52. *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
  53. static sint8 get_gpio_idx(uint8 u8GpioNum)
  54. {
  55. if(u8GpioNum >= M2M_PERIPH_GPIO_MAX) return -1;
  56. if(u8GpioNum == M2M_PERIPH_GPIO3)
  57. {
  58. return 3;
  59. }
  60. else if(u8GpioNum == M2M_PERIPH_GPIO4)
  61. {
  62. return 4;
  63. }
  64. else if(u8GpioNum == M2M_PERIPH_GPIO15)
  65. {
  66. return 15;
  67. }
  68. else if(u8GpioNum == M2M_PERIPH_GPIO16)
  69. {
  70. return 16;
  71. }
  72. else if(u8GpioNum == M2M_PERIPH_GPIO18)
  73. {
  74. return 18;
  75. }
  76. else
  77. {
  78. return -2;
  79. }
  80. }
  81. /*
  82. * GPIO read/write skeleton with wakeup/sleep capability.
  83. */
  84. static sint8 gpio_ioctl(uint8 op, uint8 u8GpioNum, uint8 u8InVal, uint8 * pu8OutVal)
  85. {
  86. sint8 ret, gpio;
  87. ret = hif_chip_wake();
  88. if(ret != M2M_SUCCESS) goto _EXIT;
  89. gpio = get_gpio_idx(u8GpioNum);
  90. if(gpio < 0) goto _EXIT1;
  91. if(op == GPIO_OP_DIR) {
  92. ret = set_gpio_dir((uint8)gpio, u8InVal);
  93. } else if(op == GPIO_OP_SET) {
  94. ret = set_gpio_val((uint8)gpio, u8InVal);
  95. } else if(op == GPIO_OP_GET) {
  96. ret = get_gpio_val((uint8)gpio, pu8OutVal);
  97. }
  98. if(ret != M2M_SUCCESS) goto _EXIT1;
  99. _EXIT1:
  100. ret = hif_chip_sleep();
  101. _EXIT:
  102. return ret;
  103. }
  104. /*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
  105. FUNCTION IMPLEMENTATION
  106. *=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/
  107. sint8 m2m_periph_init(tstrPerphInitParam * param)
  108. {
  109. return M2M_SUCCESS;
  110. }
  111. sint8 m2m_periph_gpio_set_dir(uint8 u8GpioNum, uint8 u8GpioDir)
  112. {
  113. return gpio_ioctl(GPIO_OP_DIR, u8GpioNum, u8GpioDir, NULL);
  114. }
  115. sint8 m2m_periph_gpio_set_val(uint8 u8GpioNum, uint8 u8GpioVal)
  116. {
  117. return gpio_ioctl(GPIO_OP_SET, u8GpioNum, u8GpioVal, NULL);
  118. }
  119. sint8 m2m_periph_gpio_get_val(uint8 u8GpioNum, uint8 * pu8GpioVal)
  120. {
  121. return gpio_ioctl(GPIO_OP_GET, u8GpioNum, 0, pu8GpioVal);
  122. }
  123. sint8 m2m_periph_pullup_ctrl(uint32 pinmask, uint8 enable)
  124. {
  125. return pullup_ctrl(pinmask, enable);
  126. }
  127. #endif /* CONF_PERIPH */