From 70ba5a56ab03476c137ac64bd1d33fbac516634e Mon Sep 17 00:00:00 2001 From: Brendan Le Foll Date: Tue, 1 Jul 2014 13:51:03 +0100 Subject: [PATCH] i2c: allow binary strings as parameters to write() functions in scripting Signed-off-by: Brendan Le Foll --- api/mraa/i2c.hpp | 14 +++++++------- api/mraa/spi.hpp | 8 ++++---- examples/python/rgblcd.py | 7 ++++--- src/mraa.i | 4 ++++ 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/api/mraa/i2c.hpp b/api/mraa/i2c.hpp index 7a3e599..e67dd95 100644 --- a/api/mraa/i2c.hpp +++ b/api/mraa/i2c.hpp @@ -95,8 +95,8 @@ class I2c { * @param length Size of read * @return length of the read or 0 if failed */ - int read(unsigned char * data, int length) { - return mraa_i2c_read(m_i2c, data, length); + int read(char * data, size_t length) { + return mraa_i2c_read(m_i2c, (uint8_t*) data, (int) length); } /** * Write one byte to the bus @@ -105,8 +105,8 @@ class I2c { * @param length Size of buffer to send * @return Result of operation */ - mraa_result_t write(const unsigned char* data, int length) { - return mraa_i2c_write(m_i2c, data, length); + mraa_result_t write(char* data, size_t length) { + return mraa_i2c_write(m_i2c, (const unsigned char *)data, (int) length); } /** @@ -116,8 +116,8 @@ class I2c { * @param data Value to write to register * @return Result of operation */ - mraa_result_t writeReg(const unsigned char reg, const unsigned char data) { - const unsigned char buf[2] = {reg, data}; + mraa_result_t writeReg(char reg, char data) { + const unsigned char buf[2] = {(unsigned char) reg, (unsigned char) data}; return mraa_i2c_write(m_i2c, buf, 2); } @@ -127,7 +127,7 @@ class I2c { * @param data The byte to send on the bus * @return Result of operation */ - mraa_result_t write(const unsigned char data) { + mraa_result_t write(char data) { return mraa_i2c_write_byte(m_i2c, data); } private: diff --git a/api/mraa/spi.hpp b/api/mraa/spi.hpp index e7dda85..eb7fb45 100644 --- a/api/mraa/spi.hpp +++ b/api/mraa/spi.hpp @@ -75,8 +75,8 @@ class Spi { * @param data the byte to send * @return data received on the miso line */ - unsigned char write(uint8_t data) { - return (unsigned char) mraa_spi_write(m_spi, data); + unsigned char write(char data) { + return (unsigned char) mraa_spi_write(m_spi, (uint8_t) data); } /** * Write buffer of bytes to SPI device @@ -85,8 +85,8 @@ class Spi { * @param length size of buffer to send * @return char* data received on the miso line. Same length as passed in */ - unsigned char* write(uint8_t* data, int length) { - return (unsigned char*) mraa_spi_write_buf(m_spi, data, length); + unsigned char* write(char* data, size_t length) { + return (unsigned char*) mraa_spi_write_buf(m_spi, (uint8_t *) data, (int) length); } /** * Change the SPI lsb mode diff --git a/examples/python/rgblcd.py b/examples/python/rgblcd.py index 1497a4d..597dbbe 100644 --- a/examples/python/rgblcd.py +++ b/examples/python/rgblcd.py @@ -30,7 +30,8 @@ x = mraa.I2c(0) x.address(0x62) x.writeReg(0,0) x.writeReg(1,0) -x.writeReg(0x08,0xAA) -x.writeReg(0x04,255) -x.writeReg(0x02,255) +# Be careful that your i2c device can actually handle a 'batch' handling of +# such data, this is not typical in arduino type devices +s = "\x08\xAA\x04\x255\x02\x255" +x.write(s) diff --git a/src/mraa.i b/src/mraa.i index 5b56d66..7c6d216 100644 --- a/src/mraa.i +++ b/src/mraa.i @@ -1,4 +1,6 @@ %include carrays.i +%include stdint.i +%array_class(char, mraaBuffer); #ifdef DOXYGEN %include common_doc.i @@ -32,6 +34,8 @@ %rename(getPlatform) mraa_get_platform_type; %typemap(in) uint8_t = char; +%typemap(in) unsigned char* = char*; +%apply (char *STRING, size_t LENGTH) { (char *data, size_t length) }; %include "types.h" -- 2.7.4