1 /* 2 * Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com> 3 * Copyright (c) 2014 Intel Corporation. 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining 6 * a copy of this software and associated documentation files (the 7 * "Software"), to deal in the Software without restriction, including 8 * without limitation the rights to use, copy, modify, merge, publish, 9 * distribute, sublicense, and/or sell copies of the Software, and to 10 * permit persons to whom the Software is furnished to do so, subject to 11 * the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be 14 * included in all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 */ 24 #pragma once 25 26 #include <string> 27 #include <mraa/aio.hpp> 28 29 #include <mraa/gpio.hpp> 30 31 #include <mraa/spi.hpp> 32 33 #define HIGH 1 34 #define LOW 0 35 36 namespace upm { 37 38 /** 39 * @brief MAX31723 Temperature Sensor library 40 * @defgroup max31723 libupm-max31723 41 * @ingroup maxim spi temperature 42 */ 43 /** 44 * @library max31723 45 * @sensor max31723 46 * @comname MAX31723 Temperature Sensor 47 * @type temperature 48 * @man maxim 49 * @con spi 50 * 51 * @brief API for the MAX31723 Temperature Sensor 52 * 53 * Maxim Integrated* 54 * [MAX31723](http://datasheets.maximintegrated.com/en/ds/MAX31722-MAX31723.pdf) 55 * is a low-voltage 3-wire/SPI temperature sensor controller. This module was 56 * tested on the Maxim Integrated [MAX31732PMB1 PMOD 57 * module](http://datasheets.maximintegrated.com/en/ds/MAX31723PMB1.pdf) from 58 * the analog PMOD kit. 59 * 60 * @snippet max31723.cxx Interesting 61 */ 62 class MAX31723 { 63 public: 64 static const uint8_t R_STS_READ_CMD = 0x00; 65 static const uint8_t R_STS_WRITE_CMD = 0x80; 66 static const uint8_t R_TEMPERATURE_LSB = 0x01; 67 static const uint8_t R_TEMPERATURE_MSB = 0x02; 68 69 static const uint8_t B_CONT_READING = 0x00; 70 71 /** 72 * Instantiates an MAX31723 object 73 * 74 * @param bus Number of the used bus 75 * @param devAddr Address of the used I2C device 76 */ 77 MAX31723 (int csn); 78 79 /** 80 * MAXDS3231M object destructor; basically, it closes the I2C connection. 81 * it is not needed anymore, as the connections will be closed when 82 * m_spi and m_csnPinCtx variables will go out of scope 83 * ~MAX31723 (); 84 **/ 85 86 /** 87 * Gets the on-board temperature. 88 */ 89 short getTemperature (); 90 91 /** 92 * Returns the name of the component 93 */ name()94 std::string name() 95 { 96 return m_name; 97 } 98 private: 99 std::string m_name; 100 mraa::Spi m_spi; 101 mraa::Gpio m_csnPinCtx; 102 103 uint8_t readRegister (uint8_t reg); 104 void writeRegister (uint8_t reg, uint8_t data); 105 106 /** 107 * Sets the chip select pin to LOW 108 */ 109 mraa::Result CSOn (); 110 111 /** 112 * Sets the chip select pin to HIGH 113 */ 114 mraa::Result CSOff (); 115 }; 116 117 } 118