Ymodem协议分为起始帧,数据帧和结束帧。
2.数据帧的数据格式(STX 01 FEdata[1024] CRCH CRCL)
数据结构(SOH 00 FF NUL[128] CRCH CRCL)
结束帧同样以SOH开头,表示后面跟着128字节大小的数据;结束帧的帧序也认为是00 FF;结束帧的128字节的数据部分不存放任何信息,即全部用00填充。
代码:
调用:
// 打开文件
void ShowData::readBOOTFile()
{
QByteArray m_data_buf;
m_num = 0;
QString filename = QFileDialog::getOpenFileName(this, "打开", "C:\\Users\\fh\\Desktop\\file/", "*.*");
// 文件信息
QFileInfo fileInfo = QFileInfo(filename);
QFile r_file(filename);
if(r_file.open(QIODevice::ReadOnly))
{
m_data_buf = r_file.readAll();
m_file_size = fileInfo.size();
m_modem.setInfoData(fileInfo.fileName().toUtf8(), fileInfo.size(), m_data_buf.data());
}
}
// 开始传输
void ShowData::begin()
{
m_num = 0;
onSendYmodeData();
}
void ShowData::onSendYmodeData()
{
if(m_num == 0)
{
char buf[133] = {
0};
m_modem.getBeginData(buf);
// 第一包
QByteArray array;
array = QByteArray(buf, begin_end_buf_size);
qDebug("first data");
serialThread->SedToSerial(array.toHex(), true);
}
else
{
uint32_t send_size = (m_num - 1) * 1024;
emit sigUpdata(send_size, m_file_size);
if(m_file_size < send_size)
{
char end_buf[133] = {
0};
m_modem.getEndData