Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Access step-by-step guides for configuring, updating, and maintaining your system.
Applicable to: K300 / K700 series systems
Guide to updating microcontroller (MCU) firmware using the ZMU utility on Windows and Linux systems.
Guide to updating USB PD firmware using the TI TPS6559x utility, including download and installation steps.
Guide to updating power sequence microcontroller (MCU) firmware using the Cobalt Power Sequence Updater utility on Windows and Linux.
Guide to installing touchscreen drivers on Ubuntu Linux for specific touchscreens requiring additional drivers, including download and installation steps.
How to locate your system's serial number via physical labels or software commands
This guide outlines the steps for returning your OnLogic system for warranty repair.













WMIC BIOS get serialnumberWMIC baseboard get serialnumberdmidecode -s system-serial-numbercat /sys/devices/virtual/dmi/id/product_serialkarbon_update.exe Karbon_v3.2.1.3.binchmod +x karbon_update && sudo ./karbon_update "some_update_binary.bin"wget http://static.onlogic.com/resources/firmware/utilities/karbon_update https://static.onlogic.com/resources/firmware/binaries/karbon/Karbon_v3.2.1.3.bin && chmod +x karbon_update && sudo ./karbon_update Karbon_v3.2.1.3.bin


How to format secondary storage drives
How to send the system event logs to OnLogic for analysis
First-time login and reinstallation procedure
Resolving display issues by enabling proprietary Nvidia GPU drivers on Ubuntu, using recovery mode.
How to use the barrel jack retention ziptie
A guide for creating a product quote from the OnLogic website.










































sudo snap install fwupdhx500@hx500-CometLake:~$ fwupdmgr get-updates
Updating lvfs
Downloading… [***]
Successfully downloaded new metadata:
<..>
├─UEFI CA:
│ │ Device ID: 5bc922b7bd1adb5b6f99592611404036bd9f42d0
│ │ Current version: 2011
│ │ Vendor: Microsoft (UEFI:Microsoft)
│ │ GUIDs: 26f42cba-9bf6-5365-802b-e250eb757e96 ← UEFI\VENDOR_Microsoft&NAME_Microsoft-UEFI-CA
│ │ c34a7e6a-bd86-5244-8bd0-7db66fd3c073 ← UEFI\CRT_E30CF09DABEAB32A6E3B07A7135245DE05FFB658
│ │ Device Flags: • Internal device
│ │ • Updatable
│ │ • Supported on remote server
│ │ • Needs a reboot after installation
│ │ • Signed Payload
│ │ • Can tag for emulation
│ │
│ └─Secure Boot Signature Database Configuration Update:
│ New version: 2023
│ Remote ID: lvfs
│ Release ID: 116503
│ Summary: UEFI Secure Boot Signature Database
│ License: Proprietary
<..>
│ Description:
│ This updates the 3rd Party UEFI Signature Database (the "db") to the latest release from Microsoft.It also adds the latest OptionROM UEFI Signature Database update.
HMI touchscreen optimization for industrial applications.
Set up, test, and establish serial communication between devices on Windows and Linux, including loopback testing and pinout verification.
Applicable to: K300 / K700 series systems




























openssl x509 -outform DER -in "microsoft corporation kek 2k ca 2023.crt" -out "microsoft corporation kek 2k ca 2023.cer"

import pykarbon.terminal as pkt
def callback_fn(arg):
if arg[3] == '0': #check if 3rd item from popdata() is 0
print("DI 3 --> LOW ", arg)
return True #return True to dev.set_do. sets output high
else: #if 3rd item from popdat() is anything other than 0
print("DI 3 --> HIGH", arg)
return False #return Flase to set_do. sets output low
i = 0
with pkt.Session() as dev:
dev.update_info(print_info=True) # Update and print configuration info
dev.set_do(0, False) # Set digital output zero low
while True: #create loop that runs forever
line = dev.popdata() #popdata will print out data in the queue
if line:
dev.set_do(0, callback_fn(line)) #returns data from queue as argument for use by callback_fn




