亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rs232noise.cpp

?? 用于開發Modbus工業級通信
?? CPP
字號:
// RS232Noise.cpp: implementation of the CRS232Noise class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "mod_rssim.h"
#include "RS232Noise.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CRS232Noise::CRS232Noise()
{
   SetErrorTypes(0); // set for no errors
   m_nukedPort = FALSE;
   reserved = 0x5555AAAA;
}

CRS232Noise::~CRS232Noise()
{

}

// --------------------------------- SetErrorTypes -----------------------
void CRS232Noise::SetErrorTypes(LONG freq,
                   LONG period,
                   BOOL inserts , 
                   BOOL removes , 
                   BOOL misFrames , // off by default
                   BOOL corrupts,
                   BOOL ignore,
                   BOOL beep
                   )
{
   m_insertCharacters = inserts;
   m_removeCharacters = removes;
   m_corruptFraming   = misFrames;
   m_modifyCharacters = corrupts;
   m_errorFrequency   = freq;
   m_ignoreReq        = ignore;
   m_delaysPeriod     = period;
   //
   m_errorsInjected = 0;
   m_beep = beep;
} // SetErrorTypes

// ------------------------------- GetErrorTypes ----------------------
void CRS232Noise::GetErrorTypes(int *freq,
                               int *period,    // delays by (0=disable)
                               BOOL *inserts, 
                               BOOL *removes, 
                               BOOL *misFrames,
                               BOOL *corrupts,
                               BOOL *ignore,
                               BOOL *beep
                               )
{
   *inserts =   m_insertCharacters; 
   *removes =   m_removeCharacters; 
   *misFrames = m_corruptFraming;   
   *corrupts =  m_modifyCharacters; 
   *freq =      m_errorFrequency;   
   *ignore =    m_ignoreReq;        
   *period =    m_delaysPeriod;
   //                 
   *beep =      m_beep;             
} // GetErrorTypes

// ---------------------------------------- InjectErrors ----------------------
LONG CRS232Noise::InjectErrors(CRS232Port *pPort, 
                  const BYTE *transmitBuffer, 
                  int writeLength, 
                  char*pDebugStr)
{
BYTE *pBuffer, *pBufferPtr;
int bufferIndex;        // index into the un-corrupted data
int randN, faultType, faultPercent;   // random values
int len;                   // length of data to send in a burst.
LONG retValue;
CString ErrorDescription;
BYTE chErr;

   if (0 == m_errorFrequency)
   {
      //call the 232 port method since there are not supposed to be any errors
      return (pPort->Send(writeLength, transmitBuffer, pDebugStr));
   }

   m_pPort = pPort;
   // new some data for the buffer before we corrupt it
   pBuffer = (BYTE*)new char[writeLength+1]; //allocate 1 byte extra to allow for a "INSERT" corruption character
   pBufferPtr = pBuffer;
   bufferIndex = 0;
   while (bufferIndex < writeLength)
   {
      // work out a random #
      randN = rand();
      faultPercent = (int)(randN*200/(float)RAND_MAX);
      
      // IGNORE (only valid on the 1st byte of the message)
      if ((0==bufferIndex)&&(faultPercent < m_errorFrequency)&&(m_ignoreReq))
      {
         ReportError("Ignore request");
         break; // send 0 bytes out
      }

      if (faultPercent*8 < m_errorFrequency)   // only corrupt about every 8th byte
      {
         // simulate a fault
         randN = rand();
         faultType = (int)(randN/(float)RAND_MAX*5);  // fault types
         chErr = (BYTE)(rand());
         switch(faultType)
         {
            case 0:// INSERT
               if (m_insertCharacters)
               {
                  *pBufferPtr++ = chErr;  // random character
                  *pBufferPtr++ = transmitBuffer[bufferIndex++];
                  ErrorDescription.Format("Inserted character x%02X", chErr);
                  ReportError(ErrorDescription);
               }
               break;
            case 1:// DELETE
               if (m_removeCharacters)
               {
                  ErrorDescription.Format("Skipped character x%02X", transmitBuffer[bufferIndex]);
                  ReportError(ErrorDescription);
                  bufferIndex++; // do nothing, skips this byte
               }
               break;
            case 2:// CORRUPT
               if (m_modifyCharacters)
               {
                  *pBufferPtr++ = chErr;  // random character
                  bufferIndex++; //skip the character
                  ErrorDescription.Format("Corrupted to character x%02X", chErr);
                  ReportError(ErrorDescription);
               }
               break;
            case 3:// MISSFRAME
               if ((m_corruptFraming)&&((bufferIndex+1)!=writeLength))
               {
                  *pBufferPtr++ = transmitBuffer[bufferIndex++];
                  // character added, now nuke the line.
                  NukePort();
                  ErrorDescription.Format("Generate framing error");
                  ReportError(ErrorDescription);
               }
               break;
            case 4:// DELAY/SLOW
               if (m_delaysPeriod)
               {
                  len = (int)((LONG)pBufferPtr - (LONG)pBuffer);
                  if (len>0)
                     retValue = pPort->Send(len, pBuffer, pDebugStr);
                  //delay and then carry on
                  ErrorDescription.Format("Slow-down");
                  ReportError(ErrorDescription);
                  Sleep(m_delaysPeriod);
                  pBufferPtr = pBuffer;
                  *pBufferPtr++ = transmitBuffer[bufferIndex++];
               }
               break;
         }
         // send the message thus far
         //...
         len = (int)((LONG)pBufferPtr - (LONG)pBuffer);
         if (len)
            retValue = pPort->Send(len, pBuffer, pDebugStr);

         pBufferPtr = pBuffer; // reset our pointer to the beginning of the rest of this message
      }
      else
      {
         // append to the send buffer
         *pBufferPtr++ = transmitBuffer[bufferIndex++];
         // this way we do not have to TX each byte seperately
      }
   }

   // un-nuke the port if it was
   //...
   UnNukePort();
   
   // send the remaining bytes of the message normally.
   len = (int)((LONG)pBufferPtr - (LONG)pBuffer);
   if (len)
      retValue = pPort->Send(len, pBuffer, pDebugStr);
   else 
      retValue = FALSE;
   // clean up
   delete pBuffer;
   return (retValue);
} // InjectErrors

