int acq_GetDataV2(uint32_t pos, uint32_t* size, float* buffer1, float* buffer2) { *size = MIN(*size, ADC_BUFFER_SIZE); float gainV1, gainV2; rp_pinState_t gain1, gain2; ECHECK(acq_GetGainV(RP_CH_1, &gainV1)); ECHECK(acq_GetGain(RP_CH_1, &gain1)); ECHECK(acq_GetGainV(RP_CH_2, &gainV2)); ECHECK(acq_GetGain(RP_CH_2, &gain2)); rp_calib_params_t calib = calib_GetParams(); int32_t dc_offs1 = calib.fe_ch1_dc_offs; uint32_t calibScale1 = calib_GetFrontEndScale(RP_CH_1, gain1); int32_t dc_offs2 = calib.fe_ch2_dc_offs; uint32_t calibScale2 = calib_GetFrontEndScale(RP_CH_2, gain2); const volatile uint32_t* raw_buffer1 = getRawBuffer(RP_CH_1); const volatile uint32_t* raw_buffer2 = getRawBuffer(RP_CH_2); uint32_t cnts1[*size]; uint32_t cnts2[*size]; uint32_t* ptr1 = cnts1; uint32_t* ptr2 = cnts2; for (uint32_t i = 0; i < (*size); ++i) { *ptr1++ = raw_buffer1[pos]; *ptr2++ = raw_buffer2[pos]; pos = (pos + 1) % ADC_BUFFER_SIZE; } ptr1 = cnts1; ptr2 = cnts2; for (uint32_t i = 0; i < (*size); ++i) { *buffer1++ = cmn_CnvCntToV(ADC_BITS, *ptr1++, gainV1, calibScale1, dc_offs1, 0.0); *buffer2++ = cmn_CnvCntToV(ADC_BITS, *ptr2++, gainV2, calibScale2, dc_offs2, 0.0); } return RP_OK; }
int acq_GetDataV(rp_channel_t channel, uint32_t pos, uint32_t* size, float* buffer) { *size = MIN(*size, ADC_BUFFER_SIZE); float gainV; rp_pinState_t gain; ECHECK(acq_GetGainV(channel, &gainV)); ECHECK(acq_GetGain(channel, &gain)); rp_calib_params_t calib = calib_GetParams(); int32_t dc_offs = (channel == RP_CH_1 ? calib.fe_ch1_dc_offs : calib.fe_ch2_dc_offs); uint32_t calibScale = calib_GetFrontEndScale(channel, gain); const volatile uint32_t* raw_buffer = getRawBuffer(channel); uint32_t cnts; for (uint32_t i = 0; i < (*size); ++i) { cnts = raw_buffer[(pos + i) % ADC_BUFFER_SIZE]; buffer[i] = cmn_CnvCntToV(ADC_BITS, cnts, gainV, calibScale, dc_offs, 0.0); } return RP_OK; }
int acq_GetChannelThresholdHyst(rp_channel_t channel, float* voltage) { float gainV; rp_pinState_t gain; uint32_t cnts; if (channel == RP_CH_1) { ECHECK(osc_GetHysteresisChA(&cnts)); } else { ECHECK(osc_GetHysteresisChB(&cnts)); } ECHECK(acq_GetGainV(channel, &gainV)); ECHECK(acq_GetGain(channel, &gain)); rp_calib_params_t calib = calib_GetParams(); int32_t dc_offs = (channel == RP_CH_1 ? calib.fe_ch1_dc_offs : calib.fe_ch2_dc_offs); uint32_t calibScale = calib_GetFrontEndScale(channel, gain); *voltage = cmn_CnvCntToV(ADC_BITS, cnts, gainV, calibScale, dc_offs, 0.0); return RP_OK; }
int acq_GetChannelThresholdHyst(rp_channel_t channel, float* voltage) { float gainV; rp_pinState_t gain; uint32_t cnts; if (channel == RP_CH_1) { osc_GetHysteresisChA(&cnts); } else { osc_GetHysteresisChB(&cnts); } acq_GetGainV(channel, &gainV); acq_GetGain(channel, &gain); rp_calib_params_t calib = calib_GetParams(); int32_t dc_offs = GET_OFFSET(channel, gain, calib); uint32_t calibScale = calib_GetFrontEndScale(channel, gain); *voltage = cmn_CnvCntToV(ADC_BITS, cnts, gainV, calibScale, dc_offs, 0.0); return RP_OK; }