|
- #include "ValidAfterProc.h"
-
- ValidAfterProc::ValidAfterProc(QObject* parent) : IAfterProc(parent)
- {}
- ValidAfterProc::~ValidAfterProc()
- {
- m_file.flush();
- m_file.close();
- }
-
- void ValidAfterProc::init(Frame* frame)
- {
- m_pFrame = frame;
- createDataPath("Valid");
- }
-
- void ValidAfterProc::run()
- {
- m_uiDataSize = m_byteArray.size();
- m_uiIndex = 0;
- // 副帧类型
- if (m_pFrame->m_usSubFrameType == 1) { // 无副帧
- while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) {
- if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex]
- && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]) {
- if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前
- m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen));
- m_uiIndex += m_pFrame->m_uiFrameLen;
- } else if (m_pFrame->m_usHeadAddr == 2) { // 帧头在每行最后
- if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足
- m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen));
- m_uiIndex -= m_pFrame->m_usBeforeHeadLen;
- m_uiIndex += m_pFrame->m_uiFrameLen;
- } else {
- ++m_uiIndex;
- }
- }
- } else {
- ++m_uiIndex;
- }
- }
- } else if (m_pFrame->m_usSubFrameType == 2) { // 反码副帧
- while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) {
- if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex]
- && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]
- && m_pFrame->m_subHeadArray[0]
- == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]
- && m_pFrame->m_subHeadArray[1]
- == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn
- + 1]) {
- if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前
- m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen));
- m_uiIndex += m_pFrame->m_uiFrameLen;
- } else if (m_pFrame->m_usHeadAddr == 2) { // 帧头在每行最后
- if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足
- m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen));
- m_uiIndex -= m_pFrame->m_usBeforeHeadLen;
- m_uiIndex += m_pFrame->m_uiFrameLen;
-
- } else {
- ++m_uiIndex;
- }
- }
- } else {
- ++m_uiIndex;
- }
- }
- } else if (m_pFrame->m_usSubFrameType == 3) { // ID副帧
- while (m_uiIndex + m_pFrame->m_uiFrameLen <= m_uiDataSize) {
- if (m_pFrame->m_headArray[0] == m_byteArray[m_uiIndex]
- && m_pFrame->m_headArray[1] == m_byteArray[m_uiIndex + 1]
- && m_pFrame->m_headArray[0]
- == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]
- && m_pFrame->m_headArray[1]
- == m_byteArray[m_uiIndex + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn
- + 1]) {
- QByteArray startId = QByteArray::number(m_pFrame->m_usIdStart, 16); // 第一个Id号
- QByteArray endId = QByteArray::number(m_pFrame->m_usIdEnd, 16); // 最后一个Id号
- if (m_pFrame->m_usHeadAddr == 1) { // 帧头在每行最前
- if (startId[0] == m_byteArray[m_uiIndex + m_pFrame->m_usIdAddr]
- && endId[0]
- == m_byteArray[m_uiIndex + m_pFrame->m_usIdAddr
- + m_pFrame->m_uiFrameLen - m_pFrame->m_uiColumn]) {
- m_validArray.append(m_byteArray.mid(m_uiIndex - m_pFrame->m_usBeforeHeadLen,
- m_pFrame->m_uiFrameLen));
- m_uiIndex += m_pFrame->m_uiFrameLen;
- }
- } else if (m_pFrame->m_usHeadAddr == 2) {
- if (m_pFrame->m_usBeforeHeadLen <= m_uiIndex) { // 说明第一个子帧满足
- if (startId[0]
- == m_byteArray[m_uiIndex - m_pFrame->m_usBeforeHeadLen
- + m_pFrame->m_usIdAddr]
- && endId[0]
- == m_byteArray[m_uiIndex - m_pFrame->m_usBeforeHeadLen
- + m_pFrame->m_usIdAddr + m_pFrame->m_uiFrameLen
- - m_pFrame->m_uiColumn]) {
- m_validArray.append(m_byteArray.mid(
- m_uiIndex - m_pFrame->m_usBeforeHeadLen, m_pFrame->m_uiFrameLen));
- m_uiIndex -= m_pFrame->m_usBeforeHeadLen;
- m_uiIndex += m_pFrame->m_uiFrameLen;
- } else {
- ++m_uiIndex;
- }
- }
- }
- } else {
- ++m_uiIndex;
- }
- }
- }
-
- // 将数据写入文件中
- m_file.write(m_validArray);
- m_file.flush();
- emit validDataExtract(m_validArray);
- m_uiDataSize = 0;
- m_uiIndex = 0;
- m_byteArray.clear();
- m_validArray.clear();
- }
|