fix: errors

This commit is contained in:
Lucas
2026-09-29 17:01:12 +02:00
parent 234dcd08d0
commit 01cc0feda2
3 changed files with 545 additions and 575 deletions
+140 -174
View File
@@ -18,7 +18,7 @@ use crate::{
response::map_response, response::map_response,
}, },
protocol::{commands, config::decode_config, frame::extract_frame}, protocol::{commands, config::decode_config, frame::extract_frame},
types::{self, DSPMode}, types::{self, ConnectionStatus::Disconnected, DSPMode},
}, },
}; };
@@ -57,7 +57,7 @@ impl DSP408 {
} }
Ok(Self { Ok(Self {
mode: types::DSPMode::Disconnected, mode: types::DSPMode::Normal,
connection: types::DeviceConnection { connection: types::DeviceConnection {
host, host,
@@ -140,7 +140,7 @@ impl DSP408 {
} }
pub fn connected(&self) -> bool { pub fn connected(&self) -> bool {
self.mode == types::DSPMode::Connected self.state.connection == types::ConnectionStatus::Connected
} }
pub fn demo(&self) -> bool { pub fn demo(&self) -> bool {
@@ -185,6 +185,7 @@ impl DSP408 {
modified: modified.modified, modified: modified.modified,
}, },
current_config: state, current_config: state,
connection: Disconnected,
}; };
Ok(()) Ok(())
@@ -201,10 +202,11 @@ impl DSP408 {
// Command `0x10` // Command `0x10`
pub fn connect(&mut self) -> Result<(), DSPError> { pub fn connect(&mut self) -> Result<(), DSPError> {
if self.mode == types::DSPMode::Demo { if self.mode == types::DSPMode::Demo {
self.state.connection = types::ConnectionStatus::Connected;
return Ok(()); return Ok(());
} }
if self.mode == types::DSPMode::Connected { if self.state.connection == types::ConnectionStatus::Connected {
return Err(DSPError::AlreadyConnected); return Err(DSPError::AlreadyConnected);
} }
@@ -271,7 +273,7 @@ impl DSP408 {
return Err(error); return Err(error);
} }
self.mode = types::DSPMode::Connected; self.state.connection = types::ConnectionStatus::Connected;
instances() instances()
.lock() .lock()
@@ -289,6 +291,11 @@ impl DSP408 {
// Command `0x11` // Command `0x11`
pub fn disconnect(&mut self) -> Result<(), DSPError> { pub fn disconnect(&mut self) -> Result<(), DSPError> {
if self.mode == types::DSPMode::Demo {
self.state.connection = types::ConnectionStatus::Disconnected;
return Ok(());
}
let key = (self.connection.host, self.connection.device_id); let key = (self.connection.host, self.connection.device_id);
let mut socket_guard = self let mut socket_guard = self
@@ -306,9 +313,7 @@ impl DSP408 {
.map_err(|e| DSPError::MutexPoisoned(e.to_string()))? .map_err(|e| DSPError::MutexPoisoned(e.to_string()))?
.remove(&key); .remove(&key);
if self.mode == types::DSPMode::Connected { self.state.connection = types::ConnectionStatus::Disconnected;
self.mode = types::DSPMode::Disconnected;
}
Ok(()) Ok(())
} }
@@ -362,8 +367,9 @@ impl DSP408 {
pub fn set_delay_unit(&mut self, unit: types::DelayUnit) -> Result<bool, DSPError> { pub fn set_delay_unit(&mut self, unit: types::DelayUnit) -> Result<bool, DSPError> {
let raw_unit = mapper::delay_unit_to_raw(unit)?; let raw_unit = mapper::delay_unit_to_raw(unit)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_set_delay_unit(raw_unit)?; let request = commands::build_set_delay_unit(raw_unit)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -383,12 +389,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -416,8 +419,9 @@ impl DSP408 {
pub fn recall_preset(&mut self, preset_index: usize) -> Result<bool, DSPError> { pub fn recall_preset(&mut self, preset_index: usize) -> Result<bool, DSPError> {
let raw_index = mapper::preset_index_to_raw(preset_index)?; let raw_index = mapper::preset_index_to_raw(preset_index)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_recall(raw_index)?; let request = commands::build_recall(raw_index)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -439,11 +443,11 @@ impl DSP408 {
))); )));
} }
} }
} } else if self.mode == types::DSPMode::Demo {
types::DSPMode::Demo => {
self.state = default_dsp_state(); self.state = default_dsp_state();
} }
types::DSPMode::Disconnected => { }
types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -465,8 +469,9 @@ impl DSP408 {
return Ok(false); return Ok(false);
} }
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_store_current_configuration(raw_index)?; let request = commands::build_store_current_configuration(raw_index)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -492,8 +497,8 @@ impl DSP408 {
)); ));
} }
} }
types::DSPMode::Demo => {} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -524,8 +529,9 @@ impl DSP408 {
return Ok(false); return Ok(false);
} }
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_factory_reset(); let request = commands::build_factory_reset();
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -544,16 +550,12 @@ impl DSP408 {
))); )));
} }
} }
} else if self.mode == types::DSPMode::Demo {
// Hardware accepted the reset.
self.state = default_dsp_state(); self.state = default_dsp_state();
} }
types::DSPMode::Demo => {
self.state = default_dsp_state();
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -565,8 +567,9 @@ impl DSP408 {
pub fn set_current_preset_name(&mut self, name: &str) -> Result<bool, DSPError> { pub fn set_current_preset_name(&mut self, name: &str) -> Result<bool, DSPError> {
let raw_name = mapper::preset_name_to_raw(name)?; let raw_name = mapper::preset_name_to_raw(name)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_store_current_preset_name(&raw_name)?; let request = commands::build_store_current_preset_name(&raw_name)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -596,10 +599,8 @@ impl DSP408 {
return Ok(false); return Ok(false);
} }
} }
types::DSPMode::Demo => {
// No hardware operations.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -704,8 +705,9 @@ impl DSP408 {
) -> Result<bool, DSPError> { ) -> Result<bool, DSPError> {
let (raw_channel_1, raw_channel_2) = mapper::copy_channel_to_raw(channel_1, channel_2)?; let (raw_channel_1, raw_channel_2) = mapper::copy_channel_to_raw(channel_1, channel_2)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_copy_channel(raw_channel_1, raw_channel_2)?; let request = commands::build_copy_channel(raw_channel_1, raw_channel_2)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -725,12 +727,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -759,8 +758,9 @@ impl DSP408 {
pub fn unlock_device(&mut self, password: &str) -> Result<bool, DSPError> { pub fn unlock_device(&mut self, password: &str) -> Result<bool, DSPError> {
let raw_password = mapper::password_to_raw(password)?; let raw_password = mapper::password_to_raw(password)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_unlock_device(&raw_password)?; let request = commands::build_unlock_device(&raw_password)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -780,12 +780,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// Emulate successful unlock locally.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -799,8 +796,9 @@ impl DSP408 {
pub fn lock_device(&mut self, password: &str) -> Result<bool, DSPError> { pub fn lock_device(&mut self, password: &str) -> Result<bool, DSPError> {
let raw_password = mapper::password_to_raw(password)?; let raw_password = mapper::password_to_raw(password)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_lock_device(&raw_password)?; let request = commands::build_lock_device(&raw_password)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -820,18 +818,17 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// Emulate locking locally.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
self.state_mut().flags.is_locked = true; self.state_mut().flags.is_locked = true;
self.disconnect()?;
Ok(true) Ok(true)
} }
@@ -852,8 +849,9 @@ impl DSP408 {
let raw_knee = mapper::knee_db_to_raw(knee)?; let raw_knee = mapper::knee_db_to_raw(knee)?;
let raw_threshold = mapper::threshold_db_to_raw(threshold)?; let raw_threshold = mapper::threshold_db_to_raw(threshold)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_set_compressor( let request = commands::build_set_compressor(
raw_channel, raw_channel,
raw_ratio, raw_ratio,
@@ -880,12 +878,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -916,8 +911,9 @@ impl DSP408 {
let raw_freq = mapper::frequency_hz_to_raw(freq)?; let raw_freq = mapper::frequency_hz_to_raw(freq)?;
let raw_filter = mapper::crossover_filter_to_raw(filter_type)?; let raw_filter = mapper::crossover_filter_to_raw(filter_type)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_low_pass(raw_channel, raw_freq, raw_filter)?; let request = commands::build_low_pass(raw_channel, raw_freq, raw_filter)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -937,12 +933,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -987,8 +980,9 @@ impl DSP408 {
let raw_freq = mapper::frequency_hz_to_raw(freq)?; let raw_freq = mapper::frequency_hz_to_raw(freq)?;
let raw_filter = mapper::crossover_filter_to_raw(filter_type)?; let raw_filter = mapper::crossover_filter_to_raw(filter_type)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_high_pass(raw_channel, raw_freq, raw_filter)?; let request = commands::build_high_pass(raw_channel, raw_freq, raw_filter)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1008,12 +1002,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1066,8 +1057,9 @@ impl DSP408 {
let raw_q = mapper::peq_q_to_raw(q, filter_type)?; let raw_q = mapper::peq_q_to_raw(q, filter_type)?;
let raw_filter = mapper::peq_filter_to_raw(filter_type)?; let raw_filter = mapper::peq_filter_to_raw(filter_type)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_peq_band( let request = commands::build_peq_band(
raw_channel, raw_channel,
raw_band, raw_band,
@@ -1095,12 +1087,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1144,8 +1133,9 @@ impl DSP408 {
let raw_channel = mapper::channel_to_raw(channel)?; let raw_channel = mapper::channel_to_raw(channel)?;
let raw_db = mapper::gain_db_to_raw(db)?; let raw_db = mapper::gain_db_to_raw(db)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_gain(raw_channel, raw_db)?; let request = commands::build_gain(raw_channel, raw_db)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1165,12 +1155,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1194,8 +1181,9 @@ impl DSP408 {
pub fn set_mute(&mut self, channel: types::Channel, muted: bool) -> Result<bool, DSPError> { pub fn set_mute(&mut self, channel: types::Channel, muted: bool) -> Result<bool, DSPError> {
let raw_channel = mapper::channel_to_raw(channel)?; let raw_channel = mapper::channel_to_raw(channel)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_mute(raw_channel, muted as u8)?; let request = commands::build_mute(raw_channel, muted as u8)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1215,12 +1203,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1248,8 +1233,9 @@ impl DSP408 {
) -> Result<bool, DSPError> { ) -> Result<bool, DSPError> {
let raw_channel = mapper::channel_to_raw(channel)?; let raw_channel = mapper::channel_to_raw(channel)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_inverted_gain(raw_channel, inverted as u8)?; let request = commands::build_inverted_gain(raw_channel, inverted as u8)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1269,12 +1255,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1304,8 +1287,9 @@ impl DSP408 {
let raw_channel = mapper::channel_to_raw(channel)?; let raw_channel = mapper::channel_to_raw(channel)?;
let raw_delay = mapper::delay_to_raw(delay, unit)?; let raw_delay = mapper::delay_to_raw(delay, unit)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_set_delay(raw_channel, raw_delay)?; let request = commands::build_set_delay(raw_channel, raw_delay)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1325,12 +1309,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1356,8 +1337,9 @@ impl DSP408 {
let raw_source = mapper::input_source_to_raw(input_source.r#type)?; let raw_source = mapper::input_source_to_raw(input_source.r#type)?;
let raw_frequency = mapper::frequency_value_to_raw(input_source.frequency)?; let raw_frequency = mapper::frequency_value_to_raw(input_source.frequency)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_set_input_source(raw_source, raw_frequency)?; let request = commands::build_set_input_source(raw_source, raw_frequency)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1377,12 +1359,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1404,8 +1383,9 @@ impl DSP408 {
let raw_output = mapper::output_channel_to_raw(output)?; let raw_output = mapper::output_channel_to_raw(output)?;
let raw_inputs = mapper::matrix_to_raw(&inputs)?; let raw_inputs = mapper::matrix_to_raw(&inputs)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_matrix_routing(raw_output, raw_inputs)?; let request = commands::build_matrix_routing(raw_output, raw_inputs)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1425,12 +1405,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1466,8 +1443,9 @@ impl DSP408 {
} }
} }
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
// Link source // Link source
let request = commands::build_link_channel(raw_source, bitmask)?; let request = commands::build_link_channel(raw_source, bitmask)?;
@@ -1520,12 +1498,9 @@ impl DSP408 {
return Ok(false); return Ok(false);
} }
} }
types::DSPMode::Demo => {
// Copy already applied above; nothing else to reconcile.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1589,8 +1564,9 @@ impl DSP408 {
) -> Result<bool, DSPError> { ) -> Result<bool, DSPError> {
let raw_channel = mapper::channel_to_raw(channel)?; let raw_channel = mapper::channel_to_raw(channel)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_bypass_peq(raw_channel, bypass as u8)?; let request = commands::build_bypass_peq(raw_channel, bypass as u8)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1610,12 +1586,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1648,8 +1621,9 @@ impl DSP408 {
let raw_channel = mapper::channel_to_raw(channel)?; let raw_channel = mapper::channel_to_raw(channel)?;
let raw_name = mapper::channel_name_to_raw(name)?; let raw_name = mapper::channel_name_to_raw(name)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_store_channel_name(raw_channel, &raw_name)?; let request = commands::build_store_channel_name(raw_channel, &raw_name)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1669,12 +1643,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1711,8 +1682,9 @@ impl DSP408 {
let raw_hold = mapper::hold_ms_to_raw(hold)?; let raw_hold = mapper::hold_ms_to_raw(hold)?;
let raw_release = mapper::release_ms_to_raw(release)?; let raw_release = mapper::release_ms_to_raw(release)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_set_gate( let request = commands::build_set_gate(
raw_channel, raw_channel,
raw_threshold, raw_threshold,
@@ -1738,12 +1710,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1774,8 +1743,9 @@ impl DSP408 {
let raw_attack = mapper::attack_ms_to_raw(attack)?; let raw_attack = mapper::attack_ms_to_raw(attack)?;
let raw_release = mapper::release_ms_to_raw(release)?; let raw_release = mapper::release_ms_to_raw(release)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_set_limiter( let request = commands::build_set_limiter(
raw_channel, raw_channel,
raw_threshold, raw_threshold,
@@ -1800,12 +1770,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1826,8 +1793,12 @@ impl DSP408 {
pub fn get_meter_levels( pub fn get_meter_levels(
&mut self, &mut self,
) -> Result<(types::InputMeters, types::OutputMeters), DSPError> { ) -> Result<(types::InputMeters, types::OutputMeters), DSPError> {
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Demo {
return Ok((self.input_meters.clone(), self.output_meters.clone()));
}
let request = commands::build_get_meter_levels(); let request = commands::build_get_meter_levels();
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1846,12 +1817,7 @@ impl DSP408 {
} }
} }
types::DSPMode::Demo => { types::ConnectionStatus::Disconnected => Err(DSPError::NotConnected),
// Return the locally simulated meter values.
Ok((self.input_meters.clone(), self.output_meters.clone()))
}
types::DSPMode::Disconnected => Err(DSPError::NotConnected),
} }
} }
@@ -1866,10 +1832,14 @@ impl DSP408 {
let raw_output_channel = mapper::output_channel_to_raw(output_channel)?; let raw_output_channel = mapper::output_channel_to_raw(output_channel)?;
let raw_gain = mapper::matrix_gain_db_to_raw(gain)?; let raw_gain = mapper::matrix_gain_db_to_raw(gain)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
let request = if self.mode == types::DSPMode::Normal {
commands::build_matrix_gain(raw_input_channel, raw_output_channel, raw_gain)?; let request = commands::build_matrix_gain(
raw_input_channel,
raw_output_channel,
raw_gain,
)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1888,12 +1858,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1919,10 +1886,14 @@ impl DSP408 {
let raw_frequency_band = mapper::frequency_value_to_raw(frequency_band)?; let raw_frequency_band = mapper::frequency_value_to_raw(frequency_band)?;
let raw_gain = mapper::eq_gain_db_to_raw(gain)?; let raw_gain = mapper::eq_gain_db_to_raw(gain)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
let request = if self.mode == types::DSPMode::Normal {
commands::build_set_geq_band(raw_input_channel, raw_frequency_band, raw_gain)?; let request = commands::build_set_geq_band(
raw_input_channel,
raw_frequency_band,
raw_gain,
)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1941,12 +1912,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
@@ -1972,8 +1940,9 @@ impl DSP408 {
) -> Result<bool, DSPError> { ) -> Result<bool, DSPError> {
let raw_input_channel = mapper::input_channel_to_raw(input_channel)?; let raw_input_channel = mapper::input_channel_to_raw(input_channel)?;
match self.mode { match self.state.connection {
types::DSPMode::Connected => { types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Normal {
let request = commands::build_set_geq_bypass(raw_input_channel, bypass as u8)?; let request = commands::build_set_geq_bypass(raw_input_channel, bypass as u8)?;
let resp = self.send_recv(&request)?; let resp = self.send_recv(&request)?;
@@ -1993,12 +1962,9 @@ impl DSP408 {
} }
} }
} }
types::DSPMode::Demo => {
// No hardware request.
} }
types::DSPMode::Disconnected => { types::ConnectionStatus::Disconnected => {
return Err(DSPError::NotConnected); return Err(DSPError::NotConnected);
} }
} }
+3 -1
View File
@@ -1,6 +1,8 @@
use std::collections::HashMap; use std::collections::HashMap;
use strum::IntoEnumIterator; use strum::IntoEnumIterator;
use crate::dsp408::types;
use super::types::{ use super::types::{
Compressor, Crossover, CrossoverFilter, CrossoverFilters, DSPConfigState, DSPState, DelayUnit, Compressor, Crossover, CrossoverFilter, CrossoverFilters, DSPConfigState, DSPState, DelayUnit,
DeviceFlags, DiscreteFrequency, Gate, GraphicEQ, InputChannel, InputChannelState, InputMeters, DeviceFlags, DiscreteFrequency, Gate, GraphicEQ, InputChannel, InputChannelState, InputMeters,
@@ -23,7 +25,7 @@ pub fn default_dsp_state() -> DSPState {
current_config: default_config(), current_config: default_config(),
mode: super::types::DSPMode::Disconnected, connection: types::ConnectionStatus::Disconnected,
} }
} }
+2
View File
@@ -398,12 +398,14 @@ impl DSPConfigState {
} }
} }
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum DSPMode { pub enum DSPMode {
Demo, Demo,
Normal, Normal,
} }
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ConnectionStatus { pub enum ConnectionStatus {
Connected, Connected,