Esempio n. 1
0
RBAPI(bool) i2cmaster_WriteLast(int dev, unsigned char val) {
    bool result = true;

    if (i2cmaster_Write(dev, val) == false) return false; else I2C_action[dev] = I2CACT_IDLE;

    // case of I2C RESTART after write
    if (I2C_rsInfo[dev].restart == true)
    {
        I2C_rsInfo[dev].restart = false;

        if (I2C_swMode[dev] != I2CSW_DISABLE)
            result = i2csw_Start(dev, I2C_rsInfo[dev].addr, I2C_rsInfo[dev].rwbit, true);
        else
            result = i2cmaster_Start1(dev, I2C_rsInfo[dev].addr, I2C_rsInfo[dev].rwbit);

        if (result == true)
        {
            I2C_action[dev] = (I2C_rsInfo[dev].rwbit == I2C_WRITE)? I2CACT_MASTERWRITE : I2CACT_MASTERREAD;
            I2C_count[dev]  = I2C_rsInfo[dev].count;
        }
        return result;
    }

    // case of I2C STOP after write
    if (I2C_swMode[dev] != I2CSW_DISABLE)
        i2csw_Stop(dev);
    else
    {
        i2cmaster_SetStopBit(dev);
        result = check_STOP_done(dev);
    }
    return result;
}
Esempio n. 2
0
RBAPI(bool) i2cmaster_WriteN(int dev, unsigned char val) {
    if (I2C_count[dev] == 0) return true; else I2C_count[dev]--; //lazy code:p (should return false with Err_Msg)

    if (I2C_count[dev] == 0)
        return i2cmaster_WriteLast(dev, val);
    else
    {
        if (i2cmaster_Write(dev, val) == true) return true;
    }

    I2C_count[dev] = 0;
    return false;
}
Esempio n. 3
0
RBAPI(bool) i2cmaster_WriteLast(int dev, unsigned char val) {
    if (i2cmaster_Write(dev, val) == false) return false; else I2C_action[dev] = I2CACT_IDLE;

    if (I2C_rsInfo[dev].restart == true)
    {
        I2C_rsInfo[dev].restart = false;
        if (i2cmaster_Start1(dev, I2C_rsInfo[dev].addr, I2C_rsInfo[dev].rwbit) == false) return false;

        I2C_count = I2C_rsInfo[dev].count;
        return true;
    }

    i2cmaster_SetStopBit(dev);
    return check_STOP_done(dev);
}