Changeset 107 for uKadecot/trunk/ssp/syssvc/serial.c
- Timestamp:
- Jun 10, 2015, 8:40:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/ssp/syssvc/serial.c
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r101 r107 11 11 * Nagoya Municipal Industrial Research Institute, JAPAN 12 12 * 13 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 14 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 15 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 16 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 17 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 18 * XR[hÉÜÜêÄ¢é±ÆD 19 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 20 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 21 gip 22 * Ò}j 23 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 24 * ̳ÛØKèðfÚ·é±ÆD 25 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 26 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 27 * ÆD 28 * (a) Äzzɺ¤hL 29 gipÒ}j 30 AÈÇjÉCãLÌ 31 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 32 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 33 * ñ·é±ÆD 34 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 35 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 36 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 37 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 38 * ÆÓ·é±ÆD 13 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 15 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 18 * スコード中に含まれていること. 19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 22 * の無保証規定を掲載すること. 23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 25 * と. 26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 27 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 29 * 報告すること. 30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 32 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 33 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 34 * 免責すること. 39 35 * 40 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨41 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI42 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF43 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»44 * ÌÓCðíÈ¢D45 */ 46 47 /* 48 * VAC^tF[XhCo36 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 37 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 38 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 39 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 40 * の責任を負わない. 41 */ 42 43 /* 44 * シリアルインタフェースドライバ 49 45 */ 50 46 … … 56 52 57 53 /* 58 * obt@TCYÌftHglÆobt@Ìè`54 * バッファサイズのデフォルト値とバッファの定義 59 55 */ 60 56 #ifndef SERIAL_RCV_BUFSZ1 61 #define SERIAL_RCV_BUFSZ1 64 /* |[g1ÌóMobt@TCY*/57 #define SERIAL_RCV_BUFSZ1 64 /* ポート1の受信バッファサイズ */ 62 58 #endif /* SERIAL_RCV_BUFSZ1 */ 63 59 64 60 #ifndef SERIAL_SND_BUFSZ1 65 #define SERIAL_SND_BUFSZ1 256 /* |[g1ÌMobt@TCY*/61 #define SERIAL_SND_BUFSZ1 256 /* ポート1の送信バッファサイズ */ 66 62 #endif /* SERIAL_SND_BUFSZ1 */ 67 63 … … 69 65 static char snd_buffer1[SERIAL_SND_BUFSZ1]; 70 66 71 #if TNUM_PORT >= 2 /* |[g2ÉÖ·éè`*/67 #if TNUM_PORT >= 2 /* ポート2に関する定義 */ 72 68 73 69 #ifndef SERIAL_RCV_BUFSZ2 74 #define SERIAL_RCV_BUFSZ2 64 /* |[g2ÌóMobt@TCY*/70 #define SERIAL_RCV_BUFSZ2 64 /* ポート2の受信バッファサイズ */ 75 71 #endif /* SERIAL_RCV_BUFSZ2 */ 76 72 77 73 #ifndef SERIAL_SND_BUFSZ2 78 #define SERIAL_SND_BUFSZ2 64 /* |[g2ÌMobt@TCY*/74 #define SERIAL_SND_BUFSZ2 64 /* ポート2の送信バッファサイズ */ 79 75 #endif /* SERIAL_SND_BUFSZ2 */ 80 76 … … 84 80 #endif /* TNUM_PORT >= 2 */ 85 81 86 #if TNUM_PORT >= 3 /* |[g3ÉÖ·éè`*/82 #if TNUM_PORT >= 3 /* ポート3に関する定義 */ 87 83 88 84 #ifndef SERIAL_RCV_BUFSZ3 89 #define SERIAL_RCV_BUFSZ3 64 /* |[g3ÌóMobt@TCY*/85 #define SERIAL_RCV_BUFSZ3 64 /* ポート3の受信バッファサイズ */ 90 86 #endif /* SERIAL_RCV_BUFSZ3 */ 91 87 92 88 #ifndef SERIAL_SND_BUFSZ3 93 #define SERIAL_SND_BUFSZ3 64 /* |[g3ÌMobt@TCY*/89 #define SERIAL_SND_BUFSZ3 64 /* ポート3の送信バッファサイズ */ 94 90 #endif /* SERIAL_SND_BUFSZ3 */ 95 91 … … 100 96 101 97 /* 102 * VA|[gú»ubN98 * シリアルポート初期化ブロック 103 99 */ 104 100 typedef struct serial_port_initialization_block { 105 uint_t rcv_bufsz; /* óMobt@TCY*/106 char *rcv_buffer; /* óMobt@*/107 uint_t snd_bufsz; /* Mobt@TCY*/108 char *snd_buffer; /* Mobt@*/101 uint_t rcv_bufsz; /* 受信バッファサイズ */ 102 char *rcv_buffer; /* 受信バッファ */ 103 uint_t snd_bufsz; /* 送信バッファサイズ */ 104 char *snd_buffer; /* 送信バッファ */ 109 105 } SPINIB; 110 106 … … 123 119 124 120 /* 125 * VA|[gÇubN121 * シリアルポート管理ブロック 126 122 */ 127 123 typedef struct serial_port_control_block { 128 const SPINIB *p_spinib; /* VA|[gú»ubN*/129 SIOPCB *p_siopcb; /* VAI/O|[gÇubN*/130 bool_t openflag; /* I[vÏÝtO*/131 bool_t errorflag; /* G[tO*/132 uint_t ioctl; /* ®ì§äÌÝèl*/133 134 uint_t rcv_read_ptr; /* óMobt@Çoµ|C^*/135 uint_t rcv_write_ptr; /* óMobt@Ý|C^*/136 uint_t rcv_count; /* óMobt@̶*/137 138 uint_t snd_read_ptr; /* Mobt@Çoµ|C^*/139 uint_t snd_write_ptr; /* Mobt@Ý|C^*/140 uint_t snd_count; /* Mobt@̶*/124 const SPINIB *p_spinib; /* シリアルポート初期化ブロック */ 125 SIOPCB *p_siopcb; /* シリアルI/Oポート管理ブロック */ 126 bool_t openflag; /* オープン済みフラグ */ 127 bool_t errorflag; /* エラーフラグ */ 128 uint_t ioctl; /* 動作制御の設定値 */ 129 130 uint_t rcv_read_ptr; /* 受信バッファ読出しポインタ */ 131 uint_t rcv_write_ptr; /* 受信バッファ書込みポインタ */ 132 uint_t rcv_count; /* 受信バッファ中の文字数 */ 133 134 uint_t snd_read_ptr; /* 送信バッファ読出しポインタ */ 135 uint_t snd_write_ptr; /* 送信バッファ書込みポインタ */ 136 uint_t snd_count; /* 送信バッファ中の文字数 */ 141 137 } SPCB; 142 138 … … 144 140 145 141 /* 146 * VA|[gID©çVA|[gÇubNðæèo·½ßÌ}N142 * シリアルポートIDからシリアルポート管理ブロックを取り出すためのマクロ 147 143 */ 148 144 #define INDEX_PORT(portid) ((uint_t)((portid) - 1)) … … 150 146 151 147 /* 152 * |C^ÌCNg148 * ポインタのインクリメント 153 149 */ 154 150 #define INC_PTR(ptr, bufsz) { if (++(ptr) == (bufsz)) { (ptr) = 0; }} 155 151 156 152 /* 157 * T[rXR[Äoµ}N153 * サービスコール呼出しマクロ 158 154 * 159 * T[rXR[ÄoµðÜÞ®expð]¿µCÔlªG[iÌljÌê160 * ÉÍCercÉercd_expð]¿µ½lðãüµCerror_exitÉgoto·éD155 * サービスコール呼出しを含む式expを評価し,返値がエラー(負の値)の場 156 * 合には,ercにercd_expを評価した値を代入し,error_exitにgotoする. 161 157 */ 162 158 #define SVC(exp, ercd_exp) \ … … 164 160 165 161 /* 166 * E_SYS G[̶¬162 * E_SYSエラーの生成 167 163 */ 168 164 static ER … … 175 171 176 172 /* 177 * VAC^tF[XhCoÌú»[`173 * シリアルインタフェースドライバの初期化ルーチン 178 174 */ 179 175 void … … 191 187 192 188 /* 193 * VAC^[tF[XhCoÌI¹[`189 * シリアルインターフェースドライバの終了ルーチン 194 190 */ 195 191 … … 200 196 SPCB *p_spcb; 201 197 202 /* obt@ÉcÁÄ¢éSÄ̶ðoÍ·é*/198 /* バッファに残っている全ての文字を出力する */ 203 199 for (i = 0; i < TNUM_PORT; i++) { 204 200 p_spcb = &(spcb_table[i]); … … 218 214 219 215 /* 220 * VA|[gÌI[viT[rXR[j216 * シリアルポートのオープン(サービスコール) 221 217 */ 222 218 ER … … 226 222 ER ercd; 227 223 228 if (sns_dpn()) { /* ReLXgÌ`FbN*/224 if (sns_dpn()) { /* コンテキストのチェック */ 229 225 return(E_CTX); 230 226 } 231 227 if (!(1 <= portid && portid <= TNUM_PORT)) { 232 return(E_ID); /* |[gÔÌ`FbN*/228 return(E_ID); /* ポート番号のチェック */ 233 229 } 234 230 p_spcb = get_spcb(portid); 235 231 236 232 SVC(dis_dsp(), gen_ercd_sys(p_spcb)); 237 if (p_spcb->openflag) { /* I[vÏÝ©Ì`FbN*/233 if (p_spcb->openflag) { /* オープン済みかのチェック */ 238 234 ercd = E_OBJ; 239 235 } 240 236 else { 241 237 /* 242 * ÏÌú»238 * 変数の初期化 243 239 */ 244 240 p_spcb->ioctl = (IOCTL_ECHO | IOCTL_CRLF); … … 251 247 252 248 /* 253 * ±êÈ~CÝðÖ~·éD249 * これ以降,割込みを禁止する. 254 250 */ 255 251 if (loc_cpu() < 0) { … … 259 255 260 256 /* 261 * n[hEFA˶ÌI[v257 * ハードウェア依存のオープン処理 262 258 */ 263 259 p_spcb->p_siopcb = sio_opn_por(portid, (intptr_t) p_spcb); 264 260 265 261 /* 266 * óMÊmR[obNð·éD262 * 受信通知コールバックを許可する. 267 263 */ 268 264 sio_ena_cbr(p_spcb->p_siopcb, SIO_RDY_RCV); … … 286 282 287 283 /* 288 * VA|[gÌN[YiT[rXR[j284 * シリアルポートのクローズ(サービスコール) 289 285 */ 290 286 ER … … 295 291 bool_t eflag = false; 296 292 297 if (sns_dpn()) { /* ReLXgÌ`FbN*/293 if (sns_dpn()) { /* コンテキストのチェック */ 298 294 return(E_CTX); 299 295 } 300 296 if (!(1 <= portid && portid <= TNUM_PORT)) { 301 return(E_ID); /* |[gÔÌ`FbN*/297 return(E_ID); /* ポート番号のチェック */ 302 298 } 303 299 p_spcb = get_spcb(portid); 304 300 305 301 SVC(dis_dsp(), gen_ercd_sys(p_spcb)); 306 if (!(p_spcb->openflag)) { /* I[vÏÝ©Ì`FbN*/302 if (!(p_spcb->openflag)) { /* オープン済みかのチェック */ 307 303 ercd = E_OBJ; 308 304 } 309 305 else { 310 306 /* 311 * n[hEFA˶ÌN[Y307 * ハードウェア依存のクローズ処理 312 308 */ 313 309 if (loc_cpu() < 0) { … … 321 317 322 318 /* 323 * G[R[hÌÝè319 * エラーコードの設定 324 320 */ 325 321 if (eflag) { … … 337 333 338 334 /* 339 * VA|[gÖ̶M335 * シリアルポートへの文字送信 340 336 * 341 * p_spcb Åwè³êéVAI/O|[gÉεÄC¶cðM·éD¶342 * ðMWX^É¢ê½êÉÍtrueðÔ·D»¤ÅÈ¢êÉÍCM343 * WX^ªó¢½±ÆðÊm·éR[obNÖðµCfalseðÔ·D344 * ±ÌÖÍCCPUbNóÔÅÄÑo³êéD337 * p_spcbで指定されるシリアルI/Oポートに対して,文字cを送信する.文字 338 * を送信レジスタにいれた場合にはtrueを返す.そうでない場合には,送信 339 * レジスタが空いたことを通知するコールバック関数を許可し,falseを返す. 340 * この関数は,CPUロック状態で呼び出される. 345 341 */ 346 342 Inline bool_t … … 357 353 358 354 /* 359 * VA|[gÖÌ1¶M360 * wè³ê½¶ÌMðÝé.361 * foCXÖÌMª¬÷µ½êܽÍobt@Éó«ª èi[Å«½êÍfalse,362 * obt@ªtÅi[Å«È©Á½êÍ true ðÔ·D363 * »êÈOÌG[ª¶µ½êÍ ER ^ÌG[R[hðÔ·D355 * シリアルポートへの1文字送信 356 * 指定された文字の送信を試みる. 357 * デバイスへの送信が成功した場合またはバッファに空きがあり格納できた場合は false, 358 * バッファがフルで格納できなかった場合は true を返す. 359 * それ以外のエラーが発生した場合は ER 型のエラーコードを返す. 364 360 */ 365 361 static ER_BOOL … … 370 366 371 367 /* 372 * LF ÌOÉCRðM·éD373 * ½¾µC1¶ÈºÌ󫵩ȢêÍobt@tÆÝȵCMµÈ¢D368 * LFの前にCRを送信する. 369 * ただし,1文字以下の空きしかない場合はバッファフルとみなし,送信しない. 374 370 */ 375 371 if (c == '\n' && (p_spcb->ioctl & IOCTL_CRLF) != 0U) { … … 385 381 if ((p_spcb->snd_count == 0U) && serial_snd_chr(p_spcb, c)) { 386 382 /* 387 * VAI/OfoCXÌMWX^ɶðüêé±Æɬ÷µ388 * ½êD383 * シリアルI/Oデバイスの送信レジスタに文字を入れることに成功し 384 * た場合. 389 385 */ 390 386 buffer_full = false; … … 392 388 else { 393 389 /* 394 * ó«ª êÎCMobt@ɶðüêéD395 * ó«ªÈ¢êCMµÈ¢D390 * 空きがあれば,送信バッファに文字を入れる. 391 * 空きがない場合,送信しない. 396 392 */ 397 393 if(p_spcb->snd_count < p_spcb->p_spinib->snd_bufsz) { … … 420 416 421 417 /* 422 * VA|[gÖ̶ñMiT[rXR[j418 * シリアルポートへの文字列送信(サービスコール) 423 419 */ 424 420 ER_UINT … … 430 426 ER ercd, rercd; 431 427 432 if (sns_dpn()) { /* ReLXgÌ`FbN*/428 if (sns_dpn()) { /* コンテキストのチェック */ 433 429 return(E_CTX); 434 430 } 435 431 if (!(1 <= portid && portid <= TNUM_PORT)) { 436 return(E_ID); /* |[gÔÌ`FbN*/432 return(E_ID); /* ポート番号のチェック */ 437 433 } 438 434 439 435 p_spcb = get_spcb(portid); 440 if (!(p_spcb->openflag)) { /* I[vÏÝ©Ì`FbN*/436 if (!(p_spcb->openflag)) { /* オープン済みかのチェック */ 441 437 return(E_OBJ); 442 438 } 443 if (p_spcb->errorflag) { /* G[óÔ©Ì`FbN*/439 if (p_spcb->errorflag) { /* エラー状態かのチェック */ 444 440 return(E_SYS); 445 441 } 446 442 447 443 /* 448 * len ÜÅ1¶¸ÂMðÝéD449 * rÅobt@tÉÈÁ½çf·éD444 * len まで1文字ずつ送信を試みる. 445 * 途中でバッファフルになったら中断する. 450 446 */ 451 447 SVC((rercd = dis_dsp()) , rercd); … … 465 461 466 462 /* 467 * VA|[g©çÌ1¶óM468 * ¶ÌóMðÝé.469 * obt@Éf[^ª¶ÝµCæ¾Å«½êÍfalse,470 * obt@ªóÅæ¾Å«È©Á½êÍ true ðÔ·D471 * »êÈOÌG[ª¶µ½êÍ ER ^ÌG[R[hðÔ·D463 * シリアルポートからの1文字受信 464 * 文字の受信を試みる. 465 * バッファにデータが存在し,取得できた場合は false, 466 * バッファが空で取得できなかった場合は true を返す. 467 * それ以外のエラーが発生した場合は ER 型のエラーコードを返す. 472 468 */ 473 469 static ER_BOOL … … 480 476 481 477 /* 482 * f[^ª¶Ý·êÎCóMobt@©ç¶ðæèo·D483 * ȯêÎæèo³È¢D478 * データが存在すれば,受信バッファから文字を取り出す. 479 * なければ取り出さない. 484 480 */ 485 481 if(p_spcb->rcv_count > 0U) { … … 501 497 502 498 /* 503 * VA|[g©ç̶ñóMiT[rXR[j499 * シリアルポートからの文字列受信(サービスコール) 504 500 */ 505 501 ER_UINT … … 509 505 bool_t buffer_empty; 510 506 uint_t reacnt = 0U; 511 char c = '\0'; /* RpCÌxð}~·é½ßÉú»·é*/507 char c = '\0'; /* コンパイラの警告を抑止するために初期化する */ 512 508 ER ercd, rercd; 513 509 514 if (sns_dpn()) { /* ReLXgÌ`FbN*/510 if (sns_dpn()) { /* コンテキストのチェック */ 515 511 return(E_CTX); 516 512 } 517 513 if (!(1 <= portid && portid <= TNUM_PORT)) { 518 return(E_ID); /* |[gÔÌ`FbN*/514 return(E_ID); /* ポート番号のチェック */ 519 515 } 520 516 521 517 p_spcb = get_spcb(portid); 522 if (!(p_spcb->openflag)) { /* I[vÏÝ©Ì`FbN*/518 if (!(p_spcb->openflag)) { /* オープン済みかのチェック */ 523 519 return(E_OBJ); 524 520 } 525 if (p_spcb->errorflag) { /* G[óÔ©Ì`FbN*/521 if (p_spcb->errorflag) { /* エラー状態かのチェック */ 526 522 return(E_SYS); 527 523 } 528 524 529 525 /* 530 * len ÜÅóMðÝéD531 * obt@ªóÅÇÝo¹È©Á½êÍf·é526 * len まで受信を試みる. 527 * バッファが空で読み出せなかった場合は中断する 532 528 */ 533 529 SVC((rercd = dis_dsp()) , rercd); … … 541 537 else { 542 538 /* 543 * GR[obND539 * エコーバック処理. 544 540 */ 545 541 if ((p_spcb->ioctl & IOCTL_ECHO) != 0U) { … … 557 553 558 554 /* 559 * VA|[ģäiT[rXR[j555 * シリアルポートの制御(サービスコール) 560 556 */ 561 557 ER … … 564 560 SPCB *p_spcb; 565 561 566 if (sns_dpn()) { /* ReLXgÌ`FbN*/562 if (sns_dpn()) { /* コンテキストのチェック */ 567 563 return(E_CTX); 568 564 } 569 565 if (!(1 <= portid && portid <= TNUM_PORT)) { 570 return(E_ID); /* |[gÔÌ`FbN*/566 return(E_ID); /* ポート番号のチェック */ 571 567 } 572 568 573 569 p_spcb = get_spcb(portid); 574 if (!(p_spcb->openflag)) { /* I[vÏÝ©Ì`FbN*/570 if (!(p_spcb->openflag)) { /* オープン済みかのチェック */ 575 571 return(E_OBJ); 576 572 } 577 if (p_spcb->errorflag) { /* G[óÔ©Ì`FbN*/573 if (p_spcb->errorflag) { /* エラー状態かのチェック */ 578 574 return(E_SYS); 579 575 } … … 584 580 585 581 /* 586 * VA|[g©çÌMÂ\R[obN582 * シリアルポートからの送信可能コールバック 587 583 */ 588 584 void … … 595 591 if (p_spcb->snd_count > 0U) { 596 592 /* 597 * Mobt@©ç¶ðæèoµÄM·éD593 * 送信バッファ中から文字を取り出して送信する. 598 594 */ 599 595 (void) sio_snd_chr(p_spcb->p_siopcb, … … 604 600 else { 605 601 /* 606 * M·×«¶ªÈ¢êÍCMÂ\R[obNðÖ~·éD602 * 送信すべき文字がない場合は,送信可能コールバックを禁止する. 607 603 */ 608 604 sio_dis_cbr(p_spcb->p_siopcb, SIO_RDY_SND); … … 611 607 612 608 /* 613 * VA|[g©çÌóMÊmR[obN609 * シリアルポートからの受信通知コールバック 614 610 */ 615 611 void … … 624 620 if (p_spcb->rcv_count != p_spcb->p_spinib->rcv_bufsz) { 625 621 /* 626 * óMµ½¶ðóMobt@ÉüêéD627 * obt@tÌêCóMµ½¶ðÌÄéD622 * 受信した文字を受信バッファに入れる. 623 * バッファフルの場合,受信した文字を捨てる. 628 624 */ 629 625 p_spcb->p_spinib->rcv_buffer[p_spcb->rcv_write_ptr] = c; … … 634 630 635 631 /* 636 * VAC^tF[XhCo©çÌ¢M¶Ìæoµ632 * シリアルインタフェースドライバからの未送信文字の取出し 637 633 */ 638 634 bool_t … … 641 637 SPCB *p_spcb; 642 638 643 if (1 <= portid && portid <= TNUM_PORT) { /* |[gÔÌ`FbN*/639 if (1 <= portid && portid <= TNUM_PORT) { /* ポート番号のチェック */ 644 640 p_spcb = get_spcb(portid); 645 if (p_spcb->openflag) { /* I[vÏÝ©Ì`FbN*/641 if (p_spcb->openflag) { /* オープン済みかのチェック */ 646 642 if (p_spcb->snd_count > 0U) { 647 643 *p_c = p_spcb->p_spinib->snd_buffer[p_spcb->snd_read_ptr]; -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.