Greatly simplified Architecture, Identical Functions Removed: Platform Interfaces, STP6001 interface
Diff: VL53L0X.cpp
- Revision:
- 10:cd1758e186a4
- Parent:
- 9:cb4c6d4e5030
- Child:
- 11:d8dbe3b87f9f
--- a/VL53L0X.cpp Tue Jun 25 11:03:34 2019 +0000 +++ b/VL53L0X.cpp Thu Jun 27 12:51:34 2019 +0000 @@ -85,7 +85,7 @@ } // deduce silicon version - status = VL53L0X_get_device_info(&_device_info); + status = VL53L0X_get_device_info(); status = prepare(); if (status != VL53L0X_ERROR_NONE) { @@ -142,7 +142,7 @@ Data.OscFrequencyMHz = 618660; /* Set Default XTalkCompensationRateMegaCps to 0 */ - Data.CurrentParameters.XTalkCompensationRateMegaCps = 0; + CurrentParameters.XTalkCompensationRateMegaCps = 0; /* Get default parameters */ status = VL53L0X_get_device_parameters( &CurrentParameters); @@ -150,7 +150,7 @@ /* initialize PAL values */ CurrentParameters.DeviceMode = VL53L0X_DEVICEMODE_SINGLE_RANGING; CurrentParameters.HistogramMode = VL53L0X_HISTOGRAMMODE_DISABLED; - Data.CurrentParameters = CurrentParameters; + CurrentParameters = CurrentParameters; } /* Sigma estimator variable */ @@ -942,7 +942,7 @@ /* store current, adjusted offset */ if (status == VL53L0X_ERROR_NONE) { - Data.CurrentParameters.RangeOffsetMicroMeters = corrected_offset_micro_meters; + CurrentParameters.RangeOffsetMicroMeters = corrected_offset_micro_meters; } } @@ -953,7 +953,7 @@ { VL53L0X_Error status = VL53L0X_ERROR_NONE; - *p_device_mode = Data.CurrentParameters.DeviceMode ; + *p_device_mode = CurrentParameters.DeviceMode ; return status; @@ -979,7 +979,7 @@ *p_inter_measurement_period_milli_seconds = im_period_milli_seconds / osc_calibrate_val; } - Data.CurrentParameters.InterMeasurementPeriodMilliSeconds = *p_inter_measurement_period_milli_seconds; + CurrentParameters.InterMeasurementPeriodMilliSeconds = *p_inter_measurement_period_milli_seconds; } @@ -997,14 +997,14 @@ if (status == VL53L0X_ERROR_NONE) { if (value == 0) { /* the Xtalk is disabled return value from memory */ - temp_fix1616 = Data.CurrentParameters.XTalkCompensationRateMegaCps ; + temp_fix1616 = CurrentParameters.XTalkCompensationRateMegaCps ; *p_xtalk_compensation_rate_mega_cps = temp_fix1616; - Data.CurrentParameters.XTalkCompensationEnable = 0; + CurrentParameters.XTalkCompensationEnable = 0; } else { temp_fix1616 = VL53L0X_FIXPOINT313TOFIXPOINT1616(value); *p_xtalk_compensation_rate_mega_cps = temp_fix1616; - Data.CurrentParameters.XTalkCompensationRateMegaCps = temp_fix1616; - Data.CurrentParameters.XTalkCompensationEnable = 1; + CurrentParameters.XTalkCompensationRateMegaCps = temp_fix1616; + CurrentParameters.XTalkCompensationEnable = 1; } } @@ -1025,7 +1025,7 @@ case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: /* internal computation: */ - temp_fix1616 = Data.CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE]; + temp_fix1616 = CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE]; enable_zero_value = 0; break; @@ -1041,13 +1041,13 @@ case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: /* internal computation: */ - temp_fix1616 = Data.CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP]; + temp_fix1616 = CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP]; enable_zero_value = 0; break; case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: /* internal computation: */ - temp_fix1616 = Data.CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD]; + temp_fix1616 = CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD]; enable_zero_value = 0; break; @@ -1073,13 +1073,13 @@ if (temp_fix1616 == 0) { /* disabled: return value from memory */ - temp_fix1616 = Data.CurrentParameters.LimitChecksValue[limit_check_id]; + temp_fix1616 = CurrentParameters.LimitChecksValue[limit_check_id]; *p_limit_check_value = temp_fix1616; - Data.CurrentParameters.LimitChecksEnable[limit_check_id] = 0; + CurrentParameters.LimitChecksEnable[limit_check_id] = 0; } else { *p_limit_check_value = temp_fix1616; - Data.CurrentParameters.LimitChecksValue[limit_check_id] = temp_fix1616; - Data.CurrentParameters.LimitChecksEnable[limit_check_id] = 1; + CurrentParameters.LimitChecksValue[limit_check_id] = temp_fix1616; + CurrentParameters.LimitChecksEnable[limit_check_id] = 1; } } else { *p_limit_check_value = temp_fix1616; @@ -1102,7 +1102,7 @@ status = VL53L0X_ERROR_INVALID_PARAMS; *p_limit_check_enable = 0; } else { - temp8 = Data.CurrentParameters.LimitChecksEnable[limit_check_id]; + temp8 = CurrentParameters.LimitChecksEnable[limit_check_id]; *p_limit_check_enable = temp8; } @@ -1126,7 +1126,7 @@ } } if (status == VL53L0X_ERROR_NONE) { - Data.CurrentParameters.WrapAroundCheckEnable = *p_wrap_around_check_enable; + CurrentParameters.WrapAroundCheckEnable = *p_wrap_around_check_enable; } @@ -1405,7 +1405,7 @@ /* Finally, the timing budget must be re-applied */ if (status == VL53L0X_ERROR_NONE) { - measurement_timing_budget_micro_seconds = Data.CurrentParameters.MeasurementTimingBudgetMicroSeconds ; + measurement_timing_budget_micro_seconds = CurrentParameters.MeasurementTimingBudgetMicroSeconds ; status = VL53L0X_set_measurement_timing_budget_micro_seconds(measurement_timing_budget_micro_seconds); } @@ -1678,7 +1678,7 @@ } if (status == VL53L0X_ERROR_NONE) { - Data.CurrentParameters.MeasurementTimingBudgetMicroSeconds = *p_measurement_timing_budget_micro_seconds; + CurrentParameters.MeasurementTimingBudgetMicroSeconds = *p_measurement_timing_budget_micro_seconds; } @@ -1757,17 +1757,17 @@ - temp8 = Data.CurrentParameters.LimitChecksEnable[limit_check_id]; + temp8 = CurrentParameters.LimitChecksEnable[limit_check_id]; if (temp8 == 0) { /* disabled write only internal value */ - Data.CurrentParameters.LimitChecksValue[limit_check_id] = limit_check_value; + CurrentParameters.LimitChecksValue[limit_check_id] = limit_check_value; } else { switch (limit_check_id) { case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: /* internal computation: */ - Data.CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE] = limit_check_value; + CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE] = limit_check_value; break; case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: @@ -1780,107 +1780,80 @@ case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP: /* internal computation: */ - Data.CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP] = limit_check_value; - + CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP] = limit_check_value; break; case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD: /* internal computation: */ - Data.CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD] = limit_check_value; - + CurrentParameters.LimitChecksValue[VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD] = limit_check_value; break; case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: case VL53L0X_CHECKENABLE_SIGNAL_RATE_PRE_RANGE: - status = VL53L0X_write_word(VL53L0X_REG_PRE_RANGE_MIN_COUNT_RATE_RTN_LIMIT, VL53L0X_FIXPOINT1616TOFIXPOINT97(limit_check_value)); - break; default: status = VL53L0X_ERROR_INVALID_PARAMS; - } if (status == VL53L0X_ERROR_NONE) { - Data.CurrentParameters.LimitChecksValue[limit_check_id] = limit_check_value; + CurrentParameters.LimitChecksValue[limit_check_id] = limit_check_value; } } - - return status; } -VL53L0X_Error VL53L0X::VL53L0X_check_part_used( uint8_t *revision, - VL53L0X_DeviceInfo_t *p_VL53L0X_device_info) +// instead of passing VL53L0X_DeviceInfo_t *p_VL53L0X_device_info, directly fill Device_Info +VL53L0X_Error VL53L0X::VL53L0X_get_device_info() { VL53L0X_Error status = VL53L0X_ERROR_NONE; - uint8_t module_id_int; + uint8_t revision_id; + uint8_t revision; char *product_id_tmp; status = VL53L0X_get_info_from_device( 2); if (status == VL53L0X_ERROR_NONE) { - module_id_int = Data.ModuleId; - - if (module_id_int == 0) { - *revision = 0; - VL53L0X_COPYSTRING(p_VL53L0X_device_info->ProductId, ""); + if (Data.ModuleId == 0) { + revision = 0; + VL53L0X_COPYSTRING(Device_Info.ProductId, ""); } else { - *revision = Data.Revision; + revision = Data.Revision; product_id_tmp = Data.ProductId; - VL53L0X_COPYSTRING(p_VL53L0X_device_info->ProductId, product_id_tmp); + VL53L0X_COPYSTRING(Device_Info.ProductId, product_id_tmp); } } - return status; -} - -VL53L0X_Error VL53L0X::wrapped_VL53L0X_get_device_info(VL53L0X_DeviceInfo_t *p_VL53L0X_device_info) -{ VL53L0X_Error status = VL53L0X_ERROR_NONE; - uint8_t revision_id; - uint8_t revision; - - status = VL53L0X_check_part_used( &revision, p_VL53L0X_device_info); - - if (status == VL53L0X_ERROR_NONE) { + + if (status == VL53L0X_ERROR_NONE) { if (revision == 0) { - VL53L0X_COPYSTRING(p_VL53L0X_device_info->Name, + VL53L0X_COPYSTRING(Device_Info.Name, VL53L0X_STRING_DEVICE_INFO_NAME_TS0); } else if ((revision <= 34) && (revision != 32)) { - VL53L0X_COPYSTRING(p_VL53L0X_device_info->Name, + VL53L0X_COPYSTRING(Device_Info.Name, VL53L0X_STRING_DEVICE_INFO_NAME_TS1); } else if (revision < 39) { - VL53L0X_COPYSTRING(p_VL53L0X_device_info->Name, + VL53L0X_COPYSTRING(Device_Info.Name, VL53L0X_STRING_DEVICE_INFO_NAME_TS2); - } else {VL53L0X_COPYSTRING(p_VL53L0X_device_info->Name, + } else {VL53L0X_COPYSTRING(Device_Info.Name, VL53L0X_STRING_DEVICE_INFO_NAME_ES1); } - VL53L0X_COPYSTRING(p_VL53L0X_device_info->Type, - VL53L0X_STRING_DEVICE_INFO_TYPE); + VL53L0X_COPYSTRING(Device_Info.Type, VL53L0X_STRING_DEVICE_INFO_TYPE); } if (status == VL53L0X_ERROR_NONE) { status = VL53L0X_read_byte( VL53L0X_REG_IDENTIFICATION_MODEL_ID, - &p_VL53L0X_device_info->ProductType);} + &Device_Info.ProductType);} if (status == VL53L0X_ERROR_NONE) { status = VL53L0X_read_byte(VL53L0X_REG_IDENTIFICATION_REVISION_ID, &revision_id); - p_VL53L0X_device_info->ProductRevisionMajor = 1; - p_VL53L0X_device_info->ProductRevisionMinor = + Device_Info.ProductRevisionMajor = 1; + Device_Info.ProductRevisionMinor = (revision_id & 0xF0) >> 4; } - - return status; -} - -VL53L0X_Error VL53L0X::VL53L0X_get_device_info(VL53L0X_DeviceInfo_t *p_VL53L0X_device_info) -{ VL53L0X_Error status = VL53L0X_ERROR_NONE; - - status = wrapped_VL53L0X_get_device_info( p_VL53L0X_device_info); - return status; } @@ -2328,7 +2301,7 @@ case VL53L0X_DEVICEMODE_GPIO_DRIVE: case VL53L0X_DEVICEMODE_GPIO_OSC: /* Supported modes */ - Data.CurrentParameters.DeviceMode = device_mode; + CurrentParameters.DeviceMode = device_mode; break; default: /* Unsupported mode */ @@ -2598,7 +2571,7 @@ { VL53L0X_Error status = VL53L0X_ERROR_NONE; uint8_t temp8; - temp8 = Data.CurrentParameters.XTalkCompensationEnable ; + temp8 = CurrentParameters.XTalkCompensationEnable ; *p_x_talk_compensation_enable = temp8; return status; @@ -2619,7 +2592,7 @@ if (xtalk_comp_enable) { - xtalk_per_spad_mega_cps = Data.CurrentParameters.XTalkCompensationRateMegaCps ; + xtalk_per_spad_mega_cps = CurrentParameters.XTalkCompensationRateMegaCps ; /* FixPoint1616 * FixPoint 8:8 = FixPoint0824 */ total_xtalk_mega_cps = @@ -2917,7 +2890,7 @@ * Estimates the range sigma */ - x_talk_comp_rate_mcps = Data.CurrentParameters.XTalkCompensationRateMegaCps ; + x_talk_comp_rate_mcps = CurrentParameters.XTalkCompensationRateMegaCps ; /* * We work in kcps rather than mcps as this helps keep within the @@ -3353,7 +3326,7 @@ } else { temp8 = 0; } - Data.CurrentParameters.LimitChecksStatus[VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE] = temp8; + CurrentParameters.LimitChecksStatus[VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE] = temp8; if ((device_range_status_internal == 4) || (signal_rate_final_range_limit_check_enable == 0)) { @@ -3361,7 +3334,7 @@ } else { temp8 = 0; } - Data.CurrentParameters.LimitChecksStatus[VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE] = temp8; + CurrentParameters.LimitChecksStatus[VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE] = temp8; if ((signal_ref_clip_limit_check_enable == 0) || (signal_ref_clipflag == 1)) { @@ -3370,7 +3343,7 @@ temp8 = 0; } - Data.CurrentParameters.LimitChecksStatus[VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP] = temp8; + CurrentParameters.LimitChecksStatus[VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP] = temp8; if ((range_ignore_threshold_limit_check_enable == 0) || (range_ignore_thresholdflag == 1)) { @@ -3379,7 +3352,7 @@ temp8 = 0; } - Data.CurrentParameters.LimitChecksStatus[VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD] = temp8; + CurrentParameters.LimitChecksStatus[VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD] = temp8; } return status; @@ -3439,8 +3412,8 @@ tmpuint16 = (uint16_t)((linearity_corrective_gain * tmpuint16 + 500) / 1000); /* Implement Xtalk */ - x_talk_compensation_rate_mega_cps = Data.CurrentParameters.XTalkCompensationRateMegaCps ; - x_talk_compensation_enable = Data.CurrentParameters.XTalkCompensationEnable ; + x_talk_compensation_rate_mega_cps = CurrentParameters.XTalkCompensationRateMegaCps ; + x_talk_compensation_enable = CurrentParameters.XTalkCompensationEnable ; if (x_talk_compensation_enable) { @@ -4258,7 +4231,7 @@ */ status = set_sequence_step_timeout(VL53L0X_SEQUENCESTEP_FINAL_RANGE, final_range_timing_budget_micro_seconds); - Data.CurrentParameters.MeasurementTimingBudgetMicroSeconds = measurement_timing_budget_micro_seconds; + CurrentParameters.MeasurementTimingBudgetMicroSeconds = measurement_timing_budget_micro_seconds; } return status; @@ -4338,7 +4311,7 @@ /* Recalculate timing budget */ if (status == VL53L0X_ERROR_NONE) { - measurement_timing_budget_micro_seconds = Data.CurrentParameters.MeasurementTimingBudgetMicroSeconds ; + measurement_timing_budget_micro_seconds = CurrentParameters.MeasurementTimingBudgetMicroSeconds ; VL53L0X_set_measurement_timing_budget_micro_seconds(measurement_timing_budget_micro_seconds); } } @@ -4362,7 +4335,7 @@ limit_check_enable_int = 0; limit_check_disable = 1; } else { - temp_fix1616 = Data.CurrentParameters.LimitChecksValue[limit_check_id]; + temp_fix1616 = CurrentParameters.LimitChecksValue[limit_check_id]; limit_check_disable = 0; /* this to be sure to have either 0 or 1 */ limit_check_enable_int = 1; @@ -4372,7 +4345,7 @@ case VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE: /* internal computation: */ - Data.CurrentParameters.LimitChecksEnable[VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE] = limit_check_enable_int; + CurrentParameters.LimitChecksEnable[VL53L0X_CHECKENABLE_SIGMA_FINAL_RANGE] = limit_check_enable_int; break; case VL53L0X_CHECKENABLE_SIGNAL_RATE_FINAL_RANGE: @@ -4381,11 +4354,11 @@ break; case VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP:/* internal computation: */ - Data.CurrentParameters.LimitChecksEnable[VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP] = limit_check_enable_int; + CurrentParameters.LimitChecksEnable[VL53L0X_CHECKENABLE_SIGNAL_REF_CLIP] = limit_check_enable_int; break; case VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD:/* internal computation: */ - Data.CurrentParameters.LimitChecksEnable[VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD] = limit_check_enable_int; + CurrentParameters.LimitChecksEnable[VL53L0X_CHECKENABLE_RANGE_IGNORE_THRESHOLD] = limit_check_enable_int; break; case VL53L0X_CHECKENABLE_SIGNAL_RATE_MSRC: @@ -4408,9 +4381,9 @@ if (status == VL53L0X_ERROR_NONE) { if (limit_check_enable == 0) { - Data.CurrentParameters.LimitChecksEnable[limit_check_id] = 0; + CurrentParameters.LimitChecksEnable[limit_check_id] = 0; } else { - Data.CurrentParameters.LimitChecksEnable[limit_check_id] = 1; + CurrentParameters.LimitChecksEnable[limit_check_id] = 1; } } return status; @@ -4492,7 +4465,7 @@ } if (status == VL53L0X_ERROR_NONE) { - Data.CurrentParameters = current_parameters; + CurrentParameters = current_parameters; } /* read the sequence config and save it */