From e6de2924ad2206d1b7a26e7b2d5fc63ab571a1d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20G=C3=BCndo=C4=9Fan?= Date: Wed, 10 Feb 2016 22:23:26 +0100 Subject: [PATCH 1/5] drivers: mma8652: add mma8652_params_t for initialization --- drivers/include/mma8652.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/include/mma8652.h b/drivers/include/mma8652.h index 08534eaedb..b7c2fa630d 100644 --- a/drivers/include/mma8652.h +++ b/drivers/include/mma8652.h @@ -67,6 +67,16 @@ typedef struct { int16_t scale; /**< each count corresponds to (1/scale) g */ } mma8652_t; +/** + * @brief Data structure holding all the information needed for initialization + */ +typedef struct { + i2c_t i2c; /**< I2C bus used */ + uint8_t addr; /**< accelerometer's I2C address */ + uint8_t rate; /**< accelerometer's sampling rate */ + uint8_t scale; /**< accelerometer's scale factor */ +} mma8652_params_t; + /** * @brief MMA8652 accelerometer test. * This function looks for Device ID of the MMA8652 accelerometer. From 0ffb75b19caeba00c880fa3ff39b2dbb40c5e802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20G=C3=BCndo=C4=9Fan?= Date: Wed, 10 Feb 2016 22:26:55 +0100 Subject: [PATCH 2/5] pba-d-01-kw2x: add default values for mma8652_params --- boards/pba-d-01-kw2x/include/mma8652_params.h | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 boards/pba-d-01-kw2x/include/mma8652_params.h diff --git a/boards/pba-d-01-kw2x/include/mma8652_params.h b/boards/pba-d-01-kw2x/include/mma8652_params.h new file mode 100644 index 0000000000..14957c2d92 --- /dev/null +++ b/boards/pba-d-01-kw2x/include/mma8652_params.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2016 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup boards_pba-d-01-kw2x + * @{ + * + * @file + * @brief MMA8652 board specific configuration + * + * @author Cenk Gündoğan + */ + +#ifndef MMA8652_PARAMS_H +#define MMA8652_PARAMS_H + +#include "board.h" +#include "saul_reg.h" +#include "mma8652.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief MMA852 configuration + */ +static const mma8652_params_t mma8652_params[] = +{ + { + .i2c = MMA8652_I2C, + .addr = MMA8652_ADDR, + .rate = MMA8652_DATARATE_DEFAULT, + .scale = MMA8652_FS_RANGE_DEFAULT, + }, +}; + +/** + * @brief Additional meta information to keep in the SAUL registry + */ +static const saul_reg_info_t mma8652_saul_info[] = +{ + { + .name = "mma8652", + }, +}; + +#ifdef __cplusplus +} +#endif + +#endif /* MMA8652_PARAMS_H */ +/** @} */ From 2b3fc6d3b3212126aea94bd0c882e0c03ce50ad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20G=C3=BCndo=C4=9Fan?= Date: Wed, 10 Feb 2016 22:28:25 +0100 Subject: [PATCH 3/5] drivers/mma8652: add saul driver --- drivers/mma8652/mma8652_saul.c | 55 ++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 drivers/mma8652/mma8652_saul.c diff --git a/drivers/mma8652/mma8652_saul.c b/drivers/mma8652/mma8652_saul.c new file mode 100644 index 0000000000..5e48320895 --- /dev/null +++ b/drivers/mma8652/mma8652_saul.c @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2016 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup driver_mma8652 + * @{ + * + * @file + * @brief MMA8652 adaption to the RIOT actuator/sensor interface + * + * @author Cenk Gündoğan + * + * @} + */ + +#include +#include + +#include "saul.h" +#include "mma8652.h" + +static int read_acc(void *dev, phydat_t *res) +{ + int16_t x, y, z; + uint8_t status; + + mma8652_t *d = (mma8652_t *)dev; + mma8652_read(d, &x, &y, &z, &status); + + res->val[0] = x; + res->val[1] = y; + res->val[2] = z; + res->unit = UNIT_G; + res->scale = -3; + + return 3; +} + +static int write(void *dev, phydat_t *state) +{ + (void) dev; + (void) state; + return -ENOTSUP; +} + +const saul_driver_t mma8652_saul_driver = { + .read = read_acc, + .write = write, + .type = SAUL_SENSE_ACCEL, +}; From 8afe8cd14741c2156fc4dd23e9ff63c747198282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20G=C3=BCndo=C4=9Fan?= Date: Wed, 10 Feb 2016 22:32:48 +0100 Subject: [PATCH 4/5] pba-d-01-kw2x: add mma8652 as dependency for saul_default --- boards/pba-d-01-kw2x/Makefile.dep | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/boards/pba-d-01-kw2x/Makefile.dep b/boards/pba-d-01-kw2x/Makefile.dep index 9691ec390c..f566299123 100644 --- a/boards/pba-d-01-kw2x/Makefile.dep +++ b/boards/pba-d-01-kw2x/Makefile.dep @@ -2,3 +2,7 @@ ifneq (,$(filter gnrc_netif_default,$(USEMODULE))) USEMODULE += kw2xrf USEMODULE += gnrc_nomac endif + +ifneq (,$(filter saul_default,$(USEMODULE))) + USEMODULE += mma8652 +endif From 7d35c06ba4b760a34a420db156c9fea39c547386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cenk=20G=C3=BCndo=C4=9Fan?= Date: Wed, 10 Feb 2016 22:35:35 +0100 Subject: [PATCH 5/5] sys/auto_init: added initialization of mma8652 --- sys/auto_init/auto_init.c | 4 ++ sys/auto_init/saul/auto_init_mma8652.c | 79 ++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 sys/auto_init/saul/auto_init_mma8652.c diff --git a/sys/auto_init/auto_init.c b/sys/auto_init/auto_init.c index 3e91157e04..1d1f43d00a 100644 --- a/sys/auto_init/auto_init.c +++ b/sys/auto_init/auto_init.c @@ -234,6 +234,10 @@ void auto_init(void) extern void auto_init_lis3dh(void); auto_init_lis3dh(); #endif +#ifdef MODULE_MMA8652 + extern void auto_init_mma8652(void); + auto_init_mma8652(); +#endif #endif /* MODULE_AUTO_INIT_SAUL */ } diff --git a/sys/auto_init/saul/auto_init_mma8652.c b/sys/auto_init/saul/auto_init_mma8652.c new file mode 100644 index 0000000000..8aa79fb634 --- /dev/null +++ b/sys/auto_init/saul/auto_init_mma8652.c @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2016 Freie Universität Berlin + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + * + */ + +/** + * @ingroup auto_init_saul + * @{ + * + * @file + * @brief Auto initialization of MMA8652 accelerometer + * + * @author Cenk Gündoğan + * + * @} + */ + +#ifdef MODULE_MMA8652 + +#include "saul_reg.h" +#include "mma8652.h" +#include "mma8652_params.h" + +#define ENABLE_DEBUG (0) +#include "debug.h" + +/** + * @brief Define the number of configured sensors + */ +#define MMA8652_NUM (sizeof(mma8652_params)/sizeof(mma8652_params[0])) + +/** + * @brief Allocate memory for the device descriptors + */ +static mma8652_t mma8652_devs[MMA8652_NUM]; + +/** + * @brief Memory for the SAUL registry entries + */ +static saul_reg_t saul_entries[MMA8652_NUM]; + +/** + * @brief Reference the driver struct + * @{ + */ +extern saul_driver_t mma8652_saul_driver; +/** @} */ + +void auto_init_mma8652(void) +{ + for (int i = 0; i < MMA8652_NUM; i++) { + const mma8652_params_t *p = &mma8652_params[i]; + + DEBUG("[auto_init_saul] initializing mma8652 acc sensor\n"); + + if (mma8652_init(&mma8652_devs[i], p->i2c, p->addr, p->rate, p->scale) < 0) { + DEBUG("[auto_init_saul] error during initialization\n"); + return; + } + + if (mma8652_set_active(&mma8652_devs[i]) < 0) { + DEBUG("[auto_init_saul] error activating mma8652\n"); + return; + } + + saul_entries[i].dev = &(mma8652_devs[i]); + saul_entries[i].name = mma8652_saul_info[i].name; + saul_entries[i].driver = &mma8652_saul_driver; + saul_reg_add(&(saul_entries[i])); + } +} + +#else +typedef int dont_be_pedantic; +#endif /* MODULE_MMA8652 */