// // Created by 93094 on 2025/12/23. // #ifndef DM_DEVICE_PUB_USER_H #define DM_DEVICE_PUB_USER_H #define DEVICE_EXPORTS #ifdef _WIN32 #ifdef DEVICE_EXPORTS #define DEVICE_API __declspec(dllexport) #else #define DEVICE_API __declspec(dllimport) #endif #else #define DEVICE_API __attribute__((visibility("default"))) #endif #ifdef __cplusplus #include extern "C" { typedef struct damiao_handle hDamiaoUsb; typedef struct device_handle hDevice; #pragma pack(push,1) typedef struct { uint32_t can_id:29; //can id uint32_t esi:1; //错误状态指示 一般不用 uint32_t ext:1; //拓展帧 1-拓展帧 0-标准帧 uint32_t rtr:1; //远程帧 1-远程帧 0-数据帧 uint8_t canfd:1; //canfd 1-canfd帧 0-can2.0帧 uint8_t brs:1; //波特率切换 1-切换 0-不切换 uint8_t id_inc:1; //ID自增 1-自增 0-不自增 uint8_t data_inc:1; //数据自增 1-自增 0-不自增 uint8_t dlc:4; //数据长度 uint8_t channel; //通道号 uint16_t reserved; //预留字节 uint16_t step_id; //步进ID uint32_t stop_id; //停止ID uint32_t interval; //发送间隔 int32_t send_times; //发送次数 }usb_tx_frame_head_t; typedef struct { usb_tx_frame_head_t head; uint8_t payload[64]; }usb_tx_frame_t; typedef struct { uint32_t can_id:29; //can id uint32_t esi:1; //错误状态指示 一般不用 uint32_t ext:1; //类型:标准/拓展 uint32_t rtr:1; //类型:数据/远程 uint64_t time_stamp; //时间戳 uint8_t channel; //发送通道 uint8_t canfd:1; //类型:2.0/fd uint8_t dir:1; //方向:rx/tx uint8_t brs:1; //BRS uint8_t ack:1; //应答标志 uint8_t dlc:4; //长度 uint16_t reserved; //预留字节 }usb_rx_frame_head_t; typedef struct { usb_rx_frame_head_t head; uint8_t payload[64]; }usb_rx_frame_t ; typedef struct { int can_baudrate; int canfd_baudrate; float can_sp; float canfd_sp; }device_baud_t; typedef enum { DEV_None=-1, DEV_USB2CANFD=0, DEV_USB2CANFD_DUAL, DEV_ECAT2CANFD }device_def_t; typedef struct { uint8_t channel; uint8_t can_fd; uint8_t can_seg1; uint8_t can_seg2; uint8_t can_sjw; uint8_t can_prescaler; uint8_t canfd_seg1; uint8_t canfd_seg2; uint8_t canfd_sjw; uint8_t canfd_prescaler; }dmcan_ch_can_config_t; #pragma pack(pop) typedef void (*dev_rec_callback)(usb_rx_frame_t* rec_frame); typedef void (*dev_sent_callback)(usb_rx_frame_t* sent_frame); typedef void (*dev_err_callback)(usb_rx_frame_t* err_frame); DEVICE_API damiao_handle* damiao_handle_create(device_def_t type); DEVICE_API void damiao_handle_destroy(damiao_handle* handle); DEVICE_API void damiao_print_version(damiao_handle* handle); DEVICE_API void damiao_get_sdk_version(damiao_handle* handle, char* version_buf, size_t buf_size); DEVICE_API int damiao_handle_find_devices(damiao_handle* handle); DEVICE_API void damiao_handle_get_devices(damiao_handle* handle,device_handle** dev_list, int* device_count); DEVICE_API void device_get_version(device_handle* dev, char* version_buf, size_t buf_size); DEVICE_API void device_get_pid_vid(device_handle* dev, int* pid, int* vid); DEVICE_API void device_get_serial_number(device_handle* dev, char* serial_buf, size_t buf_size); DEVICE_API void device_get_type(device_handle* dev, device_def_t* type); DEVICE_API bool device_open(device_handle* dev); DEVICE_API bool device_close(device_handle* dev); DEVICE_API bool device_save_config(device_handle* dev); DEVICE_API bool device_open_channel(device_handle* dev, uint8_t channel); DEVICE_API bool device_close_channel(device_handle* dev, uint8_t channel); DEVICE_API bool device_channel_get_baudrate(device_handle*dev ,uint8_t channel,device_baud_t* baud); DEVICE_API bool device_channel_set_baud(device_handle*dev ,uint8_t channel,bool canfd,int bitrate,int dbitrate); DEVICE_API bool device_channel_set_baud_with_sp(device_handle*dev ,uint8_t channel,bool canfd,int bitrate,int dbitrate,float can_sp,float canfd_sp); DEVICE_API void device_hook_to_rec(device_handle*dev,dev_rec_callback callback); DEVICE_API void device_hook_to_sent(device_handle*dev,dev_sent_callback callback); DEVICE_API void device_hook_to_err(device_handle*dev,dev_err_callback callback); DEVICE_API void device_channel_send(device_handle*dev,usb_tx_frame_t frame); DEVICE_API void device_channel_send_fast(device_handle*dev,uint8_t ch,uint32_t can_id,int32_t cnt,bool ext,bool canfd,bool brs,uint8_t len,uint8_t* payload); DEVICE_API void device_channel_send_advanced(device_handle*dev,uint8_t ch,uint32_t can_id,uint16_t step_id,uint32_t stop_id,int32_t cnt,bool id_inc,bool data_inc,bool ext,bool canfd,bool brs,uint8_t len,uint8_t* payload); } #endif #endif //DM_DEVICE_PUB_USER_H