@@ -0,0 +1,338 @@
from schemata.ansible.ansible_preset_schema import AnsiblePresetSchema
from schemata.ansible.v161 import PresetSchema_v161


class PresetSchema_v161_dev(PresetSchema_v161):
def cdef(self):
return r'''
typedef uint8_t u8;
typedef uint16_t u16;
typedef int8_t s8;
typedef int16_t s16;
typedef enum {
conNONE,
conARC,
conGRID,
conMIDI,
conFLASH
} connected_t;
connected_t connected;
typedef enum {
mArcLevels,
mArcCycles,
mGridKria,
mGridMP,
mMidiStandard,
mMidiArp,
mTT
} ansible_mode_t;
typedef enum {
krDirForward = 0,
krDirReverse = 1,
krDirTriangle = 2,
krDirDrunk = 3,
krDirRandom = 4,
} kria_direction;
# define GRID_PRESETS 8
# define KRIA_NUM_TRACKS 4
# define KRIA_NUM_PARAMS 7
# define KRIA_NUM_PATTERNS 16
typedef struct {
u8 tr[16];
u8 oct[16];
u8 note[16];
u8 dur[16];
u8 rpt[16];
// u8 rptBits[16];
u8 alt_note[16];
u8 glide[16];
u8 p[KRIA_NUM_PARAMS][16];
kria_direction direction;
u8 advancing[KRIA_NUM_PARAMS];
// u8 octshift;
// u8 ptr[16];
// u8 poct[16];
// u8 pnote[16];
// u8 pdur[16];
u8 dur_mul;
u8 lstart[KRIA_NUM_PARAMS];
u8 lend[KRIA_NUM_PARAMS];
u8 llen[KRIA_NUM_PARAMS];
u8 lswap[KRIA_NUM_PARAMS];
u8 tmul[KRIA_NUM_PARAMS];
bool tt_clocked;
} kria_track;
typedef struct {
kria_track t[4];
u8 scale;
} kria_pattern;
typedef struct {
kria_pattern p[KRIA_NUM_PATTERNS];
uint8_t pattern;
uint8_t meta_pat[64];
uint8_t meta_steps[64];
uint8_t meta_start;
uint8_t meta_end;
uint8_t meta_len;
uint8_t meta_lswap;
uint8_t glyph[8];
} kria_data_t;
typedef struct {
uint32_t clock_period;
uint8_t preset;
bool note_sync;
uint8_t loop_sync;
uint8_t cue_div;
uint8_t cue_steps;
uint8_t meta;
kria_data_t k[GRID_PRESETS];
} kria_state_t;
typedef struct {
// s8 position[8]; // current position in cycle
// u8 tick[8]; // position in speed countdown
// u8 pushed[8]; // manual key reset
u8 count[8]; // length of cycle
s8 speed[8]; // speed of cycle
u8 min[8];
u8 max[8];
u8 trigger[8];
u8 toggle[8];
u8 rules[8];
u8 rule_dests[8];
u8 sync[8]; // if true, reset dest rule to count
u8 rule_dest_targets[8];
u8 smin[8];
u8 smax[8];
u8 scale;
u8 glyph[8];
} mp_data_t;
typedef struct {
uint8_t preset;
uint8_t sound;
uint8_t voice_mode;
mp_data_t m[GRID_PRESETS];
} mp_state_t;
# define ARC_NUM_PRESETS 8
typedef struct {
uint16_t pattern[4][16];
uint8_t note[4][16];
bool mode[4];
bool all[4];
uint8_t now;
uint8_t start;
int8_t len;
uint8_t dir;
uint8_t scale[4];
uint8_t octave[4];
uint16_t offset[4];
uint16_t range[4];
uint16_t slew[4];
} levels_data_t;
typedef struct {
// uint32_t clock_period;
uint8_t preset;
levels_data_t l[ARC_NUM_PRESETS];
} levels_state_t;
typedef struct {
uint16_t pos[4];
int16_t speed[4];
int8_t mult[4];
uint8_t range[4];
uint8_t mode;
uint8_t shape;
uint8_t friction;
uint16_t force;
uint8_t div[4];
} cycles_data_t;
typedef struct {
// uint32_t clock_period;
uint8_t preset;
cycles_data_t c[ARC_NUM_PRESETS];
} cycles_state_t;
typedef enum {
eVoicePoly = 0,
eVoiceMono,
eVoiceMulti,
eVoiceFixed,
eVoiceMAX
} voicing_mode;
// note, cc mappings for fixed voice mode
typedef struct {
u8 notes[4];
u8 cc[4];
} fixed_mapping_t;
// standard mode values saved to nvram
typedef struct {
uint32_t clock_period;
u8 voicing;
fixed_mapping_t fixed;
s16 shift; // tuning/dac offset
s16 slew; // pitch cv slew (ms)
} midi_standard_state_t;
typedef struct {
u8 fill;
u8 division;
s8 rotation;
u8 gate;
u8 steps;
u8 offset;
s16 slew;
s16 shift;
} midi_arp_player_state_t;
// arp mode value saved to nvram
typedef struct {
uint32_t clock_period;
u8 style; // NB: not using arp_style as type because enums have vairable size
bool hold; // if true new notes add to chord if at least one note in chord is still held
midi_arp_player_state_t p[4];
} midi_arp_state_t;
typedef struct {
uint32_t clock_period;
uint16_t tr_time[4];
uint16_t cv_slew[4];
} tt_state_t;
typedef struct {
connected_t connected;
ansible_mode_t arc_mode;
ansible_mode_t grid_mode;
ansible_mode_t midi_mode;
ansible_mode_t none_mode;
uint8_t i2c_addr;
} ansible_state_t;
// NVRAM data structure located in the flash array.
typedef const struct {
uint8_t fresh;
ansible_state_t state;
kria_state_t kria_state;
mp_state_t mp_state;
levels_state_t levels_state;
cycles_state_t cycles_state;
midi_standard_state_t midi_standard_state;
midi_arp_state_t midi_arp_state;
tt_state_t tt_state;
uint8_t scale[16][8];
} nvram_data_t;
'''

def extract_kria_state(self, state):
return self.combine(
self.scalar_settings(state, [
'clock_period',
'preset:curr_preset',
'note_sync',
'loop_sync',
'cue_div',
'cue_steps',
'meta',
]),
self.array_settings(state, [
(
'k:presets',
lambda preset: self.combine(
self.array_settings(preset, [
(
'p:patterns',
lambda pattern: self.combine(
self.array_settings(pattern, [
(
't:tracks',
lambda track: self.combine(
self.array_1d_settings(track, [
'tr',
'oct',
'note',
'dur',
'rpt',
# 'rptBits',
'alt_note',
'glide',
]),
self.array_2d_settings(track, [
'p'
]),
self.scalar_settings(track, [
'direction',
]),
self.array_1d_settings(track, [
'advancing',
]),
self.scalar_settings(track, [
# 'octshift',
'dur_mul'
]),
self.array_1d_settings(track, [
'lstart',
'lend',
'llen',
'lswap',
'tmul',
]),
),
),
]),
self.scalar_settings(pattern, ['scale']),
),
),
]),
self.scalar_settings(preset, [
'pattern:curr_pattern',
]),
self.array_1d_settings(preset, [
'meta_pat',
'meta_steps',
]),
self.scalar_settings(preset, [
'meta_start',
'meta_end',
'meta_len',
'meta_lswap',
]),
self.array_1d_settings(preset, [
'glyph',
]),
),
),
]),
)