Revision: 7825 https://osdn.net/projects/ttssh2/scm/svn/commits/7825 Author: yutakapon Date: 2019-06-30 19:34:03 +0900 (Sun, 30 Jun 2019) Log Message: ----------- シリアル接続のハードウェアフロー制御に DSR/DTR を追加した。 4つの選択項目が一度に表示されるように、シリアルポート設定ダイアログのコンボボックスの高さを調整した。 #39365 Ticket Links: ------------ https://osdn.net/projects/ttssh2/tracker/detail/39365 Modified Paths: -------------- branches/flowctrl_dsrdtr/teraterm/common/tttypes.h branches/flowctrl_dsrdtr/teraterm/teraterm/commlib.c branches/flowctrl_dsrdtr/teraterm/teraterm/ttdde.c branches/flowctrl_dsrdtr/teraterm/ttpdlg/ttdlg.c branches/flowctrl_dsrdtr/teraterm/ttpdlg/ttpdlg.rc branches/flowctrl_dsrdtr/teraterm/ttpset/ttset.c -------------- next part -------------- Modified: branches/flowctrl_dsrdtr/teraterm/common/tttypes.h =================================================================== --- branches/flowctrl_dsrdtr/teraterm/common/tttypes.h 2019-06-30 08:39:49 UTC (rev 7824) +++ branches/flowctrl_dsrdtr/teraterm/common/tttypes.h 2019-06-30 10:34:03 UTC (rev 7825) @@ -802,9 +802,11 @@ #define IdStopBit2 3 /* Flow control ID */ #define IdFlowX 1 -#define IdFlowHard 2 +#define IdFlowHard 2 // RTS/CTS(hardware flow) #define IdFlowNone 3 +#define IdFlowHardDsrDtr 4 // DSR/DTR(hardware flow) + /* GetHostName dialog record */ typedef struct { PCHAR SetupFN; // setup file name Modified: branches/flowctrl_dsrdtr/teraterm/teraterm/commlib.c =================================================================== --- branches/flowctrl_dsrdtr/teraterm/teraterm/commlib.c 2019-06-30 08:39:49 UTC (rev 7824) +++ branches/flowctrl_dsrdtr/teraterm/teraterm/commlib.c 2019-06-30 10:34:03 UTC (rev 7825) @@ -224,10 +224,14 @@ dcb.XonChar = XON; dcb.XoffChar = XOFF; break; - case IdFlowHard: + case IdFlowHard: // RTS/CTS dcb.fOutxCtsFlow = TRUE; dcb.fRtsControl = RTS_CONTROL_HANDSHAKE; break; + case IdFlowHardDsrDtr: // DSR/DTR + dcb.fOutxDsrFlow = TRUE; + dcb.fDtrControl = DTR_CONTROL_HANDSHAKE; + break; } switch (ts->DataBit) { @@ -1182,7 +1186,8 @@ } if ((cv->PortType==IdTCPIP) || (cv->PortType==IdSerial) && - (ts->Flow!=IdFlowHard)) { + (!(ts->Flow == IdFlowHard || ts->Flow == IdFlowHardDsrDtr)) + ) { if (Lock) { b = XOFF; } @@ -1192,12 +1197,17 @@ CommBinaryOut(cv,&b,1); } else if ((cv->PortType==IdSerial) && - (ts->Flow==IdFlowHard)) { + (ts->Flow == IdFlowHard || ts->Flow == IdFlowHardDsrDtr)) { + // \x83n\x81[\x83h\x83E\x83F\x83A\x83t\x83\x8D\x81[\x82̐ݒ\xE8\x82ɉ\x9E\x82\xB6\x82Ċg\x92\xA3\x8B@\x94\\x83R\x81[\x83h\x82\xF0\x90\xE8\x91ւ\xA6\x82\xE9\x81B if (Lock) { Func = CLRRTS; + if (ts->Flow == IdFlowHardDsrDtr) + Func = CLRDTR; } else { Func = SETRTS; + if (ts->Flow == IdFlowHardDsrDtr) + Func = SETDTR; } EscapeCommFunction(cv->ComID,Func); } Modified: branches/flowctrl_dsrdtr/teraterm/teraterm/ttdde.c =================================================================== --- branches/flowctrl_dsrdtr/teraterm/teraterm/ttdde.c 2019-06-30 08:39:49 UTC (rev 7824) +++ branches/flowctrl_dsrdtr/teraterm/teraterm/ttdde.c 2019-06-30 10:34:03 UTC (rev 7825) @@ -884,9 +884,10 @@ val = atoi(ParamFileName); switch(val) { - case 1: - case 2: - case 3: + case 1: // Xon/Xoff + case 2: // RTS/CTS + case 3: // none + case 4: // DSR/DTR ts.Flow = val; break; } Modified: branches/flowctrl_dsrdtr/teraterm/ttpdlg/ttdlg.c =================================================================== --- branches/flowctrl_dsrdtr/teraterm/ttpdlg/ttdlg.c 2019-06-30 08:39:49 UTC (rev 7824) +++ branches/flowctrl_dsrdtr/teraterm/ttpdlg/ttdlg.c 2019-06-30 10:34:03 UTC (rev 7825) @@ -1101,7 +1101,7 @@ static PCHAR DataList[] = {"7 bit","8 bit",NULL}; static PCHAR ParityList[] = {"none", "odd", "even", "mark", "space", NULL}; static PCHAR StopList[] = {"1 bit", "1.5 bit", "2 bit", NULL}; -static PCHAR FlowList[] = {"Xon/Xoff","hardware","none",NULL}; +static PCHAR FlowList[] = {"Xon/Xoff","RTS/CTS","none", "DSR/DTR", NULL}; static INT_PTR CALLBACK SerialDlg(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam) { Modified: branches/flowctrl_dsrdtr/teraterm/ttpdlg/ttpdlg.rc =================================================================== --- branches/flowctrl_dsrdtr/teraterm/ttpdlg/ttpdlg.rc 2019-06-30 08:39:49 UTC (rev 7824) +++ branches/flowctrl_dsrdtr/teraterm/ttpdlg/ttpdlg.rc 2019-06-30 10:34:03 UTC (rev 7825) @@ -141,7 +141,7 @@ CONTROL "&Stop bits:",IDC_SERIALSTOP_LABEL,"Static",SS_LEFTNOWORDWRAP,15,69,54,8 COMBOBOX IDC_SERIALSTOP,75,67,48,40,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP CONTROL "&Flow control:",IDC_SERIALFLOW_LABEL,"Static",SS_LEFTNOWORDWRAP,15,84,54,8 - COMBOBOX IDC_SERIALFLOW,75,82,48,40,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_SERIALFLOW,75,82,48,53,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP GROUPBOX "Transmit delay",IDC_SERIALDELAY,19,104,152,32 LTEXT "msec/&char",IDC_SERIALDELAYCHAR_LABEL,53,118,42,10 EDITTEXT IDC_SERIALDELAYCHAR,29,116,20,12,ES_AUTOHSCROLL | ES_NUMBER Modified: branches/flowctrl_dsrdtr/teraterm/ttpset/ttset.c =================================================================== --- branches/flowctrl_dsrdtr/teraterm/ttpset/ttset.c 2019-06-30 08:39:49 UTC (rev 7824) +++ branches/flowctrl_dsrdtr/teraterm/ttpset/ttset.c 2019-06-30 10:34:03 UTC (rev 7825) @@ -1070,6 +1070,10 @@ ts->Flow = IdFlowX; else if (_stricmp(Temp, "hard") == 0) ts->Flow = IdFlowHard; + else if (_stricmp(Temp, "rtscts") == 0) // hard\x82\xC6rtscts\x82͓\xAF\x82\xB6\x88Ӗ\xA1 + ts->Flow = IdFlowHard; + else if (_stricmp(Temp, "dsrdtr") == 0) + ts->Flow = IdFlowHardDsrDtr; else ts->Flow = IdFlowNone; @@ -2636,6 +2640,9 @@ case IdFlowHard: strncpy_s(Temp, sizeof(Temp), "hard", _TRUNCATE); break; + case IdFlowHardDsrDtr: + strncpy_s(Temp, sizeof(Temp), "dsrdtr", _TRUNCATE); + break; default: strncpy_s(Temp, sizeof(Temp), "none", _TRUNCATE); }