From: Kiveisha Yevgeniy Date: Mon, 9 Jun 2014 15:37:33 +0000 (+0000) Subject: max44000: Added new sensor module X-Git-Tag: v0.1.2~8 X-Git-Url: http://review.tizen.org/git/?p=contrib%2Fupm.git;a=commitdiff_plain;h=38efe2d7a390002c9be564f65dc423fc14c7a514 max44000: Added new sensor module Signed-off-by: Kiveisha Yevgeniy --- diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index eff80df..3206cd7 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -12,6 +12,7 @@ add_executable (es08a es08a.cxx) add_executable (son-hcsr04 hcsr04.cxx) add_executable (oled-1308 oled-1308.cxx) add_executable (oled-1327 oled-1327.cxx) +add_executable (proximity max44000.cxx) include_directories (${PROJECT_SOURCE_DIR}/src/hmc5883l) include_directories (${PROJECT_SOURCE_DIR}/src/grove) @@ -22,6 +23,7 @@ include_directories (${PROJECT_SOURCE_DIR}/src/4digitdisplay) include_directories (${PROJECT_SOURCE_DIR}/src/nrf24l01) include_directories (${PROJECT_SOURCE_DIR}/src/servo) include_directories (${PROJECT_SOURCE_DIR}/src/hcsr04) +include_directories (${PROJECT_SOURCE_DIR}/src/max44000) target_link_libraries (compass hmc5883l ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (groveled grove ${CMAKE_THREAD_LIBS_INIT}) @@ -37,3 +39,4 @@ target_link_libraries (es08a servo ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (son-hcsr04 hcsr04 ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (oled-1308 i2clcd ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries (oled-1327 i2clcd ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries (proximity max44000 ${CMAKE_THREAD_LIBS_INIT}) diff --git a/examples/max44000.cxx b/examples/max44000.cxx new file mode 100644 index 0000000..404f544 --- /dev/null +++ b/examples/max44000.cxx @@ -0,0 +1,42 @@ +/* + * Author: Yevgeniy Kiveisha + * Copyright (c) 2014 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 +#include +#include "max44000.h" + +int +main(int argc, char **argv) +{ + //! [Interesting] + upm::MAX44000 *sensor = new upm::MAX44000(0, ADDR); + std::cout << "proximity value = " << sensor->getAmbient () << std::endl; + //! [Interesting] + + std::cout << "exiting application" << std::endl; + + delete sensor; + + return 0; +} diff --git a/src/max44000/CMakeLists.txt b/src/max44000/CMakeLists.txt new file mode 100644 index 0000000..db57a85 --- /dev/null +++ b/src/max44000/CMakeLists.txt @@ -0,0 +1,11 @@ +set (libname "max44000") +add_library (max44000 SHARED max44000.cxx) +include_directories (${MAA_INCLUDE_DIR}) +target_link_libraries (max44000 ${MAA_LIBRARIES}) + +install (TARGETS ${libname} DESTINATION lib/upm COMPONENT ${libname}) +install (FILES max44000.h DESTINATION include/upm COMPONENT ${libname}) + +cpack_add_component (${libname} DISPLAY_NAME ${libname} REQUIRED INSTALL_TYPES all) +set(CPACK_COMPONENT_${libname}_DESCRIPTION "libupm MAX44000") + diff --git a/src/max44000/jsupm_max44000.i b/src/max44000/jsupm_max44000.i new file mode 100644 index 0000000..c3dc7a6 --- /dev/null +++ b/src/max44000/jsupm_max44000.i @@ -0,0 +1,7 @@ +%module jsupm_max44000 + +%{ + #include "max44000.h" +%} + +%include "max44000.h" diff --git a/src/max44000/max44000.cxx b/src/max44000/max44000.cxx new file mode 100644 index 0000000..4205fc6 --- /dev/null +++ b/src/max44000/max44000.cxx @@ -0,0 +1,114 @@ +/* + * Author: Yevgeniy Kiveisha + * Copyright (c) 2014 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 +#include +#include + +#include "max44000.h" + +using namespace upm; + +MAX44000::MAX44000 (int bus, int devAddr) { + m_name = "MAX44000"; + + m_maxControlAddr = devAddr; + m_bus = bus; + + m_i2cMaxControlCtx = maa_i2c_init(m_bus); + + maa_result_t ret = maa_i2c_address(m_i2cMaxControlCtx, m_maxControlAddr); + if (ret != MAA_SUCCESS) { + fprintf(stderr, "Messed up i2c bus\n"); + } + + i2cWriteReg (MCR, 0x2C); + i2cWriteReg (TCR, 0x6); +} + +MAX44000::~MAX44000() { + maa_i2c_stop(m_i2cMaxControlCtx); +} + +uint16_t +MAX44000::getProximity () { + uint16_t data = 0; + + data = (i2cReadReg_8 (ALSDATA_HIGH) & 0x7F) << 8; + data = data | i2cReadReg_8 (ALSDATA_LOW); + + return data; +} + +uint16_t +MAX44000::getAmbient () { + uint16_t data = 0; + + data = (i2cReadReg_8 (ALSDATA_HIGH) & 0x7F) << 8; + data = data | i2cReadReg_8 (ALSDATA_LOW); + + return data; +} + +/* + * ************** + * private area + * ************** + */ +uint8_t +MAX44000::i2cReadReg_8 (int reg) { + uint8_t data; + + maa_i2c_address(m_i2cMaxControlCtx, m_maxControlAddr); + maa_i2c_write_byte(m_i2cMaxControlCtx, reg); + + maa_i2c_address(m_i2cMaxControlCtx, m_maxControlAddr); + maa_i2c_read(m_i2cMaxControlCtx, &data, 0x1); + + return data; +} + +uint16_t +MAX44000::i2cReadReg_16 (int reg) { + uint16_t data; + + maa_i2c_address(m_i2cMaxControlCtx, m_maxControlAddr); + maa_i2c_write_byte(m_i2cMaxControlCtx, reg); + + maa_i2c_address(m_i2cMaxControlCtx, m_maxControlAddr); + maa_i2c_read(m_i2cMaxControlCtx, (uint8_t *)&data, 0x2); + + return data; +} + +maa_result_t +MAX44000::i2cWriteReg (uint8_t reg, uint8_t value) { + maa_result_t error = MAA_SUCCESS; + + uint8_t data[2] = { reg, value }; + error = maa_i2c_address (m_i2cMaxControlCtx, m_maxControlAddr); + error = maa_i2c_write (m_i2cMaxControlCtx, data, 2); + + return error; +} diff --git a/src/max44000/max44000.h b/src/max44000/max44000.h new file mode 100644 index 0000000..88b997c --- /dev/null +++ b/src/max44000/max44000.h @@ -0,0 +1,108 @@ +/* + * Author: Yevgeniy Kiveisha + * Copyright (c) 2014 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 + +#define ADDR 0x4A // device address + +// registers address +#define ALSDATA_HIGH 0x04 // ambient sensor data high byte +#define ALSDATA_LOW 0x05 // ambient sensor data low byte +#define PRXDATA 0x15 // proximity sensor data +#define MCR 0x01 // Main Configuration Register +#define RCR 0x02 // Receive Configuration Register +#define TCR 0x03 // Transmit Configuration Register + +#define HIGH 1 +#define LOW 0 + +namespace upm { + +/** + * @brief C++ API for MAX44000 chip (Ambient and Infrared Proximity Sensor) + * + * This file defines the MAX44000 C++ interface for libmax44000 + * + * @snippet proximity.cxx Interesting + * + * PMOD pins for MAX44000PMB1 board + * + * ( -= J1 =- ) + * (1) - NUL + * (2) - IRQ + * (3) - SCL + * (4) - SDA + * (5) - GND + * (6) - VCC + * + */ +class MAX44000 { + public: + /** + * Instanciates a MAX44000 object + * + * @param bus number of used bus + * @param devAddr addres of used i2c device + */ + MAX44000 (int bus, int devAddr); + + /** + * MAX44000 object destructor, basicaly it close i2c connection. + */ + ~MAX44000 (); + + /** + * Read the proximity value from the chip (based on ambient data). + */ + uint16_t getProximity (); + /** + * Read the ambient value from the chip (based on ambient data). + */ + uint16_t getAmbient (); + + /** + * Return name of the component + */ + std::string name() + { + return m_name; + } + private: + uint16_t getALSData (); + uint16_t getPRXData (); + + uint8_t i2cReadReg_8 (int reg); + uint16_t i2cReadReg_16 (int reg); + maa_result_t i2cWriteReg (uint8_t reg, uint8_t value); + + std::string m_name; + + int m_maxControlAddr; + int m_bus; + maa_i2c_context m_i2cMaxControlCtx; +}; + +} diff --git a/src/max44000/pyupm_max44000.i b/src/max44000/pyupm_max44000.i new file mode 100644 index 0000000..3d38b76 --- /dev/null +++ b/src/max44000/pyupm_max44000.i @@ -0,0 +1,8 @@ +%module pyupm_max44000 + +%feature("autodoc", "3"); + +%include "max44000.h" +%{ + #include "max44000.h" +%}