| 33 | signed int |
---|
| 34 | Device::init_hardware(void) |
---|
| 35 | { |
---|
| 36 | // Initialises the device's settings structure to a known state and then |
---|
| 37 | // sets the hardware to reflect this state. |
---|
| 38 | // |
---|
| 39 | // In time this function may read a cached device setup and initialise |
---|
| 40 | // based on that. It may also read the device configuration from the |
---|
| 41 | // device flash and adopt that. For now (for initial testing purposes) |
---|
| 42 | // we'll go with a static state. |
---|
| 43 | memset(&settings, 0, sizeof(settings)); |
---|
| 44 | settings.spdif_input_mode = FF_SWPARAM_SPDIF_INPUT_COAX; |
---|
| 45 | settings.spdif_output_mode = FF_SWPARAM_SPDIF_OUTPUT_COAX; |
---|
| 46 | settings.clock_mode = FF_SWPARAM_SPDIF_CLOCK_MODE_MASTER; |
---|
| 47 | settings.sync_ref = FF_SWPARAM_SYNCREF_WORDCLOCK; |
---|
| 48 | settings.input_level = FF_SWPARAM_ILEVEL_LOGAIN; |
---|
| 49 | settings.output_level = FF_SWPARAM_OLEVEL_HIGAIN; |
---|
| 50 | |
---|
| 51 | return set_hardware_params(&settings); |
---|
| 52 | } |
---|
| 53 | |
---|
34 | | Device::init_hardware(void) |
---|
35 | | { |
---|
36 | | // Initialises the hardware the state defined by the Device's settings |
---|
37 | | // structure. This has the side effect of extinguishing the "Host" LED |
---|
38 | | // on the FF400 when done for the first time after the interface has |
---|
39 | | // been powered up. |
---|
40 | | // |
---|
41 | | // FIXME: currently this is a minimum skeleton to prove basic |
---|
42 | | // functionality. It requires details to be filled in. |
---|
| 55 | Device::set_hardware_params(FF_software_settings_t *sw_settings) |
---|
| 56 | { |
---|
| 57 | // Initialises the hardware to the state defined by the supplied |
---|
| 58 | // software settings structure (which will usually be the device's |
---|
| 59 | // "settings" structure). This has the side effect of extinguishing the |
---|
| 60 | // "Host" LED on the FF400 when done for the first time after the |
---|
| 61 | // interface has been powered up. |
---|
| 62 | |
---|
103 | | data[1] |= (settings.input_opt[1] & FF_SWPARAM_INPUT_OPT_A) ? CR1_INPUT_OPT1_A : 0; |
---|
104 | | data[1] |= (settings.input_opt[1] & FF_SWPARAM_INPUT_OPT_B) ? CR1_INPUT_OPT1_B : 0; |
---|
105 | | data[1] |= (settings.input_opt[2] & FF_SWPARAM_INPUT_OPT_A) ? CR1_INPUT_OPT2_A : 0; |
---|
106 | | data[1] |= (settings.input_opt[2] & FF_SWPARAM_INPUT_OPT_B) ? CR1_INPUT_OPT2_B : 0; |
---|
| 123 | data[1] |= (sw_settings->input_opt[1] & FF_SWPARAM_INPUT_OPT_A) ? CR1_INPUT_OPT1_A : 0; |
---|
| 124 | data[1] |= (sw_settings->input_opt[1] & FF_SWPARAM_INPUT_OPT_B) ? CR1_INPUT_OPT1_B : 0; |
---|
| 125 | data[1] |= (sw_settings->input_opt[2] & FF_SWPARAM_INPUT_OPT_A) ? CR1_INPUT_OPT2_A : 0; |
---|
| 126 | data[1] |= (sw_settings->input_opt[2] & FF_SWPARAM_INPUT_OPT_B) ? CR1_INPUT_OPT2_B : 0; |
---|
117 | | if (settings.input_opt[0] & FF_SWPARAM_FF800_INPUT_OPT_FRONT) { |
---|
118 | | data[1] |= (settings.filter) ? CR1_FF800_INPUT1_FRONT_WITH_FILTER : CR1_FF800_INPUT1_FRONT; |
---|
119 | | } |
---|
120 | | |
---|
121 | | data[2] |= (settings.spdif_output_emphasis==FF_SWPARAM_SPDIF_OUTPUT_EMPHASIS_ON) ? CR2_SPDIF_OUT_EMP : 0; |
---|
122 | | data[2] |= (settings.spdif_output_pro==FF_SWPARAM_SPDIF_OUTPUT_PRO_ON) ? CR2_SPDIF_OUT_PRO : 0; |
---|
123 | | data[2] |= (settings.spdif_output_nonaudio==FF_SWPARAM_SPDIF_OUTPUT_NONAUDIO_ON) ? CR2_SPDIF_OUT_NONAUDIO : 0; |
---|
124 | | data[2] |= (settings.spdif_output_mode==FF_SWPARAM_SPDIF_OUTPUT_OPTICAL) ? CR2_SPDIF_OUT_ADAT2 : 0; |
---|
125 | | data[2] |= (settings.clock_mode==FF_SWPARAM_SPDIF_CLOCK_MODE_AUTOSYNC) ? CR2_CLOCKMODE_AUTOSYNC : CR2_CLOCKMODE_MASTER; |
---|
126 | | data[2] |= (settings.spdif_input_mode==FF_SWPARAM_SPDIF_INPUT_COAX) ? CR2_SPDIF_IN_COAX : CR2_SPDIF_IN_ADAT2; |
---|
127 | | data[2] |= (settings.word_clock_single_speed=FF_SWPARAM_WORD_CLOCK_1x) ? CR2_WORD_CLOCK_1x : 0; |
---|
| 137 | if (sw_settings->input_opt[0] & FF_SWPARAM_FF800_INPUT_OPT_FRONT) { |
---|
| 138 | data[1] |= (sw_settings->filter) ? CR1_FF800_INPUT1_FRONT_WITH_FILTER : CR1_FF800_INPUT1_FRONT; |
---|
| 139 | } |
---|
| 140 | |
---|
| 141 | data[2] |= (sw_settings->spdif_output_emphasis==FF_SWPARAM_SPDIF_OUTPUT_EMPHASIS_ON) ? CR2_SPDIF_OUT_EMP : 0; |
---|
| 142 | data[2] |= (sw_settings->spdif_output_pro==FF_SWPARAM_SPDIF_OUTPUT_PRO_ON) ? CR2_SPDIF_OUT_PRO : 0; |
---|
| 143 | data[2] |= (sw_settings->spdif_output_nonaudio==FF_SWPARAM_SPDIF_OUTPUT_NONAUDIO_ON) ? CR2_SPDIF_OUT_NONAUDIO : 0; |
---|
| 144 | data[2] |= (sw_settings->spdif_output_mode==FF_SWPARAM_SPDIF_OUTPUT_OPTICAL) ? CR2_SPDIF_OUT_ADAT2 : 0; |
---|
| 145 | data[2] |= (sw_settings->clock_mode==FF_SWPARAM_SPDIF_CLOCK_MODE_AUTOSYNC) ? CR2_CLOCKMODE_AUTOSYNC : CR2_CLOCKMODE_MASTER; |
---|
| 146 | data[2] |= (sw_settings->spdif_input_mode==FF_SWPARAM_SPDIF_INPUT_COAX) ? CR2_SPDIF_IN_COAX : CR2_SPDIF_IN_ADAT2; |
---|
| 147 | data[2] |= (sw_settings->word_clock_single_speed=FF_SWPARAM_WORD_CLOCK_1x) ? CR2_WORD_CLOCK_1x : 0; |
---|