Changeset 2309
- Timestamp:
- 04/27/13 05:14:12 (11 years ago)
- Files:
-
- trunk/libffado/src/rme/fireface_flash.cpp (modified) (10 diffs)
- trunk/libffado/src/rme/rme_avdevice.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libffado/src/rme/fireface_flash.cpp
r2307 r2309 234 234 235 235 signed int 236 Device::read_device_flash_settings(FF_software_settings_t *settings) 237 { 236 Device::read_device_flash_settings(FF_software_settings_t *dsettings) 237 { 238 if (dsettings == NULL) 239 dsettings = settings; 240 238 241 // Read the device's configuration flash RAM and use this to set up 239 242 // the given settings structure. … … 289 292 290 293 if (settings != NULL) { 291 memset( settings, 0, sizeof(*settings));294 memset(dsettings, 0, sizeof(*dsettings)); 292 295 // Copy hardware details to the software settings structure as 293 296 // appropriate. 294 297 for (i=0; i<2; i++) 295 settings->mic_phantom[i] = hw_settings.mic_phantom[i];298 dsettings->mic_phantom[i] = hw_settings.mic_phantom[i]; 296 299 297 300 if (m_rme_model == RME_MODEL_FIREFACE800) { 298 301 for (i=2; i<4; i++) 299 settings->mic_phantom[i] = hw_settings.mic_phantom[i];302 dsettings->mic_phantom[i] = hw_settings.mic_phantom[i]; 300 303 } else 301 304 if (m_rme_model == RME_MODEL_FIREFACE400) { 302 305 // TODO: confirm this is true 303 306 for (i=2; i<4; i++) 304 settings->ff400_input_pad[i-2] = hw_settings.mic_phantom[i];307 dsettings->ff400_input_pad[i-2] = hw_settings.mic_phantom[i]; 305 308 } else { 306 309 debugOutput(DEBUG_LEVEL_ERROR, "unimplemented model %d\n", m_rme_model); … … 308 311 } 309 312 310 settings->spdif_input_mode = hw_settings.spdif_input_mode;311 settings->spdif_output_emphasis = hw_settings.spdif_output_emphasis;312 settings->spdif_output_pro = hw_settings.spdif_output_pro;313 settings->spdif_output_nonaudio = hw_settings.spdif_output_nonaudio;314 settings->spdif_output_mode = hw_settings.spdif_output_mode;315 settings->clock_mode = hw_settings.clock_mode;316 settings->sync_ref = hw_settings.sync_ref;317 settings->tms = hw_settings.tms;318 settings->limit_bandwidth = hw_settings.limit_bandwidth;319 settings->stop_on_dropout = hw_settings.stop_on_dropout;320 settings->input_level = hw_settings.input_level;321 settings->output_level = hw_settings.output_level;313 dsettings->spdif_input_mode = hw_settings.spdif_input_mode; 314 dsettings->spdif_output_emphasis = hw_settings.spdif_output_emphasis; 315 dsettings->spdif_output_pro = hw_settings.spdif_output_pro; 316 dsettings->spdif_output_nonaudio = hw_settings.spdif_output_nonaudio; 317 dsettings->spdif_output_mode = hw_settings.spdif_output_mode; 318 dsettings->clock_mode = hw_settings.clock_mode; 319 dsettings->sync_ref = hw_settings.sync_ref; 320 dsettings->tms = hw_settings.tms; 321 dsettings->limit_bandwidth = hw_settings.limit_bandwidth; 322 dsettings->stop_on_dropout = hw_settings.stop_on_dropout; 323 dsettings->input_level = hw_settings.input_level; 324 dsettings->output_level = hw_settings.output_level; 322 325 if (m_rme_model == RME_MODEL_FIREFACE800) { 323 settings->filter = hw_settings.filter;324 settings->fuzz = hw_settings.fuzz;326 dsettings->filter = hw_settings.filter; 327 dsettings->fuzz = hw_settings.fuzz; 325 328 } else 326 329 if (m_rme_model == RME_MODEL_FIREFACE400) { 327 330 // TODO: confirm this is true 328 settings->ff400_instr_input[0] = hw_settings.fuzz;329 settings->ff400_instr_input[1] = hw_settings.filter;330 } 331 settings->limiter = (hw_settings.p12db_an[0] == 0)?1:0;332 settings->sample_rate = hw_settings.sample_rate;333 settings->word_clock_single_speed = hw_settings.word_clock_single_speed;331 dsettings->ff400_instr_input[0] = hw_settings.fuzz; 332 dsettings->ff400_instr_input[1] = hw_settings.filter; 333 } 334 dsettings->limiter = (hw_settings.p12db_an[0] == 0)?1:0; 335 dsettings->sample_rate = hw_settings.sample_rate; 336 dsettings->word_clock_single_speed = hw_settings.word_clock_single_speed; 334 337 335 338 // The FF800 has front/rear selectors for the "instrument" input … … 339 342 // level which the FF800 doesn't have. 340 343 if (m_rme_model == RME_MODEL_FIREFACE400) 341 settings->phones_level = hw_settings.mic_plug_select[0];344 dsettings->phones_level = hw_settings.mic_plug_select[0]; 342 345 else 343 346 if (m_rme_model == RME_MODEL_FIREFACE800) { … … 348 351 // approach used in drivers for other operating systems and 349 352 // simplifies certain logic expressions within the driver. 350 settings->input_opt[0] = hw_settings.instrument_plug_select + 1;351 settings->input_opt[1] = hw_settings.mic_plug_select[0] + 1;352 settings->input_opt[2] = hw_settings.mic_plug_select[1] + 1;353 dsettings->input_opt[0] = hw_settings.instrument_plug_select + 1; 354 dsettings->input_opt[1] = hw_settings.mic_plug_select[0] + 1; 355 dsettings->input_opt[2] = hw_settings.mic_plug_select[1] + 1; 353 356 } 354 357 } … … 358 361 if (m_rme_model == RME_MODEL_FIREFACE800) { 359 362 debugOutput(DEBUG_LEVEL_VERBOSE, " Phantom: %d %d %d %d\n", 360 settings->mic_phantom[0],settings->mic_phantom[1],361 settings->mic_phantom[2],settings->mic_phantom[2]);363 dsettings->mic_phantom[0], dsettings->mic_phantom[1], 364 dsettings->mic_phantom[2], dsettings->mic_phantom[2]); 362 365 363 366 } else 364 367 if (m_rme_model == RME_MODEL_FIREFACE400) { 365 368 debugOutput(DEBUG_LEVEL_VERBOSE, " Phantom: %d %d\n", 366 settings->mic_phantom[0],settings->mic_phantom[1]);369 dsettings->mic_phantom[0], dsettings->mic_phantom[1]); 367 370 debugOutput(DEBUG_LEVEL_VERBOSE, " Input pad: %d %d\n", 368 settings->ff400_input_pad[0],settings->ff400_input_pad[1]);369 } 370 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif input mode: %d\n", settings->spdif_input_mode);371 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif output emphasis: %d\n", settings->spdif_output_emphasis);372 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif output pro: %d\n", settings->spdif_output_pro);373 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif output nonaudio: %d\n", settings->spdif_output_nonaudio);374 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif output mode: %d\n", settings->spdif_output_mode);375 debugOutput(DEBUG_LEVEL_VERBOSE, " clock mode: %d\n", settings->clock_mode);376 debugOutput(DEBUG_LEVEL_VERBOSE, " sync ref: %d\n", settings->sync_ref);377 debugOutput(DEBUG_LEVEL_VERBOSE, " tms: %d\n", settings->tms);378 debugOutput(DEBUG_LEVEL_VERBOSE, " limit bandwidth: %d\n", settings->limit_bandwidth);379 debugOutput(DEBUG_LEVEL_VERBOSE, " stop on dropout: %d\n", settings->stop_on_dropout);380 debugOutput(DEBUG_LEVEL_VERBOSE, " input level: %d\n", settings->input_level);381 debugOutput(DEBUG_LEVEL_VERBOSE, " output level: %d\n", settings->output_level);382 if (m_rme_model == RME_MODEL_FIREFACE800) { 383 debugOutput(DEBUG_LEVEL_VERBOSE, " filter: %d\n", settings->filter);384 debugOutput(DEBUG_LEVEL_VERBOSE, " fuzz: %d\n", settings->fuzz);371 dsettings->ff400_input_pad[0], dsettings->ff400_input_pad[1]); 372 } 373 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif input mode: %d\n", dsettings->spdif_input_mode); 374 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif output emphasis: %d\n", dsettings->spdif_output_emphasis); 375 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif output pro: %d\n", dsettings->spdif_output_pro); 376 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif output nonaudio: %d\n", dsettings->spdif_output_nonaudio); 377 debugOutput(DEBUG_LEVEL_VERBOSE, " spdif output mode: %d\n", dsettings->spdif_output_mode); 378 debugOutput(DEBUG_LEVEL_VERBOSE, " clock mode: %d\n", dsettings->clock_mode); 379 debugOutput(DEBUG_LEVEL_VERBOSE, " sync ref: %d\n", dsettings->sync_ref); 380 debugOutput(DEBUG_LEVEL_VERBOSE, " tms: %d\n", dsettings->tms); 381 debugOutput(DEBUG_LEVEL_VERBOSE, " limit bandwidth: %d\n", dsettings->limit_bandwidth); 382 debugOutput(DEBUG_LEVEL_VERBOSE, " stop on dropout: %d\n", dsettings->stop_on_dropout); 383 debugOutput(DEBUG_LEVEL_VERBOSE, " input level: %d\n", dsettings->input_level); 384 debugOutput(DEBUG_LEVEL_VERBOSE, " output level: %d\n", dsettings->output_level); 385 if (m_rme_model == RME_MODEL_FIREFACE800) { 386 debugOutput(DEBUG_LEVEL_VERBOSE, " filter: %d\n", dsettings->filter); 387 debugOutput(DEBUG_LEVEL_VERBOSE, " fuzz: %d\n", dsettings->fuzz); 385 388 } else 386 389 if (m_rme_model == RME_MODEL_FIREFACE400) { 387 debugOutput(DEBUG_LEVEL_VERBOSE, " instr input 0: %d\n", settings->ff400_instr_input[0]);388 debugOutput(DEBUG_LEVEL_VERBOSE, " instr input 1: %d\n", settings->ff400_instr_input[1]);389 } 390 debugOutput(DEBUG_LEVEL_VERBOSE, " limiter: %d\n", settings->limiter);391 debugOutput(DEBUG_LEVEL_VERBOSE, " sample rate: %d\n", settings->sample_rate);392 debugOutput(DEBUG_LEVEL_VERBOSE, " word clock single speed: %d\n", settings->word_clock_single_speed);390 debugOutput(DEBUG_LEVEL_VERBOSE, " instr input 0: %d\n", dsettings->ff400_instr_input[0]); 391 debugOutput(DEBUG_LEVEL_VERBOSE, " instr input 1: %d\n", dsettings->ff400_instr_input[1]); 392 } 393 debugOutput(DEBUG_LEVEL_VERBOSE, " limiter: %d\n", dsettings->limiter); 394 debugOutput(DEBUG_LEVEL_VERBOSE, " sample rate: %d\n", dsettings->sample_rate); 395 debugOutput(DEBUG_LEVEL_VERBOSE, " word clock single speed: %d\n", dsettings->word_clock_single_speed); 393 396 if (m_rme_model == RME_MODEL_FIREFACE400) { 394 debugOutput(DEBUG_LEVEL_VERBOSE, " phones level: %d\n", settings->phones_level);397 debugOutput(DEBUG_LEVEL_VERBOSE, " phones level: %d\n", dsettings->phones_level); 395 398 } else 396 399 if (m_rme_model == RME_MODEL_FIREFACE800) { 397 400 debugOutput(DEBUG_LEVEL_VERBOSE, " input opts: %d %d %d\n", 398 settings->input_opt[0],settings->input_opt[1],399 settings->input_opt[2]);401 dsettings->input_opt[0], dsettings->input_opt[1], 402 dsettings->input_opt[2]); 400 403 } 401 404 … … 429 432 430 433 signed int 431 Device::write_device_flash_settings(FF_software_settings_t *settings) 432 { 434 Device::write_device_flash_settings(FF_software_settings_t *dsettings) 435 { 436 if (dsettings == NULL) 437 dsettings = settings; 438 433 439 // Write the given device settings to the device's configuration flash. 434 440 … … 445 451 // Copy software settings to the hardware structure as appropriate. 446 452 for (i=0; i<4; i++) 447 hw_settings.mic_phantom[i] = settings->mic_phantom[i];448 hw_settings.spdif_input_mode = settings->spdif_input_mode;449 hw_settings.spdif_output_emphasis = settings->spdif_output_emphasis;450 hw_settings.spdif_output_pro = settings->spdif_output_pro;451 hw_settings.spdif_output_nonaudio = settings->spdif_output_nonaudio;452 hw_settings.spdif_output_mode = settings->spdif_output_mode;453 hw_settings.clock_mode = settings->clock_mode;454 hw_settings.sync_ref = settings->sync_ref;455 hw_settings.tms = settings->tms;456 hw_settings.limit_bandwidth = settings->limit_bandwidth;457 hw_settings.stop_on_dropout = settings->stop_on_dropout;458 hw_settings.input_level = settings->input_level;459 hw_settings.output_level = settings->output_level;460 hw_settings.filter = settings->filter;461 hw_settings.fuzz = settings->fuzz;453 hw_settings.mic_phantom[i] = dsettings->mic_phantom[i]; 454 hw_settings.spdif_input_mode = dsettings->spdif_input_mode; 455 hw_settings.spdif_output_emphasis = dsettings->spdif_output_emphasis; 456 hw_settings.spdif_output_pro = dsettings->spdif_output_pro; 457 hw_settings.spdif_output_nonaudio = dsettings->spdif_output_nonaudio; 458 hw_settings.spdif_output_mode = dsettings->spdif_output_mode; 459 hw_settings.clock_mode = dsettings->clock_mode; 460 hw_settings.sync_ref = dsettings->sync_ref; 461 hw_settings.tms = dsettings->tms; 462 hw_settings.limit_bandwidth = dsettings->limit_bandwidth; 463 hw_settings.stop_on_dropout = dsettings->stop_on_dropout; 464 hw_settings.input_level = dsettings->input_level; 465 hw_settings.output_level = dsettings->output_level; 466 hw_settings.filter = dsettings->filter; 467 hw_settings.fuzz = dsettings->fuzz; 462 468 // The limiter can only be disabled if channel 1 uses the "front" input. 463 469 // Note that p12db_an (as passed to the flash) seems to be a "limiter 464 470 // disabled" flag. 465 if (m_rme_model==RME_MODEL_FIREFACE800 && settings->limiter==0 &&466 settings->input_opt[0]==FF_SWPARAM_FF800_INPUT_OPT_FRONT)471 if (m_rme_model==RME_MODEL_FIREFACE800 && dsettings->limiter==0 && 472 dsettings->input_opt[0]==FF_SWPARAM_FF800_INPUT_OPT_FRONT) 467 473 hw_settings.p12db_an[0] = 1; 468 474 else 469 475 hw_settings.p12db_an[0] = 0; 470 hw_settings.sample_rate = settings->sample_rate;471 hw_settings.word_clock_single_speed = settings->word_clock_single_speed;476 hw_settings.sample_rate = dsettings->sample_rate; 477 hw_settings.word_clock_single_speed = dsettings->word_clock_single_speed; 472 478 473 479 // The FF800 has front/rear selectors for the "instrument" input … … 477 483 // level which the FF800 doesn't have. 478 484 if (m_rme_model == RME_MODEL_FIREFACE400) 479 hw_settings.mic_plug_select[0] = settings->phones_level;485 hw_settings.mic_plug_select[0] = dsettings->phones_level; 480 486 else 481 487 if (m_rme_model == RME_MODEL_FIREFACE800) { … … 486 492 // option in the list rear, front, front and rear. See also the 487 493 // related section of read_device_flash_settings(). 488 hw_settings.instrument_plug_select = settings->input_opt[0] - 1;489 hw_settings.mic_plug_select[0] = settings->input_opt[1] - 1;490 hw_settings.mic_plug_select[1] = settings->input_opt[2] - 1;494 hw_settings.instrument_plug_select = dsettings->input_opt[0] - 1; 495 hw_settings.mic_plug_select[0] = dsettings->input_opt[1] - 1; 496 hw_settings.mic_plug_select[1] = dsettings->input_opt[2] - 1; 491 497 } 492 498 trunk/libffado/src/rme/rme_avdevice.h
r2307 r2309 189 189 /* Upper level flash memory functions */ 190 190 public: 191 signed int read_device_flash_settings(FF_software_settings_t * settings);192 signed int write_device_flash_settings(FF_software_settings_t * settings);191 signed int read_device_flash_settings(FF_software_settings_t *dsettings); 192 signed int write_device_flash_settings(FF_software_settings_t *dsettings); 193 193 signed int read_device_mixer_settings(FF_software_settings_t *dsettings); 194 194 signed int write_device_mixer_settings(FF_software_settings_t *dsettings);