17 .
name =
"Shifter Analog" ,
18 .id=CLSID_BTN_SHIFTER,
133 *buf |= 1 << (
gear - 1 + numUserButtons);
140 constexpr int numSequentialButtons{2};
141 constexpr int numHPatternButtons{7};
145 return numSequentialButtons;
147 return numHPatternButtons;
225 replies.emplace_back((uint8_t)this->
mode);
256 replies.emplace_back(
gear);
281 return buttonStates & 0x02;
285 return buttonStates >> 4;
static uint8_t getAdcResolutionBits(ADC_HandleTypeDef *hadc)
void registerCommand(const char *cmd, const ID cmdid, const char *help=nullptr, uint32_t flags=0)
static CommandStatus handleGetSet(const ParsedCommand &cmd, std::vector< CommandReply > &replies, TVal &value)
std::vector< OutputPin > & getFreeCsPins()
void receive_DMA(uint8_t *buf, uint16_t size, SPIDevice *device)
OutputPin * getCsPin(uint16_t idx)
CommandStatus command(const ParsedCommand &cmd, std::vector< CommandReply > &replies) override
const std::array< std::string, number_of_modes > mode_names
std::unique_ptr< G27ShifterButtonClient > g27ShifterButtonClient
static ClassIdentifier info
int getUserButtons(uint64_t *buf)
void updateReverseState()
void saveFlash() override
static constexpr std::array< bool, number_of_modes > mode_uses_local_reverse
void restoreFlash() override
void setCSPin(uint8_t new_cs_pin_num)
static bool isG27Mode(ShifterMode m)
const ClassIdentifier getInfo()
uint8_t readButtons(uint64_t *buf) override
void setMode(ShifterMode newMode)
static constexpr std::array< bool, number_of_modes > mode_uses_spi
uint16_t pack(uint8_t hb, uint8_t lb)
TVal Flash_ReadDefault(uint16_t adr, TVal def)
std::tuple< uint8_t, uint8_t > unpack(uint16_t v)
bool Flash_Write(uint16_t adr, uint16_t dat)
volatile uint32_t * getAnalogBuffer(ADC_HandleTypeDef *hadc, uint8_t *chans)
SPI_InitTypeDef peripheral