Khepera III Toolbox/The Toolbox/Modules/i2c stream

The i2c_stream module implements a simple I2C data streaming protocol. The device from which data is streamed must implement that same protocol as well.

Synopsis
Check out the source code of the i2c_stream_read program for an example.

Description
This module uses the i2cal module to transfer data blocks from the external device (chip) to the program. It basically consists of two functions: The following four settings need to be provided to the module
 * i2c_stream_read_start, to start streaming
 * i2c_stream_read_next, which has to be called frequently (and in more or less regular intervals) to read the available data blocks
 * device: the I2C address of the device to query
 * reg: the I2C register from which the stream is read
 * block_size: the size of one block (in bytes)
 * block_count_max: the maximum number of blocks to transfer at once (this value must be <= 128 / block_size)

Streaming Protocol
The protocol used for data streaming is very simple: To reset the stream, the module first sends the register followed by a 1. To read a chunk, the module sends the register and then reads a multiple of (block_size + 1) bytes from the device. The first byte of a block is a status byte which can take one of the following values:
 * 255 (I2C_STREAM_BUFFER_OVERRUN): A buffer overrun occurred on the device, i.e. the blocks were not read fast enough.
 * 254 (I2C_STREAM_EMPTY): The block does not contain any data.
 * 0..253: the available number of blocks on the device