From 447ef00b8c93ef117733cc4f7d430f3ce4bc86f8 Mon Sep 17 00:00:00 2001 From: LucianoDev Date: Tue, 14 Apr 2026 20:25:52 +0200 Subject: [PATCH] Updated all 700h-712h functionality, added full locking mechanism and byte through 312h, It should be tested in a car... --- Core/CAN_Libs/can_db.c | 20 +++++++-- Core/Immobilisers/ford_immo.c | 6 ++- Core/Kline_Libs/psg_prop.h | 7 ++- Core/Src/fuel_map.c | 82 ++++++++++++++++++++++++++++++++++- Core/Src/timeouts.c | 22 ++++++++-- 5 files changed, 127 insertions(+), 10 deletions(-) diff --git a/Core/CAN_Libs/can_db.c b/Core/CAN_Libs/can_db.c index 147b6b1..675034c 100644 --- a/Core/CAN_Libs/can_db.c +++ b/Core/CAN_Libs/can_db.c @@ -242,6 +242,10 @@ const CanMessageDef MSG_ID_EMPF2 = { .send_on_boot = 0, .rx_handler = NULL }; + + + +#if defined(T06301) const CanMessageDef MSG_ID_EMPF3 = { .can_id = ID_EMPF3, // you set 0x714 @@ -254,9 +258,6 @@ const CanMessageDef MSG_ID_EMPF3 = .send_on_boot = 0, .rx_handler = NULL }; - -#if defined(T06301) - const CanMessageDef MSG_ID_EMPF4 = { .can_id = ID_EMPF4, .dir = CAN_DIR_TX, @@ -268,6 +269,19 @@ const CanMessageDef MSG_ID_EMPF4 = { .send_on_boot = 0, .rx_handler = NULL }; +#else +const CanMessageDef MSG_ID_EMPF3 = +{ + .can_id = ID_EMPF3, // you set 0x714 + .dir = CAN_DIR_TX, + .dlc = 8, + .name = "BOOT_TEMPLATE", + .symbols = NULL, + .symbol_count = 0, + .tx_template = STARTUP_PAYLOAD, + .send_on_boot = 0, + .rx_handler = NULL +}; #endif diff --git a/Core/Immobilisers/ford_immo.c b/Core/Immobilisers/ford_immo.c index 5cad5f4..697dbe0 100644 --- a/Core/Immobilisers/ford_immo.c +++ b/Core/Immobilisers/ford_immo.c @@ -81,7 +81,7 @@ void Fieona_SEND4_Handler( uint16_t FIEONA_TRANS0 = 0x0507; uint16_t FIEONA_TRANS1 = 0x381C; uint16_t FIEONA_TRANS2 = 0xFC1C; -uint16_t FIEONA_TRANS3 = 0x71F5; +uint16_t FIEONA_TRANS3 = 0x375B;//0x71F5 uint8_t eps_fieona_override = 0; @@ -105,6 +105,8 @@ void Fieona_SEND3_Handler(const uint8_t in_data[8]){ }else{ Timeout_StopByIndex(18); } + Timeout_ResetByIndex(1, TIM16->CNT); + }else{ //si no esta bloqueado if(rx_word == 0x0024){ //y es 24 -> envio como desinmovilizando pero sin 2100 FIEONA_TRANS0 = 0x0164; @@ -123,6 +125,8 @@ void Fieona_SEND3_Handler(const uint8_t in_data[8]){ eps_fieona_override = 1; if(!fieona_unlock_end){ //si no habia empezado a desinmovilizar empiezo + Timeout_StartIfStopped(1, TIM16->CNT); + fieona_unlock_end = HAL_GetTick() + FIEONA_UNLOCK_MS; //roll over is 50 days with 32bit hal tick }else{ //si habia empezado, chekiamos si ya acabo. if(HAL_GetTick() > fieona_unlock_end){ diff --git a/Core/Kline_Libs/psg_prop.h b/Core/Kline_Libs/psg_prop.h index d3b8969..0f0c70a 100644 --- a/Core/Kline_Libs/psg_prop.h +++ b/Core/Kline_Libs/psg_prop.h @@ -20,8 +20,9 @@ // ================================================================ /* Part number / ECU identifier — 10 ASCII chars, ROM 0x93BA */ -#define PSG_IDENT_STR "0470004004" +//#define PSG_IDENT_STR "0470504010" //#define PSG_IDENT_STR "0470504009" +#define PSG_IDENT_STR "0470004004" /* Serial number — 6 ASCII chars, EEPROM 0x0080 */ #define PSG_SERIAL_STR "297523" @@ -58,6 +59,10 @@ #define PSG_ANDERUNGSINDEX_STR "000" +//#define PSG_KUNDENNUMMER_STR "39933 " +//#define PSG_KUNDENNUMMER1_STR "39933 " +//#define PSG_KUNDENNUMMER2_STR " " + #define PSG_KUNDENNUMMER_STR "YC1Q9A543EF " #define PSG_KUNDENNUMMER1_STR "YC1Q9A543E" #define PSG_KUNDENNUMMER2_STR "F " diff --git a/Core/Src/fuel_map.c b/Core/Src/fuel_map.c index a44dfd5..247b46a 100644 --- a/Core/Src/fuel_map.c +++ b/Core/Src/fuel_map.c @@ -376,10 +376,11 @@ float BoostMultiplier(uint8_t mode, float RPM, float ME){ } //#define _004006 -#define _004004 +//#define _004004 //#define _004002 //#define _504003 -//#define _504009 +#define _504009 +//#define _504010 #if defined(_004006) struct AlphaStruct fuelmap_m12 = { //probar este mapa @@ -628,6 +629,83 @@ struct fuelMapIndexes fuelMapI = { //probar este mapa { 0.375, 0.500, 1.625, 2.500, 5.000, 10.000, 30.000, 35.000, 40.000, 45.000, 60.000, 72.000}, { -15.5, -5.5 ,6.3, 27.5, 47.8, 75} }; +#elif defined(_504010) +struct AlphaStruct fuelmap_m12 = { //probar este mapa + { + { 7.734, 8.520, 8.777, 8.918, 9.246, 9.621, 10.945, 11.227, 11.496, 11.801, 12.680, 13.500}, //RPM = 99 + { 6.750, 7.559, 7.746, 7.875, 8.250, 8.789, 10.547, 10.770, 10.980, 11.203, 11.988, 12.797}, //RPM = 199 + { 4.863, 5.754, 6.000, 6.223, 6.820, 7.605, 9.680, 10.102, 10.500, 10.945, 12.539, 13.758}, //RPM = 424 + { 4.336, 5.273, 5.520, 5.742, 6.352, 7.137, 9.434, 9.949, 10.465, 10.957, 12.691, 13.793}, //RPM = 499 + { 1.547, 2.684, 3.035, 3.293, 3.891, 4.688, 8.227, 9.117, 10.066, 10.898, 13.535, 14.309}, //RPM = 896 + { 0.773, 1.957, 2.355, 2.613, 3.246, 4.043, 7.934, 8.941, 9.973, 10.840, 13.758, 14.590}, //RPM = 999 + { -1.898, -0.480, -0.047, 0.223, 0.891, 1.992, 6.938, 8.156, 9.363, 10.582, 13.898, 14.602}, //RPM = 1399 + { -2.707, -1.230, -0.750, -0.480, 0.223, 1.441, 6.633, 7.887, 9.152, 10.512, 13.770, 14.484}, //RPM = 1499 + { -6.258, -4.547, -4.230, -3.938, -3.117, -1.430, 4.828, 6.363, 8.063, 10.066, 13.020, 13.324}, //RPM = 1999 + { -7.406, -5.602, -5.273, -5.027, -4.266, -2.543, 3.703, 5.320, 7.289, 9.563, 12.363, 12.492}, //RPM = 2199 + } +}; +struct AlphaStruct fuelmap_m5 = { //probar este mapa + { + { 7.840, 8.625, 8.895, 9.035, 9.352, 9.727, 11.063, 11.379, 11.672, 12.000, 12.879, 13.699}, //RPM = 99 + { 6.855, 7.664, 7.852, 7.992, 8.355, 8.895, 10.664, 10.910, 11.156, 11.402, 12.188, 13.008}, //RPM = 199 + { 4.945, 5.871, 6.105, 6.328, 6.914, 7.699, 9.785, 10.254, 10.688, 11.168, 12.750, 13.992}, //RPM = 425 + { 4.430, 5.367, 5.625, 5.859, 6.457, 7.219, 9.574, 10.102, 10.617, 11.156, 12.902, 14.004}, //RPM = 499 + { 1.594, 2.730, 3.070, 3.328, 3.949, 4.746, 8.367, 9.293, 10.254, 11.121, 13.828, 14.590}, //RPM = 896 + { 0.820, 2.004, 2.402, 2.660, 3.293, 4.113, 8.074, 9.105, 10.160, 11.086, 14.086, 14.906}, //RPM = 999 + { -1.805, -0.387, 0.047, 0.316, 0.984, 2.086, 7.137, 8.391, 9.656, 10.934, 14.309, 15.023}, //RPM = 1399 + { -2.566, -1.102, -0.621, -0.352, 0.340, 1.570, 6.855, 8.168, 9.492, 10.910, 14.238, 14.941}, //RPM = 1499 + { -6.082, -4.371, -4.031, -3.762, -2.941, -1.242, 5.215, 6.832, 8.578, 10.652, 13.676, 14.051}, //RPM = 2001 + { -7.266, -5.438, -5.109, -4.863, -4.102, -2.344, 4.172, 5.813, 7.828, 10.207, 13.137, 13.254}, //RPM = 2199 + } +}; +struct AlphaStruct fuelmap_10 = { //probar este mapa + { + { 7.980, 8.766, 9.035, 9.164, 9.492, 9.867, 11.215, 11.566, 11.895, 12.246, 13.148, 13.969}, //RPM = 99 + { 6.996, 7.805, 7.992, 8.133, 8.484, 9.023, 10.816, 11.109, 11.379, 11.648, 12.445, 13.266}, //RPM = 199 + { 5.086, 5.988, 6.258, 6.457, 7.055, 7.816, 9.938, 10.441, 10.910, 11.379, 12.996, 14.250}, //RPM = 424 + { 4.523, 5.473, 5.719, 5.965, 6.551, 7.313, 9.703, 10.277, 10.828, 11.391, 13.137, 14.285}, //RPM = 499 + { 1.641, 2.777, 3.141, 3.387, 3.984, 4.770, 8.496, 9.445, 10.465, 11.379, 14.145, 14.895}, //RPM = 896 + { 0.879, 2.063, 2.461, 2.719, 3.352, 4.160, 8.238, 9.305, 10.371, 11.379, 14.438, 15.270}, //RPM = 999 + { -1.699, -0.281, 0.152, 0.422, 1.102, 2.203, 7.383, 8.684, 9.984, 11.355, 14.836, 15.539}, //RPM = 1399 + { -2.426, -0.961, -0.480, -0.211, 0.480, 1.711, 7.137, 8.496, 9.879, 11.355, 14.754, 15.469}, //RPM = 1499 + { -5.906, -4.172, -3.844, -3.551, -2.742, -1.031, 5.684, 7.359, 9.164, 11.309, 14.449, 14.754}, //RPM = 1999 + { -7.043, -5.309, -4.922, -4.676, -3.902, -2.133, 4.699, 6.398, 8.461, 10.934, 14.004, 14.121}, //RPM = 2199 + } +}; +struct AlphaStruct fuelmap_25 = { //probar este mapa + { + { 8.098, 8.883, 9.152, 9.293, 9.621, 9.996, 11.355, 11.730, 12.105, 12.469, 13.383, 14.203}, //RPM = 99 + { 7.125, 7.934, 8.109, 8.250, 8.613, 9.152, 10.957, 11.273, 11.578, 11.871, 12.691, 13.512}, //RPM = 199 + { 5.227, 6.117, 6.363, 6.586, 7.172, 7.957, 10.102, 10.594, 11.098, 11.637, 13.254, 14.484}, //RPM = 425 + { 4.652, 5.590, 5.836, 6.059, 6.645, 7.430, 9.891, 10.453, 11.016, 11.625, 13.406, 14.520}, //RPM = 499 + { 1.699, 2.836, 3.176, 3.445, 4.055, 4.863, 8.719, 9.668, 10.676, 11.648, 14.496, 15.270}, //RPM = 896 + { 0.926, 2.109, 2.508, 2.766, 3.398, 4.230, 8.402, 9.492, 10.605, 11.660, 14.813, 15.656}, //RPM = 1000 + { -1.582, -0.164, 0.270, 0.539, 1.207, 2.332, 7.617, 8.977, 10.336, 11.766, 15.328, 16.043}, //RPM = 1399 + { -2.285, -0.832, -0.340, -0.070, 0.621, 1.863, 7.418, 8.883, 10.289, 11.824, 15.305, 15.996}, //RPM = 1499 + { -5.672, -3.961, -3.621, -3.352, -2.555, -0.797, 6.152, 7.816, 9.762, 12.000, 15.246, 15.445}, //RPM = 1997 + { -6.867, -5.051, -4.723, -4.465, -3.703, -1.910, 5.250, 6.996, 9.105, 11.707, 14.895, 15.035}, //RPM = 2199 + } +}; +struct AlphaStruct fuelmap_60 = { //probar este mapa + { + { 8.332, 9.117, 9.387, 9.527, 9.855, 10.219, 11.613, 12.047, 12.469, 12.867, 13.816, 14.637}, //RPM = 99 + { 7.348, 8.156, 8.344, 8.484, 8.848, 9.387, 11.215, 11.590, 11.941, 12.270, 13.125, 13.945}, //RPM = 199 + { 5.449, 6.352, 6.586, 6.809, 7.395, 8.180, 10.359, 10.910, 11.461, 12.023, 13.676, 14.918}, //RPM = 425 + { 4.840, 5.777, 6.023, 6.258, 6.844, 7.641, 10.113, 10.758, 11.379, 12.012, 13.863, 14.965}, //RPM = 499 + { 1.770, 2.918, 3.270, 3.527, 4.137, 4.969, 8.953, 9.984, 11.039, 12.129, 15.082, 15.832}, //RPM = 896 + { 1.031, 2.215, 2.613, 2.871, 3.504, 4.336, 8.695, 9.820, 10.969, 12.164, 15.445, 16.277}, //RPM = 999 + { -1.359, 0.023, 0.457, 0.727, 1.395, 2.531, 8.027, 9.516, 10.910, 12.492, 16.207, 16.910}, //RPM = 1399 + { -2.039, -0.574, -0.105, 0.176, 0.879, 2.121, 7.887, 9.422, 10.957, 12.633, 16.207, 16.934}, //RPM = 1499 + { -5.344, -3.609, -3.270, -3.000, -2.191, -0.410, 6.938, 8.801, 10.758, 13.172, 16.523, 16.828}, //RPM = 1999 + { -6.551, -4.699, -4.406, -4.137, -3.375, -1.512, 6.164, 8.004, 10.184, 12.973, 16.418, 16.535}, //RPM = 2199 + } +}; + +struct fuelMapIndexes fuelMapI = { //probar este mapa + { 100, 200, 425, 500, 900, 1000, 1400, 1500, 2000, 2200}, //N_RPM = 17 + { 0.375, 0.500, 1.625, 2.500, 5.000, 10.000, 30.000, 35.000, 40.000, 45.000, 60.000, 72.000}, + { -5, 10.5 , 27, 45.5, 75.3} +}; #elif defined(_504003) struct AlphaStruct fuelmap_m12 = { //probar este mapa { diff --git a/Core/Src/timeouts.c b/Core/Src/timeouts.c index 99b638e..cdedf88 100644 --- a/Core/Src/timeouts.c +++ b/Core/Src/timeouts.c @@ -24,7 +24,7 @@ static uint16_t last_CAN_msg_1_tick = 0; #endif //#include "sync_pulse.c" -uint32_t BitStatus = 0; +uint32_t BitStatus = 1024; //si es immo de ford tendria que empezar bloqueada.. a saber si ya funciona en el coche con tanta mierda uint32_t HiddenTimers = 0; @@ -231,6 +231,8 @@ void Handle_EMPF3_BootStart_Timeout(void){ Timeout_StopByIndex(21); // got to stop them because overflow } + + uint8_t s_empf4_due = 0; int counter = 0; #if defined(T06301) @@ -244,6 +246,20 @@ void Handle_EMPF4_TimeoutTick(void) } #endif +#if defined(T06301) +static uint16_t last_immo_unlocked_tick = 0; +void Handle_Immo_Timeout(void) +{ + /*//s_empf4_due = 1; + can_port_send_msg_def(&MSG_ID_EMPF4); + uint16_t newtick = last_CAN_msg_empf_4_tick + 500; + Timeout_ResetByIndex(20, newtick); // deberia mejorarlo bastante esto, en vez de + FIEONA_advance();*/ + Timeout_StopByIndex(1); // deberia mejorarlo bastante esto, en vez de + +} +#endif + void Handle_startup_Timeout(void){ startedEngine = 1; Timeout_ResetByIndex(0, TIM16->CNT); // Reset turnoff timeout @@ -305,7 +321,7 @@ void Handle_SV_BIP_OutOfTolerance_Timeout(void) { TimeoutEntry timeout_list[] = { #if defined(T06301) { 0, &last_BITZERO_event_tick, 10, &BitStatus, (1 << 0), 0, Handle_BITZERO_Timeout, 1 }, // 10ms - { 0, &last_NOTIMPLEMENTED_event_tick, 100, &BitStatus, (1 << 11), 0, Handle_NOTIMPLEMENTED_Timeout, 0 }, // 10ms + { 1, &last_immo_unlocked_tick, 10000, &BitStatus, (1 << 10), 0, Handle_Immo_Timeout, 0 }, // 1s { 0, &last_Idle_event_tick, 10, &BitStatus, (1 << 2), 0, Handle_Idle_Timeout, 1 }, // 100ms { 1, &last_ICRPM_event_tick, 1200, &HiddenTimers, (1 << 3), 0, Handle_IcRPM_Timeout, 1 }, // 20 ms //si en 20 no captura, abre can error, si en 500 sigue sin capturar, rpm = 0 @@ -313,7 +329,7 @@ TimeoutEntry timeout_list[] = { { 0, &last_NOTIMPLEMENTED_event_tick, 100, &BitStatus, (1 << 5), 0, Handle_NOTIMPLEMENTED_Timeout, 0 }, // 10ms { 0, &last_NOTIMPLEMENTED_event_tick, 100, &BitStatus, (1 << 6), 0, Handle_NOTIMPLEMENTED_Timeout, 0 }, // 10ms - { 0, &last_NOTIMPLEMENTED_event_tick, 100, &BitStatus, (1 << 7), 0, Handle_NOTIMPLEMENTED_Timeout, 0 }, // 10ms + { 0, &last_NOTIMPLEMENTED_event_tick, 100, &BitStatus, (1 << 7), 0, Handle_NOTIMPLEMENTED_Timeout, 0 }, // 100ms { 0, &last_NOTIMPLEMENTED_event_tick, 100, &BitStatus, (1 << 8), 0, Handle_NOTIMPLEMENTED_Timeout, 0 }, // 10ms { 0, &last_NOTIMPLEMENTED_event_tick, 100, &BitStatus, (1 << 9), 0, Handle_NOTIMPLEMENTED_Timeout, 0 }, // 10ms