mraa  0.4.5
Low Level Skeleton Library for Communication on GNU/Linux platforms
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
i2c.hpp
1 /*
2  * Author: Brendan Le Foll <brendan.le.foll@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 
25 #pragma once
26 
27 #include "i2c.h"
28 
29 namespace mraa {
30 
38 class I2c {
39  public:
48  I2c(int bus, bool raw=false) {
49  if (raw)
50  m_i2c = mraa_i2c_init_raw(bus);
51  else
52  m_i2c = mraa_i2c_init(bus);
53  }
59  ~I2c() {
60  mraa_i2c_stop(m_i2c);
61  }
71  return mraa_i2c_frequency(m_i2c, hz);
72  }
81  return mraa_i2c_address(m_i2c, address);
82  }
88  unsigned char read() {
89  return (unsigned char) mraa_i2c_read_byte(m_i2c);
90  }
98  int read(char *data, size_t length) {
99  return mraa_i2c_read(m_i2c, (uint8_t*) data, (int) length);
100  }
108  std::string read(size_t length) {
109  char* data = (char*) malloc(sizeof(char) * length);
110  mraa_i2c_read(m_i2c, (uint8_t*) data, (int) length);
111  std::string str(data, (int) length);
112  free(data);
113  return str;
114  }
122  mraa_result_t write(char* data, size_t length) {
123  return mraa_i2c_write(m_i2c, (const unsigned char *)data, (int) length);
124  }
125 
133  mraa_result_t writeReg(char reg, char data) {
134  const unsigned char buf[2] = {(unsigned char) reg, (unsigned char) data};
135  return mraa_i2c_write(m_i2c, buf, 2);
136  }
137 
144  mraa_result_t write(char data) {
145  return mraa_i2c_write_byte(m_i2c, data);
146  }
147  private:
148  mraa_i2c_context m_i2c;
149 };
150 
151 }
mraa_result_t address(int address)
Definition: i2c.hpp:80
int read(char *data, size_t length)
Definition: i2c.hpp:98
int mraa_i2c_read(mraa_i2c_context dev, uint8_t *data, int length)
mraa_i2c_context mraa_i2c_init(int bus)
mraa_result_t mraa_i2c_write_byte(mraa_i2c_context dev, const uint8_t data)
mraa_result_t frequency(int hz)
Definition: i2c.hpp:70
mraa_result_t mraa_i2c_write(mraa_i2c_context dev, const uint8_t *data, int length)
std::string read(size_t length)
Definition: i2c.hpp:108
unsigned char read()
Definition: i2c.hpp:88
mraa_i2c_context mraa_i2c_init_raw(unsigned int bus)
struct _i2c * mraa_i2c_context
Definition: i2c.h:55
mraa_result_t write(char data)
Definition: i2c.hpp:144
mraa_result_t mraa_i2c_stop(mraa_i2c_context dev)
mraa_result_t mraa_i2c_frequency(mraa_i2c_context dev, int hz)
uint8_t mraa_i2c_read_byte(mraa_i2c_context dev)
mraa_result_t
Definition: types.h:49
mraa_result_t writeReg(char reg, char data)
Definition: i2c.hpp:133
~I2c()
Definition: i2c.hpp:59
API to Inter-Integrated Circuit.
Definition: i2c.hpp:38
mraa_result_t write(char *data, size_t length)
Definition: i2c.hpp:122
I2c(int bus, bool raw=false)
Definition: i2c.hpp:48
mraa_result_t mraa_i2c_address(mraa_i2c_context dev, int address)
Inter-Integrated Circuit.