i2c: use uint8_t throughout to make code clearer
[contrib/mraa.git] / api / i2c.h
index c9f806b..360f78a 100644 (file)
--- a/api/i2c.h
+++ b/api/i2c.h
 /*
- * Originally from mbed Microcontroller Library
- * Copyright (c) 2006-2013 ARM Limited
- * Copyright (c) 2014 Intel Corporation
+ * Author: Brendan Le Foll <brendan.le.foll@intel.com>
+ * Copyright (c) 2014 Intel Corporation.
  *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * 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:
  *
- *     http://www.apache.org/licenses/LICENSE-2.0
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
+ * 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
 
+/** @file
+ *
+ * This file defines the i2c interface for libmaa
+ *
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <stdlib.h>
 #include <stdio.h>
 #include <fcntl.h>
+#include <stdint.h>
+
+#include "maa.h"
 #include "gpio.h"
 
-typedef struct {
-    int hz;
-    int fh;
-    int addr;
-    gpio_t gpio;
-} i2c_t;
+/**
+ * Opaque pointer definition to the internal struct _i2c
+ */
+typedef struct _i2c* maa_i2c_context;
 
-int maa_i2c_init(i2c_t* dev);
+/** Initialise i2c context, using board defintions
+ *
+ * @param bus i2c bus to use
+ * @return maa_i2c_context i2c context ready for other calls.
+ */
+maa_i2c_context maa_i2c_init(int bus);
 
-/** Set the frequency of the I2C interface
+/** Initialise i2c context, passing in spi bus to use.
  *
- *  @param hz The bus frequency in hertz
+ * @param bus The i2c bus to use i.e. /dev/i2c-2 would be "2"
+ * @return maa_i2c_context i2c context ready for other calls.
  */
-void maa_i2c_frequency(i2c_t* dev, int hz);
+maa_i2c_context maa_i2c_init_raw(unsigned int bus);
 
-/** Checks to see if this I2C Slave has been addressed.
+/** Sets the frequency of the i2c context
+ *
+ *  @param dev the i2c context
+ *  @param hz The bus frequency in hertz
  *
- *  @returns
- *  A status indicating if the device has been addressed, and how
- *  - NoData            - the slave has not been addressed
- *  - ReadAddressed     - the master has requested a read from this slave
- *  - WriteAddressed    - the master is writing to this slave
- *  - WriteGeneral      - the master is writing to all slave
+ *  @return maa_result_t the maa result.
  */
-int maa_i2c_receive(i2c_t* dev);
+maa_result_t maa_i2c_frequency(maa_i2c_context dev, int hz);
 
-/** Read from an I2C master.
+/** Read from an i2c context
  *
+ *  @param dev the i2c context
  *  @param data pointer to the byte array to read data in to
- *  @param length maximum number of bytes to read
+ *  @param length max number of bytes to read
  *
- *  @returns
- *       0 on success,
- *   non-0 otherwise
+ *  @return maa_result_t the maa result.
  */
-int maa_i2c_read(i2c_t* dev, char *data, int length);
+maa_result_t maa_i2c_read(maa_i2c_context dev, uint8_t *data, int length);
 
-/** Read a single byte from an I2C master.
+/** Read a single byte from the i2c context
+ *
+ *  @param dev the i2c context
  *
- *  @returns
- *    the byte read
+ *  @return byte the result of the read or -1 if failed.
  */
-int maa_i2c_read_byte(i2c_t* dev);
+uint8_t maa_i2c_read_byte(maa_i2c_context dev);
 
-/** Write to an I2C master.
+/** Write to an i2c context
  *
- *  @param data pointer to the byte array to be transmitted
- *  @param length the number of bytes to transmite
+ *  @param dev the i2c context
+ *  @param data pointer to the byte array to be written
+ *  @param length the number of bytes to transmit
  *
- *  @returns
- *       0 on success,
- *   non-0 otherwise
+ *  @return maa_result_t the maa result.
  */
-int maa_i2c_write(i2c_t* dev, const char *data, int length);
+maa_result_t maa_i2c_write(maa_i2c_context dev, const uint8_t *data, int length);
 
-/** Write a single byte to an I2C master.
+/** Write a single byte to an i2c context
  *
+ *  @param dev the i2c context
  *  @data the byte to write
  *
- *  @returns
- *    '1' if an ACK was received,
- *    '0' otherwise
+ *  @return maa_result_t the maa result.
  */
-int maa_i2c_write_byte(i2c_t* dev, int data);
+maa_result_t maa_i2c_write_byte(maa_i2c_context dev, const uint8_t data);
 
-/** Sets the I2C slave address.
+/** Sets the i2c context address.
  *
+ *  @param dev the i2c context
  *  @param address The address to set for the slave (ignoring the least
  *  signifcant bit). If set to 0, the slave will only respond to the
  *  general call address.
+ *
+ *  @return maa_result_t the maa result.
  */
-void maa_i2c_address(i2c_t* dev, int address);
+maa_result_t maa_i2c_address(maa_i2c_context dev, int address);
 
-/** De-inits an i2c_t device
+/** De-inits an maa_i2c_context device
+ *
+ *  @param dev the i2c context
+ *
+ *  @return maa_result_t the maa result.
  */
-void maa_i2c_stop(i2c_t* dev);
+maa_result_t maa_i2c_stop(maa_i2c_context dev);
+
+#ifdef __cplusplus
+}
+#endif