2      Copyright (C) Dean Camera, 2010. 
   4   dean [at] fourwalledcubicle [dot] com 
  10 bool TWI_StartTransmission(const uint8_t SlaveAddress
, 
  11                            const uint8_t TimeoutMS
) 
  15                 bool     BusCaptured 
= false; 
  16                 uint16_t TimeoutRemaining
; 
  18                 TWCR 
= ((1 << TWINT
) | (1 << TWSTA
) | (1 << TWEN
)); 
  20                 TimeoutRemaining 
= (TimeoutMS 
* 100); 
  21                 while (TimeoutRemaining
-- && !(BusCaptured
)) 
  23                         if (TWCR 
& (1 << TWINT
)) 
  25                                 switch (TWSR 
& TW_STATUS_MASK
) 
  32                                                 TWCR 
= ((1 << TWINT
) | (1 << TWSTA
) | (1 << TWEN
)); 
  50                 TWCR 
= ((1 << TWINT
) | (1 << TWEN
)); 
  52                 TimeoutRemaining 
= (TimeoutMS 
* 100); 
  53                 while (TimeoutRemaining
--) 
  55                         if (TWCR 
& (1 << TWINT
)) 
  61                 if (!(TimeoutRemaining
)) 
  64                 switch (TWSR 
& TW_STATUS_MASK
) 
  70                                 TWCR 
= ((1 << TWINT
) | (1 << TWSTO
) | (1 << TWEN
));