- FFI: eskin_open/close/read_register/write_register for C/C++/Python - Protocol: encode/decode tests with golden bytes verification - Stream: implement PollingSampleCollector producing FingerSample - Register: add parse_combined_forces/parse_module_errors - Transport: add MockSerialTransport for testing - Include: add C header file eskin_ffi.h - Examples: C++ and Python usage examples - README: full usage guide for Rust/C++/Python - Exclude docs/ from repo (internal only)
49 lines
1.3 KiB
C++
49 lines
1.3 KiB
C++
#include "../../include/eskin_ffi.h"
|
|
#include <cstdint>
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
|
|
int main() {
|
|
printf("ESkin SDK version: %u.%u.%u\n",
|
|
eskin_version().major, eskin_version().minor, eskin_version().patch);
|
|
|
|
EskinDeviceHandle dev = eskin_open("/dev/ttyUSB0", nullptr);
|
|
if (!dev) {
|
|
printf("Failed to open device\n");
|
|
return 1;
|
|
}
|
|
printf("Device opened\n");
|
|
|
|
uint8_t buf[256];
|
|
uint32_t actual = 0;
|
|
EskinSdkErrorCode err = eskin_read_register(dev, 0x0000, 4, buf, sizeof(buf), &actual);
|
|
if (err == ESkinSuccess) {
|
|
printf("Serial number (%u bytes): ", actual);
|
|
for (uint32_t i = 0; i < actual; i++) {
|
|
printf("%02X ", buf[i]);
|
|
}
|
|
|
|
printf("\n");
|
|
}
|
|
else {
|
|
printf("read_register failed: %d\n", err);
|
|
}
|
|
|
|
err = eskin_read_register(dev, 0x000F, 2, buf, sizeof(buf), &actual);
|
|
if (err == ESkinSuccess) {
|
|
printf("Firmware version (%u bytes): ", actual);
|
|
for (uint32_t i = 0; i < actual; i++) {
|
|
printf("%02X", buf[i]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
err = eskin_read_register(dev, 0x0500, 168, buf, sizeof(buf), &actual);
|
|
if (err == ESkinSuccess) {
|
|
printf("Combined force raw (%u bytes)\n");
|
|
}
|
|
|
|
eskin_close(dev);
|
|
printf("Device closed\n");
|
|
return 0;
|
|
} |