From af61f51e48ac14f2046904202ee169c4b3fe3b77 Mon Sep 17 00:00:00 2001 From: Mihai Tudor Panu Date: Fri, 9 Sep 2016 17:14:57 -0700 Subject: [PATCH] mic: added C sources for microphone sensor Signed-off-by: Mihai Tudor Panu --- src/mic/CMakeLists.txt | 13 +++--- src/mic/mic.c | 58 +++++++++++++++++++++++++++ src/mic/mic.h | 51 +++++++++++++++++++++++ src/mic/mic_fti.c | 91 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 208 insertions(+), 5 deletions(-) create mode 100644 src/mic/mic.c create mode 100644 src/mic/mic.h create mode 100644 src/mic/mic_fti.c diff --git a/src/mic/CMakeLists.txt b/src/mic/CMakeLists.txt index 12b5c627..c0188f2d 100644 --- a/src/mic/CMakeLists.txt +++ b/src/mic/CMakeLists.txt @@ -1,5 +1,8 @@ -set (libname "mic") -set (libdescription "Microphone simple API") -set (module_src ${libname}.cxx) -set (module_hpp ${libname}.hpp) -upm_module_init() +upm_mixed_module_init (NAME mic + DESCRIPTION "Simple Microphone API" + C_HDR mic.h + C_SRC mic.c + CPP_HDR mic.hpp + CPP_SRC mic.cxx + FTI_SRC mic_fti.c + REQUIRES mraa) \ No newline at end of file diff --git a/src/mic/mic.c b/src/mic/mic.c new file mode 100644 index 00000000..c6b7c350 --- /dev/null +++ b/src/mic/mic.c @@ -0,0 +1,58 @@ +/* + * Author: Brendan Le Foll + * Sisinty Sasmita Patra + * + * 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 "mic.h" + +mic_context upm_mic_init(int pin) +{ + mic_context dev = (mic_context)malloc(sizeof(struct _mic_context)); + + if(dev == NULL) return NULL; + + dev->analog_pin = pin; + dev->aio = mraa_aio_init(dev->analog_pin); + + if(dev->aio == NULL) + { + printf("unable to initialize the AIO pin"); + free(dev); + return NULL; + } + + return dev; +} + +void mic_close(mic_context dev) +{ + mraa_aio_close(dev->aio); + free(dev); +} + +upm_result_t mic_get_value(mic_context dev, float *micval) +{ + *micval = mraa_aio_read(dev->aio); + return UPM_SUCCESS; +} diff --git a/src/mic/mic.h b/src/mic/mic.h new file mode 100644 index 00000000..22fd5ddc --- /dev/null +++ b/src/mic/mic.h @@ -0,0 +1,51 @@ +/* + * Author: Brendan Le Foll + * Sisinty Sasmita Patra + * + * 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. + */ + +#ifndef MIC_H_ +#define MIC_H_ + +#pragma once +#include +#include + +#include "upm.h" +#include "mraa/aio.h" + +/** + * device context + */ +typedef struct _mic_context { + mraa_aio_context aio; + uint16_t analog_pin; +} *mic_context; + +mic_context mic_init(int pin); + +void mic_close(mic_context dev); + +upm_result_t mic_get_value(mic_context dev, float* micval); + +#endif /* MIC_H_ */ diff --git a/src/mic/mic_fti.c b/src/mic/mic_fti.c new file mode 100644 index 00000000..9d2b39b3 --- /dev/null +++ b/src/mic/mic_fti.c @@ -0,0 +1,91 @@ +/* + * Author: Brendan Le Foll + * Sisinty Sasmita Patra + * + * 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 "mic.h" +#include "upm_fti.h" + +/** + * This file implements the Function Table Interface (FTI) for this sensor + */ + +const char upm_mic_name[] = "Microphone"; +const char upm_mic_description[] = "Analog Microphone"; +const upm_protocol_t upm_mic_protocol[] = {UPM_ANALOG}; +const upm_sensor_t upm_mic_category[] = {UPM_AUDIO}; + +// forward declarations +const upm_sensor_descriptor_t upm_mic_get_descriptor(); +const void* upm_mic_get_ft(upm_sensor_t sensot_type); +void* upm_mic_init_name(); +void upm_mic_close(void* dev); +upm_result_t upm_mic_get_value(void* dev, float* micval, upm_audio_u unit); + +const upm_sensor_descriptor_t upm_mic_get_descriptor() { + upm_sensor_descriptor_t usd; + usd.name = upm_mic_name; + usd.description = upm_mic_description; + usd.protocol_size = 1; + usd.protocol = upm_mic_protocol; + usd.category_size = 1; + usd.category = upm_mic_category; + return usd; +} + +static const upm_sensor_ft ft = +{ + .upm_sensor_init_name = &upm_mic_init_name, + .upm_sensor_close = &upm_mic_close, + .upm_sensor_get_descriptor = &upm_mic_get_descriptor +}; + +static const upm_audio_ft aft = +{ + .upm_audio_get_value = &upm_mic_get_value +}; + +const void* upm_mic_get_ft(upm_sensor_t sensor_type) { + if(sensor_type == UPM_SENSOR) { + return &ft; + } + if(sensor_type == UPM_AUDIO) { + return &aft; + } + return NULL; +} + +void* upm_mic_init_name(){ + return NULL; +} + +void upm_mic_close(void* dev) +{ + mic_close((mic_context)dev); +} + +upm_result_t upm_mic_get_value(void* dev, float *micval, upm_audio_u unit) +{ + return mic_get_value((mic_context)dev, micval); +}