1450N/A * Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved. 1450N/A * A word of explanation. During data transfers in the I2C protocol, 1450N/A * data never changes while the clock is high. The "start" and 'stop" 1450N/A * conditions are marked by doing just that. The "stop" condition 1450N/A * is signaled by raising the data line while the clock is high. 1450N/A * This condition should be as simple to implement as simply calling 1450N/A * set_sda(1). The problem here is that we can't count on the 1450N/A * initial states of either clock or data. 1450N/A * To make this work, we need to first make sure the data line is low 1450N/A * so we can raise it. However, in order to make sure that lowering 1450N/A * the data line doesn't generate a start condition, we must also make 1450N/A * sure the clock is low too. Thus, the sequence is: 1450N/A * raise data <= this is the actual "stop" 1450N/A * TODO: would it make sense to read the clock and data lines first 1450N/A * so we can skip these steps? 1450N/A * See above. A start condition is caused by data going low 1450N/A /* Read a byte from client without sending either ack or nack */ 1450N/A /* Read the bits high-to-low, write them out */ 1450N/A * One clock cycle is divided into four units of clock_interval. 1450N/A * The timing diagram looks like: 1450N/A * SDA _----____----___ (_=old data, -=new) 1450N/A * (This diagram illustrates four transfer cycles, this 1450N/A * function only executes one.) 1450N/A * We've transfered eight bits to the slave. Cycle the clock 1450N/A * one more time and let the slave acknowledge by pulling the 1450N/A * Slave devices can put a transfer on hold by holding the 1450N/A * clock low. This function waits up to 10 ms for the 1450N/A * clock to go high before returning error.