CAN and CAN FD transmit implemented

This commit is contained in:
Paul Hollinsky
2018-10-18 17:39:37 -04:00
parent dd99f82324
commit d037709963
8 changed files with 213 additions and 82 deletions
+19 -7
View File
@@ -191,6 +191,22 @@ bool Device::goOffline() {
return true;
}
bool Device::transmit(std::shared_ptr<Message> message) {
std::vector<uint8_t> packet;
if(!com->encoder->encode(packet, message))
return false;
return com->sendPacket(packet);
}
bool Device::transmit(std::vector<std::shared_ptr<Message>> messages) {
for(auto& message : messages) {
if(!transmit(message))
return false;
}
return true;
}
void Device::handleInternalMessage(std::shared_ptr<Message> message) {
switch(message->network.getNetID()) {
case Network::NetID::Reset_Status:
@@ -202,17 +218,13 @@ void Device::handleInternalMessage(std::shared_ptr<Message> message) {
}
void Device::updateLEDState() {
auto msg = std::make_shared<Message>();
msg->network = Network::NetID::Device;
/* NetID::Device is a super old command type.
* It has a leading 0x00 byte, a byte for command, and a byte for an argument.
* In this case, command 0x06 is SetLEDState.
* This old command type is not really used anywhere else.
*/
auto msg = std::make_shared<Message>();
msg->network = Network::NetID::Device;
msg->data = {0x00, 0x06, uint8_t(ledState)};
std::vector<uint8_t> packet;
if(!com->encoder->encode(packet, msg))
return;
com->sendPacket(packet);
transmit(msg);
}
+3
View File
@@ -55,6 +55,9 @@ public:
enforcePollingMessageLimit();
}
bool transmit(std::shared_ptr<Message> message);
bool transmit(std::vector<std::shared_ptr<Message>> messages);
void handleInternalMessage(std::shared_ptr<Message> message);
std::unique_ptr<IDeviceSettings> settings;