// -------------------------------- ReportError --------------------------
void CRS232Noise::ReportError(LPCTSTR descr)
{
   // inc error counter
   m_errorsInjected++;

#ifdef _COMMS_DEBUGGING
   OutputDebugString(descr);
   OutputDebugString(".\r\n");
#endif
   
   if (m_beep)
   {
      Beep(4000, 100);
   }
} // ReportError

// ------------------------------- UnNukePort ---------------------------
// configure the port for a different baud so that it transmits garbage
//
BOOL CRS232Noise::NukePort()
{
BOOL error;
DCB  dcb;

   if (m_nukedPort)
      return (TRUE);

   error = GetCommState(m_pPort->h232Port,
                           &dcb);
   m_oldBaud = dcb.BaudRate;
   // corrupt this one
   if (dcb.BaudRate > CBR_19200)
      dcb.BaudRate = CBR_1200;
   else
      dcb.BaudRate = CBR_57600;
   
   SetCommState(m_pPort->h232Port, &dcb);
   m_nukedPort = TRUE;
   return (TRUE);
} // NukePort

// ----------------------------------- UnNukePort --------------------
BOOL CRS232Noise::UnNukePort()
{
DWORD error;
//DCB dcb;

   if (m_nukedPort)
   {
      //restore the settings
      //error = GetCommState(m_pPort->h232Port,
      //                        &dcb);
      //dcb.BaudRate = m_oldBaud;
      
      //SetCommState(m_pPort->h232Port, &dcb);
      m_pPort->ClosePort();
      m_pPort->OpenPort(m_pPort->portNameS);

      m_pPort->ReConfigurePort();
      m_pPort->Purge();
      ClearCommError(m_pPort->h232Port, &error, NULL);

#ifdef _COMMS_DEBUGGING
      OutputDebugString("Port restored.\n");
#endif
   }
   m_nukedPort = FALSE;
   return (TRUE);
} // UnNukePort

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产99精品视频| 国产午夜一区二区三区| 亚洲成人自拍偷拍| 欧美理论电影在线| 日韩av中文在线观看| 91蜜桃网址入口| 久久一区二区三区国产精品| 精久久久久久久久久久| 国产精品久久毛片av大全日韩| 99久久伊人精品| 亚洲无人区一区| 日韩一卡二卡三卡国产欧美| 玖玖九九国产精品| 国产日韩欧美在线一区| 色一情一乱一乱一91av| 日韩激情一区二区| 久久精品无码一区二区三区| 91网站最新地址| 午夜久久福利影院| 久久亚洲精品国产精品紫薇| www.爱久久.com| 亚洲国产sm捆绑调教视频| 日韩一区二区电影| jlzzjlzz亚洲日本少妇| 天天综合色天天| 久久久久久久久99精品| 色噜噜狠狠成人中文综合| 国产乱人伦偷精品视频不卡| 一区二区三区日韩欧美精品| 国产精品视频免费看| 在线观看欧美日本| 国产综合色视频| 亚洲永久精品国产| 久久精品夜色噜噜亚洲aⅴ| 欧美视频在线一区| 国产91综合一区在线观看| 亚洲愉拍自拍另类高清精品| 2021久久国产精品不只是精品| 色狠狠一区二区三区香蕉| 国产一区二区久久| 午夜精品久久久久久久| 国产精品视频你懂的| 精品国产乱子伦一区| 欧美无砖专区一中文字| 成人一区二区在线观看| 免费在线观看日韩欧美| 亚洲高清视频在线| 国产精品成人免费精品自在线观看 | 欧美色视频一区| 成人久久18免费网站麻豆| 久久精品国产亚洲a| 亚洲国产精品久久久久婷婷884| 欧美酷刑日本凌虐凌虐| 蜜桃视频一区二区三区| 亚洲午夜羞羞片| 国产精品卡一卡二| 国产三级一区二区| 精品三级av在线| 欧美一区二区在线看| 欧美唯美清纯偷拍| 一本一本大道香蕉久在线精品 | 激情五月婷婷综合| 亚欧色一区w666天堂| 亚洲一区二区成人在线观看| 成人免费在线播放视频| 中文子幕无线码一区tr| 国产日韩欧美综合在线| 久久午夜羞羞影院免费观看| 日韩免费看网站| 国产精品毛片无遮挡高清| 国产亚洲精品aa| 久久精品亚洲麻豆av一区二区 | 这里只有精品电影| 欧美日韩国产a| 欧美日韩精品是欧美日韩精品| 91视频在线看| 欧美三级欧美一级| 精品视频在线免费观看| 91.com在线观看| 欧美一级日韩免费不卡| 日韩一级精品视频在线观看| 制服丝袜成人动漫| 日韩精品影音先锋| 欧美一级搡bbbb搡bbbb| 日韩欧美视频在线| 久久久www成人免费无遮挡大片| 久久久亚洲精华液精华液精华液| 亚洲精品一区二区精华| 久久精品无码一区二区三区| 国产精品网站在线观看| 亚洲人精品一区| 一二三四社区欧美黄| 视频一区国产视频| 久久99精品久久久| 风流少妇一区二区| 91蝌蚪porny| 欧美一区二区三区电影| 久久久91精品国产一区二区精品| 最新久久zyz资源站| 亚洲曰韩产成在线| 麻豆传媒一区二区三区| 粉嫩嫩av羞羞动漫久久久| 色一区在线观看| 日韩视频不卡中文| 国产精品丝袜一区| 天堂资源在线中文精品| 国产一区二区h| 色噜噜偷拍精品综合在线| 日韩一级二级三级精品视频| 日韩欧美资源站| 日韩精品一区二区三区四区 | 欧美日韩国产首页在线观看| 欧美一级日韩不卡播放免费| 国产精品区一区二区三| 三级久久三级久久| 成人小视频在线| 欧美日韩的一区二区| 国产精品蜜臀在线观看| 丝袜亚洲另类欧美综合| 成人午夜视频免费看| 欧美乱妇一区二区三区不卡视频| 日本一区二区成人| 美女一区二区在线观看| 色狠狠av一区二区三区| 久久久国产午夜精品| 午夜电影久久久| www.色精品| 久久综合久久综合久久综合| 亚洲国产综合色| 成人av手机在线观看| 欧美tk—视频vk| 亚洲午夜成aⅴ人片| 成人av在线网| 精品奇米国产一区二区三区| 亚洲韩国精品一区| 色综合天天天天做夜夜夜夜做| 丝袜亚洲另类丝袜在线| 丁香亚洲综合激情啪啪综合| 欧美一区二区人人喊爽| 亚洲精品国产一区二区精华液| 国产麻豆一精品一av一免费| 欧美精品丝袜中出| 亚洲精品午夜久久久| 成人午夜精品在线| 久久毛片高清国产| 久久国产精品99精品国产| 欧美日韩1区2区| 一区二区三区中文在线观看| 波多野洁衣一区| 欧美激情在线看| 国产成人精品影视| 精品精品国产高清一毛片一天堂| 午夜精品久久久久久不卡8050| 色乱码一区二区三区88| 亚洲精品免费在线| 色综合天天综合网国产成人综合天| 久久久久亚洲综合| 激情偷乱视频一区二区三区| 日韩欧美亚洲一区二区| 亚洲v精品v日韩v欧美v专区| 欧美性色欧美a在线播放| 亚洲精品国产一区二区三区四区在线 | 欧美日韩激情一区| 欧美酷刑日本凌虐凌虐| 日韩高清欧美激情| 欧美视频一区二区三区| 一区二区三区四区在线| 99精品久久免费看蜜臀剧情介绍 | 国产精品短视频| 不卡电影免费在线播放一区| 国产精品高潮呻吟| 91麻豆国产在线观看| 亚洲精品一二三四区| 欧美丝袜丝交足nylons| 99在线视频精品| 日本一区二区三区视频视频| 国产成人在线网站| 亚洲国产精品精华液ab| 99国内精品久久| 亚洲成人免费观看| 日韩精品一区二区三区老鸭窝| 老司机精品视频导航| 国产肉丝袜一区二区| 99视频一区二区三区| 亚洲一区在线播放| 欧美一区二视频| 国产成人精品影院| 一二三四区精品视频| 日韩一区二区三区在线视频| 国产成人av一区二区三区在线观看| 国产日韩欧美一区二区三区乱码| 99久久精品国产导航| 天天影视色香欲综合网老头| 久久人人超碰精品| 色婷婷香蕉在线一区二区| 免费精品视频在线| 中文字幕在线不卡| 538prom精品视频线放| 国产成人在线电影| 午夜亚洲国产au精品一区二区|