diff --git a/src/grovecollision/CMakeLists.txt b/src/grovecollision/CMakeLists.txt index 38a5b34d..38a57999 100644 --- a/src/grovecollision/CMakeLists.txt +++ b/src/grovecollision/CMakeLists.txt @@ -1,5 +1,9 @@ -set (libname "grovecollision") -set (libdescription "upm grovecollision sensor module") -set (module_src ${libname}.cxx) -set (module_hpp ${libname}.hpp) -upm_module_init("-lrt") +upm_mixed_module_init (NAME grovecollision + DESCRIPTION "upm grovecollisionsensor module" + C_HDR grovecollision.h + C_SRC grovecollision.c + CPP_HDR grovecollision.hpp + CPP_SRC grovecollision.cxx + FTI_SRC grovecollision_fti.c + CPP_WRAPS_C + REQUIRES mraa) \ No newline at end of file diff --git a/src/grovecollision/grovecollision.c b/src/grovecollision/grovecollision.c new file mode 100644 index 00000000..90c332af --- /dev/null +++ b/src/grovecollision/grovecollision.c @@ -0,0 +1,60 @@ + +/* + * Author: Zion Orent + * Abhishek Malik + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "grovecollision.h" + +mvs0608_context mvs0608_init(int pin){ + mvs0608_context dev = + (mvs0608_context)malloc(sizeof(struct _mvs0608_context)); + + if (!dev) + return NULL; + + dev->gpio_pin = pin; + dev->gpio = mraa_gpio_init(dev->gpio_pin); + + if(mraa_gpio_dir(dev->gpio, MRAA_GPIO_IN) != MRAA_SUCCESS) + { + free(dev); + return NULL; + } + + return dev; +} + +void mvs0608_close(mvs0608_context dev){ + free(dev); +} + +upm_result_t mvs0608_is_colliding(mvs0608_context dev, bool* collision_val){ + int value = mraa_gpio_read(dev->gpio); + + if(!value) + *collision_val = true; + else + *collision_val = false; + + return UPM_SUCCESS; +} diff --git a/src/grovecollision/grovecollision.h b/src/grovecollision/grovecollision.h new file mode 100644 index 00000000..559699ab --- /dev/null +++ b/src/grovecollision/grovecollision.h @@ -0,0 +1,90 @@ +/* + * Author: Zion Orent + * Abhishek Malik + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef MVS0608_H_ +#define MVS0608_H_ + +#include +#include +#include + +#include "upm.h" +#include "mraa/gpio.h" + +/** + * @brief MVS0608 - Grove Collision Sensor library + * @ingroup gpio accelerometer + */ + +/** + * @library mvs0608 + * @sensor mvs0608 + * @comname Grove Collision Sensor + * @type accelerometer + * @con gpio + * + * @brief API for the mvs0608 + * + * MVS0608 can detect whether any + * collision movement or vibration happens. + * It outputs a low pulse signal when vibration is detected. + * + * @image html grovecollision.jpg + * @snippet grovecollision.cxx Interesting + */ + +/** + * device context + */ +typedef struct _mvs0608_context { + mraa_gpio_context gpio; + uint8_t gpio_pin; +} *mvs0608_context; + +/** + * MVS0608 Initialization function + * + * @param pin number + * @return void* pointer to the sensor struct + */ +mvs0608_context mvs0608_init(int pin); + +/** + * MVS0608 Initialization function + * + * @param void* pointer to the sensor struct + */ +void mvs0608_close(mvs0608_context dev); + +/** + * This function tells you whether the sensor has + * collided with something or not. + * + * @param void* pointer to the sensor struct + * @param bool* pointer to hold the collision value + * @return upm_result_t UPM success/error code + */ +upm_result_t mvs0608_is_colliding(mvs0608_context dev, bool* collision_val); + +#endif /* MVS0608_H_ */ diff --git a/src/grovecollision/grovecollision_fti.c b/src/grovecollision/grovecollision_fti.c new file mode 100644 index 00000000..0d639878 --- /dev/null +++ b/src/grovecollision/grovecollision_fti.c @@ -0,0 +1,78 @@ +/* + * Author: Zion Orent + * Abhishek Malik + * Copyright (c) 2015 Intel Corporation. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#include "grovecollision.h" +#include "upm_fti.h" + +/** + * This file implements the Function Table Interface (FTI) for this sensor + */ + +const char upm_mvs0608_name[] = "MVS0608"; +const char upm_mvs0608_description[] = "MVS0608 Grove Collision sensor"; +const upm_protocol_t upm_mvs0608_protocol[] = {UPM_GPIO}; +const upm_sensor_t upm_mvs0608_category[] = {UPM_ELECTRICITY}; + +// forward declarations +const upm_sensor_descriptor_t upm_mvs0608_get_descriptor(); +const void* upm_mvs0608_get_ft(upm_sensor_t sensor_type); +void* upm_mvs0608_init_name(); +void upm_mvs0608_close(void* dev); + +const upm_sensor_descriptor_t upm_mvs0608_get_descriptor(){ + upm_sensor_descriptor_t usd; + usd.name = upm_mvs0608_name; + usd.description = upm_mvs0608_description; + usd.protocol_size = 1; + usd.protocol = upm_mvs0608_protocol; + usd.category_size = 1; + usd.category = upm_mvs0608_category; + return usd; +} + +static const upm_sensor_ft ft = +{ + .upm_sensor_init_name = &upm_mvs0608_init_name, + .upm_sensor_close = &upm_mvs0608_close, + .upm_sensor_get_descriptor = &upm_mvs0608_get_descriptor +}; + +const void* upm_mvs0608_get_ft(upm_sensor_t sensor_type){ + if(sensor_type == UPM_SENSOR){ + return &ft; + } + return NULL; +} + +void* upm_mvs0608_init_name(){ + return NULL; +} + +void upm_mvs0608_close(void* dev){ + mvs0608_close((mvs0608_context)dev); +} + +upm_result_t upm_mvs0608_is_colliding(void* dev, bool* collision_val){ + return mvs0608_is_colliding((mvs0608_context)dev, collision_val); +} \ No newline at end of file