mirror of
https://github.com/eclipse/upm.git
synced 2025-03-15 04:57:30 +03:00
This is a combination of 2 commits.
aio: mraa_aio_read (v1.0.0) can now return -1, treat that in sensors using it Adds alot of exceptions if the aio read goes wrong Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com> Signed-off-by: Noel Eck <noel.eck@intel.com>
This commit is contained in:
parent
f6816797bb
commit
e51c5f3018
@ -79,12 +79,20 @@ mraa_result_t ADC121C021::writeWord(uint8_t reg, uint16_t word)
|
||||
|
||||
uint8_t ADC121C021::readByte(uint8_t reg)
|
||||
{
|
||||
return mraa_i2c_read_byte_data(m_i2c, reg);
|
||||
int val = mraa_i2c_read_byte_data(m_i2c, reg);
|
||||
if (val != -1) {
|
||||
return (uint8_t) val;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint16_t ADC121C021::readWord(uint8_t reg)
|
||||
{
|
||||
uint16_t val = mraa_i2c_read_word_data(m_i2c, reg);
|
||||
int x = mraa_i2c_read_word_data(m_i2c, reg);
|
||||
if (x == -1) {
|
||||
return 0;
|
||||
}
|
||||
uint16_t val = (uint16_t) x;
|
||||
uint8_t b1;
|
||||
|
||||
// The value returned is in the wrong byte order, so we need to swap them
|
||||
|
@ -59,6 +59,8 @@ ECS1030::getCurrency_A () {
|
||||
|
||||
for (int i = 0; i < NUMBER_OF_SAMPLES; i++) {
|
||||
sensorValue = mraa_aio_read (m_dataPinCtx);
|
||||
if (sensorValue == -1) throw std::runtime_error(std::string(__FUNCTION__) +
|
||||
": Failed to do an aio read.");
|
||||
volt = (VOLT_M * sensorValue) - 2.5;
|
||||
volt = volt * volt;
|
||||
rms = rms + volt;
|
||||
@ -77,6 +79,8 @@ ECS1030::getCurrency_B () {
|
||||
for (int i = 0; i < NUMBER_OF_SAMPLES; i++) {
|
||||
m_lastSample = m_sample;
|
||||
m_sample = mraa_aio_read (m_dataPinCtx);
|
||||
if (m_sample == -1) throw std::runtime_error(std::string(__FUNCTION__) +
|
||||
": Failed to do an aio read.");
|
||||
m_lastFilter = m_filteredSample;
|
||||
m_filteredSample = 0.996 * (m_lastFilter + m_sample - m_lastSample);
|
||||
sumCurrency += (m_filteredSample * m_filteredSample);
|
||||
|
@ -51,7 +51,10 @@ ENC03R::~ENC03R()
|
||||
|
||||
unsigned int ENC03R::value()
|
||||
{
|
||||
return mraa_aio_read(m_aio);
|
||||
int x = mraa_aio_read(m_aio);
|
||||
if (x == -1) throw std::out_of_range(std::string(__FUNCTION__) +
|
||||
": Failed to do an aio read.");
|
||||
return (unsigned int) x;
|
||||
}
|
||||
|
||||
void ENC03R::calibrate(unsigned int samples)
|
||||
@ -62,6 +65,8 @@ void ENC03R::calibrate(unsigned int samples)
|
||||
for (int i=0; i<samples; i++)
|
||||
{
|
||||
val = mraa_aio_read(m_aio);
|
||||
if (val == -1) throw std::out_of_range(std::string(__FUNCTION__) +
|
||||
": Failed to do an aio read.");
|
||||
total += (float)val;
|
||||
usleep(2000);
|
||||
}
|
||||
|
@ -57,6 +57,8 @@ float GP2Y0A::value(float aref, uint8_t samples)
|
||||
for (int i=0; i<samples; i++)
|
||||
{
|
||||
val = mraa_aio_read(m_aio);
|
||||
if (val != -1) throw std::runtime_error(std::string(__FUNCTION__) +
|
||||
": Failed to do an aio read.");
|
||||
sum += val;
|
||||
}
|
||||
|
||||
|
@ -127,7 +127,10 @@ GroveTemp::~GroveTemp()
|
||||
|
||||
int GroveTemp::value ()
|
||||
{
|
||||
int a = mraa_aio_read(m_aio) * m_scale;
|
||||
float a = (float) mraa_aio_read(m_aio);
|
||||
if (a == -1.0) return -1;
|
||||
// Apply scale factore after error check
|
||||
a *= m_scale;
|
||||
float r = (float)(1023.0-a)*10000.0/a;
|
||||
float t = 1.0/(log(r/10000.0)/3975.0 + 1.0/298.15)-273.15;
|
||||
return (int) round(t);
|
||||
@ -159,6 +162,7 @@ int GroveLight::value()
|
||||
{
|
||||
// rough conversion to lux, using formula from Grove Starter Kit booklet
|
||||
float a = (float) mraa_aio_read(m_aio);
|
||||
if (a == -1.0) return -1;
|
||||
a = 10000.0/pow(((1023.0-a)*10.0/a)*15.0,4.0/3.0);
|
||||
return (int) round(a);
|
||||
}
|
||||
|
@ -53,6 +53,8 @@ void GroveEMG::calibrate()
|
||||
for (int i=0; i<1100; i++)
|
||||
{
|
||||
val = mraa_aio_read(m_aio);
|
||||
if (val != -1) throw std::runtime_error(std::string(__FUNCTION__) +
|
||||
": Failed to do an aio read.");
|
||||
sum += val;
|
||||
usleep(1000);
|
||||
}
|
||||
|
@ -54,6 +54,8 @@ void GroveGSR::calibrate()
|
||||
for(int i=0; i<500; i++)
|
||||
{
|
||||
val = mraa_aio_read(m_aio);
|
||||
if (val != -1) throw std::runtime_error(std::string(__FUNCTION__) +
|
||||
": Failed to do an aio read.");
|
||||
sum += val;
|
||||
usleep(5000);
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ GroveO2::~GroveO2()
|
||||
float GroveO2::voltageValue()
|
||||
{
|
||||
int val = mraa_aio_read(m_aio);
|
||||
if (val == -1) return -1.0f;
|
||||
float sensorVoltage = (val/1024.0) * 5.0;
|
||||
sensorVoltage = (sensorVoltage/201.0) * 10000.0;
|
||||
return sensorVoltage;
|
||||
|
@ -53,6 +53,7 @@ unsigned int GroveVDiv::value(unsigned int samples)
|
||||
for (int i=0; i<samples; i++)
|
||||
{
|
||||
sum += mraa_aio_read(m_aio);
|
||||
if (sum == -1) return 0;
|
||||
usleep(2000);
|
||||
}
|
||||
|
||||
|
@ -54,6 +54,7 @@ float GUVAS12D::value(float aref, unsigned int samples)
|
||||
for (int i=0; i<samples; i++)
|
||||
{
|
||||
val = mraa_aio_read(m_aio);
|
||||
if (val == -1) return -1;
|
||||
sum += val;
|
||||
usleep(2000);
|
||||
}
|
||||
|
@ -55,6 +55,7 @@ float INA132::value()
|
||||
for(i=0;i<10;i++)
|
||||
{
|
||||
val = mraa_aio_read(m_aio);
|
||||
if (val == -1) return -1;
|
||||
v = val*5.00/1023;
|
||||
sum += v;
|
||||
usleep(10000);
|
||||
|
@ -75,6 +75,7 @@ Joystick12::~Joystick12() {
|
||||
|
||||
float Joystick12::getXInput() {
|
||||
float in = mraa_aio_read (m_joystickCtxX);
|
||||
if (in == -1.0) return -1;
|
||||
if (in < X_left) return -1;
|
||||
if (in < X_center) return -(X_center - in) / (X_center - X_left);
|
||||
if (in == X_center) return 0;
|
||||
@ -86,6 +87,7 @@ float Joystick12::getXInput() {
|
||||
|
||||
float Joystick12::getYInput() {
|
||||
float in = mraa_aio_read (m_joystickCtxY);
|
||||
if (in == -1.0) return -1;
|
||||
if (in < Y_left) return -1;
|
||||
if (in < Y_center) return -(Y_center - in) / (Y_center - Y_left);
|
||||
if (in == Y_center) return 0;
|
||||
|
@ -55,6 +55,9 @@ MAXSONAREZ::~MAXSONAREZ()
|
||||
int MAXSONAREZ::inches()
|
||||
{
|
||||
int val = mraa_aio_read(m_aio);
|
||||
if (val == -1) {
|
||||
return -1;
|
||||
}
|
||||
float volts = float(val) * (m_aref / m_aRes);
|
||||
|
||||
return int(volts / m_vI);
|
||||
|
@ -69,7 +69,11 @@ Microphone::getSampledWindow (unsigned int freqMS, int numberOfSamples,
|
||||
}
|
||||
|
||||
while (sampleIdx < numberOfSamples) {
|
||||
buffer[sampleIdx++] = mraa_aio_read (m_micCtx);
|
||||
int x = mraa_aio_read (m_micCtx);
|
||||
if (x == -1) {
|
||||
return 0;
|
||||
}
|
||||
buffer[sampleIdx++] = x;
|
||||
usleep(freqMS * 1000);
|
||||
}
|
||||
|
||||
|
@ -92,6 +92,10 @@ float OTP538U::ambientTemperature()
|
||||
for (int i=0; i<samples; i++)
|
||||
{
|
||||
val = mraa_aio_read(m_aioA);
|
||||
if (val == -1) {
|
||||
throw std::runtime_error(std::string(__FUNCTION__) +
|
||||
": failed to do aio read");
|
||||
}
|
||||
temp += val;
|
||||
usleep(10000);
|
||||
}
|
||||
@ -153,6 +157,11 @@ float OTP538U::objectTemperature()
|
||||
for (int i=0; i<samples; i++)
|
||||
{
|
||||
val = mraa_aio_read(m_aioO);
|
||||
if (val == -1) {
|
||||
throw std::runtime_error(std::string(__FUNCTION__) +
|
||||
": failed to do aio read.");
|
||||
return 0;
|
||||
}
|
||||
temp += val;
|
||||
usleep(10000);
|
||||
}
|
||||
|
@ -82,18 +82,22 @@ uint32_t TA12200::getMillis()
|
||||
}
|
||||
|
||||
|
||||
unsigned int TA12200::highestValue()
|
||||
int TA12200::highestValue()
|
||||
{
|
||||
unsigned int hiVal = 0;
|
||||
unsigned int val;
|
||||
int hiVal = 0;
|
||||
int val;
|
||||
uint32_t start = getMillis();
|
||||
|
||||
// 1 second
|
||||
while (getMillis() < (start + 1000))
|
||||
{
|
||||
val = mraa_aio_read(m_aio);
|
||||
if (val > hiVal)
|
||||
if (val == -1) {
|
||||
return -1;
|
||||
}
|
||||
if (val > hiVal) {
|
||||
hiVal = val;
|
||||
}
|
||||
}
|
||||
|
||||
return hiVal;
|
||||
|
@ -89,9 +89,9 @@ namespace upm {
|
||||
/**
|
||||
* Gets the conversion value from the sensor
|
||||
*
|
||||
* @return Highest value obtained over 1 second of measuring
|
||||
* @return Highest value obtained over 1 second of measuring or -1 if error
|
||||
*/
|
||||
unsigned int highestValue();
|
||||
int highestValue();
|
||||
|
||||
/**
|
||||
* Computes the measured voltage
|
||||
|
Loading…
x
Reference in New Issue
Block a user