Speeduino
Loading...
Searching...
No Matches
Macros | Functions | Variables
decoders.cpp File Reference
#include <limits.h>
#include "globals.h"
#include "decoders.h"
#include "elapsed_time.h"
#include "scheduler.h"
#include "crankMaths.h"
#include "timers.h"
#include "unit_testing.h"
#include "atomic.h"
#include "decoder_init.h"
#include "decoder_builder.h"
#include "scheduledIO_ign.h"
#include "src/pins/boardInputPin.h"
#include "scheduler_ignition_controller.h"
#include "src/decoders/shared/crank_angle_calculator.h"
#include "src/decoders/shared/decoder_state.h"
#include "src/decoders/shared/perToothIgnition.h"
#include "src/decoders/shared/rev_time_calcs.h"
#include "src/decoders/missingTooth.h"
#include "src/decoders/dualWheel.h"
#include "src/decoders/basicDistributor.h"

Macros

#define TOOTH_CRANK   0
 
#define TOOTH_CAM_SECONDARY   1
 
#define TOOTH_CAM_TERTIARY   2
 
#define ID_TOOTH_PATTERN   0
 
#define SKIP_TOOTH1   1
 
#define SKIP_TOOTH2   2
 
#define SKIP_TOOTH3   3
 
#define SKIP_TOOTH4   4
 
#define secondaryToothLastCount   _decoderState.checkSyncToothCount
 
#define renixSystemLastToothTime   _decoderState.toothLastToothRisingTime
 
#define renixSystemLastMinusOneToothTime   _decoderState.toothLastSecToothRisingTime
 

Functions

static void addToothLogEntry (unsigned long toothTime, byte whichTooth)
 
void loggerPrimaryISR (void)
 
void loggerSecondaryISR (void)
 
void loggerTertiaryISR (void)
 
static decoder_status_t sharedGetStatus (void) noexcept
 
static bool sharedEngineIsRunning (uint32_t curTime)
 
static decoder_features_t sharedGetDecoderFeatures (void)
 
static void sharedDecoderReset (void)
 
static uint8_t getConfigPriTriggerEdge (const config4 &page4)
 
static uint8_t getConfigSecTriggerEdge (const config4 &page4)
 
static uint8_t getConfigTerTriggerEdge (const config10 &page10)
 
static void triggerPri_missingTooth (void)
 
static void triggerSec_missingTooth (void)
 
static void triggerThird_missingTooth (void)
 
static uint32_t getRevolutionTime_missingTooth (void)
 
static int16_t getCrankAngle_missingTooth (uint32_t currMicros)
 
static void triggerSetEndTeeth_missingTooth (void)
 
decoder_t triggerSetup_missingTooth (void)
 Setup function for each decoder type.
 
static void triggerPri_DualWheel (void)
 
static void triggerSec_DualWheel (void)
 
static uint32_t getRevolutionTime_DualWheel (void)
 
static int16_t getCrankAngle_DualWheel (uint32_t currMicros)
 
static void triggerSetEndTeeth_DualWheel (void)
 
decoder_t triggerSetup_DualWheel (void)
 
decoder_t triggerSetup_BasicDistributor (void)
 
static void triggerPri_GM7X (void)
 
static uint32_t getRevolutionTime_GM7X (void)
 
static int16_t getCrankAngle_GM7X (uint32_t currMicros)
 
static void triggerSetEndTeeth_GM7X (void)
 
decoder_t triggerSetup_GM7X (void)
 
static void triggerPri_4G63 (void)
 
static void triggerSec_4G63 (void)
 
static uint32_t getRevolutionTime_4G63 (void)
 
static int16_t getCrankAngle_4G63 (uint32_t currMicros)
 
static void triggerSetEndTeeth_4G63 (void)
 
decoder_t triggerSetup_4G63 (void)
 
static void triggerPri_24X (void)
 
static void triggerSec_24X (void)
 
