File cl_api.h
Go to the documentation of this file
// Copyright © 2025-2026 Kvaser AB, all rights reserved
// This header was created for version 0.3.1 of CL API. It is intended to be ABI compatible between
// minor releases, starting with version 1.0.0
#ifndef CL_API_H
#define CL_API_H
// Generated header, do not edit manually!
#include <stdint.h>
#include <stddef.h>
// If building on windows and using the shared library version of cl_api, you
// need to define CL_API_USE_DLL. This can be done either through your build
// system or by defining it in code before including this header.
#if defined(CL_API_USE_DLL) && defined(_MSC_VER)
#define CL_API __declspec(dllimport)
#else
#define CL_API
#endif
#if defined(_WIN32)
#define CL_CC __stdcall
#else
#define CL_CC
#endif
#define CL_INTERFACE_STATUS_T_VERSION 1
typedef enum cl_status_t {
CL_STATUS_SUCCESS = 0,
CL_STATUS_OPERATION_NOT_PERMITTED = 10,
CL_STATUS_OPERATION_FAILED = 11,
CL_STATUS_OPERATION_NOT_SUPPORTED_BY_DEVICE = 12,
CL_STATUS_OPERATION_NOT_SUPPORTED_BY_INTERFACE = 13,
CL_STATUS_OPERATION_NOT_SUPPORTED_BY_DEVICE_FIRMWARE = 14,
CL_STATUS_UNKNOWN_NETWORK_ERROR = 102,
CL_STATUS_UNABLE_TO_CONNECT = 103,
CL_STATUS_SOCKET_WRITE_ERROR = 105,
CL_STATUS_SOCKET_READ_ERROR = 106,
CL_STATUS_FILE_OPEN_ERROR = 150,
CL_STATUS_FILE_READ_ERROR = 151,
CL_STATUS_THREADING_ERROR = 160,
CL_STATUS_NOT_IMPLEMENTED = 200,
CL_STATUS_BUFFER_TOO_SMALL = 201,
CL_STATUS_DEVICE_NOT_SUPPORTED_BY_CLIENT = 205,
CL_STATUS_INVALID_USAGE = 207,
CL_STATUS_INVALID_UTF8 = 208,
CL_STATUS_UNSPECIFIED_ERROR = 1000,
} cl_status_t;
typedef enum cl_firmware_update_result_t {
CL_UF_STATUS_SUCCESS = 0,
CL_UF_STATUS_TRANSFER_ERROR = 1,
CL_UF_STATUS_FIRMWARE_FAILED_SIGNATURE_CHECK = 2,
CL_UF_STATUS_FIRMWARE_CORRUPT = 3,
CL_UF_STATUS_FIRMWARE_FOR_OTHER_DEVICE = 4,
CL_UF_STATUS_UNKNOWN_ERROR = 5,
} cl_firmware_update_result_t;
typedef enum cl_interface_type_t {
CL_INTERFACE_TYPE_T1 = 0,
_RESERVED = 1,
CL_INTERFACE_TYPE_T = 2,
} cl_interface_type_t;
enum cl_link_speed_t
#ifdef __cplusplus
: uint32_t
#endif // __cplusplus
{
CL_ETH_LINK_SPEED_INVALID = 0,
CL_ETH_LINK_SPEED_10MBIT_HALF_DUPLEX = 1,
CL_ETH_LINK_SPEED_10MBIT_FULL_DUPLEX = 2,
CL_ETH_LINK_SPEED_100MBIT_HALF_DUPLEX = 4,
CL_ETH_LINK_SPEED_100MBIT_FULL_DUPLEX = 8,
CL_ETH_LINK_SPEED_1000MBIT_HALF_DUPLEX = 16,
CL_ETH_LINK_SPEED_1000MBIT_FULL_DUPLEX = 32,
};
#ifndef __cplusplus
typedef uint32_t cl_link_speed_t;
#endif // __cplusplus
enum cl_link_role_t
#ifdef __cplusplus
: uint32_t
#endif // __cplusplus
{
CL_ETH_LINK_ROLE_INVALID = 0,
CL_ETH_LINK_ROLE_LEADER = 1,
CL_ETH_LINK_ROLE_LEADER_PREFERRED = 2,
CL_ETH_LINK_ROLE_FOLLOWER = 4,
CL_ETH_LINK_ROLE_FOLLOWER_PREFERRED = 8,
};
#ifndef __cplusplus
typedef uint32_t cl_link_role_t;
#endif // __cplusplus
typedef enum cl_link_state_t {
CL_ETH_LINK_STATE_DOWN,
CL_ETH_LINK_STATE_UP,
} cl_link_state_t;
typedef enum cl_tc10_state_t {
CL_TC10_STATE_NORMAL = 0,
CL_TC10_STATE_SLEEP = 1,
CL_TC10_STATE_SLEEP_FAILED = 2,
CL_TC10_STATE_SLEEP_ABORTED = 3,
CL_TC10_STATE_UNKNOWN = 4,
} cl_tc10_state_t;
typedef enum cl_tc10_command_t {
CL_TC10_CMD_SLEEP = 0,
CL_TC10_CMD_WAKE_UP = 1,
} cl_tc10_command_t;
typedef enum cl_aneg_mode_t {
CL_ETH_ANEG_MODE_DISABLED = 0,
CL_ETH_ANEG_MODE_IEEE_ANEG_ENABLED = 1,
} cl_aneg_mode_t;
typedef struct cl_client_t cl_client_t;
typedef struct cl_device_iterator_t cl_device_iterator_t;
typedef struct cl_device_list_t cl_device_list_t;
typedef struct cl_device_t cl_device_t;
typedef struct cl_interface_iterator_t cl_interface_iterator_t;
typedef struct cl_interface_list_t cl_interface_list_t;
typedef struct cl_interface_t cl_interface_t;
typedef struct cl_device_list_t *cl_device_list_ptr_t;
typedef struct cl_interface_list_t *cl_interface_list_ptr_t;
typedef struct cl_firmware_update_callbacks_t {
void *user_data;
void (CL_CC *update_starting)(void *user_data, size_t total_transfer_bytes);
void (CL_CC *report_progress)(void *user_data, size_t transferred_bytes);
void (CL_CC *start_finalizing)(void *user_data);
void (CL_CC *update_finished)(void *user_data, enum cl_firmware_update_result_t update_result);
} cl_firmware_update_callbacks_t;
typedef struct cl_eth_interface_status_t {
cl_link_speed_t link_speed;
cl_link_role_t link_role;
enum cl_link_state_t link_state;
} cl_eth_interface_status_t;
typedef struct cl_interface_status_t {
size_t struct_size;
uint32_t struct_version;
enum cl_interface_type_t interface_type;
struct cl_eth_interface_status_t eth_interface_status;
} cl_interface_status_t;
typedef struct cl_eth_config_t {
uint32_t link_speed;
uint32_t link_role;
enum cl_aneg_mode_t aneg_mode;
} cl_eth_config_t;
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
CL_API void CL_CC cl_get_api_version(uint32_t *major, uint32_t *minor, uint32_t *patch);
CL_API enum cl_status_t CL_CC cl_format_ean(uint64_t ean, char *buffer, size_t buffer_size);
CL_API
enum cl_status_t CL_CC cl_format_serial_number(uint64_t serial_number,
char *buffer,
size_t buffer_size);
CL_API
struct cl_client_t *CL_CC cl_client_create(void);
CL_API void CL_CC cl_client_destroy(struct cl_client_t *client);
CL_API
enum cl_status_t CL_CC cl_client_scan_for_devices(struct cl_client_t *client,
cl_device_list_ptr_t *device_list);
CL_API
enum cl_status_t CL_CC cl_client_scan_for_devices_with_timeout(struct cl_client_t *client,
cl_device_list_ptr_t *device_list,
uint32_t timeout_ms);
CL_API
struct cl_device_t *CL_CC cl_device_list_find_by_index(size_t index,
cl_device_list_ptr_t device_list);
CL_API
struct cl_device_t *CL_CC cl_device_list_find_by_info(const uint64_t *ean,
uint64_t serial_number,
cl_device_list_ptr_t device_list);
CL_API void CL_CC cl_device_list_destroy(cl_device_list_ptr_t device_list);
CL_API
struct cl_device_iterator_t *CL_CC cl_device_iterator_create(cl_device_list_ptr_t device_list);
CL_API void CL_CC cl_device_iterator_destroy(struct cl_device_iterator_t *iterator);
CL_API struct cl_device_t *CL_CC cl_device_iterator_next(struct cl_device_iterator_t *iterator);
CL_API
enum cl_status_t CL_CC cl_device_get_interfaces(struct cl_device_t *device,
cl_interface_list_ptr_t *interface_list);
CL_API
enum cl_status_t CL_CC cl_device_get_name(struct cl_device_t *device,
char *buffer,
size_t buffer_size);
CL_API
enum cl_status_t CL_CC cl_device_get_nickname(struct cl_device_t *device,
char *buffer,
size_t buffer_size);
CL_API enum cl_status_t CL_CC cl_device_set_nickname(struct cl_device_t *device, const char *name);
CL_API enum cl_status_t CL_CC cl_device_get_firmware_ean(struct cl_device_t *device, uint64_t *ean);
CL_API enum cl_status_t CL_CC cl_device_get_feature_ean(struct cl_device_t *device, uint64_t *ean);
CL_API
enum cl_status_t CL_CC cl_device_get_firmware_version(struct cl_device_t *device,
char *buffer,
size_t buffer_size);
CL_API
enum cl_status_t CL_CC cl_device_get_bootloader_version(struct cl_device_t *device,
char *buffer,
size_t buffer_size);
CL_API
enum cl_status_t CL_CC cl_device_get_pcb_revision(struct cl_device_t *device,
char *buffer,
size_t buffer_size);
CL_API
enum cl_status_t CL_CC cl_device_update_firmware_from_blob(struct cl_device_t *device,
const char *firmware_blob,
size_t size,
const struct cl_firmware_update_callbacks_t *callbacks);
CL_API
enum cl_status_t CL_CC cl_device_update_firmware_from_path(struct cl_device_t *device,
const char *firmware_path,
const struct cl_firmware_update_callbacks_t *callbacks);
CL_API
enum cl_status_t CL_CC cl_device_get_manufacturing_date(struct cl_device_t *device,
uint64_t *timestamp);
CL_API
enum cl_status_t CL_CC cl_device_get_serial_number(struct cl_device_t *device,
uint64_t *serial_number);
CL_API enum cl_status_t CL_CC cl_device_get_ean(struct cl_device_t *device, uint64_t *ean);
CL_API enum cl_status_t CL_CC cl_device_identify(struct cl_device_t *device);
CL_API void CL_CC cl_interface_list_destroy(cl_interface_list_ptr_t interface_list);
CL_API
struct cl_interface_iterator_t *CL_CC cl_interface_iterator_create(struct cl_interface_list_t *interface_list);
CL_API void CL_CC cl_interface_iterator_destroy(struct cl_interface_iterator_t *iterator);
CL_API
struct cl_interface_t *CL_CC cl_interface_iterator_next(struct cl_interface_iterator_t *iterator);
CL_API
enum cl_status_t CL_CC cl_interface_get_nickname(struct cl_interface_t *interface,
char *buffer,
size_t buffer_size);
CL_API
enum cl_status_t CL_CC cl_interface_set_nickname(struct cl_interface_t *interface,
const char *name);
CL_API
enum cl_status_t CL_CC cl_interface_get_status(struct cl_interface_t *interface,
struct cl_interface_status_t *status);
CL_API
enum cl_status_t CL_CC cl_interface_get_tc10_state(struct cl_interface_t *interface,
enum cl_tc10_state_t *state);
CL_API
enum cl_status_t CL_CC cl_interface_send_tc10_command(struct cl_interface_t *interface,
enum cl_tc10_command_t command);
CL_API
enum cl_status_t CL_CC cl_interface_eth_get_config(struct cl_interface_t *interface,
struct cl_eth_config_t *config);
CL_API
enum cl_status_t CL_CC cl_interface_eth_set_config(struct cl_interface_t *interface,
struct cl_eth_config_t config);
CL_API
enum cl_status_t CL_CC cl_interface_eth_get_supported_configs(struct cl_interface_t *interface,
struct cl_eth_config_t *config);
CL_API enum cl_status_t CL_CC cl_interface_identify(struct cl_interface_t *interface);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif /* CL_API_H */