Deploying the OnLogic Axial Edge Server with Intel 13th Gen Core i Processors and Intel Arc dGPU for video streaming to AWS Kinesis Video Streams
USB drive creation, booting into Clonezilla, and the restoration process.
Applicable to: Karbon 700 & Helix Series
Deploying AI Vision Application Containers at the edge using Ansible Automation Platform on OnLogic HX401 and AC101 systems























Using the media creation tool
Using the media creation tool



































































































































































IMPORTANT In some releases of Ubuntu, the 'pinctrl_elkhartlake' driver will timeout
during startup and crash during shutdown. You can utilize the method below to
address the issue, by disabling this driver module.
One method is to add "modprobe.blacklist=pinctrl_elkhartlake" to the kernel command
line.unzip ubuntu-elkhart-lake-pse-driver-main.zip -d ubuntu-elkhart-lake-pse-driver-main && cd ubuntu-elkhart-lake-pse-driver-maingit clone https://github.com/onlogic/ubuntu-elkhart-lake-pse-driver.git pse_heci
cd pse_heci$ sudo chmod +x install.sh && sudo ./install.sh$ sudo apt-get install build-essential flex bison libssl-dev libelf-dev$ sudo apt-get install linux-headers-$(uname -r)$ make$ sudo insmod pse.ko && dmesg
$ cd examples
$ make version
$ sudo ./versionVersion: 1.5.0.0
$ sudo rmmod pse$ sudo cp pse.ko /lib/modules/
$(uname -r)/kernel/drivers/hid/intel-ish-hid/
$ echo 'pse' | sudo tee -a /etc/modules-load.d/modules.conf$ sudo depmod -a$ sudo reboot now
$ sudo lsmod | grep pse$ cd examples
$ make version
$ sudo ./version$ make all/// ... int pse_client_connect(void)
int fd, ret;
struct ishtp_cc_data cc_data;
/// Prep input connection data
memcpy(&(cc_data.in_client_uuid), &pse_smhi_guid, sizeof(pse_smhi_guid));
/// Open the pse character device (fails if not root)
fd = open(PSE_CHRDEV, O_RDWR);
if (fd <= 0) {
printf("Failed to open the pse device file\n");
return fd;
}
/// Send the connection IOCTL
ret = ioctl(fd, IOCTL_ISHTP_CONNECT_CLIENT, &cc_data);
if (ret) {
printf("Failed to connect to the PSE over ISHTP/HECI\n");
return ret;
}
/// Return the file descriptor for use
return fd;NOTE When sending a command the 'is response' and 'status' bytes are ignored; these are only set by the firmware endpoint when sending data back to the host.typedef struct {
// The command 'class' of this message
uint8_t command;
// True when the message is a response from the PSE
bool is_response;
// If this command has follow-on body data
bool has_next;
// The packed command argument; exact data depends on the command
uint16_t argument;
// Status of the received command when responding; zero on success
uint8_t status;
} __packed heci_header_t;typedef struct {
/// Indicates the format of the following data
heci_data_kind_t kind: 8;
/// Length, in bytes, of the data portion
uint32_t length;
uint32_t padding;
/// Packed message body data
uint8_t data[MAX_HECI_DATA_LEN];
} __packed heci_body_t;/// pse_send_command(int fd, heci_command_id_t command, uint16_t data, heci_body_t * body)
size_t len;
/// Create the initial header
heci_header_t header = {
.status = 0,
.is_response = 0,
.has_next = body != NULL ? 1 : 0,
.command = (uint8_t)command,
.argument = data
};
/// Copy the header into the transmit buffer
memcpy(heci_tx_buffer, &header, sizeof(heci_header_t));
/// Add a body to the command if one is present
if (header.has_next) {
memcpy(heci_tx_buffer + sizeof(heci_header_t), body, sizeof(heci_body_t));
len = sizeof(heci_header_t) + sizeof(heci_body_t);
} else {
len = sizeof(heci_header_t);
}
write(fd, heci_tx_buffer, len);/// pse_read_response(int fd, heci_header_t *header, heci_body_t *body)
/// NOTE: Some file preparation occurs here; check sample code
/// Read the message header
length = read(fd, data, sizeof(heci_header_t));
if (length <= 0 || length != sizeof(heci_header_t)) {
printf("Failed reading header from the pse file (%i)\n", length);
return length;
}
memcpy(header, data, sizeof(heci_header_t));
/// If the header has followup data, read it
if (header->has_next && !body) {
printf("Warning: Returned body data was dropped!\n");
return length;
} else if (header->has_next) {
length = read(fd, data + sizeof(heci_header_t), sizeof(heci_body_t));
if (length <= 0 || length != sizeof(heci_body_t)) {
printf("Failed reading body from the pse file (%i)\n", length);
return length;
}
memcpy(body, data + sizeof(heci_header_t), sizeof(heci_body_t));
length = sizeof(heci_body_t) + sizeof(heci_header_t);
} else {
length = sizeof(heci_header_t);
}#include <stdio.h>
#include <unistd.h> // close
#include "pse.h" // pse_client_connect, pse_send_command, pse_read_response, heci_types
static int get_version(int fd) {
int ret;
heci_body_t body;
heci_version_t * version;
ret = pse_command_checked(fd, kHECI_SYS_INFO, 0, NULL, &body);
if (ret < 0) {
printf("Could not read the version information: %i\n", ret);
return ret;
} else if (ret == 0) {
printf("No version data returned from the PSE\n");
return -1;
}
version = (heci_version_t *)body.data;
printf("Version: %u.%u.%u.%u\n",
version->major, version->minor, version->hotfix, version->build);
return 0;
}
int main(void) {
int fd;
int ret;
fd = pse_client_connect();
if (fd <= 0) {
printf("Failed to establish a connection with the PSE\n");
return -1;
}
ret = get_version(fd);
close(fd);
return ret;
}$ wget https://static.onlogic.com/resources/firmware/utilities/pse_heci_v100.zip && unzip pse_heci_v100.zip -d pse_heci && cd pse_heciNOTE This driver was written for the 5.13.0-intel kernel. Running it against any other kernel version may require modification. At a minimum, the system requires an ISHTP bus device with UUID bb579a2e-cc54-4450-b1d0-5e7520dcad25, and the bundled additional source headers (intel-ish-hid-5.13) will need to be updated.Applicable to: K300 / K700 series systems
pip install pykarbonpythonimport pykarbon.pykarbon as pkdev = pk.Karbon()dev.show_info()dev.close()version
Description:
Reports the firmware version number and build date.
Uses the format: < version | date >
Parameters:
-
Example:
versionstatus
Description:
Reports the firmware version number and system dependent status
information.
Parameters:
-
Example:
statusget-voltage
Description:
Reports the current system input voltage.
This command is currently only available on the K700.
Parameters:
-
Example:
get-voltageconfig
Description:
Reports the current microcontroller configuration settings.
Parameters:
-
Example:
configsave-config
Description:
Saves any changes made.
This is a required step or any changes will revert after reboot. user-config [config-number]
Description:
Sets the currently active user configuration.
Parameters:
config-number --> The configuration number: 1 - 4
Example:
user-config 2set ignition-sense [enable]
Description:
Enables or disables ignition sensing. The system will turn on when
the ignition pin goes high, and power off if the pin falls for more
than the specified shutdown-timer.
This is achieved by emulating a front power button press, and can be
interrupt by the OS. Therefore, after the hard-off timer has expired,
the system will force a power down.
Parameters:
enable --> Enable or disable: 'on' or 'off'
Example:
set ignition-sense offset startup-timer [time]
Description:
Sets the delay before the system powers on after detecting ignition.
Parameters:
time --> Time delay in seconds: 0 - 9999 (s)
Example:
set startup-timer 15set shutdown-voltage [volts]
Description:
Designed to protect automotive systems from battery drain, the system
will turn off the input voltage drops below this level for more than
the specified shutdown-timer.
This is achieved by emulating a front power button press, and can be
interrupt by the OS. Therefore, after the hard-off timer has expired,
the system will force a power down.
Setting this voltage to a value of '6' or less disables the feature.
Parameters:
volts --> The low voltage shutdown level: 0 - Max System Voltage (V)
On the K700 this value may be a float (12.5, 19.2) but is
required to be an int (12, 19) on the K300.
Floating point shutdown voltages will be added to the K300 as
part of a future firmware update.
Example:
set shutdown-voltage 12set hotplug [enable]
Description:
Enables or disables display port hotplug detection.
Disabling hotplug detection will keep displays from re-arranging if a
monitor goes down. When disabled, the host will assume that all
displays are always connected.
Parameters:
enable --> Enable or disable: 'on' or 'off'
Example:
set hotplug onset shutdown-timer [time]
Description:
Sets the delay before the system powers off after ignition falls or
the system voltage drops below the safe level.
Parameters:
time --> Time delay in seconds: 0 - 9999 (s)
Example:
set shutdown-timer 20set hard-off-timer [time]
Description:
Sets the delay until the system forces a power off after ignition
falls or the system voltage drops below a safe level.
Parameters:
time --> Time delay in seconds: 0 - 9999 (s)
Example:
set hard-off-timer 150set boot-config [true | false]
Description:
Determines which user configuration is loaded when the system is
first connected to AC power. Only one configuration may have this
value set as true.
By default, user configuration one is loaded at boot.
Parameters:
true | false: If the config is loaded at boot: 'true' or 'false'
Example:
set boot-config trueset low-power-mode [on | off]
Description:
Enable or disable entering low power mode (ERP mode), after the system has been shutdown. On K700 systems, when both this feature and ignition-sense are enabled, the system will enter a 'very low power mode' and will only wake via ignition events.
Parameters:
on | off: If the system will enter low power mode: 'on' or 'off'
Example:
set low-power-mode oncan-message [id] [data]
Description:
Formats and sends a standard can data frame.
Parameters:
id --> The message id. A three character hex string (1 - 7FF)
data --> Data to transmit: A sixteen character hex string.
Example:
can-message 123 1122334455667788can-autobaud
Description:
Attempts to detect the baudrate and propagation delay of the bus.
This is achieved by sending messages with the id 7FF, and may not
work in every possible configuration.
To maintain a detected baudrate across hard power cycles, please see
the 'save-config' terminal command.
Parameters:
-
Example:
can-autobaudset can-baudrate [baud]
Description:
Sets the baudrate for CAN bus communication.
To maintain a set baudrate across hard power cycles, please see the
'save-config' terminal command.
Parameters:
baud --> The system baudrate, in thousands: 100 - 1000 (k)
Example:
set can-baudrate 1000dio-state
Description:
Reports the current logical states of the digital inputs/outputs.
This is represented by eight characters, each a '1' or '0'.
The bit order is: I0 - I1 - I2 - I3 - O0 - O1 - O2 - O3
Where 'I' is a digital input and 'O' is a digital output.
For example: 10010110
Parameters:
-
Example:
dio-stateset-do [value]
Description:
Sets the output state of the four digital outputs.
Parameters:
value --> A four character string of '1', '-' or '0'.
A '1' or '0' will set the output to the corresponding state,
while a '-' will not change the sate of the matching output pin.
Example:
set-do 0--1set dio-power-switch [enable]
Description:
When enabled, any of the front digital inputs can be used to power
the system on. Once the system is powered on, they will behave as a
typical digital input.
Parameters:
enable --> Enable or disable: 'on' or 'off'
Example:
set dio-power-switch on








Resource for Factor FR201 & FR202 systems, covering manuals, FAQs, setup, OS installation, hardware features, and troubleshooting guides.
tar -xf libftdi1-1.5.tar.bz2dtoverlay=i2c1,pins_44_45=on
dtoverlay=i2c-rtc,pcf85063a=on# Enable the audio output, I2C and SPI interfaces on the GPIO header. As these
# parameters related to the base device-tree they must appear *before* any
# other dtoverlay= specification
dtparam=audio=on
dtparam=i2c_arm=on
#dtparam=spi=ondtoverlay=spi4-1cs
dtoverlay=spi3-1cs,cs0_pin=24
dtoverlay=i2c5,pins12_13=on,baudrate=40000lshw
Network: DISABLEDcd /etc
cd netplan
sudo nano 50-cloud-init.yamlsudo netplan apply
rebootdtparam=pwr_led_trigger=backlight
drparam=pwr_led_activelow=ondtparam=pwr_led_trigger=default-on
dtparam=pwr_led_activelow=off



























































































































