Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

145 rader
4.6 KiB

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