Included return value of I2C calls
This commit is contained in:
@@ -23,7 +23,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "watch_i2c.h"
|
#include "watch_i2c.h"
|
||||||
#include "i2c.h"
|
|
||||||
|
|
||||||
#ifdef I2C_SERCOM
|
#ifdef I2C_SERCOM
|
||||||
|
|
||||||
@@ -38,27 +37,31 @@ void watch_disable_i2c(void) {
|
|||||||
i2c_disable();
|
i2c_disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {
|
i2c_result_t watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {
|
||||||
i2c_write(addr, buf, length);
|
return i2c_write(addr, buf, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {
|
i2c_result_t watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {
|
||||||
i2c_read(addr, buf, length);
|
return i2c_read(addr, buf, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
void watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {
|
i2c_result_t watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {
|
||||||
uint8_t buf[2];
|
uint8_t buf[2];
|
||||||
buf[0] = reg;
|
buf[0] = reg;
|
||||||
buf[1] = data;
|
buf[1] = data;
|
||||||
|
|
||||||
watch_i2c_send(addr, (uint8_t *)&buf, 2);
|
return watch_i2c_send(addr, (uint8_t *)&buf, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t watch_i2c_read8(int16_t addr, uint8_t reg) {
|
uint8_t watch_i2c_read8(int16_t addr, uint8_t reg) {
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
|
|
||||||
watch_i2c_send(addr, (uint8_t *)®, 1);
|
if (watch_i2c_send(addr, (uint8_t *)®, 1) != I2C_RESULT_SUCCESS) {
|
||||||
watch_i2c_receive(addr, (uint8_t *)&data, 1);
|
return 0;
|
||||||
|
}
|
||||||
|
if (watch_i2c_receive(addr, (uint8_t *)&data, 1) != I2C_RESULT_SUCCESS) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
@@ -66,9 +69,12 @@ uint8_t watch_i2c_read8(int16_t addr, uint8_t reg) {
|
|||||||
uint16_t watch_i2c_read16(int16_t addr, uint8_t reg) {
|
uint16_t watch_i2c_read16(int16_t addr, uint8_t reg) {
|
||||||
uint16_t data;
|
uint16_t data;
|
||||||
|
|
||||||
watch_i2c_send(addr, (uint8_t *)®, 1);
|
if (watch_i2c_send(addr, (uint8_t *)®, 1) != I2C_RESULT_SUCCESS) {
|
||||||
watch_i2c_receive(addr, (uint8_t *)&data, 2);
|
return 0;
|
||||||
|
}
|
||||||
|
if (watch_i2c_receive(addr, (uint8_t *)&data, 2) != I2C_RESULT_SUCCESS) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,18 +82,24 @@ uint32_t watch_i2c_read24(int16_t addr, uint8_t reg) {
|
|||||||
uint32_t data;
|
uint32_t data;
|
||||||
data = 0;
|
data = 0;
|
||||||
|
|
||||||
watch_i2c_send(addr, (uint8_t *)®, 1);
|
if (watch_i2c_send(addr, (uint8_t *)®, 1) != I2C_RESULT_SUCCESS) {
|
||||||
watch_i2c_receive(addr, (uint8_t *)&data, 3);
|
return 0;
|
||||||
|
}
|
||||||
|
if (watch_i2c_receive(addr, (uint8_t *)&data, 3) != I2C_RESULT_SUCCESS) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return data << 8;
|
return data << 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t watch_i2c_read32(int16_t addr, uint8_t reg) {
|
uint32_t watch_i2c_read32(int16_t addr, uint8_t reg) {
|
||||||
uint32_t data;
|
uint32_t data;
|
||||||
|
|
||||||
watch_i2c_send(addr, (uint8_t *)®, 1);
|
if (watch_i2c_send(addr, (uint8_t *)®, 1) != I2C_RESULT_SUCCESS) {
|
||||||
watch_i2c_receive(addr, (uint8_t *)&data, 4);
|
return 0;
|
||||||
|
}
|
||||||
|
if (watch_i2c_receive(addr, (uint8_t *)&data, 4) != I2C_RESULT_SUCCESS) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@
|
|||||||
////< @file watch_i2c.h
|
////< @file watch_i2c.h
|
||||||
|
|
||||||
#include "watch.h"
|
#include "watch.h"
|
||||||
|
#include "i2c.h"
|
||||||
|
|
||||||
/** @addtogroup i2c I2C Controller Driver
|
/** @addtogroup i2c I2C Controller Driver
|
||||||
* @brief This section covers functions related to the SAM L22's built-I2C driver, including
|
* @brief This section covers functions related to the SAM L22's built-I2C driver, including
|
||||||
@@ -45,22 +46,25 @@ void watch_disable_i2c(void);
|
|||||||
* @param addr The address of the device you wish to talk to.
|
* @param addr The address of the device you wish to talk to.
|
||||||
* @param buf A series of unsigned bytes; the data you wish to transmit.
|
* @param buf A series of unsigned bytes; the data you wish to transmit.
|
||||||
* @param length The number of bytes in buf that you wish to send.
|
* @param length The number of bytes in buf that you wish to send.
|
||||||
|
* @return 0 if no error code, otherwise a code via i2c_result_t
|
||||||
*/
|
*/
|
||||||
void watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length);
|
i2c_result_t watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length);
|
||||||
|
|
||||||
/** @brief Receives a series of values from a device on the I2C bus.
|
/** @brief Receives a series of values from a device on the I2C bus.
|
||||||
* @param addr The address of the device you wish to hear from.
|
* @param addr The address of the device you wish to hear from.
|
||||||
* @param buf Storage for the incoming bytes; on return, it will contain the received data.
|
* @param buf Storage for the incoming bytes; on return, it will contain the received data.
|
||||||
* @param length The number of bytes that you wish to receive.
|
* @param length The number of bytes that you wish to receive.
|
||||||
|
* @return 0 if no error code, otherwise a code via i2c_result_t
|
||||||
*/
|
*/
|
||||||
void watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length);
|
i2c_result_t watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length);
|
||||||
|
|
||||||
/** @brief Writes a byte to a register in an I2C device.
|
/** @brief Writes a byte to a register in an I2C device.
|
||||||
* @param addr The address of the device you wish to address.
|
* @param addr The address of the device you wish to address.
|
||||||
* @param reg The register on the device that you wish to set.
|
* @param reg The register on the device that you wish to set.
|
||||||
* @param data The value that you wish to set the register to.
|
* @param data The value that you wish to set the register to.
|
||||||
|
* @return 0 if no error code, otherwise a code via i2c_result_t
|
||||||
*/
|
*/
|
||||||
void watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data);
|
i2c_result_t watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data);
|
||||||
|
|
||||||
/** @brief Reads a byte from a register in an I2C device.
|
/** @brief Reads a byte from a register in an I2C device.
|
||||||
* @param addr The address of the device you wish to address.
|
* @param addr The address of the device you wish to address.
|
||||||
|
|||||||
@@ -28,11 +28,17 @@ void watch_enable_i2c(void) {}
|
|||||||
|
|
||||||
void watch_disable_i2c(void) {}
|
void watch_disable_i2c(void) {}
|
||||||
|
|
||||||
void watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {}
|
i2c_result_t watch_i2c_send(int16_t addr, uint8_t *buf, uint16_t length) {
|
||||||
|
return I2C_RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
void watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {}
|
i2c_result_t watch_i2c_receive(int16_t addr, uint8_t *buf, uint16_t length) {
|
||||||
|
return I2C_RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
void watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {}
|
i2c_result_t watch_i2c_write8(int16_t addr, uint8_t reg, uint8_t data) {
|
||||||
|
return I2C_RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t watch_i2c_read8(int16_t addr, uint8_t reg) {
|
uint8_t watch_i2c_read8(int16_t addr, uint8_t reg) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user