Exemple #1
0
// 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);
}
Exemple #2
0
// 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;

}
Exemple #3
0
// 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();
}