Rath_I2C.h

/**

  • @file Rath_I2C.h
  • @date 2021-10-25
  • @copyright Copyright (c) 2021
  • This is a library for the I2C peripheral.

*/

pragma once

include "Rath_core.h"

include "Wire.h"

namespace Rath {
class I2C {
public:
void init() {
Wire.begin();
}

  void masterReceive(uint16_t device_addr, uint8_t *buffer, uint16_t size, uint32_t timeout) {
    Wire.requestFrom((int)device_addr, size);
    while (Wire.available() < size) {}
    for (int i=0; i<size; i+=1) {
      buffer[i] = Wire.read();
    }
    
    //twi_readFrom(device_addr, buffer, size, 1);
  }
  
  void masterTransmit(uint16_t device_addr, uint8_t *buffer, uint16_t size, uint32_t timeout) {
    Wire.beginTransmission((int)device_addr);
    for (int i=0; i<size; i+=1) {
      Wire.write(buffer[i]);
    }
    Wire.endTransmission();

    //twi_writeTo(device_addr, buffer, size, 1, 1);
  }

  void readMemory(uint16_t device_addr, uint8_t mem_addr, uint8_t *buffer, uint16_t size, uint32_t timeout) {
    masterTransmit(device_addr, &mem_addr, 1, timeout);
    masterReceive(device_addr, buffer, size, timeout);
  }

  void writeMemory(uint16_t device_addr, uint8_t mem_addr, uint8_t *buffer, uint16_t size, uint32_t timeout) {
    uint8_t buf[size+1];
    buf[0] = mem_addr;
    for (int i=0; i<size; i+=1) {
      buf[i+1] = buffer[i];
    }
    masterTransmit(device_addr, buf, size + 1, timeout);
  }

};
};

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容