Getting started
Quick start
From unboxing to running code — four steps.
1. Install software
Download AISCToolkit for Windows. Includes WinUSB drivers, OmniControlPanel GUI, and the AISC Script compiler. Requires Windows 7 or later.
2. Connect the board
Plug in via USB. Windows installs the WinUSB driver automatically on first connection. The board LED blinks twice when the firmware handshake completes.
3. Open OmniControlPanel
Launch the GUI, select your board from the device list, and start reading analog inputs or toggling digital outputs — no code required for initial testing.
4. Integrate the DLL
Add AISClib.dll as a reference in your C# project. Call Connect(), then use any API function. The example project in the download package demonstrates every function.
Hardware docs
Datasheets
| Document | Contents | |
|---|---|---|
| Omni One Datasheet | Electrical specs, pinout, connector table, absolute maximum ratings, mechanical drawing | Request PDF |
| Omni Plus Datasheet | Omni One specs plus relay wiring diagrams, isolation ratings, and mains safety guidance | Request PDF |
| Token Plus Datasheet | Dual-processor architecture, SPI command reference, web API endpoint list, and enclosure dimensions | Request PDF |
| USB Protocol Reference | Complete frame format, all command IDs, request/response byte maps for custom host implementations | Request PDF |
Software
Downloads
| Package | Contents | Platform | |
|---|---|---|---|
| AISCToolkit | OmniControlPanel, AISC Script compiler, WinUSB drivers, C# example projects | Windows 7/10/11 | Request |
| AISClib.dll (x64) | .NET wrapper DLL for direct USB communication. Exposes all API functions. | Windows x64 | Request |
| Omni firmware source | TivaWare-based C firmware for Code Composer Studio. All command handlers included. | Cross-platform (CCS) | Request |
| Token Plus firmware | ESP8266 (Arduino SDK) + MSP430 (Energia) source code with SPI protocol implementation | Arduino IDE / Energia | Request |
Reference
AISClib.dll API reference
Initialize the connection with Connect(), then call any function. All functions block until the board responds (typical round-trip under 5ms over USB Full Speed).
| Function | Parameters | Returns | Description |
|---|---|---|---|
| Analog I/O | |||
| ReadAI(ch) | ch: 1–8 | float | Read analog input in volts. Range: ±20V. 12-bit resolution. |
| Digital I/O | |||
| ReadDI(ch) | ch: 1–8 | int (0/1) | Read optoisolated digital input state |
| WriteIO(ch, val) | ch: 1–8, val: 0/1 | void | Set LSD digital output state |
| Relay — Omni Plus only | |||
| WriteRly(ch, state) | ch: 1–4, state: 0/1 | void | Open (0) or close (1) relay contact |
| ReadRly(ch) | ch: 1–4 | int (0/1) | Read current relay state |
| UART | |||
| ConfigUART(port, baud) | port: 1–2, baud rate | void | Set UART baud rate (300–921600) |
| UARTWrite(port, data) | port: 1–2, byte[] | void | Transmit bytes |
| UARTRead(port) | port: 1–2 | byte[] | Read available bytes from receive buffer |
| SPI | |||
| ConfigSPI(cs, mode, freq) | cs: 1–5, mode: 0–3, Hz | void | Configure chip-select, CPOL/CPHA, clock frequency |
| SPITransfer(cs, tx) | cs: 1–5, byte[] | byte[] | Full-duplex transfer, returns simultaneously received bytes |
| I2C | |||
| ConfigI2C(addr, speed) | 7-bit addr, 100k/400k | void | Set target address and bus speed |
| I2CWrite(data) | byte[] | bool | Write bytes; returns false if NAK received |
| I2CRead(count) | count: 1–255 | byte[] | Read N bytes from the configured address |
| CAN | |||
| WriteCAN(id, data) | 11/29-bit ID, byte[] | void | Transmit CAN frame (standard or extended) |
| ReadCAN() | — | CANFrame | Read oldest pending frame. Returns null if buffer empty. |
| System | |||
| Connect() | — | bool | Open USB connection. Returns false if no board found. |
| Disconnect() | — | void | Release USB handle |
| GetDeviceInfo() | — | DeviceInfo | Firmware version, board type, capability flags |
Language reference
AISC Script
AISC Script is an assembly-like language for standalone board programs. Programs are compiled by AISCToolkit and stored in the board's EEPROM. Base address: 0x20000004.
| Instruction | Syntax | Description |
|---|---|---|
| INT | INT name | Declare an integer variable |
| READAI | READAI ch, var | Read analog input ch (1–8) into variable |
| READDIO | READDIO ch, var | Read digital input ch (1–8) into variable |
| WRITEDIO | WRITEDIO ch, val | Write digital output ch (1–8) with value 0 or 1 |
| ADD | ADD var, val | var = var + val |
| SUB | SUB var, val | var = var − val |
| MUL | MUL var, val | var = var × val |
| DIV | DIV var, val | var = var ÷ val |
| WAIT | WAIT ms | Delay for N milliseconds |
| JMP | JMP label | Unconditional jump |
| JEG | JEG var, val, label | Jump if var ≥ val |
| JEL | JEL var, val, label | Jump if var ≤ val |
| JE | JE var, val, label | Jump if var == val |
| JNE | JNE var, val, label | Jump if var != val |
| TAG | TAG0: | Define a jump label (TAG0 through TAG9) |
; Read AI channel 1, toggle DO 1 when signal exceeds ~2.4V
INT reading
TAG0:
READAI 1, reading
JEG reading, 5000, TAG1 ; 5000 ≈ 2.4V in ADC counts
WRITEDIO 1, 0 ; output off
JMP TAG0
TAG1:
WRITEDIO 1, 1 ; output on
WAIT 100
JMP TAG0
Low-level reference
USB frame protocol
For host applications not using AISClib.dll. All communication uses USB Bulk transfers (64-byte packets, Full Speed).
Frame structure (bytes):
H0 H1 H2 H3 AC Ty1 TY0 ID1 ID0 DL1 DL0 [data...]
H0–H3 Magic header: 0xAA 0x55 0xAA 0x55
AC Acknowledgment / control byte
Ty1TY0 Command type (big-endian 16-bit)
ID1ID0 Command ID (big-endian 16-bit)
DL1DL0 Data length (little-endian 16-bit)
| Type | Command |
|---|---|
| 0x0001 | GetDeviceInfo — returns firmware version and board identifier |
| 0x0002 | DIO Config — set channel directions and pull configuration |
| 0x0003 | Digital I/O — read DI channels or write DO channels |
| 0x0004 | Analog Config — set ADC sample rate and channel enable mask |
| 0x0005 | Read AI — returns raw ADC values for all enabled channels |
| 0x0006 | SPI Transfer — full-duplex, specify chip-select ID and data payload |
| 0x0007 | I2C — combined write/read with repeated-start support |
| 0x0008 | UART — configure port or queue transmit/receive data |
| 0x000A | CAN Transmit — send standard or extended CAN frame |
| 0x000B | CAN Receive — dequeue pending received frames |
WiFi development
Token Plus firmware development
The ESP8266 firmware uses the Arduino SDK / Espressif RTOS SDK. The MSP430 firmware uses Energia (TI's Arduino-compatible IDE for MSP430).
ESP8266 SPI driver
4 MHz HSPI master driver for the ESP8266-to-MSP430 link. Full-duplex, configurable CPOL/CPHA. Use spi_master_op() for transactions. The MSP430 acts as SPI slave on the same bus.
HTTP client
Async HTTP GET/POST client with 5 KB max payload. Callback-based response handling. Supports posting sensor readings to external endpoints or receiving commands from a cloud service.
MSP430 flash tool
MSPFlasher protocol for in-system programming via UART. Mass erase followed by Intel HEX download. Checksum verification (CKL/CKH) confirms successful write. Contact us for firmware images.
Support