@@ -153,6 +153,25 @@ json_docdef_t ansible_shared_docdefs[] = {
})
})
},
{
.name = "tuning_table",
.read = json_read_array,
.write = json_write_array,
.state = &ansible_json_read_array_state,
.params = &((json_read_array_params_t) {
.array_len = sizeof_field(nvram_data_t, tuning_table) / sizeof_field(nvram_data_t, tuning_table[0]),
.item_size = sizeof_field(nvram_data_t, tuning_table[0]),
.item_docdef = &((json_docdef_t) {
.read = json_read_buffer,
.write = json_write_buffer,
.state = &ansible_json_read_buffer_state,
.params = &((json_read_buffer_params_t) {
.dst_size = sizeof_field(nvram_data_t, tuning_table[0]),
.dst_offset = offsetof(nvram_data_t, tuning_table),
}),
})
})
},
};

/////////
@@ -46,6 +46,7 @@ usb flash
#include "init_common.h"
#include "monome.h"
#include "midi.h"
#include "music.h"
#include "notes.h"
#include "timers.h"
#include "util.h"
@@ -120,6 +121,8 @@ softTimer_t auxTimer[4] = {
{ .next = NULL, .prev = NULL }
};

uint16_t tuning_table[4][120];

static uint8_t clock_phase;

void handler_None(s32 data) { ;; }
@@ -445,6 +448,37 @@ void flash_read(void) {
// ...
}

////////////////////////////////////////////////////////////////////////////////
// tuning

void default_tuning(void) {
for (uint8_t i = 0; i < 4; i++) {
flashc_memcpy((void *)&f.tuning_table[i], ET, sizeof(ET), true);
}
}

void init_tuning(void) {
for (uint8_t i = 0; i < 4; i++) {
memcpy((void*)&tuning_table[i], &f.tuning_table[i], 120);
}
/* memcpy((void *)&tuning_table, &f.tuning_table, sizeof(tuning_table)); */
}

void fit_tuning(void) {
for (uint8_t i = 0; i < 4; i++) {
float step = 0.0;
for (uint8_t j = 0; j < 10; j++) {
float acc = tuning_table[i][j*12];
if (j < 9) {
step = (tuning_table[i][(j+1)*12] - tuning_table[i][j*12]) / 12.0;
}
for (uint8_t k = j*12; k < (j+1)*12; k++) {
tuning_table[i][k] = acc;
acc += step;
}
}
}
}

////////////////////////////////////////////////////////////////////////////////
// functions
@@ -489,6 +523,7 @@ void clock_set_tr(uint32_t n, uint8_t phase) {
///////
// global ii handlers
void load_flash_state(void) {
init_tuning();
init_levels();
init_cycles();
init_kria();
@@ -587,6 +622,7 @@ int main(void)
flashc_memset32((void*)&(f.state.midi_mode), mMidiStandard, 4, true);
flashc_memset8((void*)&(f.state.i2c_addr), 0xA0, 1, true);
flashc_memset8((void*)&(f.state.grid_varibrightness), 16, 1, true);
default_tuning();
default_kria();
default_mp();
default_es();
@@ -60,15 +60,20 @@ typedef const struct {
midi_arp_state_t midi_arp_state;
tt_state_t tt_state;
uint8_t scale[16][8];
uint8_t tuning_table[4][120];
} nvram_data_t;

extern nvram_data_t f;
extern ansible_mode_t ansible_mode;

extern softTimer_t auxTimer[4];
extern uint16_t tuning_table[4][120];


void (*clock)(u8 phase);
void init_tuning(void);
void default_tuning(void);
void fit_tuning(void);

extern void handler_None(s32 data);
extern void clock_null(u8 phase);