Changeset 318 for asp3_gr_sakura/trunk/syssvc/tSerialPortMain.c
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/syssvc/tSerialPortMain.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 * スコード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 * の無保証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 * と. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 * 報告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ã44 * シリアルインタフェースドライバ 60 45 */ 61 46 … … 65 50 66 51 /* 67 * ããã¼å¶å¾¡ã«é¢é£ããå®æ°ã¨ãã¯ã68 */ 69 #define FC_STOP '\023' /* ã³ã³ããã¼ã«-S */70 #define FC_START '\021' /* ã³ã³ããã¼ã«-Q */71 72 #define BUFCNT_STOP(bufsz) ((bufsz) * 3 / 4) /* STOP ãéãåºæºæåæ°*/73 #define BUFCNT_START(bufsz) ((bufsz) / 2) /* START ãéãåºæºæåæ°*/74 75 /* 76 * ãã¤ã³ã¿ã®ã¤ã³ã¯ãªã¡ã³ã52 * フロー制御に関連する定数とマクロ 53 */ 54 #define FC_STOP '\023' /* コントロール-S */ 55 #define FC_START '\021' /* コントロール-Q */ 56 57 #define BUFCNT_STOP(bufsz) ((bufsz) * 3 / 4) /* STOPを送る基準文字数 */ 58 #define BUFCNT_START(bufsz) ((bufsz) / 2) /* STARTを送る基準文字数 */ 59 60 /* 61 * ポインタのインクリメント 77 62 */ 78 63 #define INC_PTR(ptr, bufsz) do { \ … … 83 68 84 69 /* 85 * ãµã¼ãã¹ã³ã¼ã«å¼åºããã¯ã70 * サービスコール呼出しマクロ 86 71 * 87 * ãµã¼ãã¹ã³ã¼ã«å¼åºããå«ãå¼expãè©ä¾¡ãï¼è¿å¤ãã¨ã©ã¼ï¼è² ã®å¤ï¼ã®å ´ 88 * åã«ã¯ï¼ercã«ercd_expãè©ä¾¡ããå¤ã代å 89 ¥ãï¼error_exitã«gotoããï¼ 72 * サービスコール呼出しを含む式expを評価し,返値がエラー(負の値)の場 73 * 合には,ercにercd_expを評価した値を代入し,error_exitにgotoする. 90 74 */ 91 75 #define SVC(exp, ercd_exp) do { \ … … 97 81 98 82 /* 99 * E_SYS ã¨ã©ã¼ã®çæ83 * E_SYSエラーの生成 100 84 */ 101 85 static ER … … 107 91 108 92 /* 109 * å¾ 110 ã¡ã«å 111 ¥ããµã¼ãã¹ã³ã¼ã«ããã®ã¨ã©ã¼ã®å¤æ 93 * 待ちに入るサービスコールからのエラーの変換 112 94 */ 113 95 static ER … … 126 108 127 109 /* 128 * ã·ãªã¢ã«ãã¼ãã®ãªã¼ãã³ï¼åãå£é¢æ°ï¼110 * シリアルポートのオープン(受け口関数) 129 111 */ 130 112 ER … … 134 116 ER ercd; 135 117 136 if (sns_dpn()) { /* ã³ã³ããã¹ãã®ãã§ãã¯*/118 if (sns_dpn()) { /* コンテキストのチェック */ 137 119 return(E_CTX); 138 120 } 139 121 if (!VALID_IDX(idx)) { 140 return(E_ID); /* ãã¼ãçªå·ã®ãã§ãã¯*/122 return(E_ID); /* ポート番号のチェック */ 141 123 } 142 124 p_cellcb = GET_CELLCB(idx); 143 125 144 126 SVC(dis_dsp(), gen_ercd_sys(p_cellcb)); 145 if (VAR_openFlag) { /* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯*/127 if (VAR_openFlag) { /* オープン済みかのチェック */ 146 128 ercd = E_OBJ; 147 129 } 148 130 else { 149 131 /* 150 * å¤æ°ã®åæå132 * 変数の初期化 151 133 */ 152 134 VAR_ioControl = (IOCTL_ECHO | IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV); … … 164 146 165 147 /* 166 * ãã以éï¼å²è¾¼ã¿ãç¦æ¢ããï¼148 * これ以降,割込みを禁止する. 167 149 */ 168 150 if (loc_cpu() < 0) { … … 172 154 173 155 /* 174 * ãã¼ãã¦ã§ã¢ä¾åã®ãªã¼ãã³å¦ç156 * ハードウェア依存のオープン処理 175 157 */ 176 158 cSIOPort_open(); 177 159 178 160 /* 179 * åä¿¡éç¥ã³ã¼ã«ããã¯ã許å¯ããï¼161 * 受信通知コールバックを許可する. 180 162 */ 181 163 cSIOPort_enableCBR(SIOReceiveReady); … … 199 181 200 182 /* 201 * ã·ãªã¢ã«ãã¼ãã®ã¯ãã¼ãºï¼åãå£é¢æ°ï¼183 * シリアルポートのクローズ(受け口関数) 202 184 */ 203 185 ER … … 208 190 bool_t eflag = false; 209 191 210 if (sns_dpn()) { /* ã³ã³ããã¹ãã®ãã§ãã¯*/192 if (sns_dpn()) { /* コンテキストのチェック */ 211 193 return(E_CTX); 212 194 } 213 195 if (!VALID_IDX(idx)) { 214 return(E_ID); /* ãã¼ãçªå·ã®ãã§ãã¯*/196 return(E_ID); /* ポート番号のチェック */ 215 197 } 216 198 p_cellcb = GET_CELLCB(idx); 217 199 218 200 SVC(dis_dsp(), gen_ercd_sys(p_cellcb)); 219 if (!VAR_openFlag) { /* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯*/201 if (!VAR_openFlag) { /* オープン済みかのチェック */ 220 202 ercd = E_OBJ; 221 203 } 222 204 else { 223 205 /* 224 * ãã¼ãã¦ã§ã¢ä¾åã®ã¯ãã¼ãºå¦ç206 * ハードウェア依存のクローズ処理 225 207 */ 226 208 if (loc_cpu() < 0) { … … 234 216 235 217 /* 236 * ã»ããã©ã®åæå218 * セマフォの初期化 237 219 */ 238 220 if (cSendSemaphore_initialize() < 0) { … … 244 226 245 227 /* 246 * ã¨ã©ã¼ã³ã¼ãã®è¨å®228 * エラーコードの設定 247 229 */ 248 230 if (eflag) { … … 260 242 261 243 /* 262 * ã·ãªã¢ã«ãã¼ãã¸ã®æåéä¿¡244 * シリアルポートへの文字送信 263 245 * 264 * p_cellcbã§æå®ãããSIOãã¼ãã«å¯¾ãã¦ï¼æåcãéä¿¡ããï¼æåãéä¿¡ 265 * ã¬ã¸ã¹ã¿ã«ãããå ´åã«ã¯trueãè¿ãï¼ããã§ãªãå ´åã«ã¯ï¼éä¿¡ã¬ã¸ã¹ 266 * ã¿ã空ãããã¨ãéç¥ããã³ã¼ã«ããã¯é¢æ°ã許å¯ãï¼falseãè¿ãï¼ãã® 267 * é¢æ°ã¯ï¼CPUããã¯ç¶æ 268 ã§å¼ã³åºãããï¼ 246 * p_cellcbで指定されるSIOポートに対して,文字cを送信する.文字を送信 247 * レジスタにいれた場合にはtrueを返す.そうでない場合には,送信レジス 248 * タが空いたことを通知するコールバック関数を許可し,falseを返す.この 249 * 関数は,CPUロック状態で呼び出される. 269 250 */ 270 251 Inline bool_t … … 281 262 282 263 /* 283 * ã·ãªã¢ã«ãã¼ãã¸ã®1æåéä¿¡264 * シリアルポートへの1文字送信 284 265 */ 285 266 static ER_BOOL … … 290 271 291 272 /* 292 * LF ã®åã«CRãéä¿¡ããï¼273 * LFの前にCRを送信する. 293 274 */ 294 275 if (c == '\n' && (VAR_ioControl & IOCTL_CRLF) != 0U) { 295 276 /* 296 * 以ä¸ã®ã³ã¼ãã¯å帰å¼åºãã«ãªã£ã¦ãããï¼å¼æ°cã'\n'ã®å ´åã« 297 * å¼æ°cã'\r'ã¨ãã¦å¼ã³åºããã¨ããï¼ãã®å帰å¼åºãã¯2åç®ã® 298 * å¼ã³åºãã§å¿ 299 ãæ¢ã¾ãï¼ 277 * 以下のコードは再帰呼出しになっているが,引数cが'\n'の場合に 278 * 引数cを'\r'として呼び出すことから,この再帰呼出しは2回目の 279 * 呼び出しで必ず止まる. 300 280 */ 301 281 SVC(rercd = serialPort_writeChar(p_cellcb, '\r'), rercd); … … 310 290 && serialPort_sendChar(p_cellcb, c)) { 311 291 /* 312 * SIOã®éä¿¡ã¬ã¸ã¹ã¿ã«æåãå 313 ¥ãããã¨ã«æåããå ´åï¼ 292 * SIOの送信レジスタに文字を入れることに成功した場合. 314 293 */ 315 294 buffer_full = false; … … 317 296 else { 318 297 /* 319 * éä¿¡ãããã¡ã«æåãå 320 ¥ããï¼ 298 * 送信バッファに文字を入れる. 321 299 */ 322 300 VAR_sendBuffer[VAR_sendWritePointer] = c; … … 334 312 335 313 /* 336 * ã·ãªã¢ã«ãã¼ãã¸ã®æååéä¿¡ï¼åãå£é¢æ°ï¼314 * シリアルポートへの文字列送信(受け口関数) 337 315 */ 338 316 ER_UINT … … 344 322 ER ercd, rercd; 345 323 346 if (sns_dpn()) { /* ã³ã³ããã¹ãã®ãã§ãã¯*/324 if (sns_dpn()) { /* コンテキストのチェック */ 347 325 return(E_CTX); 348 326 } 349 if (!VALID_IDX(idx)) { /* ãã¼ãçªå·ã®ãã§ãã¯*/327 if (!VALID_IDX(idx)) { /* ポート番号のチェック */ 350 328 return(E_ID); 351 329 } 352 330 353 331 p_cellcb = GET_CELLCB(idx); 354 if (!VAR_openFlag) { /* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯*/332 if (!VAR_openFlag) { /* オープン済みかのチェック */ 355 333 return(E_OBJ); 356 334 } 357 if (VAR_errorFlag) { /* ã¨ã©ã¼ç¶æ 358 ãã®ãã§ã㯠*/ 335 if (VAR_errorFlag) { /* エラー状態かのチェック */ 359 336 return(E_SYS); 360 337 } 361 338 362 buffer_full = true; /* ã«ã¼ãã®1åãã¯wai_semãã*/339 buffer_full = true; /* ループの1回めはwai_semする */ 363 340 while (wricnt < length) { 364 341 if (buffer_full) { … … 380 357 381 358 /* 382 * ã·ãªã¢ã«ãã¼ãããã®1æååä¿¡359 * シリアルポートからの1文字受信 383 360 */ 384 361 static bool_t … … 391 368 392 369 /* 393 * åä¿¡ãããã¡ããæåãåãåºãï¼370 * 受信バッファから文字を取り出す. 394 371 */ 395 372 *p_c = VAR_receiveBuffer[VAR_receiveReadPointer]; … … 399 376 400 377 /* 401 * START ãéä¿¡ããï¼378 * STARTを送信する. 402 379 */ 403 380 if (VAR_receiveStopped && VAR_receiveCount … … 417 394 418 395 /* 419 * ã·ãªã¢ã«ãã¼ãããã®æåååä¿¡ï¼åãå£é¢æ°ï¼396 * シリアルポートからの文字列受信(受け口関数) 420 397 */ 421 398 ER_UINT … … 425 402 bool_t buffer_empty; 426 403 uint_t reacnt = 0U; 427 char c = '\0'; /* ã³ã³ãã¤ã©ã®è¦åãææ¢ããããã«åæåãã*/404 char c = '\0'; /* コンパイラの警告を抑止するために初期化する */ 428 405 ER ercd, rercd; 429 406 430 if (sns_dpn()) { /* ã³ã³ããã¹ãã®ãã§ãã¯*/407 if (sns_dpn()) { /* コンテキストのチェック */ 431 408 return(E_CTX); 432 409 } 433 if (!VALID_IDX(idx)) { /* ãã¼ãçªå·ã®ãã§ãã¯*/410 if (!VALID_IDX(idx)) { /* ポート番号のチェック */ 434 411 return(E_ID); 435 412 } 436 413 437 414 p_cellcb = GET_CELLCB(idx); 438 if (!VAR_openFlag) { /* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯*/415 if (!VAR_openFlag) { /* オープン済みかのチェック */ 439 416 return(E_OBJ); 440 417 } 441 if (VAR_errorFlag) { /* ã¨ã©ã¼ç¶æ 442 ãã®ãã§ã㯠*/ 418 if (VAR_errorFlag) { /* エラー状態かのチェック */ 443 419 return(E_SYS); 444 420 } 445 421 446 buffer_empty = true; /* ã«ã¼ãã®1åãã¯wai_semãã*/422 buffer_empty = true; /* ループの1回めはwai_semする */ 447 423 while (reacnt < length) { 448 424 if (buffer_empty) { … … 456 432 457 433 /* 458 * ã¨ã³ã¼ããã¯å¦çï¼434 * エコーバック処理. 459 435 */ 460 436 if ((VAR_ioControl & IOCTL_ECHO) != 0U) { … … 477 453 478 454 /* 479 * ã·ãªã¢ã«ãã¼ãã®å¶å¾¡ï¼åãå£é¢æ°ï¼455 * シリアルポートの制御(受け口関数) 480 456 */ 481 457 ER … … 484 460 CELLCB *p_cellcb; 485 461 486 if (sns_dpn()) { /* ã³ã³ããã¹ãã®ãã§ãã¯*/462 if (sns_dpn()) { /* コンテキストのチェック */ 487 463 return(E_CTX); 488 464 } 489 465 if (!VALID_IDX(idx)) { 490 return(E_ID); /* ãã¼ãçªå·ã®ãã§ãã¯*/491 } 492 493 p_cellcb = GET_CELLCB(idx); 494 if (!VAR_openFlag) { /* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯*/466 return(E_ID); /* ポート番号のチェック */ 467 } 468 469 p_cellcb = GET_CELLCB(idx); 470 if (!VAR_openFlag) { /* オープン済みかのチェック */ 495 471 return(E_OBJ); 496 472 } 497 if (VAR_errorFlag) { /* ã¨ã©ã¼ç¶æ 498 ãã®ãã§ã㯠*/ 473 if (VAR_errorFlag) { /* エラー状態かのチェック */ 499 474 return(E_SYS); 500 475 } … … 505 480 506 481 /* 507 * ã·ãªã¢ã«ãã¼ãç¶æ 508 ã®åç 509 §ï¼åãå£é¢æ°ï¼ 482 * シリアルポート状態の参照(受け口関数) 510 483 */ 511 484 ER … … 514 487 CELLCB *p_cellcb; 515 488 516 if (sns_dpn()) { /* ã³ã³ããã¹ãã®ãã§ãã¯*/489 if (sns_dpn()) { /* コンテキストのチェック */ 517 490 return(E_CTX); 518 491 } 519 492 if (!VALID_IDX(idx)) { 520 return(E_ID); /* ãã¼ãçªå·ã®ãã§ãã¯*/521 } 522 523 p_cellcb = GET_CELLCB(idx); 524 if (!VAR_openFlag) { /* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯*/493 return(E_ID); /* ポート番号のチェック */ 494 } 495 496 p_cellcb = GET_CELLCB(idx); 497 if (!VAR_openFlag) { /* オープン済みかのチェック */ 525 498 return(E_OBJ); 526 499 } 527 if (VAR_errorFlag) { /* ã¨ã©ã¼ç¶æ 528 ãã®ãã§ã㯠*/ 500 if (VAR_errorFlag) { /* エラー状態かのチェック */ 529 501 return(E_SYS); 530 502 } … … 536 508 537 509 /* 538 * ã·ãªã¢ã«ãã¼ãããã®éä¿¡å¯è½ã³ã¼ã«ããã¯ï¼åãå£é¢æ°ï¼510 * シリアルポートからの送信可能コールバック(受け口関数) 539 511 */ 540 512 void … … 547 519 if (VAR_receiveFlowControl != '\0') { 548 520 /* 549 * START/STOP ãéä¿¡ããï¼521 * START/STOP を送信する. 550 522 */ 551 523 (void) cSIOPort_putChar(VAR_receiveFlowControl); … … 554 526 else if (!VAR_sendStopped && VAR_sendCount > 0U) { 555 527 /* 556 * éä¿¡ãããã¡ä¸ããæåãåãåºãã¦éä¿¡ããï¼528 * 送信バッファ中から文字を取り出して送信する. 557 529 */ 558 530 (void) cSIOPort_putChar(VAR_sendBuffer[VAR_sendReadPointer]); … … 567 539 else { 568 540 /* 569 * éä¿¡ãã¹ãæåããªãå ´åã¯ï¼éä¿¡å¯è½ã³ã¼ã«ããã¯ãç¦æ¢ããï¼541 * 送信すべき文字がない場合は,送信可能コールバックを禁止する. 570 542 */ 571 543 cSIOPort_disableCBR(SIOSendReady); … … 574 546 575 547 /* 576 * ã·ãªã¢ã«ãã¼ãããã®åä¿¡éç¥ã³ã¼ã«ããã¯ï¼åãå£é¢æ°ï¼548 * シリアルポートからの受信通知コールバック(受け口関数) 577 549 */ 578 550 void … … 587 559 if ((VAR_ioControl & IOCTL_FCSND) != 0U && c == FC_STOP) { 588 560 /* 589 * éä¿¡ãä¸æåæ¢ããï¼éä¿¡ä¸ã®æåã¯ãã®ã¾ã¾éä¿¡ããï¼561 * 送信を一時停止する.送信中の文字はそのまま送信する. 590 562 */ 591 563 VAR_sendStopped = true; … … 594 566 || (VAR_ioControl & IOCTL_FCANY) != 0U)) { 595 567 /* 596 * éä¿¡ãåéããï¼568 * 送信を再開する. 597 569 */ 598 570 VAR_sendStopped = false; … … 612 584 else if ((VAR_ioControl & IOCTL_FCSND) != 0U && c == FC_START) { 613 585 /* 614 * éä¿¡ã«å¯¾ãã¦ããã¼å¶å¾¡ãã¦ããå ´åï¼START ã¯æ¨ã¦ãï¼586 * 送信に対してフロー制御している場合,START は捨てる. 615 587 */ 616 588 } 617 589 else if (VAR_receiveCount == ATTR_receiveBufferSize) { 618 590 /* 619 * ãããã¡ãã«ã®å ´åï¼åä¿¡ããæåãæ¨ã¦ãï¼591 * バッファフルの場合,受信した文字を捨てる. 620 592 */ 621 593 } 622 594 else { 623 595 /* 624 * åä¿¡ããæåãåä¿¡ãããã¡ã«å 625 ¥ããï¼ 596 * 受信した文字を受信バッファに入れる. 626 597 */ 627 598 VAR_receiveBuffer[VAR_receiveWritePointer] = c; … … 635 606 636 607 /* 637 * STOP ãéä¿¡ããï¼608 * STOPを送信する. 638 609 */ 639 610 if ((VAR_ioControl & IOCTL_FCRCV) != 0U && !VAR_receiveStopped … … 648 619 649 620 /* 650 * ã·ãªã¢ã«ã¤ã³ã¿ãã§ã¼ã¹ãã©ã¤ãããã®æªéä¿¡æåã®ååºã621 * シリアルインタフェースドライバからの未送信文字の取出し 651 622 */ 652 623 bool_t … … 655 626 CELLCB *p_cellcb; 656 627 657 if (VALID_IDX(idx)) { /* ãã¼ãçªå·ã®ãã§ãã¯*/628 if (VALID_IDX(idx)) { /* ポート番号のチェック */ 658 629 p_cellcb = GET_CELLCB(idx); 659 if (VAR_openFlag) { /* ãªã¼ãã³æ¸ã¿ãã®ãã§ãã¯*/630 if (VAR_openFlag) { /* オープン済みかのチェック */ 660 631 if (VAR_sendCount > 0U) { 661 632 *p_c = VAR_sendBuffer[VAR_sendReadPointer];
Note:
See TracChangeset
for help on using the changeset viewer.