15 using namespace aruna;
22 err_t FT_I2C::_write(uint8_t address, uint8_t reg, uint8_t *data,
size_t data_size) {
23 size_t write_size = 2 + data_size;
25 char *writebuffer = (
char *) malloc(write_size);
26 writebuffer[0] = ((address << 1) | 0b00000000);
28 for (
int i = 0; i < data_size; ++i) {
29 writebuffer[i + 2] = data[i];
31 if (Start(mpsse) == MPSSE_OK) {
32 if (Write(mpsse, writebuffer, write_size) == MPSSE_OK) {
33 if (GetAck(mpsse) == ACK)
39 if (Stop(mpsse) != MPSSE_OK)
45 err_t FT_I2C::_read(uint8_t address, uint8_t reg, uint8_t *buffer,
size_t buffer_size) {
48 const static size_t write_size = 2;
49 char write_buffer[write_size];
50 uint8_t *read_buffer = (uint8_t *) malloc(buffer_size);
51 write_buffer[0] = ((address << 1) | 0b00000000);
52 write_buffer[1] = reg;
53 if (Start(mpsse) == MPSSE_OK) {
54 if (Write(mpsse, write_buffer, write_size) == MPSSE_OK) {
55 if (GetAck(mpsse) == ACK) {
56 if (Start(mpsse) == MPSSE_OK) {
57 char w = ((address << 1) | 0b00000001);
58 if (Write(mpsse, &w, 1) == MPSSE_OK) {
59 if (GetAck(mpsse) == ACK) {
60 read_buffer = (uint8_t *)Read(mpsse, buffer_size);
61 memcpy(buffer, read_buffer, buffer_size);
74 if (Stop(mpsse) != MPSSE_OK)
80 FT_I2C::FT_I2C(
struct mpsse_context *mpsse) {
81 if (mpsse != NULL && !mpsse->open) {
82 log.
error(
"Failed to initialize MPSSE: %s", ErrorString(mpsse));
static const size_t ACK_TIME
static log::channel_t * log
int error(const char *format,...)
log error message