Files
eskin-finger-sdk/include/eskin_ffi.h
lenn 705375085f feat: update examples and README with streaming support and uint32 force types
- Change CForce3D fx/fy/fz from int16 to uint32 to match hardware
- Add independent C++ example with command and streaming modes
- Rewrite Python example with threaded streaming (read_loop + consumer pattern)
- Add ROS2 C++ publisher/subscriber examples
- Update README with streaming APIs, ROS2 docs, data type definitions, and full FFI table
- Add CHANGELOG
2026-05-08 17:41:46 +08:00

145 lines
2.9 KiB
C++

#ifndef ESkin_FFI_H
#define ESkin_FFI_H
#include <cstdint>
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef void* EskinDeviceHandle;
typedef struct {
uint16_t major;
uint16_t minor;
uint16_t patch;
} EskinSdkVersion;
typedef enum {
ESkinSuccess = 0,
ESkinInvalidPointer = 1,
ESkinDeviceNotFound = 2,
ESkinDeviceAlreadyOpen = 3,
ESkinNotInitialized = 4,
ESkinAlreadyStreaming = 5,
ESkinNotStreaming = 6,
ESkinConfigError = 7,
ESkinIoError = 8,
ESkinTimeout = 9,
ESkinChannelClosed = 10,
ESkinInternalError = 11,
ESkinBufferOverflow = 12,
ESkinInvalidParameter = 13,
ESkinCrcError = 14,
ESkinFrameError = 15,
ESkinProtocolError = 16,
ESkinDeviceError = 17,
} EskinSdkErrorCode;
EskinSdkVersion eskin_version(void);
EskinDeviceHandle eskin_open(const char* path, const void* config);
EskinSdkErrorCode eskin_close(EskinDeviceHandle handle);
EskinSdkErrorCode eskin_read_register(
EskinDeviceHandle handle,
uint32_t addr,
uint16_t length,
uint8_t* buf,
uint32_t buf_len,
uint32_t* actual_len
);
EskinSdkErrorCode eskin_write_register(
EskinDeviceHandle handle,
uint32_t addr,
const uint8_t* data,
uint16_t data_len,
uint16_t* return_count
);
// Device function interfaces (EskinDeviceFunc)
EskinSdkErrorCode eskin_read_hdw_version(
EskinDeviceHandle handle,
char* buf,
uint32_t buf_len,
uint32_t* actual_len
);
EskinSdkErrorCode eskin_read_matrix_row(
EskinDeviceHandle handle,
uint8_t* out
);
EskinSdkErrorCode eskin_read_matrix_col(
EskinDeviceHandle handle,
uint8_t* out
);
EskinSdkErrorCode eskin_read_device_config1(
EskinDeviceHandle handle,
uint8_t* out
);
EskinSdkErrorCode eskin_read_device_config2(
EskinDeviceHandle handle,
uint8_t* out
);
EskinSdkErrorCode eskin_write_device_config1(
EskinDeviceHandle handle,
bool enable,
uint16_t* return_count
);
EskinSdkErrorCode eskin_write_device_config2(
EskinDeviceHandle handle,
bool enable,
uint16_t* return_count
);
EskinSdkErrorCode eskin_write_matrix_row(
EskinDeviceHandle handle,
uint8_t row,
uint16_t* return_count
);
EskinSdkErrorCode eskin_write_matrix_col(
EskinDeviceHandle handle,
uint8_t col,
uint16_t* return_count
);
// Streaming interfaces
typedef struct {
uint32_t fx;
uint32_t fy;
uint32_t fz;
} CForce3D;
typedef struct {
uint32_t module;
CForce3D force;
} CCombinedForce;
typedef struct {
uint64_t timestamp_us;
uint32_t sequence;
CCombinedForce combined_force;
} CFingerSample;
EskinSdkErrorCode eskin_start_stream(EskinDeviceHandle handle);
EskinSdkErrorCode eskin_stop_stream(EskinDeviceHandle handle);
EskinSdkErrorCode eskin_read_sample(EskinDeviceHandle handle, uint32_t timeout_ms, CFingerSample* out);
EskinSdkErrorCode eskin_get_mode(EskinDeviceHandle handle, uint32_t* out);
#ifdef __cplusplus
}
#endif
#endif