当前位置: 首页 > Linux

串口通信系统的设计与实现

时间:2023-04-06 04:11:35 Linux

背景技术在业界,当设备无法通过网络连接时,通常设备上都有串口可以用来传输数据。本系统利用设备的串口来达到传输文件的目的。协议交互设计:传输协议框架设计:实现只贴头文件,想看实现的可以留言voidfile_open(constchar*file_name,intmode);voidfile_close();intfile_nread(void*buf,intsize);intfile_nwrite(void*buf,intsize);size_tfile_get_file_size(constchar*file);voidfile_get_file_MD5(constchar*file,char*md5);intcheck_file_md5(constchar*file,constchar*expected_md5);#endif//FILE_H_#ifndefFRAME_H_#defineFRAME_H_typedefstruct_frameframe_t;enum{REQ=1,DATA,ACK,完成,错误};枚举{NO_ERR,CHECKSUM_ERR,SEQ_NUMBER_ERR,RETRY_TOO_MUCH_ERR,MD5_ERR,CTRL_C_SIG_ERR,UNKNOWN_PKT_TYPE,OUT_OF_MAX_RETRY_TIMES,TIME_OUT};intframe_init(constchar*dev);voidframe_fini();intframe_set();intframe_set();intframe_set()voidframe_set_seq_number(intraseq_number);voidframe_set(int)_checks();voidframe_set_op(intop);voidframe_set_status(intstatus);intframe_req();//仅发送方-->receiverintframe_data(unsignedchar*data,intlen);intframe_ack_ok();//仅接收方-->senderintframe_ack_not_ok();//只有接收者-->senderintframe_finish(char*md5);//只有发送者-->receiverintframe_err(interr);intframe_get_op_from_raw_data();intframe_get_err_from_raw_data();intframe_get_status_from_raw_data();intframe_seq_number_check();intframe_get_seq_number_from_raw_data();intframe_checksum_check();voidframe_calculate_receive_frame_checksum();voidframe_calculate_send_frame_checksum();intframe_get_frame();intframe_get_remainder_frame();intframe_get_frame_len();voidframe_get_frame_header();voidframe_decode_frame();intframe_get_data_len();void*frame_get_data_pos();intu_frame_get_op();constchar*u_frame_get_md5_from_finish_pkt(char*md5);#endif//FRAME_H_#ifndefGLOBAL_H_#defineGLOBAL_H_#defineMTU512#defineMAX_DATA_LEN501#endif//GLOBAL_H_#ifndefSERIAL_DEV_H_#defineSERIAL_DEV_H_intserial_dev_init(constchar*dev);//无返回值,保存判断,只要函数不抛出异常,就一定成功voidserial_dev_fini();intserial_dev_nread(void*buf,intsize);//返回值表示实际读取的个数intserial_dev_nwrite(void*buf,intsize);intget_fd();#endif//SERIAL_DEV_H_