memcpy(mac, &(emac_config.macaddr[0]), 6);
}
+esp_err_t esp_eth_set_mac(const uint8_t mac[6])
+{
+ if((mac[0] & 0x01) == 0) {
+ memcpy(&(emac_config.macaddr[0]),mac, 6);
+ return ESP_OK;
+ } else {
+ return ESP_ERR_INVALID_MAC;
+ }
+}
+
static void emac_setup_tx_desc(struct dma_extended_desc *tx_desc , uint32_t size)
{
tx_desc->basic.desc1 = size & 0xfff;
return ret;
}
-//TODO for mac filter
-void emac_set_mac_addr(void)
-{
-}
-
-//TODO
-void emac_check_mac_addr(void)
-{
-}
-
static void emac_process_tx(void)
{
uint32_t cur_tx_desc = emac_read_tx_cur_reg();
uint32_t cur_rx_desc = emac_read_rx_cur_reg();
struct dma_extended_desc *cur_desc = (struct dma_extended_desc *)cur_rx_desc;
- while (cur_desc->basic.desc0 == EMAC_DESC_RX_OWN) {
+ while (cur_desc->basic.desc0 == EMAC_DESC_RX_OWN && cnt < DMA_RX_BUF_NUM) {
cnt++;
cur_desc = (struct dma_extended_desc *)cur_desc->basic.desc3;
}
emac_enable_clk(true);
emac_reset();
- emac_macaddr_init();
-
- emac_check_mac_addr();
- emac_set_mac_addr();
emac_set_macaddr_reg();
emac_set_tx_base_reg();
ESP_LOGI(TAG, "mac version %04xa", emac_read_mac_version());
emac_hw_init();
+ emac_macaddr_init();
//watchdog TODO
*/
void esp_eth_free_rx_buf(void *buf);
+/**
+ * @brief Get mac of ethernet interface.
+ *
+ * @param[out] mac: store mac of the interface.
+ *
+ */
+void esp_eth_get_mac(uint8_t mac[6]);
+
+/**
+ * @brief Set mac of ethernet interface.
+ *
+ * @note user can call this function after emac_init,and the new mac address will be enabled after emac_enable.
+ *
+ * @param[in] mac: the Mac address.
+ *
+ * @return
+ * - ESP_OK: succeed
+ * - ESP_ERR_INVALID_MAC: invalid mac address
+ */
+esp_err_t esp_eth_set_mac(const uint8_t mac[6]);
+
#ifdef __cplusplus
}
#endif