Commit a5b7afd5 authored by Gallacchi Mattia's avatar Gallacchi Mattia
Browse files

Add read and write

parent b045e655
Loading
Loading
Loading
Loading
+20 −11
Original line number Diff line number Diff line
@@ -84,8 +84,11 @@ namespace MCP2221A {
        unsigned char dummy = 0;

        for (unsigned char addr = I2C_MIN_ADDR; addr < I2C_MAX_ADDR; addr++) {
            if ((ret = Mcp2221_I2cWrite(handle_, sizeof(dummy), addr, I2C_7BIT_ADDRESS, &dummy)) < 0) {
                throw I2CMasterException(get_error_string(ret));
            // if ((ret = Mcp2221_I2cWrite(handle_, sizeof(dummy), addr, I2C_7BIT_ADDRESS, &dummy)) < 0) {
            //     throw I2CMasterException(get_error_string(ret));
            // }
            if ((ret = Mcp2221_I2cRead(handle_, sizeof(dummy), addr, I2C_7BIT_ADDRESS, &dummy)) < 0) {
                continue;
            }   
            slaves_addr_.push_back(addr);
        }
@@ -93,23 +96,29 @@ namespace MCP2221A {

    void I2CMaster::set_slave_address(uint8_t addr)
    {
        // Windows implementation to set slave address
        if (addr < I2C_MIN_ADDR || addr >= I2C_MAX_ADDR) {
            throw I2CMasterException("Invalid slave address: " + to_string(addr));
        }

    bool I2CMaster::check_slave_connected(uint8_t addr)
    {
        // Windows implementation to check if slave is connected
        return false;
        current_slave_addr_ = addr;
    }

    void I2CMaster::send(uint8_t slave_addr, uint8_t *data, size_t length) 
    {
        // Windows implementation to send data
        int ret = 0;

        if ((ret = Mcp2221_I2cWrite(handle_, static_cast<unsigned int>(length), slave_addr, I2C_7BIT_ADDRESS, data)) < 0) {
            throw I2CMasterException("I2C write failed: " + get_error_string(ret));
        }
    }

    void I2CMaster::receive(uint8_t slave_addr, uint8_t *data, size_t length) 
    {
        // Windows implementation to receive data
        int ret = 0;

        if ((ret = Mcp2221_I2cRead(handle_, static_cast<unsigned int>(length), slave_addr, I2C_7BIT_ADDRESS, data)) < 0) {
            throw I2CMasterException("I2C read failed: " + get_error_string(ret));
        }
    }

    void I2CMaster::read_register(uint8_t slave_addr, uint8_t reg_addr, uint8_t *data, size_t length)