1
0
mirror of https://github.com/esphome/esphome.git synced 2025-03-16 15:48:16 +00:00

working version for simple triggers

This commit is contained in:
mvturnho 2019-08-07 21:27:44 +02:00
parent d2c812cdaa
commit 52e6b8d4f2
2 changed files with 17 additions and 12 deletions

View File

@ -20,11 +20,11 @@ void Canbus::send_data(uint32_t can_id, const std::vector<uint8_t> data) {
struct can_frame can_message; struct can_frame can_message;
uint8_t size = static_cast<uint8_t>(data.size()); uint8_t size = static_cast<uint8_t>(data.size());
ESP_LOGD(TAG, "size=%d", size); ESP_LOGD(TAG, "canid=%d size=%d", can_id, size);
if (size > CAN_MAX_DLC) if (size > CAN_MAX_DLC)
size = CAN_MAX_DLC; size = CAN_MAX_DLC;
can_message.can_dlc = size; can_message.can_dlc = size;
can_message.can_id = this->sender_id_; can_message.can_id = can_id;
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
can_message.data[i] = data[i]; can_message.data[i] = data[i];
@ -34,17 +34,22 @@ void Canbus::send_data(uint32_t can_id, const std::vector<uint8_t> data) {
this->send_message_(&can_message); this->send_message_(&can_message);
} }
void Canbus::add_trigger(CanbusTrigger *trigger) {
ESP_LOGD(TAG, "add trigger for canid:%d", trigger->can_id_);
this->triggers_.push_back(trigger);
};
void Canbus::loop() { void Canbus::loop() {
struct can_frame can_message; struct can_frame can_message;
//readmessage // readmessage
if( this->read_message_(&can_message) == canbus::ERROR_OK ) { if (this->read_message_(&can_message) == canbus::ERROR_OK) {
ESP_LOGD(TAG,"received can message can_id=%04x length=%d",can_message.can_id, can_message.can_dlc); ESP_LOGD(TAG, "received can message can_id=%d length=%d", can_message.can_id, can_message.can_dlc);
//show data received // show data received
for(int i = 0; i< can_message.can_dlc;i++) for (int i = 0; i < can_message.can_dlc; i++)
ESP_LOGD(TAG,"data[%d]=%02x",i, can_message.data[i]); ESP_LOGD(TAG, "data[%d]=%02x", i, can_message.data[i]);
//fire all triggers // fire all triggers
for(auto trigger: this->triggers_){ for (auto trigger : this->triggers_) {
if(trigger->can_id_ == can_message.can_id) { if (trigger->can_id_ == can_message.can_id) {
trigger->trigger(); trigger->trigger();
} }
} }

View File

@ -68,7 +68,7 @@ class Canbus : public Component {
void set_sender_id(int sender_id) { this->sender_id_ = sender_id; } void set_sender_id(int sender_id) { this->sender_id_ = sender_id; }
void set_bitrate(CAN_SPEED bit_rate) { this->bit_rate_ = bit_rate; } void set_bitrate(CAN_SPEED bit_rate) { this->bit_rate_ = bit_rate; }
void add_trigger(CanbusTrigger *trigger) {this->triggers_.push_back(trigger);}; void add_trigger(CanbusTrigger *trigger);
protected: protected:
std::vector<CanbusTrigger *> triggers_{}; std::vector<CanbusTrigger *> triggers_{};