#ifndef __PINCFG_H__ #define __PINCFG_H__ typedef enum: uint8_t { PIN_MODE_DIG_IN = 0, PIN_MODE_ANA_IN, PIN_MODE_DIG_OUT, PIN_MODE_ANA_OUT, PIN_MODE_UNUSED = 0xFF } PIN_MODES; typedef enum: uint8_t { PULLUP_OFF, PULLUP_ON } PULLUP_MODES; typedef enum: uint8_t { EDGE_RISING, EDGE_FALLING } EDGE_POLARITY; typedef enum: uint8_t { MIDI_CMD_SNAPSHOT = 0, // call snapshot MIDI_CMD_FADER_ABS, // direct set fader value MIDI_CMD_FADER_REL, // inc/dec fader value MIDI_CMD_MUTE, // direct set mute state MIDI_CMD_MUTE_TOGGLE, // toggle mute state MIDI_CMD_PAN, // direct set panorama MIDI_CMD_NONE = 0xFF // no command assigned } MIDI_CMD_TYPES; struct MidiSelVal { uint8_t chsel; // control element select (channel ID) uint8_t val; // value of control element }; struct MidiFaderRel { uint8_t chsel; // fader chan ID int8_t step; // step size (neg:downward, pos:upward) uint8_t min; // lowest fader value uint8_t max; // highest fader value }; struct MidiMute { uint8_t chsel; // mute chan ID uint8_t edgecfg; // -1: }; union MidiCmdCfg { uint8_t Snapshot; MidiSelVal FaderAbs; MidiSelVal Mute; MidiSelVal Pan; MidiFaderRel FaderRel; MidiMuteToggle MuteToggle; }; struct PinCfg { uint8_t PinSel; PIN_MODES Mode; union { struct { PULLUP_MODES Pullup; MIDI_CMD_TYPES MidiCmd; } CfgDigIn; struct { uint8_t todo; } CfgAnaIn; struct { uint8_t todo; } CfgDigOut; struct { uint8_t todo; } CfgAnaOut; }; }; #endif