Skip to content

File cl_api.h

File List > cl > 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 */