Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions firmware/controllers/algo/rusefi_enums.h
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,7 @@ typedef enum __attribute__ ((__packed__)) {
CAN_BUS_GENESIS_COUPE = 10,
CAN_BUS_HONDA_K = 11,
CAN_AIM_DASH = 12,
CAN_BUS_MINI_R52 = 13,

} can_nbc_e;

Expand Down
51 changes: 48 additions & 3 deletions firmware/controllers/can/can_dash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include "can_msg_tx.h"
#include "can_bmw.h"
#include "can_vag.h"
#include "can_mini.h"

#include "rusefi_types.h"
#include "rtc_helper.h"
Expand All @@ -27,15 +28,15 @@
#define CAN_MAZDA_RX_STATUS_2 0x420

//w202 DASH
#define W202_STAT_1 0x308 /* _20ms cycle */
#define W202_STAT_1 0x308 /* _20ms cycle */
#define W202_STAT_2 0x608 /* _100ms cycle */
#define W202_ALIVE 0x210 /* _200ms cycle */
#define W202_ALIVE 0x210 /* _200ms cycle */
#define W202_STAT_3 0x310 /* _200ms cycle */

//BMW E90 DASH
#define E90_ABS_COUNTER 0x0C0
#define E90_SEATBELT_COUNTER 0x0D7
#define E90_T15 0x130
#define E90_T15 0x130
#define E90_RPM 0x175
#define E90_BRAKE_COUNTER 0x19E
#define E90_SPEED 0x1A6
Expand Down Expand Up @@ -129,6 +130,7 @@ void canDashboardNissanVQ(CanCycle cycle);
void canDashboardGenesisCoupe(CanCycle cycle);
void canDashboardAim(CanCycle cycle);
void canDashboardHaltech(CanCycle cycle);
void canDashboardMini(CanCycle cycle);

void updateDash(CanCycle cycle) {

Expand Down Expand Up @@ -169,6 +171,9 @@ void updateDash(CanCycle cycle) {
case CAN_AIM_DASH:
canDashboardAim(cycle);
break;
case CAN_BUS_MINI_R52:
canDashboardMini(cycle);
break;
default:
firmwareError(ObdCode::OBD_PCM_Processor_Fault, "Nothing for canNbcType %s", getCan_nbc_e(engineConfiguration->canNbcType));
break;
Expand Down Expand Up @@ -1316,4 +1321,44 @@ void canDashboardAim(CanCycle cycle) {
// transmitStruct<Aim5fd>(0x5fd, false);
}

void canDashboardMini(CanCycle cycle) {
if (cycle.isInterval(CI::_50ms)) {
int rpm = Sensor::getOrZero(SensorType::Rpm);

{ // block scope to invoke CanTxMessage deconstructor (send)
CanTxMessage msg1(CAN_MINI_DME1_ID, 8);
uint16_t scaledRpm = rpm * 6.4f;
msg1[3] = scaledRpm >> 8;
msg1[4] = scaledRpm && 0xff;
}

{ // block scope to invoke CanTxMessage deconstructor (send)
CanTxMessage msg2(CAN_MINI_IC_4_ID, 8);
// 25% LCD brightness
msg2[1] = 0x3f;
// enable LCD backlight, needle, lights (byte 2, bit 4)
msg2.setBit(2, 1);
// enable orange 6k LED bar
msg2.setBit(4, 4);

if (rpm >= 5500) {
// enable red "5.5-6k" LED bars
msg2.setBit(4, 2);

if (rpm >= 6000) {
// enable red "6k" LED
msg2.setBit(4, 3);
// enable red "6-7k" LED bars
msg2.setBit(4, 5);
}

if (rpm >= 7000) {
// enable red "7-8k" LED bars
msg2.setBit(4, 6);
}
}
}
}
}

#endif // EFI_CAN_SUPPORT
35 changes: 35 additions & 0 deletions firmware/controllers/can/can_mini.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
/**
* BMC Mini R52 (e.g.) CAN dash implementation.
*
* @date 2024-05-16
* @author Nathan Schulte, (c) 2024
*/

#pragma once

// CAN frame IDs; BMW terms
//#define CAN_MINI_ASC1_ID 0x153
#define CAN_MINI_DME1_ID 0x316
//#define CAN_MINI_DME2_ID 0x329
// DME4: CEL, cruise light, EML, fuel consumption, oil temp+overheat
//#define CAN_MINI_DME4_ID 0x545
// Instrument Cluster,_1: A/C status
//#define CAN_MINI_IC_1_ID 0x615
// Instrument Cluster, 2: odometer, fuel level, clock (since battery)
//#define CAN_MINI_IC_2_ID 0x613
// Instrument Cluster, 3: trip, temp, speed, consumption, range
#define CAN_MINI_IC_3_ID 0x61a
// Instrument Cluster, 4: lights: RPM, high beams, cruise, service engine soon, brake, ABS, turn signals
#define CAN_MINI_IC_4_ID 0x61f

// R52 tach has sent back frames like:
// can0 630 [8] 02 00 00 00 00 00 00 00
// can0 630 [8] 02 50 00 00 00 00 00 00
// can0 630 [8] 02 54 00 00 00 00 00 00
// can0 630 [8] 02 70 00 00 00 00 00 00
// can0 630 [8] 02 74 00 00 00 00 00 00
// can0 630 [8] 02 7C 00 00 00 00 00 00

// 0x316 -- needs at least every 500ms
// 0x61a -- needs at least every 1000ms?
// 0x61f -- needs at least every 1000ms?
2 changes: 1 addition & 1 deletion firmware/integration/rusefi_config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,7 @@ uint16_t engineSnifferRpmThreshold;Engine sniffer would be disabled above this r
custom ignition_mode_e 1 bits, U08, @OFFSET@, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors"
ignition_mode_e ignitionMode;Single coil = distributor\nIndividual coils = one coil per cylinder (COP, coil-near-plug), requires sequential mode\nWasted spark = Fires pairs of cylinders together, either one coil per pair of cylinders or one coil per cylinder\nTwo distributors = A pair of distributors, found on some BMW, Toyota and other engines

custom can_nbc_e 1 bits, U08, @OFFSET@, [0:4], "None", "FIAT", "VAG", "MAZDA RX8", "BMW", "W202", "BMW E90", "Haltech", "VAG MQB", "Nissan VQ35", "Genesis Coupe", "Honda K", "AiM", "type 13", "type 14"
custom can_nbc_e 1 bits, U08, @OFFSET@, [0:4], "None", "FIAT", "VAG", "MAZDA RX8", "BMW", "W202", "BMW E90", "Haltech", "VAG MQB", "Nissan VQ35", "Genesis Coupe", "Honda K", "AiM", "MINI R52", "type 14"
can_nbc_e canNbcType

struct injector_s
Expand Down