From c3022697501adc027ee304a72cbc2a9b3a5f6e3f Mon Sep 17 00:00:00 2001 From: deadprogram Date: Tue, 8 Mar 2016 14:22:18 -0800 Subject: [PATCH] firmata: Call FirmataCurieIMU firmata plugin API to retrieve raw accelerometer data Signed-off-by: Ron Evans Signed-off-by: Brendan Le Foll --- examples/firmata_curie_imu.c | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/examples/firmata_curie_imu.c b/examples/firmata_curie_imu.c index 7569224..1564d11 100644 --- a/examples/firmata_curie_imu.c +++ b/examples/firmata_curie_imu.c @@ -29,9 +29,8 @@ #define FIRMATA_START_SYSEX 0xF0 #define FIRMATA_END_SYSEX 0xF7 -#define FIRMATA_I2C_REPLY 0x77 -#define FIRMATA_I2C_REQUEST 0x76 -#define I2C_MODE_READ 0x01 +#define FIRMATA_CURIE_IMU 0x11 +#define FIRMATA_CURIE_IMU_READ_ACCEL 0x00 void interrupt(uint8_t* buf, int length) @@ -46,53 +45,43 @@ main() //! [Interesting] /** - * This example reads from a firmata device the check buffer on a BMP085 on - * 0xD0 which should return 0x55. Obviously I2C_REPLY has to be disabled in - * firmata_pull for this to work breaking all i2c support for firmata + * This example reads from the FirmataCurieIMU plugin */ mraa_add_subplatform(MRAA_GENERIC_FIRMATA, "/dev/ttyACM0"); - mraa_firmata_context firm = mraa_firmata_init(FIRMATA_I2C_REPLY); + mraa_firmata_context firm = mraa_firmata_init(FIRMATA_CURIE_IMU); if (firm == NULL) { return EXIT_FAILURE; } mraa_firmata_response(firm, interrupt); - uint8_t* buffer = calloc(9, 0); + uint8_t* buffer = calloc(4, 0); if (buffer == NULL) { free(firm); return EXIT_FAILURE; } buffer[0] = FIRMATA_START_SYSEX; - buffer[1] = FIRMATA_I2C_REQUEST; - buffer[2] = 0x77; - buffer[3] = I2C_MODE_READ << 3; + buffer[1] = FIRMATA_CURIE_IMU; + buffer[2] = FIRMATA_CURIE_IMU_READ_ACCEL; + buffer[3] = FIRMATA_END_SYSEX; - // register to read from - buffer[4] = 0xD0 & 0x7f; - buffer[5] = (0xD0 >> 7) & 0x7f; - // number of bytes - buffer[6] = 1 & 0x7f; - buffer[7] = (1 >> 7) & 0x7f; - buffer[8] = FIRMATA_END_SYSEX; - - mraa_firmata_write_sysex(firm, buffer, 9); + mraa_firmata_write_sysex(firm, buffer, 4); sleep(1); // stop the isr and set it again mraa_firmata_response_stop(firm); mraa_firmata_response(firm, interrupt); - mraa_firmata_write_sysex(firm, buffer, 9); + mraa_firmata_write_sysex(firm, buffer, 4); sleep(1); // close everything and try again mraa_firmata_close(firm); - firm = mraa_firmata_init(FIRMATA_I2C_REPLY); + firm = mraa_firmata_init(FIRMATA_CURIE_IMU); mraa_firmata_response(firm, interrupt); - mraa_firmata_write_sysex(firm, buffer, 9); + mraa_firmata_write_sysex(firm, buffer, 4); sleep(10);