Home | History | Annotate | Download | only in max5487
      1 /*
      2  * Author: Yevgeniy Kiveisha <yevgeniy.kiveisha (at) 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 #include <mraa/spi.hpp>
     31 
     32 #define HIGH                    1
     33 #define LOW                     0
     34 
     35 namespace upm {
     36 
     37 /**
     38  * @brief MAX5487 Digital Potentiometer library
     39  * @defgroup max5487 libupm-max5487
     40  * @ingroup maxim spi digipot
     41  */
     42 /**
     43  * @library max5487
     44  * @sensor max5487
     45  * @comname MAX5487 Digital Potentiometer
     46  * @type digipot
     47  * @man maxim
     48  * @con spi
     49  *
     50  * @brief API for the MAX5487 SPI Digital Potentiometer
     51  *
     52  * Maxim Integrated*
     53  * [MAX5487](http://datasheets.maximintegrated.com/en/ds/MAX5487-MAX5489.pdf)
     54  * is a dual, 256-tap, nonvolatile, SPI, linear-taper digital
     55  * potentiometer. This module was tested on the  Maxim Integrated [MAX5487PMB1
     56  * PMOD module](http://datasheets.maximintegrated.com/en/ds/MAX5487PMB1.pdf)
     57  * from the analog PMOD kit.
     58  *
     59  * @snippet max5487.cxx Interesting
     60  */
     61 class MAX5487 {
     62     public:
     63         static const uint8_t R_WR_WIPER_A   = 0x01;
     64         static const uint8_t R_WR_WIPER_B   = 0x02;
     65 
     66         /**
     67          * Instantiates an MAX5487 object
     68          *
     69          * @param csn CSN to use, if any; by default, ICSP CS (-1) is used
     70          */
     71         MAX5487 (int csn = -1);
     72 
     73         /**
     74          * MAX5487 object destructor, closes all IO connections
     75          * no more needed as the connections will be closed when
     76          * m_spi and m_csnPinCtx will go out of scope
     77          * ~MAX5487 ();
     78          **/
     79 
     80         /**
     81          * Sets a wiper for port A.
     82          */
     83         void setWiperA (uint8_t wiper);
     84 
     85         /**
     86          * Sets a wiper for port B.
     87          */
     88         void setWiperB (uint8_t wiper);
     89 
     90         /**
     91          * Returns the name of the component
     92          */
     93         std::string name()
     94         {
     95             return m_name;
     96         }
     97     private:
     98         std::string m_name;
     99         mraa::Spi        m_spi;
    100         mraa::Gpio       m_csnPinCtx;
    101 
    102         /**
    103          * Sets the chip select pin to LOW
    104          */
    105         mraa::Result CSOn ();
    106 
    107         /**
    108          * Sets the chip select pin to HIGH
    109          */
    110         mraa::Result CSOff ();
    111 };
    112 
    113 }
    114