シリアルのハードフローが動作しない対策,パラメータ設定
- パラメータ設定(SetCommState())時、設定値に誤りがあったので修正
@@ -33,6 +33,7 @@ | ||
33 | 33 | #include "tttypes.h" |
34 | 34 | #include "tt_res.h" |
35 | 35 | #include <process.h> |
36 | +#include <assert.h> | |
36 | 37 | |
37 | 38 | #include "ttcommon.h" |
38 | 39 | #include "ttwsk.h" |
@@ -203,14 +204,18 @@ | ||
203 | 204 | |
204 | 205 | dcb.fDtrControl = DTR_CONTROL_ENABLE; |
205 | 206 | dcb.fRtsControl = RTS_CONTROL_ENABLE; |
207 | +#if 1 | |
208 | + dcb.XonChar = XON; | |
209 | + dcb.XoffChar = XOFF; | |
210 | +#endif | |
206 | 211 | switch (ts->Flow) { |
207 | 212 | case IdFlowX: |
213 | + dcb.XonChar = XON; | |
214 | + dcb.XoffChar = XOFF; | |
208 | 215 | dcb.fOutX = TRUE; |
209 | 216 | dcb.fInX = TRUE; |
210 | 217 | dcb.XonLim = CommXonLim; |
211 | 218 | dcb.XoffLim = CommXoffLim; |
212 | - dcb.XonChar = XON; | |
213 | - dcb.XoffChar = XOFF; | |
214 | 219 | break; |
215 | 220 | case IdFlowHard: // RTS/CTS |
216 | 221 | dcb.fOutxCtsFlow = TRUE; |
@@ -239,7 +244,19 @@ | ||
239 | 244 | break; |
240 | 245 | } |
241 | 246 | |
242 | - SetCommState(cv->ComID, &dcb); | |
247 | + if (SetCommState(cv->ComID, &dcb) == 0) { | |
248 | + // 設定エラー | |
249 | + assert(0); | |
250 | + } | |
251 | +#if !defined(NDEBUG) | |
252 | + { | |
253 | + DCB dcb_read; | |
254 | + GetCommState(cv->ComID, &dcb_read); | |
255 | + if (memcmp(&dcb, &dcb_read, sizeof(dcb)) != 0) { | |
256 | + assert(0); | |
257 | + } | |
258 | + } | |
259 | +#endif | |
243 | 260 | |
244 | 261 | /* enable receive request */ |
245 | 262 | SetCommMask(cv->ComID,0); |