From 52807b101184c420d863b5c693e0f3b872494a79 Mon Sep 17 00:00:00 2001 From: Sebastian Reichel Date: Mon, 29 Oct 2012 13:41:19 +0100 Subject: improve itg3200 driver --- sensors/gyroscope/itg3200.vala | 43 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/sensors/gyroscope/itg3200.vala b/sensors/gyroscope/itg3200.vala index 9c33463..e616848 100644 --- a/sensors/gyroscope/itg3200.vala +++ b/sensors/gyroscope/itg3200.vala @@ -15,12 +15,25 @@ public class ITG3200 : I2CDevice, Gyroscope { public int[] rate { get; set; } + private int[] zero = new int[3]; /* ITG3200 14.375 LSBs per °/sec in radians */ - private static const double scale_factor = (1.0 / 14.375) * (180.0 / Math.PI); + private static const double scale = 14.375; public ITG3200(uint8 dev, uint8 addr = 0x68) throws I2CError { setup(dev, addr); + devsetup(); + } + + private void devsetup() throws I2CError { + if((get_byte(0x00) & 0x7e) != 0x68) + log("ITG3200", LogLevelFlags.LEVEL_ERROR, @"ITG3200: invalid device id"); + else + log("ITG3200", LogLevelFlags.LEVEL_DEBUG, @"ITG3200: correct device id"); + + /* setup FS_SEL for "proper operation" */ + set_byte(0x16, 0x18); + calibrate(); } public void init(KeyFile cfg) throws KeyFileError, I2CError { @@ -29,12 +42,30 @@ public class ITG3200 : I2CDevice, Gyroscope { var adapter = cfg.get_uint64("ITG3200", "i2c-adapter"); var address = cfg.get_uint64("ITG3200", "i2c-address"); setup((uint8) adapter, (uint8) address); + devsetup(); } public uint8 get_address() throws I2CError { return (uint8) get_byte(0x00); } + public void calibrate() throws I2CError { + uint8 samples = 10; + zero[AXIS.X] = 0; + zero[AXIS.Y] = 0; + zero[AXIS.Z] = 0; + + for(int i=0; i