static uint32_t getRevolutionTime_24X (void)
 
static int16_t getCrankAngle_24X (uint32_t currMicros)
 
decoder_t triggerSetup_24X (void)
 
static void triggerPri_Jeep2000 (void)
 
static void triggerSec_Jeep2000 (void)
 
static uint32_t getRevolutionTime_Jeep2000 (void)
 
static int16_t getCrankAngle_Jeep2000 (uint32_t currMicros)
 
decoder_t triggerSetup_Jeep2000 (void)
 
static void triggerPri_Audi135 (void)
 
static void triggerSec_Audi135 (void)
 
static uint32_t getRevolutionTime_Audi135 (void)
 
static int16_t getCrankAngle_Audi135 (uint32_t currMicros)
 
decoder_t triggerSetup_Audi135 (void)
 
static void triggerPri_HondaD17 (void)
 
static uint32_t getRevolutionTime_HondaD17 (void)
 
static int16_t getCrankAngle_HondaD17 (uint32_t currMicros)
 
decoder_t triggerSetup_HondaD17 (void)
 
static void triggerPri_HondaJ32 (void)
 
static uint32_t getRevolutionTime_HondaJ32 (void)
 
static int16_t getCrankAngle_HondaJ32 (uint32_t currMicros)
 
decoder_t triggerSetup_HondaJ32 (void)
 
static void triggerPri_Miata9905 (void)
 
static void triggerSec_Miata9905 (void)
 
static uint32_t getRevolutionTime_Miata9905 (void)
 
static int16_t getCrankAngle_Miata9905 (uint32_t currMicros)
 
int getCamAngle_Miata9905 (void)
 
static void triggerSetEndTeeth_Miata9905 (void)
 
decoder_t triggerSetup_Miata9905 (void)
 
static void triggerPri_MazdaAU (void)
 
static void triggerSec_MazdaAU (void)
 
static uint32_t getRevolutionTime_MazdaAU (void)
 
static int16_t getCrankAngle_MazdaAU (uint32_t currMicros)
 
decoder_t triggerSetup_MazdaAU (void)
 
static uint32_t getRevolutionTime_non360 (void)
 
static int16_t getCrankAngle_non360 (uint32_t currMicros)
 
decoder_t triggerSetup_non360 (void)
 
static void triggerPri_Nissan360 (void)
 
static void triggerSec_Nissan360 (void)
 
static uint32_t getRevolutionTime_Nissan360 (void)
 
static int16_t getCrankAngle_Nissan360 (uint32_t currMicros)
 
static uint16_t calcEndTooth_Nissan360 (const IgnitionSchedule &schedule)
 
void triggerSetEndTeeth_Nissan360 (void)
 
decoder_t triggerSetup_Nissan360 (void)
 
static void triggerPri_Subaru67 (void)
 
static void triggerSec_Subaru67 (void)
 
static uint32_t getRevolutionTime_Subaru67 (void)
 
static int16_t getCrankAngle_Subaru67 (uint32_t currMicros)
 
static void triggerSetEndTeeth_Subaru67 (void)
 
decoder_t triggerSetup_Subaru67 (void)
 
static void triggerPri_Daihatsu (void)
 
static uint32_t getRevolutionTime_Daihatsu (void)
 
static int16_t getCrankAngle_Daihatsu (uint32_t currMicros)
 
decoder_t triggerSetup_Daihatsu (void)
 
static void triggerPri_Harley (void)
 
static uint32_t getRevolutionTime_Harley (void)
 
static int16_t getCrankAngle_Harley (uint32_t currMicros)
 
decoder_t triggerSetup_Harley (void)
 
static void triggerPri_ThirtySixMinus222 (void)
 
static uint32_t getRevolutionTime_ThirtySixMinus222 (void)
 
static void triggerSetEndTeeth_ThirtySixMinus222 (void)
 
decoder_t triggerSetup_ThirtySixMinus222 (void)
 
