411 REFERENCE · Wikibooks
Khepera III Toolbox/The Toolbox/Modules/i2c stream
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
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:
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
The following four settings need to be provided to the module
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