// query module name and version void scene_query_module(void) { volatile char * moduleName = sceneData->desc.moduleName; ModuleVersion * moduleVersion = &(sceneData->desc.moduleVersion); /// sets module name/version in scene data to reported name/version print_dbg("\r\n querying module name..."); bfin_get_module_name(moduleName); print_dbg("\r\n querying module version..."); bfin_get_module_version(moduleVersion); strcat((char*)moduleName, ".ldr"); print_dbg("\r\n received module name: "); print_dbg((char*)moduleName); print_dbg("\r\n received module version: "); print_dbg_ulong(moduleVersion->maj); print_dbg("."); print_dbg_ulong(moduleVersion->min); print_dbg("."); print_dbg_ulong(moduleVersion->rev); }
// query the blackfin for parameter list and populate pnodes u8 net_report_params(void) { volatile char buf[64]; volatile ParamDesc pdesc; volatile u32 numParams; s32 val; u8 i; bfin_get_num_params(&numParams); print_dbg("\r\nnumparams: "); print_dbg_ulong(numParams); if(numParams == 255) { print_dbg("\r\n report_params fail (255)"); return 0; } if(numParams > 0) { net_clear_params(); for(i=0; i<numParams; i++) { /////// /////// // TODO: offline param descriptor bfin_get_param_desc(i, &pdesc); /////// ///// print_dbg("\r\n received descriptor for param, index : "); print_dbg_ulong(i); print_dbg(" , label : "); print_dbg((const char* )pdesc.label); print_dbg(" ; \t initial value: 0x"); val = bfin_get_param(i); print_dbg_hex(val); net_add_param(i, (const ParamDesc*)&pdesc); print_dbg("\r\n finished adding parameter."); // net->params[net->numParams - 1].data.value = val; //// use reverse-lookup method from scaler net->params[net->numParams - 1].data.value = scaler_get_in( &(net->params[net->numParams - 1].scaler), val); net->params[net->numParams - 1].data.changed = 0; } } else { print_dbg("\r\n bfin: no parameters reported"); return 0; } delay_ms(100); print_dbg("\r\n checking module label "); bfin_get_module_name(buf); delay_ms(10); print_dbg("\r\n bfin module name: "); print_dbg((const char*)buf); // if(numParams > 0 && numParams != 255) { /// test bfin_get_param on initial values // print_dbg("\r\n reporting inital param values: "); // for(i=0; i<numParams; ++i) { // print_dbg("\r\n 0x"); // val = bfin_get_param(i); // print_dbg_hex(val); // } // } return (u8)numParams; }
// set current state of system from global RAM buffer void scene_read_buf(void) { /// pointer to serial blob const u8* src = (u8*)&(sceneData->pickle); int i; // param count reported from dsp // u32 paramsReported; //// TEST char moduleName[MODULE_NAME_LEN]; ModuleVersion moduleVersion; //// app_pause(); // store current mod name in scene desc // memcpy(modName, sceneData->desc.moduleName, MODULE_NAME_LEN); // read scene name for(i=0; i<SCENE_NAME_LEN; i++) { sceneData->desc.sceneName[i] = *src; src++; } // read bees version sceneData->desc.beesVersion.min = *src; src++; sceneData->desc.beesVersion.maj = *src; src++; src = unpickle_16(src, &(sceneData->desc.beesVersion.rev)); // read module name // target is temp module name buffer, so we can run a comparison for(i=0; i<MODULE_NAME_LEN; i++) { moduleName[i] = *src; src++; } print_dbg("\r\n unpickled module name: "); print_dbg(moduleName); // read module version sceneData->desc.moduleVersion.min = *src; src++; sceneData->desc.moduleVersion.maj = *src; src++; src = unpickle_16(src, &(sceneData->desc.moduleVersion.rev)); print_dbg("\r\n unpickled module version: "); print_dbg_ulong(sceneData->desc.moduleVersion.maj); print_dbg("."); print_dbg_ulong(sceneData->desc.moduleVersion.min); print_dbg("."); print_dbg_ulong(sceneData->desc.moduleVersion.rev); print_dbg("\r\n checking against module name from scene data: "); print_dbg(sceneData->desc.moduleName); if(strcmp(moduleName, sceneData->desc.moduleName) == 0) { print_dbg("\r\n requested module name is already loaded; skip DSP reboot."); // skip DSP load /// FIXME: should check module version too } else { strcpy(sceneData->desc.moduleName, moduleName); render_boot("loading DSP module:"); render_boot(sceneData->desc.moduleName); ///// load the DSP now! render_boot("loading module from sdcard"); print_dbg("\r\n loading module from card, filename: "); print_dbg(sceneData->desc.moduleName); files_load_dsp_name(sceneData->desc.moduleName); render_boot("waiting for module init"); print_dbg("\r\n waiting for DSP init..."); bfin_wait_ready(); #if RELEASEBUILD==1 #else // query module name / version render_boot("querying module"); print_dbg("\r\n querying module name..."); bfin_get_module_name(moduleName); print_dbg("\r\n querying module version..."); bfin_get_module_version(&moduleVersion); print_dbg("\r\n received module name: "); print_dbg((char*)moduleName); print_dbg("\r\n received module version: "); print_dbg_ulong(moduleVersion.maj); print_dbg("."); print_dbg_ulong(moduleVersion.min); print_dbg("."); print_dbg_ulong(moduleVersion.rev); #ifdef BEEKEEP #else // store in scene data render_boot("storing module version"); sceneData->desc.moduleVersion.maj = moduleVersion.maj; sceneData->desc.moduleVersion.min = moduleVersion.min; sceneData->desc.moduleVersion.rev = moduleVersion.rev; strcpy(sceneData->desc.moduleName, (const char*)moduleName); #endif #endif } // load-module case app_pause(); /// don't have to do this b/c net_unpickle will deinit anyways /* print_dbg("\r\n clearing operator list..."); net_clear_user_ops(); */ //// FIXME: use .dsc /* print_dbg("\r\n reporting DSP parameters..."); paramsReported = net_report_params(); */ /// FIXME: /// check the module version and warn if different! // there could also be a check here for mismatched parameter list. // unpickle network render_boot("reading network"); print_dbg("\r\n unpickling network for scene recall..."); src = net_unpickle(src); // unpickle presets render_boot("reading presets"); print_dbg("\r\n unpickling presets for scene recall..."); src = presets_unpickle(src); render_boot("scene data stored in RAM"); print_dbg("\r\n copied stored network and presets to RAM "); /* for(i=0; i<net->numParams; i++) { */ /* print_dbg("\r\n param "); */ /* print_dbg_ulong(i); */ /* print_dbg(" : "); */ /* print_dbg(net->params[i].desc.label); */ /* print_dbg(" ; val "); */ /* print_dbg_hex((u32)net->params[i].data.value); */ /* } */ render_boot("waiting for DSP"); bfin_wait_ready(); // update bfin parameters // if(net->numParams != paramsReported) { // print_dbg("\r\n !!!!!! WARNING ! param count from scene does not match reported count from DSP"); // render_boot("warning: param count mismatch!"); // } else { #ifdef BEEKEEP #else render_boot("sending param values"); net_send_params(); #endif // } print_dbg("\r\n sent new parameter values"); delay_ms(5); render_boot("enabling audio"); // enable audio processing bfin_enable(); app_resume(); }