static void triggerPri_ThirtySixMinus21 (void)
 
static uint32_t getRevolutionTime_ThirtySixMinus21 (void)
 
static void triggerSetEndTeeth_ThirtySixMinus21 (void)
 
decoder_t triggerSetup_ThirtySixMinus21 (void)
 
static void triggerPri_420a (void)
 
static void triggerSec_420a (void)
 
static uint32_t getRevolutionTime_420a (void)
 
static int16_t getCrankAngle_420a (uint32_t currMicros)
 
static void triggerSetEndTeeth_420a (void)
 
decoder_t triggerSetup_420a (void)
 
static void triggerPri_Webber (void)
 
static void triggerSec_Webber (void)
 
decoder_t triggerSetup_Webber (void)
 
static void triggerSec_FordST170 (void)
 
static uint32_t getRevolutionTime_FordST170 (void)
 
static int16_t getCrankAngle_FordST170 (uint32_t currMicros)
 
static uint16_t calcSetEndTeeth_FordST170 (const IgnitionSchedule &schedule, uint8_t toothAdder)
 
static void triggerSetEndTeeth_FordST170 (void)
 
decoder_t triggerSetup_FordST170 (void)
 
static void triggerSec_DRZ400 (void)
 
decoder_t triggerSetup_DRZ400 (void)
 
static void triggerPri_NGC (void)
 
static void triggerSec_NGC4 (void)
 
static void triggerSec_NGC68 (void)
 
static uint32_t getRevolutionTime_NGC (void)
 
static uint16_t calcSetEndTeeth_NGC_SkipMissing (uint16_t toothNum)
 
static uint16_t calcSetEndTeeth_NGC (IgnitionSchedule &schedule, uint8_t toothAdder)
 
static void triggerSetEndTeeth_NGC (void)
 
decoder_t triggerSetup_NGC (void)
 
static void triggerPri_Vmax (void)
 
static uint32_t getRevolutionTime_Vmax (void)
 
static int16_t getCrankAngle_Vmax (uint32_t currMicros)
 
decoder_t triggerSetup_Vmax (void)
 
static void triggerPri_Renix (void)
 
static uint16_t calcEndTeeth_Renix (const IgnitionSchedule &schedule, uint8_t toothAdder)
 
static void triggerSetEndTeeth_Renix (void)
 
decoder_t triggerSetup_Renix (void)
 
static void triggerRoverMEMSCommon (uint32_t curTime)
 
static void triggerPri_RoverMEMS (void)
 
static void triggerSec_RoverMEMS (void)
 
static uint32_t getRevolutionTime_RoverMEMS (void)
 
static int16_t calcEndTooth_RoverMEMS (const IgnitionSchedule &schedule, uint8_t toothAdder)
 
static void triggerSetEndTeeth_RoverMEMS (void)
 
decoder_t triggerSetup_RoverMEMS (void)
 
static void triggerPri_SuzukiK6A (void)
 
static uint32_t getRevolutionTime_SuzukiK6A (void)
 
static int16_t getCrankAngle_SuzukiK6A (uint32_t currMicros)
 
static uint16_t calcEndTeeth_SuzukiK6A (const IgnitionSchedule &schedule)
 
static void triggerSetEndTeeth_SuzukiK6A (void)
 
decoder_t triggerSetup_SuzukiK6A (void)
 
static void triggerPri_FordTFI (void)
 
static void triggerSec_FordTFI (void)
 
static uint32_t getRevolutionTime_FordTFI (void)
 
static int16_t getCrankAngle_FordTFI (uint32_t currMicros)
 
static void triggerSetEndTeeth_FordTFI (void)
 
decoder_t triggerSetup_FordTFI (void)
 

Variables

TESTABLE_STATIC state_t _decoderState
 
constexpr uint8_t COMPOSITE_LOG_PRI = 0
 
constexpr uint8_t COMPOSITE_LOG_SEC = 1
 
