esp_eth_com.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. * SPDX-FileCopyrightText: 2019-2021 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #pragma once
  7. #include "esp_err.h"
  8. #include "esp_event_base.h"
  9. #include "hal/eth_types.h"
  10. #include "esp_eth_spec.h"
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14. /**
  15. * @brief Ethernet driver state
  16. *
  17. */
  18. typedef enum {
  19. ETH_STATE_LLINIT, /*!< Lowlevel init done */
  20. ETH_STATE_DEINIT, /*!< Deinit done */
  21. ETH_STATE_LINK, /*!< Link status changed */
  22. ETH_STATE_SPEED, /*!< Speed updated */
  23. ETH_STATE_DUPLEX, /*!< Duplex updated */
  24. ETH_STATE_PAUSE, /*!< Pause ability updated */
  25. } esp_eth_state_t;
  26. /**
  27. * @brief Ethernet mediator
  28. *
  29. */
  30. typedef struct esp_eth_mediator_s esp_eth_mediator_t;
  31. /**
  32. * @brief Ethernet mediator
  33. *
  34. */
  35. struct esp_eth_mediator_s {
  36. /**
  37. * @brief Read PHY register
  38. *
  39. * @param[in] eth: mediator of Ethernet driver
  40. * @param[in] phy_addr: PHY Chip address (0~31)
  41. * @param[in] phy_reg: PHY register index code
  42. * @param[out] reg_value: PHY register value
  43. *
  44. * @return
  45. * - ESP_OK: read PHY register successfully
  46. * - ESP_FAIL: read PHY register failed because some error occurred
  47. *
  48. */
  49. esp_err_t (*phy_reg_read)(esp_eth_mediator_t *eth, uint32_t phy_addr, uint32_t phy_reg, uint32_t *reg_value);
  50. /**
  51. * @brief Write PHY register
  52. *
  53. * @param[in] eth: mediator of Ethernet driver
  54. * @param[in] phy_addr: PHY Chip address (0~31)
  55. * @param[in] phy_reg: PHY register index code
  56. * @param[in] reg_value: PHY register value
  57. *
  58. * @return
  59. * - ESP_OK: write PHY register successfully
  60. * - ESP_FAIL: write PHY register failed because some error occurred
  61. */
  62. esp_err_t (*phy_reg_write)(esp_eth_mediator_t *eth, uint32_t phy_addr, uint32_t phy_reg, uint32_t reg_value);
  63. /**
  64. * @brief Deliver packet to upper stack
  65. *
  66. * @param[in] eth: mediator of Ethernet driver
  67. * @param[in] buffer: packet buffer
  68. * @param[in] length: length of the packet
  69. *
  70. * @return
  71. * - ESP_OK: deliver packet to upper stack successfully
  72. * - ESP_FAIL: deliver packet failed because some error occurred
  73. *
  74. */
  75. esp_err_t (*stack_input)(esp_eth_mediator_t *eth, uint8_t *buffer, uint32_t length);
  76. /**
  77. * @brief Callback on Ethernet state changed
  78. *
  79. * @param[in] eth: mediator of Ethernet driver
  80. * @param[in] state: new state
  81. * @param[in] args: optional argument for the new state
  82. *
  83. * @return
  84. * - ESP_OK: process the new state successfully
  85. * - ESP_FAIL: process the new state failed because some error occurred
  86. *
  87. */
  88. esp_err_t (*on_state_changed)(esp_eth_mediator_t *eth, esp_eth_state_t state, void *args);
  89. };
  90. /**
  91. * @brief Ethernet event declarations
  92. *
  93. */
  94. typedef enum {
  95. ETHERNET_EVENT_START, /*!< Ethernet driver start */
  96. ETHERNET_EVENT_STOP, /*!< Ethernet driver stop */
  97. ETHERNET_EVENT_CONNECTED, /*!< Ethernet got a valid link */
  98. ETHERNET_EVENT_DISCONNECTED, /*!< Ethernet lost a valid link */
  99. } eth_event_t;
  100. /**
  101. * @brief Ethernet event base declaration
  102. *
  103. */
  104. ESP_EVENT_DECLARE_BASE(ETH_EVENT);
  105. #ifdef __cplusplus
  106. }
  107. #endif