Revision: 10593 https://osdn.net/projects/ttssh2/scm/svn/commits/10593 Author: zmatsuo Date: 2023-02-13 23:41:35 +0900 (Mon, 13 Feb 2023) Log Message: ----------- r10587の送信フロー制御が誤っていたので修正 - r10587は意図通り動作していなかった - 次の動作,パラメータを ini ファイルから設定できるようにした - アプリ送信フロー制御のon/off - 送受信バッファサイズ - Xon/Xoffのしきい値 Modified Paths: -------------- branches/ttcomtester/teraterm/teraterm/commlib.c -------------- next part -------------- Modified: branches/ttcomtester/teraterm/teraterm/commlib.c =================================================================== --- branches/ttcomtester/teraterm/teraterm/commlib.c 2023-02-12 14:45:36 UTC (rev 10592) +++ branches/ttcomtester/teraterm/teraterm/commlib.c 2023-02-13 14:41:35 UTC (rev 10593) @@ -125,6 +125,26 @@ static HANDLE PrnID = INVALID_HANDLE_VALUE; static BOOL LPTFlag; +typedef struct { + BOOL AppCTSDSRFlow; + DWORD RecieveBufferSize; + DWORD SendBufferSize; + WORD XonLim; + WORD XoffLim; +} SerialParams_t; +static SerialParams_t SerialParams; + +static void SerialParamsInit(const wchar_t *ini) +{ + const wchar_t *section = L"Serial.maniac"; + SerialParams_t *p = &SerialParams; + p->AppCTSDSRFlow = (BOOL)GetPrivateProfileIntW(section, L"AppCTSDSRFlow", 1, ini); + p->RecieveBufferSize = (DWORD)GetPrivateProfileIntW(section, L"RecieveBufferSize", CommInQueSize, ini); + p->SendBufferSize = (DWORD)GetPrivateProfileIntW(section, L"SendBufferSize", CommOutQueSize, ini); + p->XonLim = (WORD)GetPrivateProfileIntW(section, L"XonLim", CommXonLim, ini); + p->XoffLim = (WORD)GetPrivateProfileIntW(section, L"XoffLim", CommXoffLim, ini); +} + // Initialize ComVar. // This routine is called only once // by the initialization procedure of Tera Term. @@ -156,8 +176,10 @@ return; } + SerialParamsInit(ts->SetupFNameW); + ClearCommError(cv->ComID,&DErr,NULL); - SetupComm(cv->ComID,CommInQueSize,CommOutQueSize); + SetupComm(cv->ComID, SerialParams.RecieveBufferSize, SerialParams.SendBufferSize); /* flush input and output buffers */ if (ClearBuff) { PurgeComm(cv->ComID, PURGE_TXABORT | PURGE_RXABORT | @@ -214,8 +236,8 @@ dcb.XoffChar = XOFF; dcb.fOutX = TRUE; dcb.fInX = TRUE; - dcb.XonLim = CommXonLim; - dcb.XoffLim = CommXoffLim; + dcb.XonLim = SerialParams.XonLim; + dcb.XoffLim = SerialParams.XoffLim; break; case IdFlowHard: // RTS/CTS dcb.fOutxCtsFlow = TRUE; @@ -1076,18 +1098,15 @@ break; case IdSerial: Max = 1; - if (cv->ts->Flow == IdFlowHard || cv->ts->Flow == IdFlowHardDsrDtr) { + if (SerialParams.AppCTSDSRFlow && + ((cv->ts->Flow == IdFlowHard || cv->ts->Flow == IdFlowHardDsrDtr))) { // RTS/CTS, DSR/DTR DWORD modem_state; GetCommModemStatus(cv->ComID, &modem_state); - DWORD mask = cv->ts->Flow == IdFlowHard ? MS_CTS_ON : MS_DSR_ON; + const DWORD mask = cv->ts->Flow == IdFlowHard ? MS_CTS_ON : MS_DSR_ON; if ((modem_state & mask) == 0) { // \x90M\x8D\x86\x90\xFC\x82\xAA\x83A\x83N\x83e\x83B\x83u\x82ł͂Ȃ\xA2\x81A\x91\x97\x90M\x82\xB5\x82Ȃ\xA2 - Max = 1; - - DCB dcb; - GetCommState(cv->ComID, &dcb); - int a = 0; + Max = 0; } }