mirror of
https://github.com/esphome/esphome.git
synced 2025-03-03 09:18:16 +00:00
add get_channel_for()
and change how peer channels are changed.
This commit is contained in:
parent
32b9be9548
commit
abfc0256e8
@ -272,29 +272,29 @@ void ESPNowComponent::set_wifi_channel(uint8_t channel) {
|
|||||||
|
|
||||||
esp_err_t ESPNowComponent::add_peer(uint64_t peer, int8_t channel) {
|
esp_err_t ESPNowComponent::add_peer(uint64_t peer, int8_t channel) {
|
||||||
esp_err_t result = ESP_OK;
|
esp_err_t result = ESP_OK;
|
||||||
int8_t old_channel = this->wifi_channel_;
|
|
||||||
esp_now_peer_info_t peer_info = {};
|
esp_now_peer_info_t peer_info = {};
|
||||||
|
|
||||||
if (this->is_ready()) {
|
if (this->is_ready()) {
|
||||||
if (peer == this->own_peer_address_) {
|
if (peer == this->own_peer_address_) {
|
||||||
ESP_LOGE(TAG, "Tried to peer your self.");
|
ESP_LOGE(TAG, "Tried to pair your self.");
|
||||||
this->mark_failed();
|
this->mark_failed();
|
||||||
return ESP_ERR_INVALID_MAC;
|
return ESP_ERR_INVALID_MAC;
|
||||||
}
|
}
|
||||||
if (esp_now_is_peer_exist((uint8_t *) &peer)) {
|
if (esp_now_is_peer_exist((uint8_t *) &peer)) {
|
||||||
esp_now_get_peer((const uint8_t *) &peer, &peer_info);
|
result = esp_now_get_peer((const uint8_t *) &peer, &peer_info);
|
||||||
old_channel = peer_info.channel;
|
if (result == ESP_OK) {
|
||||||
result = esp_now_del_peer((uint8_t *) &peer);
|
peer_info.channel = (channel = -1) ? this->wifi_channel_ : channel;
|
||||||
if (result != ESP_OK)
|
result = esp_now_mod_peer((uint8_t *) &peer);
|
||||||
return result;
|
}
|
||||||
|
} else {
|
||||||
|
memset(&peer_info, 0, sizeof(esp_now_peer_info_t));
|
||||||
|
peer_info.channel = (channel = -1) ? this->wifi_channel_ : channel;
|
||||||
|
peer_info.encrypt = false;
|
||||||
|
peer_info.ifidx = WIFI_IF_STA;
|
||||||
|
memcpy((void *) peer_info.peer_addr, (void *) &peer, 6);
|
||||||
|
esp_err_t result = esp_now_add_peer(&peer_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&peer_info, 0, sizeof(esp_now_peer_info_t));
|
|
||||||
peer_info.channel = (channel = -1) ? old_channel : channel;
|
|
||||||
peer_info.encrypt = false;
|
|
||||||
peer_info.ifidx = WIFI_IF_STA;
|
|
||||||
memcpy((void *) peer_info.peer_addr, (void *) &peer, 6);
|
|
||||||
esp_err_t result = esp_now_add_peer(&peer_info);
|
|
||||||
if (result == ESP_OK) {
|
if (result == ESP_OK) {
|
||||||
this->call_on_add_peer_(peer);
|
this->call_on_add_peer_(peer);
|
||||||
}
|
}
|
||||||
@ -535,7 +535,12 @@ void ESPNowComponent::on_data_sent(const uint8_t *mac_addr, esp_now_send_status_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t ESPNowComponent::get_channel_for_(uint64_t peer) { return 0; }
|
uint8_t ESPNowComponent::get_channel_for(uint64_t peer) {
|
||||||
|
esp_now_peer_info_t peer_info = {};
|
||||||
|
esp_now_get_peer((const uint8_t *) &peer, &peer_info);
|
||||||
|
return peer_info.channel;
|
||||||
|
}
|
||||||
|
|
||||||
void ESPNowComponent::update_channel_scan_(ESPNowPacket &packet) {}
|
void ESPNowComponent::update_channel_scan_(ESPNowPacket &packet) {}
|
||||||
|
|
||||||
void ESPNowComponent::start_multi_cast_() {
|
void ESPNowComponent::start_multi_cast_() {
|
||||||
|
@ -275,6 +275,8 @@ class ESPNowComponent : public Component {
|
|||||||
void handle_internal_commands(ESPNowPacket packet);
|
void handle_internal_commands(ESPNowPacket packet);
|
||||||
void handle_internal_sent(ESPNowPacket packet, bool status);
|
void handle_internal_sent(ESPNowPacket packet, bool status);
|
||||||
|
|
||||||
|
uint8_t get_channel_for(uint64_t peer);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool validate_channel_(uint8_t channel);
|
bool validate_channel_(uint8_t channel);
|
||||||
|
|
||||||
@ -300,7 +302,6 @@ class ESPNowComponent : public Component {
|
|||||||
void call_on_add_peer_(uint64_t peer);
|
void call_on_add_peer_(uint64_t peer);
|
||||||
void call_on_del_peer_(uint64_t peer);
|
void call_on_del_peer_(uint64_t peer);
|
||||||
|
|
||||||
uint8_t get_channel_for_(uint64_t peer);
|
|
||||||
void update_channel_scan_(ESPNowPacket &packet);
|
void update_channel_scan_(ESPNowPacket &packet);
|
||||||
void start_multi_cast_();
|
void start_multi_cast_();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user