11#ifndef MAINMODULEV1_0_H
12#define MAINMODULEV1_0_H
18#include "ESP32PWMCore.h"
21#include "ESP32_UART.h"
22#include "UARTInterface.h"
24#include "driver/adc.h"
25#include "soc/adc_channel.h"
26#include "esp_adc_cal.h"
27#include "Adafruit_MCP23X17.h"
30#include "ESP32_I2CCore.h"
35 static const String HW_TYPE;
36 String
getHWType()
const override {
return HW_TYPE; }
37 static const String HW_VERSION;
39 static const String FW_VERSION;
41 static constexpr uint8_t GPIO_DEMAND = 0;
43 static constexpr uint8_t GPIO_SUPPLY = 25;
53 Adafruit_MCP23X17 shiftRegister;
55 static const uint8_t SR_PIN_0 = 0;
56 static const uint8_t SR_PIN_1 = 1;
57 static const uint8_t SR_PIN_2 = 2;
58 static const uint8_t SR_PIN_3 = 3;
59 static const uint8_t SR_PIN_4 = 4;
60 static const uint8_t SR_PIN_5 = 5;
61 static const uint8_t SR_PIN_6 = 6;
62 static const uint8_t SR_PIN_7 = 7;
63 static const uint8_t SR_PIN_8 = 8;
64 static const uint8_t SR_PIN_9 = 9;
65 static const uint8_t SR_PIN_10 = 10;
66 static const uint8_t SR_PIN_11 = 11;
67 static const uint8_t SR_PIN_12 = 12;
68 static const uint8_t SR_PIN_13 = 13;
69 static const uint8_t SR_PIN_14 = 14;
70 static const uint8_t SR_PIN_15 = 15;
102static const uint8_t TEMP_PIN = GPIO_NUM_35;
103static const adc1_channel_t TEMP_ADC_CHANNEL = ADC1_GPIO35_CHANNEL;
104static constexpr uint16_t TEMP_RES_1 = 6200;
105#ifdef MAINMODULE_TEMPERATURE_PROTOTYPE_BOARD
106#warning "Using temperature prototype board settings. This will result in wrong temperatures if you are using the mainmodule board."
107#warning "Make sure to clear the buildflag MAINMODULE_TEMPERATURE_PROTOTYPE_BOARD buildflag for production builds."
108static constexpr uint16_t TEMP_RES_2 = 12000;
110static constexpr uint16_t TEMP_RES_2 = 6200;
112static constexpr float TEMP_FAKTOR = float(TEMP_RES_2)/float(TEMP_RES_1 + TEMP_RES_2);
113static constexpr float TEMP_SUPPLY_VOLTAGE = 5000.0;
114static constexpr uint8_t TEMP_MULTISAMPLE = 16;
115static constexpr uint16_t ADC_MAX_VOLTAGE = 2450;
116esp_adc_cal_characteristics_t adc1_chars;
117static constexpr uint16_t ADC_DEFAULT_VREF = 1100;
122ESP32_CANCore canCore;
123static const uint8_t CAN_TX = GPIO_NUM_17;
124static const uint8_t CAN_RX = GPIO_NUM_16;
125CANInterface canInterface;
128static const uint8_t SPI_COPI = GPIO_NUM_21;
129static const uint8_t SPI_CIPO = GPIO_NUM_18;
130static const uint8_t SPI_SCK = GPIO_NUM_22;
133static const uint8_t I2C_SDA = GPIO_NUM_13;
134static const uint8_t I2C_SCL = GPIO_NUM_14;
137static const uint8_t UART_TX = GPIO_NUM_19;
138static const uint8_t UART_RX = GPIO_NUM_23;
141static const uint8_t INT_PIN = GPIO_NUM_34;
144static const uint8_t GENERAL_EN = SR_PIN_8;
147static const uint8_t LED_WARNING = SR_PIN_0;
148static const uint8_t LED_ERROR = SR_PIN_1;
151 bool reset()
override;
152 bool attachModule(uint8_t slot,uint8_t gpioStart)
override;
167 void cycle(uint8_t* response)
override;
176 static constexpr size_t INTERFACE_COUNT = 1;
182 static constexpr uint8_t UART_NUM = UART_NUM_1;
183 static constexpr uint16_t UART_BUFFER_SIZE = 1024;
187 bool startShiftRegister();
188 bool resetShiftRegister();
190 enum ShiftRegistertStatus{
196 static constexpr uint8_t SHIFTREGISTER_I2C_ADDRESS = 0b100111;
197 static constexpr uint32_t SHIFTREGISTER_I2C_FREQUENCY = 400000;
198 ShiftRegistertStatus _shiftregisterStatus = NOT_STARTED;
Declaration of the CANInterface class.
This class serves as the core manager for the CANTram modular system. It handles module attachment,...
Base class for CANTram hardware modules.
Logging and debug macro definitions for CANTramCore.
Declaration of the ESP32_CANCore class.
Base class for hardware resources.
Definitions for GPIO/output descriptors and provider interfaces.
Abstract PWM core interface for CANTram.
CANTramModule()=default
Default constructor.
Definition ESP32_I2CCore.h:13
Definition ESP32_UART.h:11
Definition ESP32PWMCore.h:8
bool requestGPIOs() override
Request GPIOs from the core.
Definition MainModuleV1_0.cpp:75
bool initialize() override
Initialize the module and its hardware subsystems.
Definition MainModuleV1_0.cpp:176
bool registerPWMChannel(OutputDefinition *def) override
Register a PWM channel for an output.
Definition MainModuleV1_0.cpp:392
void enableOutputs(bool state) override
Enable or disable all outputs managed by this provider.
Definition MainModuleV1_0_outputs.cpp:242
bool reset() override
Reset the module and its hardware cores.
Definition MainModuleV1_0.cpp:23
bool preInitialize() override
Pre-initialize the module after attachment.
Definition MainModuleV1_0.cpp:128
void cycle(uint8_t *response) override
Periodic cycle callback for the module.
Definition MainModuleV1_0.cpp:351
bool requestHardwareResources() override
Request hardware resources from the core.
Definition MainModuleV1_0.cpp:102
uint8_t getGPIODemand() const override
Get the GPIO demand of the module.
Definition MainModuleV1_0.h:42
bool attachModule(uint8_t slot, uint8_t gpioStart) override
Attach this module to a slot and GPIO start index.
Definition MainModuleV1_0.cpp:44
size_t getInterfaceCount() override
Get number of interfaces provided by the module.
Definition MainModuleV1_0.h:170
uint8_t getGPIOSupply() const override
Get the GPIO supply capacity of the module.
Definition MainModuleV1_0.h:44
bool addInterfaces() override
Register any interfaces provided by this module.
Definition MainModuleV1_0.cpp:113
bool getOutput(OutputDefinition *def) override
Get the current state of a digital output.
Definition MainModuleV1_0_outputs.cpp:147
bool provideGPIOs() override
Provide GPIO output definitions to CANTramCore.
Definition MainModuleV1_0.cpp:56
String getFWVersion() const override
Get the firmware version string.
Definition MainModuleV1_0.h:40
bool configureOutput(OutputDefinition *def, OutputDefinition::ConfigurationMode mode) override
Configure an output's direction/mode.
Definition MainModuleV1_0_outputs.cpp:44
uint16_t getTemperatureCelsius()
Get the temperature in Celsius in 0.1°C steps.
Definition MainModuleV1_0.cpp:410
String getHWVersion() const override
Get the hardware version string.
Definition MainModuleV1_0.h:38
bool provideHardwareResources() override
Provide hardware resources (UART, PWM, etc.) to CANTramCore.
Definition MainModuleV1_0.cpp:84
bool setPWM(OutputDefinition *def, uint16_t value) override
Set PWM duty for an output definition.
Definition MainModuleV1_0.cpp:370
String getHWType() const override
Get the hardware type string.
Definition MainModuleV1_0.h:36
Interface ** getInterfaces() override
Get pointer to module's interface array.
Definition MainModuleV1_0.h:169
bool setOutput(OutputDefinition *def, bool state) override
Set the logic level on a pin of the module.
Definition MainModuleV1_0_outputs.cpp:97
MainModuleV1_0()
Construct a new MainModuleV1_0::MainModuleV1_0 object.
Definition MainModuleV1_0_outputs.cpp:28
virtual UARTCore * getUartCore() override
Obtain a pointer to an available UARTCore.
Definition MainModuleV1_0.h:201
Describes an available output (GPIO or shift register bit).
Definition OutputDefinition.h:24
Extended output provider interface for PWM-capable outputs.
Definition OutputDefinition.h:148
Base class for platform-specific UART implementations.
Definition UARTCore.h:22
Abstract interface for objects that supply a UARTCore instance.
Definition UARTCore.h:175