Skip to content
Open
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
46 changes: 27 additions & 19 deletions Firmware/FFBoard/UserExtensions/Inc/SPIButtons.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ struct ButtonSourceConfig{
class SPI_Buttons: public ButtonSource,public CommandHandler,public SPIDevice {

enum class SPIButtons_commands : uint32_t {
mode,btncut,btnpol,btnnum,cs,spispeed
mode,btncut,btnpol,btnnum,cs,spispeed,debug,syncread
};

public:
Expand All @@ -45,13 +45,14 @@ class SPI_Buttons: public ButtonSource,public CommandHandler,public SPIDevice {
virtual ~SPI_Buttons();

uint8_t readButtons(uint64_t* buf);
uint16_t getBtnNum() override; // Override to return conf.numButtons

CommandStatus command(const ParsedCommand& cmd,std::vector<CommandReply>& replies) override;
void registerCommands();
virtual std::string getHelpstring(){return "SPI 2 Button";}

void saveFlash();
void restoreFlash();
virtual void restoreFlash();

const uint8_t maxButtons = 64;
std::string printModes(const std::vector<std::string>& names);
Expand All @@ -63,32 +64,29 @@ class SPI_Buttons: public ButtonSource,public CommandHandler,public SPIDevice {
void setSpiSpeed(uint8_t speedPreset);

protected:
SPI_Buttons(uint16_t configuration_address, uint16_t configuration_address_2);

private:
SPI_Buttons(uint16_t configuration_address, uint16_t configuration_address_2, SPIPort* spiPort = &external_spi, uint8_t instance = 0);
uint16_t configuration_address;
uint16_t configuration_address_2;
bool ready = false;
void setConfig(ButtonSourceConfig config);
virtual ButtonSourceConfig* getConfig();
void process(uint64_t* buf);
uint8_t bytes = 4;

private:
bool ready = false;
uint64_t mask = 0xff;
uint8_t offset = 0;

ButtonSourceConfig conf;
static constexpr std::array<uint32_t,3> speedPresets= {SPI_BAUDRATEPRESCALER_16,SPI_BAUDRATEPRESCALER_32,SPI_BAUDRATEPRESCALER_64};

protected:
void process(uint64_t* buf);
uint8_t bytes = 4;
uint8_t spi_buf[4] = {0};

static constexpr std::array<uint32_t,3> speedPresets= {SPI_BAUDRATEPRESCALER_16,SPI_BAUDRATEPRESCALER_32,SPI_BAUDRATEPRESCALER_64};
ButtonSourceConfig conf;
};

class SPI_Buttons_1 : public SPI_Buttons {
public:
SPI_Buttons_1()
: SPI_Buttons{ADR_SPI_BTN_1_CONF, ADR_SPI_BTN_1_CONF_2} {
setInstance(0);
}
SPI_Buttons_1();

const ClassIdentifier getInfo() override;
static ClassIdentifier info;
Expand All @@ -98,14 +96,24 @@ class SPI_Buttons_1 : public SPI_Buttons {

class SPI_Buttons_2 : public SPI_Buttons {
public:
SPI_Buttons_2()
: SPI_Buttons{ADR_SPI_BTN_2_CONF, ADR_SPI_BTN_2_CONF_2} {
setInstance(1);
}
SPI_Buttons_2();

const ClassIdentifier getInfo() override;
static ClassIdentifier info;
static bool isCreatable();
};

class SPI_Buttons_3 : public SPI_Buttons {
public:
SPI_Buttons_3();

const ClassIdentifier getInfo() override;
static ClassIdentifier info;
static bool isCreatable();

void restoreFlash() override; // Override to set default values
uint8_t readButtons(uint64_t* buf) override; // Override to use synchronous read for SPI3
std::string getHelpstring() override {return "SPI 3 Button (SPI3)";}
};

#endif /* SPIBUTTONS_H_ */
7 changes: 5 additions & 2 deletions Firmware/FFBoard/UserExtensions/Inc/ShifterAnalog.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,14 @@ enum class ShifterAnalog_commands : uint32_t{
G27ShifterButtonClient(OutputPin& csPin);

static constexpr int numUserButtons{12};
static constexpr int bytesToRead{2}; // 16 buttons = 2 bytes (same as SPI Buttons with 16 buttons)

uint16_t getUserButtons();
bool getReverseButton();
private:
uint16_t buttonStates{0};
void startRead(); // Start a new DMA read (like SPI_Buttons does)
void spiRxCompleted(SPIPort* port) override; // Called when DMA completes

uint8_t spi_buf[2]{0}; // Buffer for SPI read (2 bytes for 16 buttons) - DMA writes directly here

};

Expand Down
48 changes: 25 additions & 23 deletions Firmware/FFBoard/UserExtensions/Inc/eeprom_addresses.h
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
/*
* eeprom_addresses.h
*
* Created on: 24.01.2020
* Author: Yannick
*
* /!\ Generated from the file memory_map.csv
/ ! \ DO NOT EDIT THIS DIRECTLY !!!
*/
/*
* eeprom_addresses.h
*
* Created on: 24.01.2020
* Author: Yannick
*
* /!\ Generated from the file memory_map.csv
/ ! \ DO NOT EDIT THIS DIRECTLY !!!
*/

#ifndef EEPROM_ADDRESSES_H_
#define EEPROM_ADDRESSES_H_

Expand All @@ -21,19 +21,19 @@ extern const uint16_t VirtAddVarTab[NB_OF_VAR];
extern const uint16_t exportableFlashAddresses[NB_EXPORTABLE_ADR];


/* Add your addresses here. 0xffff is invalid as it marks an erased field.
Anything below 0x00ff is reserved for system variables.
Use ranges that are clear to distinguish between configurations. Address ranges can have gaps.
Label the names clearly.
Example: 0x0100 - 0x01ff for one class and 0x0200-0x02ff for another class would be reasonable even if they each need only 3 variables
Important: Add your variable to the VirtAddVarTab[NB_OF_VAR] array in eeprom_addresses.c!
Tip to check if a cell is intialized:
uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data) will return 1 if the address is not found or 0 if it was found.

/* Add your addresses here. 0xffff is invalid as it marks an erased field.
Anything below 0x00ff is reserved for system variables.

Use ranges that are clear to distinguish between configurations. Address ranges can have gaps.
Label the names clearly.
Example: 0x0100 - 0x01ff for one class and 0x0200-0x02ff for another class would be reasonable even if they each need only 3 variables


Important: Add your variable to the VirtAddVarTab[NB_OF_VAR] array in eeprom_addresses.c!

Tip to check if a cell is intialized:
uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data) will return 1 if the address is not found or 0 if it was found.
*/
// System variables
#define ADR_HW_VERSION 1
Expand All @@ -58,6 +58,8 @@ uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data) will return 1 if
#define ADR_SPI_BTN_2_CONF 0x205
#define ADR_SPI_BTN_1_CONF_2 0x206
#define ADR_SPI_BTN_2_CONF_2 0x207
#define ADR_SPI_BTN_3_CONF 0x209
#define ADR_SPI_BTN_3_CONF_2 0x20A
#define ADR_LOCAL_BTN_CONF_3 0x208 // Pulse mask
// Local encoder
#define ADR_ENCLOCAL_CPR 0x210
Expand Down
3 changes: 3 additions & 0 deletions Firmware/FFBoard/UserExtensions/Src/ButtonSources.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ const std::vector<class_entry<ButtonSource>> ButtonSource::all_buttonsources =
#ifdef SPIBUTTONS2
add_class<SPI_Buttons_2,ButtonSource>(2),
#endif
#ifdef SPIBUTTONS3
add_class<SPI_Buttons_3,ButtonSource>(6),
#endif
#ifdef SHIFTERBUTTONS
add_class<ShifterAnalog,ButtonSource>(3),
#endif
Expand Down
Loading