make look-up table static
This commit is contained in:
parent
bd54956320
commit
300bd90f8e
1 changed files with 40 additions and 38 deletions
|
@ -4,6 +4,44 @@ use core::time::Duration;
|
||||||
/// Calculates values needed or returned by the BME80 Sensor.
|
/// Calculates values needed or returned by the BME80 Sensor.
|
||||||
pub struct Calculation {}
|
pub struct Calculation {}
|
||||||
|
|
||||||
|
static GAS_LOOKUP_TABLE_1: [u32; 16] = [
|
||||||
|
2147483647u32,
|
||||||
|
2147483647u32,
|
||||||
|
2147483647u32,
|
||||||
|
2147483647u32,
|
||||||
|
2147483647u32,
|
||||||
|
2126008810u32,
|
||||||
|
2147483647u32,
|
||||||
|
2130303777u32,
|
||||||
|
2147483647u32,
|
||||||
|
2147483647u32,
|
||||||
|
2143188679u32,
|
||||||
|
2136746228u32,
|
||||||
|
2147483647u32,
|
||||||
|
2126008810u32,
|
||||||
|
2147483647u32,
|
||||||
|
2147483647u32,
|
||||||
|
];
|
||||||
|
|
||||||
|
static GAS_LOOKUP_TABLE_2: [u32; 16] = [
|
||||||
|
4096000000u32,
|
||||||
|
2048000000u32,
|
||||||
|
1024000000u32,
|
||||||
|
512000000u32,
|
||||||
|
255744255u32,
|
||||||
|
127110228u32,
|
||||||
|
64000000u32,
|
||||||
|
32258064u32,
|
||||||
|
16016016u32,
|
||||||
|
8000000u32,
|
||||||
|
4000000u32,
|
||||||
|
2000000u32,
|
||||||
|
1,
|
||||||
|
500000u32,
|
||||||
|
250000u32,
|
||||||
|
125000u32,
|
||||||
|
];
|
||||||
|
|
||||||
impl Calculation {
|
impl Calculation {
|
||||||
/// Calculates and returns the sensor's heater resistance.
|
/// Calculates and returns the sensor's heater resistance.
|
||||||
/// * `calibration_data` - The calibration data of the sensor.
|
/// * `calibration_data` - The calibration data of the sensor.
|
||||||
|
@ -154,47 +192,11 @@ impl Calculation {
|
||||||
gas_resistance_adc: u16,
|
gas_resistance_adc: u16,
|
||||||
gas_range: u8,
|
gas_range: u8,
|
||||||
) -> u32 {
|
) -> u32 {
|
||||||
let lookup_table1: [u32; 16] = [
|
|
||||||
2147483647u32,
|
|
||||||
2147483647u32,
|
|
||||||
2147483647u32,
|
|
||||||
2147483647u32,
|
|
||||||
2147483647u32,
|
|
||||||
2126008810u32,
|
|
||||||
2147483647u32,
|
|
||||||
2130303777u32,
|
|
||||||
2147483647u32,
|
|
||||||
2147483647u32,
|
|
||||||
2143188679u32,
|
|
||||||
2136746228u32,
|
|
||||||
2147483647u32,
|
|
||||||
2126008810u32,
|
|
||||||
2147483647u32,
|
|
||||||
2147483647u32,
|
|
||||||
];
|
|
||||||
let lookup_table2: [u32; 16] = [
|
|
||||||
4096000000u32,
|
|
||||||
2048000000u32,
|
|
||||||
1024000000u32,
|
|
||||||
512000000u32,
|
|
||||||
255744255u32,
|
|
||||||
127110228u32,
|
|
||||||
64000000u32,
|
|
||||||
32258064u32,
|
|
||||||
16016016u32,
|
|
||||||
8000000u32,
|
|
||||||
4000000u32,
|
|
||||||
2000000u32,
|
|
||||||
1,
|
|
||||||
500000u32,
|
|
||||||
250000u32,
|
|
||||||
125000u32,
|
|
||||||
];
|
|
||||||
let var1: i64 = ((1340 + 5 * calibration_data.range_sw_err as i64)
|
let var1: i64 = ((1340 + 5 * calibration_data.range_sw_err as i64)
|
||||||
* lookup_table1[gas_range as usize] as i64)
|
* GAS_LOOKUP_TABLE_1[gas_range as usize] as i64)
|
||||||
>> 16;
|
>> 16;
|
||||||
let var2: u64 = (((gas_resistance_adc as i64) << 15) - 16777216 + var1) as u64;
|
let var2: u64 = (((gas_resistance_adc as i64) << 15) - 16777216 + var1) as u64;
|
||||||
let var3: i64 = (lookup_table2[gas_range as usize] as i64 * var1) >> 9;
|
let var3: i64 = (GAS_LOOKUP_TABLE_2[gas_range as usize] as i64 * var1) >> 9;
|
||||||
let calc_gas_res: u32 = ((var3 + ((var2 as i64) >> 1i64)) / var2 as i64) as u32;
|
let calc_gas_res: u32 = ((var3 + ((var2 as i64) >> 1i64)) / var2 as i64) as u32;
|
||||||
calc_gas_res
|
calc_gas_res
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue