diff --git a/src/grovemoisture/CMakeLists.txt b/src/grovemoisture/CMakeLists.txt index c7fbf14f..89faa382 100644 --- a/src/grovemoisture/CMakeLists.txt +++ b/src/grovemoisture/CMakeLists.txt @@ -1,5 +1,9 @@ -set (libname "grovemoisture") -set (libdescription "upm grove moisture module") -set (module_src ${libname}.cxx) -set (module_hpp ${libname}.hpp) -upm_module_init() +upm_mixed_module_init (NAME grovemoisture + DESCRIPTION "upm grove moisture module" + C_HDR moisture.h + C_SRC moisture.c + CPP_HDR grovemoisture.hpp + CPP_SRC grovemoisture.cxx + FTI_SRC grovemoisture_fti.c + CPP_WRAPS_C + REQUIRES libmraa) diff --git a/src/grovemoisture/grovemoisture_fti.c b/src/grovemoisture/grovemoisture_fti.c new file mode 100644 index 00000000..b4000cd8 --- /dev/null +++ b/src/grovemoisture/grovemoisture_fti.c @@ -0,0 +1,88 @@ +/* + * Author: Jon Trulson + * Abhishek Malik + * Copyright (c) 2016 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 "grovemoisture.h" +#include "upm_fti.h" + +/** + * This file implements the Function Table Interface (FTI) for this sensor + */ + +const char upm_grovemoisture_name[] = "Grove Moisture"; +const char upm_grovemoisture_description[] = "Analog Grove Moisture Sensor"; +const upm_protocol_t upm_grovemoisture_protocol[] = {UPM_ANALOG}; +const upm_sensor_t upm_grovemoisture_category[] = {UPM_MOISTURE}; + +// forward declarations +const void* upm_grovemoisture_get_ft(upm_sensor_t sensor_type); +void* upm_grovemoisture_init_name(); +void upm_grovemoisture_close(void* dev); +upm_result_t upm_grovemoisture_get_moisture(void* dev, int* moisture); + + +const upm_sensor_descriptor_t upm_grovemoisture_get_descriptor (){ + upm_sensor_descriptor_t usd; + usd.name = upm_grovemoisture_name; + usd.description = upm_grovemoisture_description; + usd.protocol_size = 1; + usd.protocol = upm_grovemoisture_protocol; + usd.category_size = 1; + usd.category = upm_grovemoisture_category; + return usd; +} + +static const upm_sensor_ft ft = +{ + .upm_sensor_init_name = &upm_grovemoisture_init_name, + .upm_sensor_close = &upm_grovemoisture_close, + .upm_sensor_get_descriptor = &upm_grovemoisture_get_descriptor +}; + +static const upm_moisture_ft mft = +{ + .upm_moisture_sensor_get_moisture = &upm_grovemoisture_get_moisture +}; + +const void* upm_grovemoisture_get_ft(upm_sensor_t sensor_type){ + if(sensor_type == UPM_MOISTURE){ + return &mft; + } + if(sensor_type == UPM_SENSOR){ + return &ft; + } + return NULL; +} + +void* upm_grovemoisture_init_name(){ + return NULL; +} + +void upm_grovemoisture_close(void* dev){ + grovemoisture_close((grovemoisture_context)dev); +} + +upm_result_t upm_grovemoisture_get_moisture(void* dev, int* moisture){ + return grovemoisture_get_moisture((grovemoisture_context)dev, moisture); +} diff --git a/src/grovemoisture/moisture.c b/src/grovemoisture/moisture.c new file mode 100644 index 00000000..f3387940 --- /dev/null +++ b/src/grovemoisture/moisture.c @@ -0,0 +1,61 @@ +/* + * Author: Jon Trulson + * Abhishek Malik + * Copyright (c) 2016 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 "moisture.h" + +grovemoisture_context grovemoisture_init(int pin) { + grovemoisture_context dev = + (grovemoisture_context) malloc(sizeof(struct _grovemoisture_context)); + + if (dev == NULL) { + printf("Unable to allocate memory for device context\n"); + return NULL; + } + + dev->analog_pin = pin; + dev->aio = mraa_aio_init(dev->analog_pin); + + if (dev->aio == NULL) { + printf("mraa_aio_init() failed.\n"); + free(dev); + + return NULL; + } + + return dev; +} + +void grovemoisture_close(grovemoisture_context dev) { + mraa_aio_close(dev->aio); + free(dev); +} + +upm_result_t grovemoisture_get_moisture(grovemoisture_context dev, + int* moisture) { + + *moisture = mraa_aio_read(dev->aio); + + return UPM_SUCCESS; +} diff --git a/src/grovemoisture/moisture.h b/src/grovemoisture/moisture.h new file mode 100644 index 00000000..d7785269 --- /dev/null +++ b/src/grovemoisture/moisture.h @@ -0,0 +1,74 @@ +/* + * Author: Jon Trulson + * Abhishek Malik + * Copyright (c) 2016 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. + */ + +#pragma once + +#include +#include +#include + +#include "upm.h" +#include "mraa/aio.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * device context + */ +typedef struct _grovemoisture_context { + mraa_aio_context aio; + uint16_t analog_pin; +} *grovemoisture_context; + +/** + * Init function + * + * @param pin analog pin number + * @return void* pointer to the sensor struct + */ +grovemoisture_context grovemoisture_init(int pin); + +/** + * Close function + * + * @param dev pointer to the sensor structure + */ +void grovemoisture_close(grovemoisture_context dev); + +/** + * Get Moisture function. + * + * @param dev pointer to the sensor struct + * @param moisture pointer that will be used to store the + * output value from the sensor + */ +upm_result_t grovemoisture_get_moisture(grovemoisture_context dev, + int* moisture); + +#ifdef __cplusplus +} +#endif