constexpr uint8_t COMPOSITE_LOG_THIRD = 2
 
constexpr uint8_t COMPOSITE_LOG_TRIG = 3
 
constexpr uint8_t COMPOSITE_LOG_SYNC = 4
 
constexpr uint8_t COMPOSITE_ENGINE_CYCLE = 5
 
volatile unsigned long roverMEMSTeethSeen = 0
 

Detailed Description

Crank and Cam decoders

This file contains the various crank and cam wheel decoder functions. Each decoder must have the following 4 functions (Where xxxx is the decoder name):

Each decoder must utilise at least the following variables:

Macro Definition Documentation

◆ ID_TOOTH_PATTERN

#define ID_TOOTH_PATTERN   0

◆ SKIP_TOOTH1

#define SKIP_TOOTH1   1

◆ SKIP_TOOTH2

#define SKIP_TOOTH2   2

◆ SKIP_TOOTH3

#define SKIP_TOOTH3   3

◆ SKIP_TOOTH4

#define SKIP_TOOTH4   4

◆ TOOTH_CAM_SECONDARY

#define TOOTH_CAM_SECONDARY   1

◆ TOOTH_CAM_TERTIARY

#define TOOTH_CAM_TERTIARY   2

◆ TOOTH_CRANK

#define TOOTH_CRANK   0

Function Documentation

◆ getCrankAngle_DualWheel()

static int16_t getCrankAngle_DualWheel ( uint32_t  currMicros)
static

◆ getCrankAngle_missingTooth()

static int16_t getCrankAngle_missingTooth ( uint32_t  currMicros)
static

◆ getRevolutionTime_DualWheel()

static uint32_t getRevolutionTime_DualWheel ( void  )
static

◆ getRevolutionTime_missingTooth()

static uint32_t getRevolutionTime_missingTooth ( void  )
static

◆ triggerPri_DualWheel()

static void triggerPri_DualWheel ( void  )
static

◆ triggerPri_missingTooth()

static void triggerPri_missingTooth ( void  )
static

◆ triggerSec_DRZ400()

static void triggerSec_DRZ400 ( void  )
static

◆ triggerSec_DualWheel()

static void triggerSec_DualWheel ( void  )
static

◆ triggerSec_missingTooth()

static void triggerSec_missingTooth ( void  )
static

◆ triggerSetEndTeeth_DualWheel()

static void triggerSetEndTeeth_DualWheel ( void  )
static

◆ triggerSetEndTeeth_missingTooth()

static void triggerSetEndTeeth_missingTooth ( void  )
static

◆ triggerSetup_DRZ400()

decoder_t triggerSetup_DRZ400 ( void  )

◆ triggerSetup_DualWheel()

decoder_t triggerSetup_DualWheel ( void  )

◆ triggerSetup_missingTooth()

decoder_t triggerSetup_missingTooth ( void  )

Setup function for each decoder type.

◆ triggerThird_missingTooth()

static void triggerThird_missingTooth ( void  )
static

Variable Documentation

◆ _decoderState

TESTABLE_STATIC state_t _decoderState

◆ COMPOSITE_ENGINE_CYCLE

constexpr uint8_t COMPOSITE_ENGINE_CYCLE = 5
constexpr

◆ COMPOSITE_LOG_PRI

constexpr uint8_t COMPOSITE_LOG_PRI = 0
constexpr

◆ COMPOSITE_LOG_SEC

constexpr uint8_t COMPOSITE_LOG_SEC = 1
constexpr

◆ COMPOSITE_LOG_SYNC

constexpr uint8_t COMPOSITE_LOG_SYNC = 4
constexpr

◆ COMPOSITE_LOG_THIRD

constexpr uint8_t COMPOSITE_LOG_THIRD = 2
constexpr

◆ COMPOSITE_LOG_TRIG

constexpr uint8_t COMPOSITE_LOG_TRIG = 3
constexpr