You really should provide more data like what system you're using, to which pins are the I^2C lines connected and so on.
Since I have to guess, here's what it looks to me:
if (SDA==1)
{
i_byte = (i_byte << 1) | 0x01;
}
else
{
i_byte = i_byte << 1;
}
if (SDA==1) I'd say that this tests the data pin to check if it's high or not. The whole procedure looks like it's meant to be used in a loop with i_byte being the read byte.
i_byte = (i_byte << 1) | 0x01; Here we shift the value of i_byte by one location to the left. So if it was 0000 0001, now it would be 0000 0010. In addition to that we use logical OR to add 0000 0001 to the end of the byte, so we'd get 0000 0011. As you can see, once we shifted the whole byte to the left, the zero we got is new data that wasn't there before. Since this happens when the SDA equals one, I'd say that we're adding the bit we just read to the end of the byte.
i_byte = i_byte << 1; This line seems to confirm my suspicion. If the SDA is not one, that is to say it is zero, we just move the last bit one place to the left and the zero we've got remains.
Next:
if(o_byte&0x80)
{
i2c_high_sda();
}
else
{
i2c_low_sda();
}
if(o_byte&0x80) This looks like a part of instruction series to me. The 0x80 tests if the most significant bit of the o_byte (which I guess is output byte) is one or zero. It's probably used with a series of ifs for each bit of the byte, so expect to find 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 too somewhere there.
So if the first bit is one, we do i2c_high_sda();. I'd say that if the bit is one, we set the output high.
Next we have: i2c_low_sda();. It happens if the condition isn't true, that is to say that the first bit of o_byte is zero. It would seems that it drives the SDA bit low and provides logical zero at the output.