wideband on second can (#5108)

This commit is contained in:
Matthew Kennedy 2023-02-20 08:29:25 -08:00 committed by GitHub
parent fa9fe1754b
commit 12c899ddca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 26 additions and 11 deletions

View File

@ -39,7 +39,7 @@ static CanTsListener listener;
int CanStreamerState::sendFrame(const IsoTpFrameHeader & header, const uint8_t *data, int num, can_sysinterval_t timeout) {
int dlc = 8; // standard 8 bytes
CanTxMessage txmsg(CanCategory::SERIAL, CAN_ECU_SERIAL_TX_ID, dlc, false);
CanTxMessage txmsg(CanCategory::SERIAL, CAN_ECU_SERIAL_TX_ID, dlc, 0, false);
// fill the frame data according to the CAN-TP protocol (ISO 15765-2)
txmsg[0] = (uint8_t)((header.frameType & 0xf) << 4);

View File

@ -25,7 +25,13 @@ bool waitAck() {
return chEvtWaitAnyTimeout(EVT_BOOTLOADER_ACK, TIME_MS2I(1000)) != 0;
}
static size_t getWidebandBus() {
return engineConfiguration->widebandOnSecondBus ? 1 : 0;
}
void updateWidebandFirmware() {
size_t bus = getWidebandBus();
// Clear any pending acks for this thread
chEvtGetAndClearEvents(EVT_BOOTLOADER_ACK);
@ -43,7 +49,7 @@ void updateWidebandFirmware() {
for (int i = 0; i < 2; i++) {
{
// Send bootloader entry command
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF0'0000, 0, true);
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF0'0000, 0, bus, true);
}
if (!waitAck()) {
@ -59,7 +65,7 @@ void updateWidebandFirmware() {
{
// Erase flash - opcode 1, magic value 0x5A5A
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF1'5A5A, 0, true);
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF1'5A5A, 0, bus, true);
}
if (!waitAck()) {
@ -74,7 +80,7 @@ void updateWidebandFirmware() {
// Send flash data 8 bytes at a time
for (size_t i = 0; i < totalSize; i += 8) {
{
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF2'0000 + i, 8, true);
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF2'0000 + i, 8, bus, true);
memcpy(&m[0], build_wideband_image_bin + i, 8);
}
@ -88,7 +94,7 @@ void updateWidebandFirmware() {
{
// Reboot to firmware!
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF3'0000, 0, true);
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF3'0000, 0, bus, true);
}
waitAck();
@ -109,7 +115,7 @@ void setWidebandOffset(uint8_t index) {
efiPrintf("Setting all connected widebands to index %d...", index);
{
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF4'0000, 1, true);
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF4'0000, 1, getWidebandBus(), true);
m[0] = index;
}
@ -121,7 +127,7 @@ void setWidebandOffset(uint8_t index) {
}
void sendWidebandInfo() {
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF5'0000, 2, true);
CanTxMessage m(CanCategory::WBO_SERVICE, 0xEF5'0000, 2, getWidebandBus(), true);
float vbatt = Sensor::getOrZero(SensorType::BatteryVoltage) * 10;

View File

@ -174,7 +174,7 @@ static int lua_txCan(lua_State* l) {
}
// conform ext parameter to true/false
CanTxMessage msg(CanCategory::LUA, id, 8, ext == 0 ? false : true);
CanTxMessage msg(CanCategory::LUA, id, 8, 0, ext == 0 ? false : true);
msg.busIndex = bus;
// Unfortunately there is no way to inspect the length of a table,

View File

@ -22,7 +22,7 @@
}
#endif // EFI_CAN_SUPPORT
CanTxMessage::CanTxMessage(CanCategory category, uint32_t eid, uint8_t dlc, bool isExtended) {
CanTxMessage::CanTxMessage(CanCategory category, uint32_t eid, uint8_t dlc, size_t bus, bool isExtended) {
this->category = category;
#if HAL_USE_CAN || EFI_UNIT_TEST
#ifndef STM32H7XX
@ -43,6 +43,8 @@ CanTxMessage::CanTxMessage(CanCategory category, uint32_t eid, uint8_t dlc, bool
setDlc(dlc);
setBus(0);
memset(m_frame.data8, 0, sizeof(m_frame.data8));
#endif // HAL_USE_CAN || EFI_UNIT_TEST
}
@ -92,6 +94,10 @@ void CanTxMessage::setDlc(uint8_t dlc) {
m_frame.DLC = dlc;
}
void CanTxMessage::setBus(size_t bus) {
busIndex = bus;
}
void CanTxMessage::setShortValue(uint16_t value, size_t offset) {
m_frame.data8[offset] = value & 0xFF;
m_frame.data8[offset + 1] = value >> 8;

View File

@ -29,7 +29,7 @@ public:
/**
* Create a new CAN message, with the specified extended ID.
*/
explicit CanTxMessage(CanCategory category, uint32_t eid, uint8_t dlc = 8, bool isExtended = false);
explicit CanTxMessage(CanCategory category, uint32_t eid, uint8_t dlc = 8, size_t bus = 0, bool isExtended = false);
/**
* Destruction of an instance of CanTxMessage will transmit the message over the wire.
@ -64,6 +64,8 @@ public:
void setDlc(uint8_t dlc);
void setBus(size_t bus);
#if HAL_USE_CAN || EFI_UNIT_TEST
const CANTxFrame *getFrame() const {
return &m_frame;

View File

@ -1014,7 +1014,7 @@ end_struct
uint16_t tps2SecondaryMin;;"ADC", 1, 0, 0, 1000, 0
uint16_t tps2SecondaryMax;;"ADC", 1, 0, 0, 1000, 0
bit unusedBitDisablePrimaryUart
bit widebandOnSecondBus,"2","1";Select which bus the wideband controller is attached to.
bit fuelClosedLoopCorrectionEnabled;Enables lambda sensor closed loop feedback for fuelling.
bit isVerboseIAC;Print details into rusEFI console\nenable verbose_idle
bit boardUseTachPullUp,"12v","5v"

View File

@ -4109,6 +4109,7 @@ dialog = tcuControls, "Transmission Settings"
field = "!Disconnect all controllers you don't want to set!"
commandButton = "Set Index 0", cmd_set_wideband_idx_0
commandButton = "Set Index 1", cmd_set_wideband_idx_1
field = "Wideband CAN bus", widebandOnSecondBus
field = "Force O2 sensor heating", forceO2Heating
dialog = engineTypeDialog, "Popular vehicles"