st25r3916_led.c 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /******************************************************************************
  2. * \attention
  3. *
  4. * <h2><center>&copy; COPYRIGHT 2020 STMicroelectronics</center></h2>
  5. *
  6. * Licensed under ST MYLIBERTY SOFTWARE LICENSE AGREEMENT (the "License");
  7. * You may not use this file except in compliance with the License.
  8. * You may obtain a copy of the License at:
  9. *
  10. * www.st.com/myliberty
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,
  15. * AND SPECIFICALLY DISCLAIMING THE IMPLIED WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
  17. * See the License for the specific language governing permissions and
  18. * limitations under the License.
  19. *
  20. ******************************************************************************/
  21. /*
  22. * PROJECT: ST25R3916 firmware
  23. * Revision:
  24. * LANGUAGE: ISO C99
  25. */
  26. /*! \file
  27. *
  28. * \author Gustavo Patricio
  29. *
  30. * \brief ST25R3916 LEDs handling
  31. *
  32. */
  33. /*
  34. ******************************************************************************
  35. * INCLUDES
  36. ******************************************************************************
  37. */
  38. #include "st25r3916_led.h"
  39. #include "st25r3916_irq.h"
  40. #include "st25r3916_com.h"
  41. #include "st25r3916.h"
  42. /*
  43. ******************************************************************************
  44. * MACROS
  45. ******************************************************************************
  46. */
  47. #ifdef PLATFORM_LED_RX_PIN
  48. #define st25r3916ledRxOn() \
  49. platformLedOn( \
  50. PLATFORM_LED_RX_PORT, \
  51. PLATFORM_LED_RX_PIN); /*!< LED Rx Pin On from system HAL */
  52. #define st25r3916ledRxOff() \
  53. platformLedOff( \
  54. PLATFORM_LED_RX_PORT, \
  55. PLATFORM_LED_RX_PIN); /*!< LED Rx Pin Off from system HAL */
  56. #else /* PLATFORM_LED_RX_PIN */
  57. #define st25r3916ledRxOn()
  58. #define st25r3916ledRxOff()
  59. #endif /* PLATFORM_LED_RX_PIN */
  60. #ifdef PLATFORM_LED_FIELD_PIN
  61. #define st25r3916ledFieldOn() \
  62. platformLedOn( \
  63. PLATFORM_LED_FIELD_PORT, \
  64. PLATFORM_LED_FIELD_PIN); /*!< LED Field Pin On from system HAL */
  65. #define st25r3916ledFieldOff() \
  66. platformLedOff( \
  67. PLATFORM_LED_FIELD_PORT, \
  68. PLATFORM_LED_FIELD_PIN); /*!< LED Field Pin Off from system HAL */
  69. #else /* PLATFORM_LED_FIELD_PIN */
  70. #define st25r3916ledFieldOn()
  71. #define st25r3916ledFieldOff()
  72. #endif /* PLATFORM_LED_FIELD_PIN */
  73. /*
  74. ******************************************************************************
  75. * GLOBAL FUNCTIONS
  76. ******************************************************************************
  77. */
  78. void st25r3916ledInit(void) {
  79. /* Initialize LEDs if existing and defined */
  80. platformLedsInitialize();
  81. st25r3916ledRxOff();
  82. st25r3916ledFieldOff();
  83. }
  84. /*******************************************************************************/
  85. void st25r3916ledEvtIrq(uint32_t irqs) {
  86. if((irqs & (ST25R3916_IRQ_MASK_TXE | ST25R3916_IRQ_MASK_CAT)) != 0U) {
  87. st25r3916ledFieldOn();
  88. }
  89. if((irqs & (ST25R3916_IRQ_MASK_RXS | ST25R3916_IRQ_MASK_NFCT)) != 0U) {
  90. st25r3916ledRxOn();
  91. }
  92. if((irqs & (ST25R3916_IRQ_MASK_RXE | ST25R3916_IRQ_MASK_NRE | ST25R3916_IRQ_MASK_RX_REST |
  93. ST25R3916_IRQ_MASK_RXE_PTA | ST25R3916_IRQ_MASK_WU_A | ST25R3916_IRQ_MASK_WU_A_X |
  94. ST25R3916_IRQ_MASK_WU_F | ST25R3916_IRQ_MASK_RFU2)) != 0U) {
  95. st25r3916ledRxOff();
  96. }
  97. }
  98. /*******************************************************************************/
  99. void st25r3916ledEvtWrReg(uint8_t reg, uint8_t val) {
  100. if(reg == ST25R3916_REG_OP_CONTROL) {
  101. if((ST25R3916_REG_OP_CONTROL_tx_en & val) != 0U) {
  102. st25r3916ledFieldOn();
  103. } else {
  104. st25r3916ledFieldOff();
  105. }
  106. }
  107. }
  108. /*******************************************************************************/
  109. void st25r3916ledEvtWrMultiReg(uint8_t reg, const uint8_t* vals, uint8_t len) {
  110. uint8_t i;
  111. for(i = 0; i < (len); i++) {
  112. st25r3916ledEvtWrReg((reg + i), vals[i]);
  113. }
  114. }
  115. /*******************************************************************************/
  116. void st25r3916ledEvtCmd(uint8_t cmd) {
  117. if((cmd >= ST25R3916_CMD_TRANSMIT_WITH_CRC) &&
  118. (cmd <= ST25R3916_CMD_RESPONSE_RF_COLLISION_N)) {
  119. st25r3916ledFieldOff();
  120. }
  121. if(cmd == ST25R3916_CMD_UNMASK_RECEIVE_DATA) {
  122. st25r3916ledRxOff();
  123. }
  124. if(cmd == ST25R3916_CMD_SET_DEFAULT) {
  125. st25r3916ledFieldOff();
  126. st25r3916ledRxOff();
  127. }
  128. }