bmxx80: fix humidity sensing

It regressed in e9544992d9. :( This is due to
integer overflow. Tested against the executable compiled from periph v2.

Refactor the tests to make the error messages clearer.

Fixes #256
pull/1/head
Marc-Antoine Ruel 8 years ago
parent 206686751e
commit 161a9035d2

@ -46,7 +46,7 @@ func (d *Dev) sense280(e *physic.Env) error {
hRaw := int32(buf[6])<<8 | int32(buf[7]) hRaw := int32(buf[6])<<8 | int32(buf[7])
h := physic.RelativeHumidity(d.cal280.compensateHumidityInt(hRaw, tFine)) h := physic.RelativeHumidity(d.cal280.compensateHumidityInt(hRaw, tFine))
// Convert base 1024 to base 1000. // Convert base 1024 to base 1000.
e.Humidity = h * physic.MicroRH * 1000 / 1024 e.Humidity = h * 10000 / 1024 * physic.MicroRH
} }
return nil return nil
} }

@ -93,14 +93,14 @@ func TestSPISenseBME280_success(t *testing.T) {
// TODO(maruel): The values do not make sense but I think I burned my SPI // TODO(maruel): The values do not make sense but I think I burned my SPI
// BME280 by misconnecting it in reverse for a few minutes. It still "work" // BME280 by misconnecting it in reverse for a few minutes. It still "work"
// but fail to read data. It could also be a bug in the driver. :( // but fail to read data. It could also be a bug in the driver. :(
if e.Temperature != 62680*physic.MilliCelsius+physic.ZeroCelsius { if expected := 62680*physic.MilliCelsius + physic.ZeroCelsius; e.Temperature != expected {
t.Fatalf("temp %d", e.Temperature) t.Fatalf("temperature %s(%d) != %s(%d)", expected, expected, e.Temperature, e.Temperature)
} }
if e.Pressure != 99575933593750*physic.NanoPascal { if expected := 99575933593750 * physic.NanoPascal; e.Pressure != expected {
t.Fatalf("pressure %d", e.Pressure) t.Fatalf("pressure %s(%d) != %s(%d)", expected, expected, e.Pressure, e.Pressure)
} }
if e.Humidity != 99501*physic.TenthMicroRH { if expected := 995010 * physic.TenthMicroRH; e.Humidity != expected {
t.Fatalf("humidity %d", e.Humidity) t.Fatalf("humidity %s(%d) != %s(%d)", expected, expected, e.Humidity, e.Humidity)
} }
if err := s.Close(); err != nil { if err := s.Close(); err != nil {
t.Fatal(err) t.Fatal(err)
@ -331,14 +331,14 @@ func TestI2CSenseBMP280_success(t *testing.T) {
if err := dev.Sense(&e); err != nil { if err := dev.Sense(&e); err != nil {
t.Fatal(err) t.Fatal(err)
} }
if e.Temperature != 23720*physic.MilliCelsius+physic.ZeroCelsius { if expected := 23720*physic.MilliCelsius + physic.ZeroCelsius; e.Temperature != expected {
t.Fatalf("temp %d", e.Temperature) t.Fatalf("temperature %s(%d) != %s(%d)", expected, expected, e.Temperature, e.Temperature)
} }
if e.Pressure != 100942695312500*physic.NanoPascal { if expected := 100942695312500 * physic.NanoPascal; e.Pressure != expected {
t.Fatalf("pressure %d", e.Pressure) t.Fatalf("pressure %s(%d) != %s(%d)", expected, expected, e.Pressure, e.Pressure)
} }
if e.Humidity != 0 { if expected := 0 * physic.MilliRH; e.Humidity != expected {
t.Fatalf("humidity %d", e.Humidity) t.Fatalf("humidity %s(%d) != %s(%d)", expected, expected, e.Humidity, e.Humidity)
} }
if err := dev.Halt(); err != nil { if err := dev.Halt(); err != nil {
t.Fatal(err) t.Fatal(err)
@ -384,14 +384,14 @@ func TestI2CSenseBME280_success(t *testing.T) {
if err := dev.Sense(&e); err != nil { if err := dev.Sense(&e); err != nil {
t.Fatal(err) t.Fatal(err)
} }
if e.Temperature != 23720*physic.MilliCelsius+physic.ZeroCelsius { if expected := 23720*physic.MilliCelsius + physic.ZeroCelsius; e.Temperature != expected {
t.Fatalf("temp %d", e.Temperature) t.Fatalf("temperature %s(%d) != %s(%d)", expected, expected, e.Temperature, e.Temperature)
} }
if e.Pressure != 100942695312500*physic.NanoPascal { if expected := 100942695312500 * physic.NanoPascal; e.Pressure != expected {
t.Fatalf("pressure %d", e.Pressure) t.Fatalf("pressure %s(%d) != %s(%d)", expected, expected, e.Pressure, e.Pressure)
} }
if e.Humidity != 653056*physic.TenthMicroRH { if expected := 6530560 * physic.TenthMicroRH; e.Humidity != expected {
t.Fatalf("humidity %d", e.Humidity) t.Fatalf("humidity %s(%d) != %s(%d)", expected, expected, e.Humidity, e.Humidity)
} }
if err := dev.Halt(); err != nil { if err := dev.Halt(); err != nil {
t.Fatal(err) t.Fatal(err)
@ -516,14 +516,14 @@ func TestI2CSenseContinuous280_success(t *testing.T) {
case <-time.After(2 * time.Second): case <-time.After(2 * time.Second):
t.Fatal("failed") t.Fatal("failed")
} }
if e.Temperature != 23720*physic.MilliCelsius+physic.ZeroCelsius { if expected := 23720*physic.MilliCelsius + physic.ZeroCelsius; e.Temperature != expected {
t.Fatalf("temp %d", e.Temperature) t.Fatalf("temperature %s(%d) != %s(%d)", expected, expected, e.Temperature, e.Temperature)
} }
if e.Pressure != 100942695312500*physic.NanoPascal { if expected := 100942695312500 * physic.NanoPascal; e.Pressure != expected {
t.Fatalf("pressure %d", e.Pressure) t.Fatalf("pressure %s(%d) != %s(%d)", expected, expected, e.Pressure, e.Pressure)
} }
if e.Humidity != 653056*physic.TenthMicroRH { if expected := 6530560 * physic.TenthMicroRH; e.Humidity != expected {
t.Fatalf("humidity %d", e.Humidity) t.Fatalf("humidity %s(%d) != %s(%d)", expected, expected, e.Humidity, e.Humidity)
} }
// This cancels the previous channel and resets the interval. // This cancels the previous channel and resets the interval.
@ -545,14 +545,14 @@ func TestI2CSenseContinuous280_success(t *testing.T) {
case <-time.After(2 * time.Second): case <-time.After(2 * time.Second):
t.Fatal("failed") t.Fatal("failed")
} }
if e.Temperature != 23720*physic.MilliCelsius+physic.ZeroCelsius { if expected := 23720*physic.MilliCelsius + physic.ZeroCelsius; e.Temperature != expected {
t.Fatalf("temp %d", e.Temperature) t.Fatalf("temperature %s(%d) != %s(%d)", expected, expected, e.Temperature, e.Temperature)
} }
if e.Pressure != 100942695312500*physic.NanoPascal { if expected := 100942695312500 * physic.NanoPascal; e.Pressure != expected {
t.Fatalf("pressure %d", e.Pressure) t.Fatalf("pressure %s(%d) != %s(%d)", expected, expected, e.Pressure, e.Pressure)
} }
if e.Humidity != 653056*physic.TenthMicroRH { if expected := 6530560 * physic.TenthMicroRH; e.Humidity != expected {
t.Fatalf("humidity %d", e.Humidity) t.Fatalf("humidity %s(%d) != %s(%d)", expected, expected, e.Humidity, e.Humidity)
} }
if dev.Sense(&e) == nil { if dev.Sense(&e) == nil {
@ -763,7 +763,7 @@ func TestBme280Precision(t *testing.T) {
if e.Pressure != 15625*physic.MicroPascal/4 { if e.Pressure != 15625*physic.MicroPascal/4 {
t.Fatal(e.Pressure) t.Fatal(e.Pressure)
} }
if e.Humidity != physic.MicroRH*1000/1024 { if e.Humidity != 90*physic.TenthMicroRH {
t.Fatal(int(e.Humidity)) t.Fatal(int(e.Humidity))
} }
if err := bus.Close(); err != nil { if err := bus.Close(); err != nil {

@ -307,7 +307,7 @@ func (d *Dev) Precision(e *physic.Env) {
} }
if d.isBME { if d.isBME {
e.Humidity = physic.MicroRH * 1000 / 1024 e.Humidity = 10000 / 1024 * physic.MicroRH
} }
} }

Loading…
Cancel
Save