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; }
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; }
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); }