diff options
-rwxr-xr-x | inc/resource.h | 1 | ||||
-rw-r--r-- | inc/resource/resource_mcu90615.h | 30 | ||||
-rw-r--r-- | inc/resource/resource_mcu90615_internal.h | 22 | ||||
-rwxr-xr-x | inc/resource_internal.h | 1 | ||||
-rw-r--r-- | src/resource/resource_mcu90615.c | 100 |
5 files changed, 154 insertions, 0 deletions
diff --git a/inc/resource.h b/inc/resource.h index d91f671..db2f1e9 100755 --- a/inc/resource.h +++ b/inc/resource.h @@ -38,5 +38,6 @@ #include "resource/resource_tilt_sensor.h" #include "resource/resource_gas_detection_sensor.h" #include "resource/resource_sound_level_sensor.h" +#include "resource/resource_mcu90615.h" #endif /* __RCC_RESOURCE_H__ */ diff --git a/inc/resource/resource_mcu90615.h b/inc/resource/resource_mcu90615.h new file mode 100644 index 0000000..0670483 --- /dev/null +++ b/inc/resource/resource_mcu90615.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2019 SINO TECH Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __RESOURCE_MCU90615_H__ +#define __RESOURCE_MCU90615_H__ + +#if defined (__cplusplus) +extern "C" { +#endif + +extern int resource_read_mcu90615(double *target_object, double *target_ambient); + +#if defined (__cplusplus) +} +#endif + +#endif /* __RESOURCE_MCU90615_H__ */ diff --git a/inc/resource/resource_mcu90615_internal.h b/inc/resource/resource_mcu90615_internal.h new file mode 100644 index 0000000..a29e437 --- /dev/null +++ b/inc/resource/resource_mcu90615_internal.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2019 SINO TECH Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __RESOURCE_MCU90615_INTERNAL_H__ +#define __RESOURCE_MCU90615_INTERNAL_H__ + +extern void resource_close_mcu90615(int pin_num); + +#endif /* __RESOURCE_MCU90615_INTERNAL_H__ */ diff --git a/inc/resource_internal.h b/inc/resource_internal.h index 9de2070..4a6b4b0 100755 --- a/inc/resource_internal.h +++ b/inc/resource_internal.h @@ -37,6 +37,7 @@ #include "resource/resource_tilt_sensor_internal.h" #include "resource/resource_gas_detection_sensor_internal.h" #include "resource/resource_sound_level_sensor_internal.h" +#include "resource/resource_mcu90615_internal.h" #define PIN_MAX 40 diff --git a/src/resource/resource_mcu90615.c b/src/resource/resource_mcu90615.c new file mode 100644 index 0000000..56e5188 --- /dev/null +++ b/src/resource/resource_mcu90615.c @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2019 SINO TECH Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <peripheral_io.h> + +#include "log.h" +#include "resource_internal.h" + +#define UART_BUS 0 /* RPI3 - Tizen */ + +#define GPIO_UART 14 + +#define INPUT_SIZE 3 +#define OUTPUT_SIZE 9 + +static peripheral_uart_h g_uart_h = NULL; + +void resource_close_mcu90615(int pin_num) +{ + _I("MCU90615 is finishing...[%d]", pin_num); + resource_get_info(GPIO_UART)->opened = 0; + if (!g_uart_h) return; + + peripheral_uart_close(g_uart_h); + g_uart_h = NULL; +} + +int resource_read_mcu90615(double *target_object, double *target_ambient) +{ + int ret = PERIPHERAL_ERROR_NONE; + uint8_t data[INPUT_SIZE] = {0xA5, 0x45, 0xEA}; + uint8_t rdata[OUTPUT_SIZE] = {0, }; + + if (!g_uart_h) { + ret = peripheral_uart_open(UART_BUS, &g_uart_h); + retv_if(ret != PERIPHERAL_ERROR_NONE, -1); + + resource_get_info(GPIO_UART)->opened = 1; + resource_get_info(GPIO_UART)->close = resource_close_mcu90615; + + ret = peripheral_uart_set_baud_rate(g_uart_h, PERIPHERAL_UART_BAUD_RATE_115200); + goto_if(ret != PERIPHERAL_ERROR_NONE, error); + + ret = peripheral_uart_set_byte_size(g_uart_h, PERIPHERAL_UART_BYTE_SIZE_8BIT); + goto_if(ret != PERIPHERAL_ERROR_NONE, error); + + ret = peripheral_uart_set_parity(g_uart_h, PERIPHERAL_UART_PARITY_NONE); + goto_if(ret != PERIPHERAL_ERROR_NONE, error); + + ret = peripheral_uart_set_stop_bits(g_uart_h, PERIPHERAL_UART_STOP_BITS_1BIT); + goto_if(ret != PERIPHERAL_ERROR_NONE, error); + + ret = peripheral_uart_set_flow_control(g_uart_h, PERIPHERAL_UART_SOFTWARE_FLOW_CONTROL_NONE, PERIPHERAL_UART_HARDWARE_FLOW_CONTROL_NONE); + goto_if(ret != PERIPHERAL_ERROR_NONE, error); + + ret = peripheral_uart_write(g_uart_h, data, INPUT_SIZE); + goto_if(ret < 0, error); /* the number of bytes write on success, otherwise a negative error value */ + } + + ret = peripheral_uart_read(g_uart_h, rdata, OUTPUT_SIZE); + goto_if(ret < 0, error); /* the number of bytes write on success, otherwise a negative error value */ + +#ifdef DEBUG + _D("Read : %d", ret); +#endif + +#ifdef DEBUG + for (int i = 0; i < OUTPUT_SIZE; i++) { + _D("0x%X", rdata[i]); + } +#endif + + *target_object = (double) (rdata[4] << 8 | rdata[5]) / 100.0f; + *target_ambient = (double) (rdata[6] << 8 | rdata[7]) / 100.0f; + +#ifdef DEBUG + if (*target_object != 0.0f) + _D("Target Object : %f, Target Ambient : %f", target_object, target_ambient); +#endif + + return 0; + +error: + resource_close_mcu90615(GPIO_UART); + + return -1; +} |