From f28dcabf45128e2ac3c3724b8a1a6c59b8ecdd08 Mon Sep 17 00:00:00 2001 From: xdavidwu Date: Thu, 30 Jun 2022 10:44:43 +0800 Subject: [PATCH] sensors: wrap errno into errors::error --- cmd/motion-control/main+gy801.ha | 10 +++++----- sensors/ADXL345/ADXL345.ha | 16 +++++++++++----- sensors/L3G4200D/L3G4200D.ha | 16 +++++++++++----- tools/sensors-dump/main+gy801.ha | 10 +++++----- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/cmd/motion-control/main+gy801.ha b/cmd/motion-control/main+gy801.ha index d500a73..51c1d56 100644 --- a/cmd/motion-control/main+gy801.ha +++ b/cmd/motion-control/main+gy801.ha @@ -1,4 +1,5 @@ use ahrs::complementary; +use errors; use fmt; use fs; use getopt; @@ -10,7 +11,6 @@ use net::ip; use net::udp; use os; use proto::control; -use rt; use sensors::ADXL345; use sensors::L3G4200D; use strconv; @@ -93,8 +93,8 @@ export fn main() int = { yield ADXL345; case let err: fs::error => fmt::fatalf("Cannot open i2c device: {}", fs::strerror(err)); - case let err: rt::errno => - fmt::fatalf("Cannot ioctl i2c device: {}", rt::strerror(err)); + case let err: errors::error => + fmt::fatalf("Cannot ioctl i2c device: {}", errors::strerror(err)); }; defer ADXL345::destroy(ADXL345); @@ -103,8 +103,8 @@ export fn main() int = { yield L3G4200D; case let err: fs::error => fmt::fatalf("Cannot open i2c device: {}", fs::strerror(err)); - case let err: rt::errno => - fmt::fatalf("Cannot ioctl i2c device: {}", rt::strerror(err)); + case let err: errors::error => + fmt::fatalf("Cannot ioctl i2c device: {}", errors::strerror(err)); }; defer L3G4200D::destroy(L3G4200D); diff --git a/sensors/ADXL345/ADXL345.ha b/sensors/ADXL345/ADXL345.ha index 6c75b4e..701117c 100644 --- a/sensors/ADXL345/ADXL345.ha +++ b/sensors/ADXL345/ADXL345.ha @@ -1,3 +1,4 @@ +use errors; use fmt; use fs; use i2c; @@ -6,28 +7,33 @@ use io; use os; use rt; -export fn new(bus: int) (ADXL345 | fs::error | rt::errno) = { +export fn new(bus: int) (ADXL345 | fs::error | errors::error) = { const path = fmt::asprintf("/dev/i2c-{}", bus); defer free(path); const file = os::open(path, fs::flags::RDONLY)?; - rt::ioctl(file, i2c::I2C_SLAVE, 0x53)?; + match (rt::ioctl(file, i2c::I2C_SLAVE, 0x53)) { + case let e: rt::errno => + return errors::errno(e); + case => + yield; + }; return alloc(ADXL345_impl { file = file, }); }; -export fn init(sensor: ADXL345) (void | rt::errno) = { +export fn init(sensor: ADXL345) (void | errors::error) = { i2c::smbus::write_byte_data(sensor.file, REG_POWER_CTL, POWER_CTL_MEASURE)?; i2c::smbus::write_byte_data(sensor.file, REG_DATA_FORMAT, DATA_FORMAT_FULL_RES)?; }; -fn read_data(sensor: ADXL345, reg: u8) (f64 | rt::errno) = { +fn read_data(sensor: ADXL345, reg: u8) (f64 | errors::error) = { const raw = i2c::smbus::read_word_data(sensor.file, reg)?; const raw = raw: i16; return raw: f64 * SCALE_FACTOR_FULL_RES; }; -export fn read(sensor: ADXL345) ((f64, f64, f64) | rt::errno) = { +export fn read(sensor: ADXL345) ((f64, f64, f64) | errors::error) = { return ( read_data(sensor, REG_DATAX0)?, read_data(sensor, REG_DATAY0)?, diff --git a/sensors/L3G4200D/L3G4200D.ha b/sensors/L3G4200D/L3G4200D.ha index f12d19b..ae992b3 100644 --- a/sensors/L3G4200D/L3G4200D.ha +++ b/sensors/L3G4200D/L3G4200D.ha @@ -1,3 +1,4 @@ +use errors; use fmt; use fs; use i2c; @@ -6,17 +7,22 @@ use io; use os; use rt; -export fn new(bus: int) (L3G4200D | fs::error | rt::errno) = { +export fn new(bus: int) (L3G4200D | fs::error | errors::error) = { const path = fmt::asprintf("/dev/i2c-{}", bus); defer free(path); const file = os::open(path, fs::flags::RDONLY)?; - rt::ioctl(file, i2c::I2C_SLAVE, 0x69)?; + match (rt::ioctl(file, i2c::I2C_SLAVE, 0x69)) { + case let e: rt::errno => + return errors::errno(e); + case => + yield; + }; return alloc(L3G4200D_impl { file = file, }); }; -export fn init(sensor: L3G4200D) (void | rt::errno) = { +export fn init(sensor: L3G4200D) (void | errors::error) = { smbus::write_byte_data(sensor.file, REG_CTRL_REG1, CTRL_REG1_PD | CTRL_REG1_Zen | CTRL_REG1_Yen | CTRL_REG1_Xen | CTRL_REG1_DR_100HZ)?; smbus::write_byte_data(sensor.file, REG_CTRL_REG2, CTRL_REG2_HPCF_0_05HZ_AT_100HZ)?; @@ -24,14 +30,14 @@ export fn init(sensor: L3G4200D) (void | rt::errno) = { smbus::write_byte_data(sensor.file, REG_CTRL_REG5, CTRL_REG5_OUT_HP_ONLY)?; }; -fn read_data(sensor: L3G4200D, reg: u8) (f64 | rt::errno) = { +fn read_data(sensor: L3G4200D, reg: u8) (f64 | errors::error) = { const raw = smbus::read_byte_data(sensor.file, reg)?; const raw2 = smbus::read_byte_data(sensor.file, reg + 1)?; const raw = (raw: u16 + (raw2: u16 << 8)): i16; return raw: f64 * FS_250DPS_So; }; -export fn read(sensor: L3G4200D) ((f64, f64, f64) | rt::errno) = { +export fn read(sensor: L3G4200D) ((f64, f64, f64) | errors::error) = { return ( read_data(sensor, REG_OUT_X_L)?, read_data(sensor, REG_OUT_Y_L)?, diff --git a/tools/sensors-dump/main+gy801.ha b/tools/sensors-dump/main+gy801.ha index bf1838a..0ac550a 100644 --- a/tools/sensors-dump/main+gy801.ha +++ b/tools/sensors-dump/main+gy801.ha @@ -1,11 +1,11 @@ use ahrs::complementary; use ahrs::tilt; use ahrs::integration; +use errors; use fmt; use fs; use io; use os; -use rt; use linux::timerfd; use math; use sensors::ADXL345; @@ -36,8 +36,8 @@ export fn main() void = { yield ADXL345; case let err: fs::error => fmt::fatalf("Cannot open i2c device: {}", fs::strerror(err)); - case let err: rt::errno => - fmt::fatalf("Cannot ioctl i2c device: {}", rt::strerror(err)); + case let err: errors::error => + fmt::fatalf("Cannot ioctl i2c device: {}", errors::strerror(err)); }; defer ADXL345::destroy(ADXL345); @@ -46,8 +46,8 @@ export fn main() void = { yield L3G4200D; case let err: fs::error => fmt::fatalf("Cannot open i2c device: {}", fs::strerror(err)); - case let err: rt::errno => - fmt::fatalf("Cannot ioctl i2c device: {}", rt::strerror(err)); + case let err: errors::error => + fmt::fatalf("Cannot ioctl i2c device: {}", errors::strerror(err)); }; defer L3G4200D::destroy(L3G4200D); -- 2.45.2