#ifndef __NODELINK_MASTER_H__ #define __NODELINK_MASTER_H__ #include "NodeLinkCommon.h" #ifndef NODELINK_DEVICE_NUMBER #define NODELINK_DEVICE_NUMBER 8 //最多8个从站, #endif #define NL_MASTER_EVENT_FOUND_DEVICE 0x01 typedef struct nodelink_device nodelink_device_t; typedef struct { void (*on_recv)(nodelink_device_t * device,unsigned char * data); //设备输入 int (*on_send)(nodelink_device_t * device,unsigned char *data); //设备控制输出 void (*on_timeout)(nodelink_device_t * device); //设置定时时间,单位微秒 } nodelink_device_ops; struct nodelink_device { unsigned char id; //分配的ID unsigned char model; //设备型号 unsigned char last_cmd; //上一次命令,提供外部用的状态 unsigned char last_status; //上一次状态,提供外部用的状态 unsigned char in_index; //输入数据开始编号 unsigned char in_count; //输入计数 unsigned char out_index; //输出数据开始编号 void * user_data; //外部对象接口 nodelink_device_ops * ops; //设备对应处理接口 unsigned char uniqueid; //唯一ID unsigned short txcount; //发送计数 }; typedef struct nodelink_master nodelink_master_t; struct nodelink_master { unsigned char bus_status; //总线状态,0xff为复位状态,会发送复位命令,0x00为初始化状态,会分配ID,0x01为工作状态 unsigned char dev_count; //设备计数 int count; //总线一些操作的计数 int step; nodelink_device_t device[NODELINK_DEVICE_NUMBER + 1]; //设备缓存 unsigned char data_in[NATIVE_DATA_BUFFER_SIZE]; //数据输入缓冲 unsigned char data_out[NATIVE_DATA_BUFFER_SIZE]; //数据输出缓冲 unsigned char code[16]; //16字节标识码 void (*callback)(nodelink_master_t * , char , void *); }; void nodelink_master_set_callback(nodelink_master_t * master, void(*)(nodelink_master_t * , char , void *)); void nodelink_master_set_code(nodelink_master_t * master, unsigned char * code); void nodelink_master_init(nodelink_master_t * master); void nodelink_master_reset(nodelink_master_t *master); void nodelink_master_begin_scan(nodelink_master_t *master); void nodelink_master_recv(nodelink_master_t *master, unsigned char *src, int len); int nodelink_master_send(nodelink_master_t *master, unsigned char *dst); #endif