C++實現上位機6:網路通訊類CCommnication
阿新 • • 發佈:2018-12-14
CCommnication標頭檔案:
#pragma once //#include "CCreateHex.h" #include "CComminicationTool.h" //#include "CEthernetTCP.h" #include "CSerialPort.h" #include "../Tool/CRC.h" #include "../stdafx.h" #define INSTRUCTION_SIZE 8 #define INSTRUCTION_LEGNTH 8 #define ONLINE_INSTRUCT_LEGNTH 16 #define DEBUG_INSTRUCT_LEGNTH 16 #define TCP_MODE 0 #define SERIAL_MODE 1 class CCommnication{ public: CCommnication(); ~CCommnication(); //網路相關 void SeletMode(int mode);//設定模式 bool IsConnect();//返回是否連線 bool ConnectDSPBySERIAL(std::string com = "COM3");//與DSP進行連線 void DisConnection(); bool SendInstruction();//傳送單條指令 //下載相關 //網路資料操作相關 char* ReadChannelData(int& countSize);//讀資料 char* ReadChannelData();//讀資料 bool SendData(void* data, DWORD size);//傳送資料 char* GetResult(); public: //CCreateHex m_createHex;//生成十六進位制檔案 //CEthernetTCP m_ethernetTCP; //TCP通訊 CSerialPort m_serialPort;//串列埠通訊 std::string m_IP; int m_Port; int m_mode;//0 為TCP/IP通訊 ; 1為 串列埠通訊 unsigned char m_blockSection;//要燒寫的區域 short m_current_address;//當前開展地址 int m_instructSize;//指令條目 //int m_OnlineInstructSize;//除錯記錄上次的傳送的條數 };
CCommnication.cpp
#include "CCommnication.h" CCommnication::CCommnication() :m_mode(TCP_MODE), m_current_address(0x0000), m_blockSection(0x0000) , m_IP("192.168.2.40"), m_Port(5000){ //BlockSection((unsigned char)m_createHex.GetBeginAddress(), 0x00); } CCommnication::~CCommnication(){ } /***************************************************************************************************/ //網路相關 void CCommnication::SeletMode(int mode){ if (mode == 0 || mode == 1){ m_mode = mode; } else{ throw ("SeletMode()未知模式選擇"); } } bool CCommnication::IsConnect(){ switch (m_mode){ //case 0:return m_ethernetTCP.IsConnect(); break; case 1:return m_serialPort.IsConnect(); break; default:return false; break; } } bool CCommnication::ConnectDSPBySERIAL(std::string com){ return m_serialPort.Connect(com); } void CCommnication::DisConnection(){ switch (m_mode){ //case 0:m_ethernetTCP.Disconnect(); break; case 1:m_serialPort.Disconnect(); break; default:break; } } /***************************************************************************************************/ /***************************************************************************************************/ //下載相關 /***************************************************************************************************/ //解析sHexPack資料包相關函式 /***************************************************************************************************/ //網路資料操作相關 char* CCommnication::ReadChannelData(int& countSize){ char* ret; DWORD count; int l_TimeCount = 0; do{ switch (m_mode){ //case 0:ret = m_ethernetTCP.ReadData(count); break; case 1:ret = m_serialPort.ReadData(count); break; default:ret = NULL; break; } if (ret == NULL)return NULL; l_TimeCount++; if (l_TimeCount == 4){ return NULL; } } while (count == 0); countSize = count; return ret; } char* CCommnication::ReadChannelData(){ char* ret; DWORD count; int l_TimeCount = 0; do{ switch (m_mode){ //case 0:ret = m_ethernetTCP.ReadData(count); break; case 1:ret = m_serialPort.ReadData(count); break; default:ret = NULL; break; } if (ret == NULL)return NULL; l_TimeCount++; if (l_TimeCount == 20){ return NULL; } } while (count == 0); return ret; } bool CCommnication::SendData(void* data, DWORD size){ switch (m_mode){ case 0:{ // m_ethernetTCP.SendData((char *)data, size); }break; case 1:{ if (m_serialPort.SendData((char *)data, size) == -1){ return false; } }break; default:break; } return true; } char* CCommnication::GetResult(){ switch (m_mode){ //case 0:return m_ethernetTCP.m_rectDataBuff; break; case 1:return m_serialPort.m_resver_str; break; default:return NULL; break; } } /***************************************************************************************************/ //網路資料操作相關
aaa