LCOV - code coverage report
Current view: top level - src - espnow_driver.cpp (source / functions) Coverage Total Hit
Test: ESP-NOW Manager Unified Coverage Lines: 100.0 % 40 40
Test Date: 2026-04-21 02:14:32 Functions: 100.0 % 5 5
Branches: 100.0 % 14 14

             Branch data     Line data    Source code
       1                 :             : // src/espnow_driver.cpp
       2                 :             : 
       3                 :             : #include "esp_log.h"
       4                 :             : 
       5                 :             : #include "espnow_driver.hpp"
       6                 :             : 
       7                 :             : const char *TAG = "EspNowDriver";
       8                 :             : 
       9                 :          10 : EspNowDriver::EspNowDriver(IWiFiHAL &wifi_hal, IEspNowHAL &espnow_hal)
      10                 :          10 :     : wifi_hal_(wifi_hal)
      11                 :          10 :     , espnow_hal_(espnow_hal)
      12                 :             : {
      13                 :          10 : }
      14                 :             : 
      15                 :           9 : esp_err_t EspNowDriver::init(const EspNowConfig &config, esp_now_recv_cb_t recv_cb, esp_now_send_cb_t send_cb)
      16                 :             : {
      17                 :           9 :     esp_err_t err;
      18                 :             : 
      19                 :           9 :     wifi_mode_t mode;
      20                 :           9 :     err = wifi_hal_.wifi_get_mode(&mode);
      21         [ +  + ]:           9 :     if (err != ESP_OK) {
      22                 :           1 :         return init_fail(err, "Failed to get WiFi mode");
      23                 :             :     }
      24         [ +  + ]:           8 :     if (mode == WIFI_MODE_NULL) {
      25                 :           1 :         return init_fail(ESP_ERR_INVALID_STATE, "Mode is not supported");
      26                 :             :     }
      27                 :             : 
      28                 :           7 :     err = espnow_hal_.hal_esp_now_init();
      29         [ +  + ]:           7 :     if (err != ESP_OK) {
      30                 :           1 :         return init_fail(err, "Failed to initialize ESP-NOW");
      31                 :             :     }
      32                 :             : 
      33                 :           6 :     err = espnow_hal_.hal_espnow_register_recv_cb(recv_cb);
      34         [ +  + ]:           6 :     if (err != ESP_OK) {
      35                 :           1 :         return init_fail(err, "Failed to register ESP-NOW receive callback");
      36                 :             :     }
      37                 :             : 
      38                 :           5 :     err = espnow_hal_.hal_espnow_register_send_cb(send_cb);
      39         [ +  + ]:           5 :     if (err != ESP_OK) {
      40                 :           1 :         return init_fail(err, "Failed to register ESP-NOW send callback");
      41                 :             :     }
      42                 :             : 
      43                 :           4 :     err = wifi_hal_.wifi_set_channel(config.wifi_channel, WIFI_SECOND_CHAN_NONE);
      44         [ +  + ]:           4 :     if (err != ESP_OK) {
      45                 :           1 :         return init_fail(err, "Failed to set WiFi channel");
      46                 :             :     }
      47                 :             : 
      48                 :           3 :     err = add_broadcast_peer();
      49         [ +  + ]:           3 :     if (err != ESP_OK) {
      50                 :           1 :         return init_fail(err, "Failed to add broadcast peer");
      51                 :             :     }
      52                 :             : 
      53                 :             :     return ESP_OK;
      54                 :             : }
      55                 :             : 
      56                 :           9 : esp_err_t EspNowDriver::deinit()
      57                 :             : {
      58                 :           9 :     return espnow_hal_.hal_esp_now_deinit();
      59                 :             : }
      60                 :             : 
      61                 :             : // ===============================================================
      62                 :             : // Private methods
      63                 :             : // ===============================================================
      64                 :             : 
      65                 :             : // Add broadcast peer to ESP-NOW
      66                 :           3 : esp_err_t EspNowDriver::add_broadcast_peer()
      67                 :             : {
      68                 :           3 :     esp_now_peer_info_t broadcast_peer = {};
      69                 :           3 :     memcpy(broadcast_peer.peer_addr, BROADCAST_MAC, 6);
      70                 :           3 :     broadcast_peer.channel = 0;
      71                 :           3 :     broadcast_peer.ifidx = WIFI_IF_STA;
      72                 :           3 :     broadcast_peer.encrypt = false;
      73                 :           3 :     return espnow_hal_.hal_esp_now_add_peer(&broadcast_peer);
      74                 :             : }
      75                 :             : 
      76                 :             : // Helper to log error and deinit
      77                 :           7 : esp_err_t EspNowDriver::init_fail(esp_err_t ret, const char *step)
      78                 :             : {
      79                 :           7 :     ESP_LOGE(TAG, "%s failed: %s", step, esp_err_to_name(ret));
      80                 :           7 :     deinit();
      81                 :           7 :     return ret;
      82                 :             : }
        

Generated by: LCOV version 2.0-1