FIO_status calibration_save(const char* path, calibrationType* cal){ FIL fff; // File handler FIO_status res = FIO_OK; int i; if (SDFS_open(&fff, path, F_WR_CLEAR) != SDFS_OK) { return FIO_FILE_CREATE_ERROR; } json_write_string(0, "{", &fff); json_write_string(1, "\"" ATTR_CAL_SLIDERS "\":{", &fff); for (i = 0; i < SLIDERS_AMOUNT; i++) { json_write_object(2, slider_names[i], &fff); json_write_number(3, ATTR_CAL_S_MIN, cal->calibr[i].min_in_value, 1, &fff); json_write_number(3, ATTR_CAL_S_MAX, cal->calibr[i].max_in_value, 1, &fff); json_write_number(3, ATTR_CAL_S_DELTA, cal->calibr[i].delta, 1, &fff); json_write_number(3, ATTR_CAL_S_DEAD, cal->calibr[i].dead, 1, &fff); json_write_number(3, ATTR_CAL_S_GAP, cal->calibr[i].gap, 0, &fff); if (i < SLIDERS_AMOUNT-1){ json_write_string(2, "},", &fff); }else{ json_write_string(2, "}", &fff); } } json_write_string(1, "}", &fff); json_write_string(0, "}", &fff); cal->Crc = getCRC(cal, sizeof(calibrationType)); if (SDFS_close(&fff)!= SDFS_OK) return FIO_FILE_CLOSE_ERROR; return res; }
static void json_write( muse_port_t p, muse_cell thing ) { muse_env *env = p->env; if ( thing == MUSE_NIL ) muse_pwrite( p, _csymbol(L"null") ); else { switch ( _cellt(thing) ) { case MUSE_INT_CELL: case MUSE_FLOAT_CELL: json_write_number( p, thing ); break; case MUSE_TEXT_CELL: json_write_string( p, thing ); break; case MUSE_NATIVEFN_CELL: { if ( muse_functional_object_data( env, thing, 'vect' ) ) { json_write_vector( p, thing ); } else if ( muse_functional_object_data( env, thing, 'hash' ) ) { json_write_hash( p, thing ); } else if ( muse_functional_object_data( env, thing, 'mobj' ) ) { json_write_object( p, thing ); } else { muse_raise_error( env, _csymbol(L"json:invalid-json-type"), thing ); } break; } case MUSE_SYMBOL_CELL: { const muse_char *symname = muse_symbol_name( p->env, thing ); if ( wcscmp( symname, L"true" ) || wcscmp( symname, L"false" ) ) { muse_pwrite( p, thing ); } else { muse_raise_error( env, _csymbol(L"json:invalid-keyword"), thing ); } break; } } } }
FIO_status preset_save(const char* path, presetType* pr){ FIL fff; // File handler FIO_status res = FIO_OK; int i; if (SDFS_open(&fff, path, F_WR_CLEAR) != SDFS_OK) { return FIO_FILE_CREATE_ERROR; } json_write_string(0, "{", &fff); json_write_number(1, ATTR_CHANNEL, pr->MidiChannel, 1, &fff); json_write_string(1, "\"" ATTR_SPLIT "\":{", &fff); json_write_number(2, ATTR_SPLIT_ACTIVE, pr->SplitActive, 1, &fff); json_write_number(2, ATTR_SPLIT_KEY, pr->SplitKey, 1, &fff); json_write_number(2, ATTR_SPLIT_CHANNEL, pr->SplitChannel, 1, &fff); json_write_number(2, ATTR_SPLIT_OCTAVE, pr->SplitOctShift, 0, &fff); json_write_string(1, "},", &fff); json_write_number(1, ATTR_HIRES, pr->HighResEnable, 1, &fff); json_write_number(1, ATTR_ANALOGMIDI, pr->AnalogMidiEnable, 1, &fff); json_write_number(1, ATTR_SLOWKEYSOUND, pr->SlowKeySound, 1, &fff); json_write_number(1, ATTR_NOTEOFFDELAY1, pr->NoteOffDelay1, 1, &fff); json_write_number(1, ATTR_NOTEOFFDELAY127, pr->NoteOffDelay127, 1, &fff); json_write_number(1, ATTR_TRANSPOSE, pr->Transpose, 1, &fff); json_write_number(1, ATTR_OCTAVE, pr->OctaveShift, 1, &fff); json_write_string(1, "\"" ATTR_CURVE "\":{", &fff); json_write_number(2, ATTR_CURVE_XW1, pr->Curve.xw1, 1, &fff); json_write_number(2, ATTR_CURVE_YW1, pr->Curve.yw1, 1, &fff); json_write_number(2, ATTR_CURVE_XW2, pr->Curve.xw2, 1, &fff); json_write_number(2, ATTR_CURVE_YW2, pr->Curve.yw2, 1, &fff); json_write_number(2, ATTR_CURVE_XW3, pr->Curve.xw3, 1, &fff); json_write_number(2, ATTR_CURVE_YW3, pr->Curve.yw3, 1, &fff); json_write_number(2, ATTR_CURVE_XB1, pr->Curve.xb1, 1, &fff); json_write_number(2, ATTR_CURVE_YB1, pr->Curve.yb1, 1, &fff); json_write_number(2, ATTR_CURVE_XB2, pr->Curve.xb2, 1, &fff); json_write_number(2, ATTR_CURVE_YB2, pr->Curve.yb2, 1, &fff); json_write_number(2, ATTR_CURVE_XB3, pr->Curve.xb3, 1, &fff); json_write_number(2, ATTR_CURVE_YB3, pr->Curve.yb3, 0, &fff); json_write_string(1, "},", &fff); json_write_object(1, slider_names[SLIDER_PITCH], &fff); json_write_number(2, ATTR_S_ACTIVE, pr->sliders[SLIDER_PITCH].active, 1, &fff); json_write_number(2, ATTR_S_CHANNEL, pr->sliders[SLIDER_PITCH].channel, 0, &fff); json_write_string(1, "},", &fff); json_write_object(1, slider_names[SLIDER_AT], &fff); json_write_number(2, ATTR_S_ACTIVE, pr->sliders[SLIDER_AT].active, 1, &fff); json_write_number(2, ATTR_S_CHANNEL, pr->sliders[SLIDER_AT].channel, 1, &fff); json_write_number(2, ATTR_S_MIN, pr->sliders[SLIDER_AT].min_out_value, 1, &fff); json_write_number(2, ATTR_S_MAX, pr->sliders[SLIDER_AT].max_out_value, 0, &fff); json_write_string(1, "},", &fff); json_write_object(1, slider_names[SLIDER_MOD], &fff); json_write_number(2, ATTR_S_ACTIVE, pr->sliders[SLIDER_MOD].active, 1, &fff); json_write_number(2, ATTR_S_REVERSE, pr->sliders[SLIDER_MOD].reverse, 1, &fff); json_write_number(2, ATTR_S_CHANNEL, pr->sliders[SLIDER_MOD].channel, 1, &fff); json_write_number(2, ATTR_S_EVENT, pr->sliders[SLIDER_MOD].event, 1, &fff); json_write_number(2, ATTR_S_MIN, pr->sliders[SLIDER_MOD].min_out_value, 1, &fff); json_write_number(2, ATTR_S_MAX, pr->sliders[SLIDER_MOD].max_out_value, 0, &fff); json_write_string(1, "},", &fff); json_write_string(1, "\"" ATTR_PEDALS "\":{", &fff); for (i = 0; i < PEDALS_N; i++) { json_write_object(2, slider_names[pedalsN[i]], &fff); json_write_number(3, ATTR_S_ACTIVE, pr->sliders[pedalsN[i]].active, 1, &fff); json_write_number(3, ATTR_S_REVERSE, pr->sliders[pedalsN[i]].reverse, 1, &fff); json_write_number(3, ATTR_S_BINARY, pr->sliders[pedalsN[i]].binary, 1, &fff); json_write_number(3, ATTR_S_CHANNEL, pr->sliders[pedalsN[i]].channel, 1, &fff); json_write_number(3, ATTR_S_EVENT, pr->sliders[pedalsN[i]].event, 1, &fff); json_write_number(3, ATTR_S_MIN, pr->sliders[pedalsN[i]].min_out_value, 1, &fff); json_write_number(3, ATTR_S_MAX, pr->sliders[pedalsN[i]].max_out_value, 0, &fff); if (i<PEDALS_N-1){ json_write_string(2, "},", &fff); }else{ json_write_string(2, "}", &fff); } } json_write_string(1, "},", &fff); json_write_string(1, "\"" ATTR_SLIDERS "\":{", &fff); for (i = 0; i < SLIDERS_N; i++) { json_write_object(2, slider_names[slidersN[i]], &fff); json_write_number(3, ATTR_S_ACTIVE, pr->sliders[slidersN[i]].active, 1, &fff); json_write_number(3, ATTR_S_REVERSE, pr->sliders[slidersN[i]].reverse, 1, &fff); json_write_number(3, ATTR_S_CHANNEL, pr->sliders[slidersN[i]].channel, 1, &fff); json_write_number(3, ATTR_S_EVENT, pr->sliders[slidersN[i]].event, 1, &fff); json_write_number(3, ATTR_S_MIN, pr->sliders[slidersN[i]].min_out_value, 1, &fff); json_write_number(3, ATTR_S_MAX, pr->sliders[slidersN[i]].max_out_value, 0, &fff); if (i<SLIDERS_N-1){ json_write_string(2, "},", &fff); }else{ json_write_string(2, "}", &fff); } } json_write_string(1, "},", &fff); json_write_string(1, "\"" ATTR_KNOBS "\":{", &fff); for (i = 0; i < KNOBS_N; i++) { json_write_object(2, slider_names[knobsN[i]], &fff); json_write_number(3, ATTR_S_ACTIVE, pr->sliders[knobsN[i]].active, 1, &fff); json_write_number(3, ATTR_S_REVERSE, pr->sliders[knobsN[i]].reverse, 1, &fff); json_write_number(3, ATTR_S_CHANNEL, pr->sliders[knobsN[i]].channel, 1, &fff); json_write_number(3, ATTR_S_EVENT, pr->sliders[knobsN[i]].event, 1, &fff); json_write_number(3, ATTR_S_MIN, pr->sliders[knobsN[i]].min_out_value, 1, &fff); json_write_number(3, ATTR_S_MAX, pr->sliders[knobsN[i]].max_out_value, 0, &fff); if (i<KNOBS_N-1){ json_write_string(2, "},", &fff); }else{ json_write_string(2, "}", &fff); } } json_write_string(1, "},", &fff); json_write_string(1, "\"" ATTR_BUTTONS "\":{", &fff); for (i = 0; i < BUTTONS_AMOUNT; i++) { json_write_object(2, button_names[i], &fff); json_write_number(3, ATTR_B_ACTIVE, pr->buttons[i].active, 1, &fff); json_write_number(3, ATTR_B_TYPE, pr->buttons[i].type, 1, &fff); json_write_number(3, ATTR_B_CHANNEL, pr->buttons[i].channel, 1, &fff); json_write_number(3, ATTR_B_EVENT, pr->buttons[i].event, 1, &fff); json_write_number(3, ATTR_B_ON, pr->buttons[i].on, 1, &fff); json_write_number(3, ATTR_B_OFF, pr->buttons[i].off, 0, &fff); if (i<BUTTONS_AMOUNT-1){ json_write_string(2, "},", &fff); }else{ json_write_string(2, "}", &fff); } } json_write_string(1, "}", &fff); json_write_string(0, "}", &fff); pr->Crc = getCRC(&pr, sizeof(presetType)); if (SDFS_close(&fff)!= SDFS_OK) return FIO_FILE_CREATE_ERROR; return res; }