ICI, Intelligent C-programmable I/O (i:zi)
The Intelligent C-programmable I/O (ICI) is a framework that allows users to format and process data in the RF module. ICI has access to resources such as the processing engine, the digital and RF interface, timers and memory. It enables network designers to create any sensor or controller interface, and, it can also pre-process data (Mist computing). All is programmed in high-level C code.
Three typical use cases for ICI:
- Sensor and/or controller interface directly to the module, removing the need for external circuits
- Mist computing to reduce bandwidth requirements and for fast response to local events
- Set up and manage the RF network
The Radiocrafts modules with ICI support are Over The Air (OTA) upgradable. This means that the user can update the user defined ICI firmware when the network is deployed and in full operation, so new sensors/controllers can be added when the need arises.
ICI uses an event handling architecture to enable “If-this-than-that” programming using high level API modules. Almost any application can be created in less than 100 lines of code.
The event handler reacts to a defined trigger and then performs the actions defined by the user. All code is hosted on the RF module.
This high-level abstraction layer in ICI allows designers with no understanding of a real time operating system — or knowledge of the chip-set architecture — to create an intelligent network node. For example, intelligent node coding can include:
- Initiating transmit to base-station based on local triggers
- Interfacing with any sensor or actuator, including complex bus interfaces
- Initiating complex event-driven control and/or transmit functions
- Processing of local signals
- Supporting advanced security measures
- Logging local data
- Creating local alarms
- Supporting an advanced RF protocol
An ICI code example
Example code to setup an application with I2C, GPIO, and periodic timer.
// I2C clock speed to the SHT35 sensor
// setup the button GPIO and event detection
GPIO.setHandler(GPIO_0, FALLING_EDGE, sendData);
// setup periodic timer events
readSensorTimer = Timer.create(PERIODIC, 30 * SECOND, readSensor);
If you are interested in the RIIoT™ Network solution that includes ICI, please click here.
If you want to know more about the RIIM™ Network solution that includes ICI, please click here.