[ttssh2-commit] [10593] r10587の送信フロー制御が誤っていたので修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2023年 2月 13日 (月) 23:41:35 JST


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;
 				}
 			}
 


ttssh2-commit メーリングリストの案内
Back to archive index