int acq_SetChannelThreshold(rp_channel_t channel, float voltage) { float gainV; rp_pinState_t gain; ECHECK(acq_GetGainV(channel, &gainV)); ECHECK(acq_GetGain(channel, &gain));; if (fabs(voltage) - fabs(gainV) > FLOAT_EPS) { return RP_EOOR; } 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); uint32_t cnt = cmn_CnvVToCnt(ADC_BITS, voltage, gainV, gain == RP_HIGH ? false : true, calibScale, dc_offs, 0.0); // We cut high bits of negative numbers cnt = cnt & ((1 << ADC_BITS) - 1); if (channel == RP_CH_1) { return osc_SetThresholdChA(cnt); } else { return osc_SetThresholdChB(cnt); } }
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_GetDataRaw(rp_channel_t channel, uint32_t pos, uint32_t* size, int16_t* buffer) { *size = MIN(*size, ADC_BUFFER_SIZE); uint32_t cnts; const volatile uint32_t* raw_buffer = getRawBuffer(channel); 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); for (uint32_t i = 0; i < (*size); ++i) { cnts = (raw_buffer[(pos + i) % ADC_BUFFER_SIZE]) & ADC_BITS_MAK; buffer[i] = cmn_CalibCnts(ADC_BITS, cnts, dc_offs); } 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_GetDataRaw(rp_channel_t channel, uint32_t pos, uint32_t* size, int16_t* buffer) { *size = MIN(*size, ADC_BUFFER_SIZE); uint32_t cnts; const volatile uint32_t* raw_buffer = getRawBuffer(channel); rp_pinState_t gain; ECHECK(acq_GetGain(channel, &gain)); rp_calib_params_t calib = calib_GetParams(); int32_t dc_offs = GET_OFFSET(channel, gain, calib); for (uint32_t i = 0; i < (*size); ++i) { cnts = (raw_buffer[(pos + i) % ADC_BUFFER_SIZE]) & ADC_BITS_MAK; buffer[i] = cmn_CalibCnts(ADC_BITS, cnts, dc_offs); } 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_SetChannelThresholdHyst(rp_channel_t channel, float voltage) { float gainV; rp_pinState_t gain; ECHECK(acq_GetGainV(channel, &gainV)); ECHECK(acq_GetGain(channel, &gain));; if (fabs(voltage) - fabs(gainV) > FLOAT_EPS) { return RP_EOOR; } rp_calib_params_t calib = calib_GetParams(); int32_t dc_offs = GET_OFFSET(channel, gain, calib); uint32_t calibScale = calib_GetFrontEndScale(channel, gain); uint32_t cnt = cmn_CnvVToCnt(ADC_BITS, voltage, gainV, gain == RP_HIGH ? false : true, calibScale, dc_offs, 0.0); if (channel == RP_CH_1) { return osc_SetHysteresisChA(cnt); } else { return osc_SetHysteresisChB(cnt); } }
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; }