Ignore:
Timestamp:
Jun 2, 2015, 3:39:53 PM (9 years ago)
Author:
nmir-saito
Message:

ファイルの mime-type 変更

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ssp_qb_r5f100le_cs/trunk/syssvc/serial.c

    • Property svn:mime-type set to text/plain; charset=shift_jis
    r93 r95  
    1111 *              Nagoya Municipal Industrial Research Institute, JAPAN
    1212 *
    13  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    14  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    15  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    16  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    17  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    18  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    19  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    20  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    21 ƒƒ“ƒgi—˜—p
    22  *      ŽÒƒ}ƒjƒ
    23 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    24  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    25  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    26  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    27  *      ‚ƁD
    28  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    29 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    30 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    31  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    32  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    33  *        •ñ‚·‚邱‚ƁD
    34  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    35  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    36  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    37  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    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 *      免責すること.
    3935 *
    40  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    41  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    42  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    43  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    44  *  ‚̐ӔC‚𕉂í‚È‚¢D
    45  */
    46 
    47 /*
    48  *              ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo
     36 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     37 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     38 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     39 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     40 *  の責任を負わない.
     41 */
     42
     43/*
     44 *              シリアルインタフェースドライバ
    4945 */
    5046
     
    5652
    5753/*
    58  *  ƒoƒbƒtƒ@ƒTƒCƒY‚̃fƒtƒHƒ‹ƒg’l‚ƃoƒbƒtƒ@‚Ì’è‹`
     54 *  バッファサイズのデフォルト値とバッファの定義
    5955 */
    6056#ifndef SERIAL_RCV_BUFSZ1
    61 #define SERIAL_RCV_BUFSZ1       64                      /* ƒ|[ƒg1‚ÌŽóMƒoƒbƒtƒ@ƒTƒCƒY */
     57#define SERIAL_RCV_BUFSZ1       64                      /* ポート1の受信バッファサイズ */
    6258#endif /* SERIAL_RCV_BUFSZ1 */
    6359
    6460#ifndef SERIAL_SND_BUFSZ1
    65 #define SERIAL_SND_BUFSZ1       256                     /* ƒ|[ƒg1‚Ì‘—Mƒoƒbƒtƒ@ƒTƒCƒY */
     61#define SERIAL_SND_BUFSZ1       256                     /* ポート1の送信バッファサイズ */
    6662#endif /* SERIAL_SND_BUFSZ1 */
    6763
     
    6965static char     snd_buffer1[SERIAL_SND_BUFSZ1];
    7066
    71 #if TNUM_PORT >= 2                                              /* ƒ|[ƒg2‚ÉŠÖ‚·‚é’è‹` */
     67#if TNUM_PORT >= 2                                              /* ポート2に関する定義 */
    7268
    7369#ifndef SERIAL_RCV_BUFSZ2
    74 #define SERIAL_RCV_BUFSZ2       64                      /* ƒ|[ƒg2‚ÌŽóMƒoƒbƒtƒ@ƒTƒCƒY */
     70#define SERIAL_RCV_BUFSZ2       64                      /* ポート2の受信バッファサイズ */
    7571#endif /* SERIAL_RCV_BUFSZ2 */
    7672
    7773#ifndef SERIAL_SND_BUFSZ2
    78 #define SERIAL_SND_BUFSZ2       64                      /* ƒ|[ƒg2‚Ì‘—Mƒoƒbƒtƒ@ƒTƒCƒY */
     74#define SERIAL_SND_BUFSZ2       64                      /* ポート2の送信バッファサイズ */
    7975#endif /* SERIAL_SND_BUFSZ2 */
    8076
     
    8480#endif /* TNUM_PORT >= 2 */
    8581
    86 #if TNUM_PORT >= 3                                              /* ƒ|[ƒg3‚ÉŠÖ‚·‚é’è‹` */
     82#if TNUM_PORT >= 3                                              /* ポート3に関する定義 */
    8783
    8884#ifndef SERIAL_RCV_BUFSZ3
    89 #define SERIAL_RCV_BUFSZ3       64                      /* ƒ|[ƒg3‚ÌŽóMƒoƒbƒtƒ@ƒTƒCƒY */
     85#define SERIAL_RCV_BUFSZ3       64                      /* ポート3の受信バッファサイズ */
    9086#endif /* SERIAL_RCV_BUFSZ3 */
    9187
    9288#ifndef SERIAL_SND_BUFSZ3
    93 #define SERIAL_SND_BUFSZ3       64                      /* ƒ|[ƒg3‚Ì‘—Mƒoƒbƒtƒ@ƒTƒCƒY */
     89#define SERIAL_SND_BUFSZ3       64                      /* ポート3の送信バッファサイズ */
    9490#endif /* SERIAL_SND_BUFSZ3 */
    9591
     
    10096
    10197/*
    102  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‰Šú‰»ƒuƒƒbƒN
     98 *  シリアルポート初期化ブロック
    10399 */
    104100typedef struct serial_port_initialization_block {
    105         uint_t  rcv_bufsz;              /* ŽóMƒoƒbƒtƒ@ƒTƒCƒY */
    106         char    *rcv_buffer;    /* ŽóMƒoƒbƒtƒ@ */
    107         uint_t  snd_bufsz;              /* ‘—Mƒoƒbƒtƒ@ƒTƒCƒY */
    108         char    *snd_buffer;    /* ‘—Mƒoƒbƒtƒ@ */
     101        uint_t  rcv_bufsz;              /* 受信バッファサイズ */
     102        char    *rcv_buffer;    /* 受信バッファ */
     103        uint_t  snd_bufsz;              /* 送信バッファサイズ */
     104        char    *snd_buffer;    /* 送信バッファ */
    109105} SPINIB;
    110106
     
    123119
    124120/*
    125  *  ƒVƒŠƒAƒ‹ƒ|[ƒgŠÇ—ƒuƒƒbƒN
     121 *  シリアルポート管理ブロック
    126122 */
    127123typedef struct serial_port_control_block {
    128         const SPINIB *p_spinib;         /* ƒVƒŠƒAƒ‹ƒ|[ƒg‰Šú‰»ƒuƒƒbƒN */
    129         SIOPCB  *p_siopcb;                      /* ƒVƒŠƒAƒ‹I/Oƒ|[ƒgŠÇ—ƒuƒƒbƒN */
    130         bool_t  openflag;                       /* ƒI[ƒvƒ“Ï‚݃tƒ‰ƒO */
    131         bool_t  errorflag;                      /* ƒGƒ‰[ƒtƒ‰ƒO */
    132         uint_t  ioctl;                          /* “®ì§Œä‚̐ݒè’l */
    133 
    134         uint_t  rcv_read_ptr;           /* ŽóMƒoƒbƒtƒ@“Ǐo‚µƒ|ƒCƒ“ƒ^ */
    135         uint_t  rcv_write_ptr;          /* ŽóMƒoƒbƒtƒ@‘ž‚݃|ƒCƒ“ƒ^ */
    136         uint_t  rcv_count;                      /* ŽóMƒoƒbƒtƒ@’†‚Ì•¶Žš” */
    137 
    138         uint_t  snd_read_ptr;           /* ‘—Mƒoƒbƒtƒ@“Ǐo‚µƒ|ƒCƒ“ƒ^ */
    139         uint_t  snd_write_ptr;          /* ‘—Mƒoƒbƒtƒ@‘ž‚݃|ƒCƒ“ƒ^ */
    140         uint_t  snd_count;                      /* ‘—Mƒoƒbƒtƒ@’†‚Ì•¶Žš” */
     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;                      /* 送信バッファ中の文字数 */
    141137} SPCB;
    142138
     
    144140
    145141/*
    146  *  ƒVƒŠƒAƒ‹ƒ|[ƒgID‚©‚çƒVƒŠƒAƒ‹ƒ|[ƒgŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     142 *  シリアルポートIDからシリアルポート管理ブロックを取り出すためのマクロ
    147143 */
    148144#define INDEX_PORT(portid)      ((uint_t)((portid) - 1))
     
    150146
    151147/*
    152  *  ƒ|ƒCƒ“ƒ^‚̃Cƒ“ƒNƒŠƒƒ“ƒg
     148 *  ポインタのインクリメント
    153149 */
    154150#define INC_PTR(ptr, bufsz)             { if (++(ptr) == (bufsz)) { (ptr) = 0; }}
    155151
    156152/*
    157  *  ƒT[ƒrƒXƒR[ƒ‹ŒÄo‚µƒ}ƒNƒ
     153 *  サービスコール呼出しマクロ
    158154 *
    159  *  ƒT[ƒrƒXƒR[ƒ‹ŒÄo‚µ‚ðŠÜ‚ÞŽ®exp‚ð•]‰¿‚µC•Ô’l‚ªƒGƒ‰[i•‰‚Ì’lj‚̏ê
    160  *  ‡‚ɂ́Cerc‚Éercd_exp‚ð•]‰¿‚µ‚½’l‚ð‘ã“ü‚µCerror_exit‚Égoto‚·‚éD
     155 *  サービスコール呼出しを含む式expを評価し,返値がエラー(負の値)の場
     156 *  合には,ercにercd_expを評価した値を代入し,error_exitにgotoする.
    161157 */
    162158#define SVC(exp, ercd_exp) \
     
    164160
    165161/*
    166  *  E_SYSƒGƒ‰[‚̐¶¬
     162 *  E_SYSエラーの生成
    167163 */
    168164static ER
     
    175171
    176172/*
    177  *  ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚̏‰Šú‰»ƒ‹[ƒ`ƒ“
     173 *  シリアルインタフェースドライバの初期化ルーチン
    178174 */
    179175void
     
    191187
    192188/*
    193  *  ƒVƒŠƒAƒ‹ƒCƒ“ƒ^[ƒtƒF[ƒXƒhƒ‰ƒCƒo‚̏I—¹ƒ‹[ƒ`ƒ“
     189 *  シリアルインターフェースドライバの終了ルーチン
    194190 */
    195191
     
    200196        SPCB    *p_spcb;
    201197       
    202         /* ƒoƒbƒtƒ@‚ÉŽc‚Á‚Ä‚¢‚é‘S‚Ä‚Ì•¶Žš‚ðo—Í‚·‚é */
     198        /* バッファに残っている全ての文字を出力する */
    203199        for (i = 0; i < TNUM_PORT; i++) {
    204200                p_spcb = &(spcb_table[i]);
     
    218214
    219215/*
    220  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚̃I[ƒvƒ“iƒT[ƒrƒXƒR[ƒ‹j
     216 *  シリアルポートのオープン(サービスコール)
    221217 */
    222218ER
     
    226222        ER              ercd;
    227223
    228         if (sns_dpn()) {                                /* ƒRƒ“ƒeƒLƒXƒg‚̃`ƒFƒbƒN */
     224        if (sns_dpn()) {                                /* コンテキストのチェック */
    229225                return(E_CTX);
    230226        }
    231227        if (!(1 <= portid && portid <= TNUM_PORT)) {
    232                 return(E_ID);                           /* ƒ|[ƒg”ԍ†‚̃`ƒFƒbƒN */
     228                return(E_ID);                           /* ポート番号のチェック */
    233229        }
    234230        p_spcb = get_spcb(portid);
    235231
    236232        SVC(dis_dsp(), gen_ercd_sys(p_spcb));
    237         if (p_spcb->openflag) {                 /* ƒI[ƒvƒ“Ï‚Ý‚©‚̃`ƒFƒbƒN */
     233        if (p_spcb->openflag) {                 /* オープン済みかのチェック */
    238234                ercd = E_OBJ;
    239235        }
    240236        else {
    241237                /*
    242                  *  •Ï”‚̏‰Šú‰»
     238                 *  変数の初期化
    243239                 */
    244240                p_spcb->ioctl = (IOCTL_ECHO | IOCTL_CRLF);
     
    251247
    252248                /*
    253                  *  ‚±‚êˆÈ~CŠ„ž‚Ý‚ð‹ÖŽ~‚·‚éD
     249                 *  これ以降,割込みを禁止する.
    254250                 */
    255251                if (loc_cpu() < 0) {
     
    259255
    260256                /*
    261                  *  ƒn[ƒhƒEƒFƒAˆË‘¶‚̃I[ƒvƒ“ˆ—
     257                 *  ハードウェア依存のオープン処理
    262258                 */
    263259                p_spcb->p_siopcb = sio_opn_por(portid, (intptr_t) p_spcb);
    264260
    265261                /*
    266                  *  ŽóM’Ê’mƒR[ƒ‹ƒoƒbƒN‚ð‹–‰Â‚·‚éD
     262                 *  受信通知コールバックを許可する.
    267263                 */
    268264                sio_ena_cbr(p_spcb->p_siopcb, SIO_RDY_RCV);
     
    286282
    287283/*
    288  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚̃Nƒ[ƒYiƒT[ƒrƒXƒR[ƒ‹j
     284 *  シリアルポートのクローズ(サービスコール)
    289285 */
    290286ER
     
    295291        bool_t  eflag = false;
    296292
    297         if (sns_dpn()) {                                /* ƒRƒ“ƒeƒLƒXƒg‚̃`ƒFƒbƒN */
     293        if (sns_dpn()) {                                /* コンテキストのチェック */
    298294                return(E_CTX);
    299295        }
    300296        if (!(1 <= portid && portid <= TNUM_PORT)) {
    301                 return(E_ID);                           /* ƒ|[ƒg”ԍ†‚̃`ƒFƒbƒN */
     297                return(E_ID);                           /* ポート番号のチェック */
    302298        }
    303299        p_spcb = get_spcb(portid);
    304300
    305301        SVC(dis_dsp(), gen_ercd_sys(p_spcb));
    306         if (!(p_spcb->openflag)) {              /* ƒI[ƒvƒ“Ï‚Ý‚©‚̃`ƒFƒbƒN */
     302        if (!(p_spcb->openflag)) {              /* オープン済みかのチェック */
    307303                ercd = E_OBJ;
    308304        }
    309305        else {
    310306                /*
    311                  *  ƒn[ƒhƒEƒFƒAˆË‘¶‚̃Nƒ[ƒYˆ—
     307                 *  ハードウェア依存のクローズ処理
    312308                 */
    313309                if (loc_cpu() < 0) {
     
    321317               
    322318                /*
    323                  *  ƒGƒ‰[ƒR[ƒh‚̐ݒè
     319                 *  エラーコードの設定
    324320                 */
    325321                if (eflag) {
     
    337333
    338334/*
    339  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚Ö‚Ì•¶Žš‘—M
     335 *  シリアルポートへの文字送信
    340336 *
    341  *  p_spcb‚ÅŽw’肳‚ê‚éƒVƒŠƒAƒ‹I/Oƒ|[ƒg‚ɑ΂µ‚āC•¶Žšc‚𑗐M‚·‚éD•¶Žš
    342  *  ‚𑗐MƒŒƒWƒXƒ^‚É‚¢‚ꂽê‡‚É‚Ítrue‚ð•Ô‚·D‚»‚¤‚Å‚È‚¢ê‡‚ɂ́C‘—M
    343  *  ƒŒƒWƒXƒ^‚ª‹ó‚¢‚½‚±‚Æ‚ð’Ê’m‚·‚éƒR[ƒ‹ƒoƒbƒNŠÖ”‚ð‹–‰Â‚µCfalse‚ð•Ô‚·D
    344  *  ‚±‚̊֐”‚́CCPUƒƒbƒNó‘ԂŌĂяo‚³‚ê‚éD
     337 *  p_spcbで指定されるシリアルI/Oポートに対して,文字cを送信する.文字
     338 *  を送信レジスタにいれた場合にはtrueを返す.そうでない場合には,送信
     339 *  レジスタが空いたことを通知するコールバック関数を許可し,falseを返す.
     340 *  この関数は,CPUロック状態で呼び出される.
    345341 */
    346342Inline bool_t
     
    357353
    358354/*
    359  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚Ö‚Ì1•¶Žš‘—M
    360  *  Žw’肳‚ꂽ•¶Žš‚Ì‘—M‚ðŽŽ‚Ý‚é.
    361  *  ƒfƒoƒCƒX‚Ö‚Ì‘—M‚ª¬Œ÷‚µ‚½ê‡‚Ü‚½‚̓oƒbƒtƒ@‚É‹ó‚«‚ª‚ ‚èŠi”[‚Å‚«‚½ê‡‚Í false,
    362  *  ƒoƒbƒtƒ@‚ªƒtƒ‹‚ÅŠi”[‚Å‚«‚È‚©‚Á‚½ê‡‚Í true ‚ð•Ô‚·D
    363  *  ‚»‚êˆÈŠO‚̃Gƒ‰[‚ª”­¶‚µ‚½ê‡‚Í ER Œ^‚̃Gƒ‰[ƒR[ƒh‚ð•Ô‚·D
     355 *  シリアルポートへの1文字送信
     356 *  指定された文字の送信を試みる.
     357 *  デバイスへの送信が成功した場合またはバッファに空きがあり格納できた場合は false,
     358 *  バッファがフルで格納できなかった場合は true を返す.
     359 *  それ以外のエラーが発生した場合は ER 型のエラーコードを返す.
    364360 */
    365361static ER_BOOL
     
    370366
    371367        /*
    372          *  LF‚Ì‘O‚ÉCR‚𑗐M‚·‚éD
    373          *  ‚½‚¾‚µC1•¶ŽšˆÈ‰º‚Ì‹ó‚«‚µ‚©‚È‚¢ê‡‚̓oƒbƒtƒ@ƒtƒ‹‚Æ‚Ý‚È‚µC‘—M‚µ‚È‚¢D
     368         *  LFの前にCRを送信する.
     369         *  ただし,1文字以下の空きしかない場合はバッファフルとみなし,送信しない.
    374370         */
    375371        if (c == '\n' && (p_spcb->ioctl & IOCTL_CRLF) != 0U) {
     
    385381        if ((p_spcb->snd_count == 0U) && serial_snd_chr(p_spcb, c)) {
    386382                /*
    387                  *  ƒVƒŠƒAƒ‹I/OƒfƒoƒCƒX‚Ì‘—MƒŒƒWƒXƒ^‚É•¶Žš‚ð“ü‚ê‚邱‚Ƃɐ¬Œ÷‚µ
    388                  *  ‚½ê‡D
     383                 *  シリアルI/Oデバイスの送信レジスタに文字を入れることに成功し
     384                 *  た場合.
    389385                 */
    390386                buffer_full = false;
     
    392388        else {
    393389                /*
    394                  *  ‹ó‚«‚ª‚ ‚ê‚΁C‘—Mƒoƒbƒtƒ@‚É•¶Žš‚ð“ü‚ê‚éD
    395                  *  ‹ó‚«‚ª‚È‚¢ê‡C‘—M‚µ‚È‚¢D
     390                 *  空きがあれば,送信バッファに文字を入れる.
     391                 *  空きがない場合,送信しない.
    396392                 */
    397393                if(p_spcb->snd_count < p_spcb->p_spinib->snd_bufsz) {
     
    420416
    421417/*
    422  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚Ö‚Ì•¶Žš—ñ‘—MiƒT[ƒrƒXƒR[ƒ‹j
     418 *  シリアルポートへの文字列送信(サービスコール)
    423419 */
    424420ER_UINT
     
    430426        ER              ercd, rercd;
    431427
    432         if (sns_dpn()) {                                /* ƒRƒ“ƒeƒLƒXƒg‚̃`ƒFƒbƒN */
     428        if (sns_dpn()) {                                /* コンテキストのチェック */
    433429                return(E_CTX);
    434430        }
    435431        if (!(1 <= portid && portid <= TNUM_PORT)) {
    436                 return(E_ID);                           /* ƒ|[ƒg”ԍ†‚̃`ƒFƒbƒN */
     432                return(E_ID);                           /* ポート番号のチェック */
    437433        }
    438434
    439435        p_spcb = get_spcb(portid);
    440         if (!(p_spcb->openflag)) {              /* ƒI[ƒvƒ“Ï‚Ý‚©‚̃`ƒFƒbƒN */
     436        if (!(p_spcb->openflag)) {              /* オープン済みかのチェック */
    441437                return(E_OBJ);
    442438        }
    443         if (p_spcb->errorflag) {                /* ƒGƒ‰[ó‘Ô‚©‚̃`ƒFƒbƒN */
     439        if (p_spcb->errorflag) {                /* エラー状態かのチェック */
    444440                return(E_SYS);
    445441        }
    446442       
    447443        /*
    448          *  len ‚Ü‚Å1•¶Žš‚¸‚‘—M‚ðŽŽ‚Ý‚éD
    449          *  “r’†‚Ńoƒbƒtƒ@ƒtƒ‹‚É‚È‚Á‚½‚ç’†’f‚·‚éD
     444         *  len まで1文字ずつ送信を試みる.
     445         *  途中でバッファフルになったら中断する.
    450446         */
    451447        SVC((rercd = dis_dsp()) , rercd);
     
    465461
    466462/*
    467  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚©‚ç‚Ì1•¶ŽšŽóM
    468  *  •¶Žš‚ÌŽóM‚ðŽŽ‚Ý‚é.
    469  *  ƒoƒbƒtƒ@‚Ƀf[ƒ^‚ª‘¶Ý‚µCŽæ“¾‚Å‚«‚½ê‡‚Í false,
    470  *  ƒoƒbƒtƒ@‚ª‹ó‚Ŏ擾‚Å‚«‚È‚©‚Á‚½ê‡‚Í true ‚ð•Ô‚·D
    471  *  ‚»‚êˆÈŠO‚̃Gƒ‰[‚ª”­¶‚µ‚½ê‡‚Í ER Œ^‚̃Gƒ‰[ƒR[ƒh‚ð•Ô‚·D
     463 *  シリアルポートからの1文字受信
     464 *  文字の受信を試みる.
     465 *  バッファにデータが存在し,取得できた場合は false,
     466 *  バッファが空で取得できなかった場合は true を返す.
     467 *  それ以外のエラーが発生した場合は ER 型のエラーコードを返す.
    472468 */
    473469static ER_BOOL
     
    480476
    481477        /*
    482          *  ƒf[ƒ^‚ª‘¶Ý‚·‚ê‚΁CŽóMƒoƒbƒtƒ@‚©‚當Žš‚ðŽæ‚èo‚·D
    483          *  ‚È‚¯‚ê‚ÎŽæ‚èo‚³‚È‚¢D
     478         *  データが存在すれば,受信バッファから文字を取り出す.
     479         *  なければ取り出さない.
    484480         */
    485481        if(p_spcb->rcv_count > 0U) {
     
    501497
    502498/*
    503  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚©‚ç‚Ì•¶Žš—ñŽóMiƒT[ƒrƒXƒR[ƒ‹j
     499 *  シリアルポートからの文字列受信(サービスコール)
    504500 */
    505501ER_UINT
     
    509505        bool_t  buffer_empty;
    510506        uint_t  reacnt = 0U;
    511         char    c = '\0';               /* ƒRƒ“ƒpƒCƒ‰‚ÌŒx‚ð—}Ž~‚·‚邽‚߂ɏ‰Šú‰»‚·‚é */
     507        char    c = '\0';               /* コンパイラの警告を抑止するために初期化する */
    512508        ER              ercd, rercd;
    513509
    514         if (sns_dpn()) {                                /* ƒRƒ“ƒeƒLƒXƒg‚̃`ƒFƒbƒN */
     510        if (sns_dpn()) {                                /* コンテキストのチェック */
    515511                return(E_CTX);
    516512        }
    517513        if (!(1 <= portid && portid <= TNUM_PORT)) {
    518                 return(E_ID);                           /* ƒ|[ƒg”ԍ†‚̃`ƒFƒbƒN */
     514                return(E_ID);                           /* ポート番号のチェック */
    519515        }
    520516
    521517        p_spcb = get_spcb(portid);
    522         if (!(p_spcb->openflag)) {              /* ƒI[ƒvƒ“Ï‚Ý‚©‚̃`ƒFƒbƒN */
     518        if (!(p_spcb->openflag)) {              /* オープン済みかのチェック */
    523519                return(E_OBJ);
    524520        }
    525         if (p_spcb->errorflag) {                /* ƒGƒ‰[ó‘Ô‚©‚̃`ƒFƒbƒN */
     521        if (p_spcb->errorflag) {                /* エラー状態かのチェック */
    526522                return(E_SYS);
    527523        }
    528524       
    529525        /*
    530          *  len ‚Ü‚ÅŽóM‚ðŽŽ‚Ý‚éD
    531          *  ƒoƒbƒtƒ@‚ª‹ó‚œǂݏo‚¹‚È‚©‚Á‚½ê‡‚Í’†’f‚·‚é
     526         *  len まで受信を試みる.
     527         *  バッファが空で読み出せなかった場合は中断する
    532528         */
    533529        SVC((rercd = dis_dsp()) , rercd);
     
    541537                else {
    542538                        /*
    543                          *  ƒGƒR[ƒoƒbƒNˆ—D
     539                         *  エコーバック処理.
    544540                         */
    545541                        if ((p_spcb->ioctl & IOCTL_ECHO) != 0U) {
     
    557553
    558554/*
    559  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚̐§ŒäiƒT[ƒrƒXƒR[ƒ‹j
     555 *  シリアルポートの制御(サービスコール)
    560556 */
    561557ER
     
    564560        SPCB    *p_spcb;
    565561
    566         if (sns_dpn()) {                                /* ƒRƒ“ƒeƒLƒXƒg‚̃`ƒFƒbƒN */
     562        if (sns_dpn()) {                                /* コンテキストのチェック */
    567563                return(E_CTX);
    568564        }
    569565        if (!(1 <= portid && portid <= TNUM_PORT)) {
    570                 return(E_ID);                           /* ƒ|[ƒg”ԍ†‚̃`ƒFƒbƒN */
     566                return(E_ID);                           /* ポート番号のチェック */
    571567        }
    572568
    573569        p_spcb = get_spcb(portid);
    574         if (!(p_spcb->openflag)) {              /* ƒI[ƒvƒ“Ï‚Ý‚©‚̃`ƒFƒbƒN */
     570        if (!(p_spcb->openflag)) {              /* オープン済みかのチェック */
    575571                return(E_OBJ);
    576572        }
    577         if (p_spcb->errorflag) {                /* ƒGƒ‰[ó‘Ô‚©‚̃`ƒFƒbƒN */
     573        if (p_spcb->errorflag) {                /* エラー状態かのチェック */
    578574                return(E_SYS);
    579575        }
     
    584580
    585581/*
    586  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚©‚ç‚Ì‘—M‰Â”\ƒR[ƒ‹ƒoƒbƒN
     582 *  シリアルポートからの送信可能コールバック
    587583 */
    588584void
     
    595591        if (p_spcb->snd_count > 0U) {
    596592                /*
    597                  *  ‘—Mƒoƒbƒtƒ@’†‚©‚當Žš‚ðŽæ‚èo‚µ‚Ä‘—M‚·‚éD
     593                 *  送信バッファ中から文字を取り出して送信する.
    598594                 */
    599595                (void) sio_snd_chr(p_spcb->p_siopcb,
     
    604600        else {
    605601                /*
    606                  *  ‘—M‚·‚ׂ«•¶Žš‚ª‚È‚¢ê‡‚́C‘—M‰Â”\ƒR[ƒ‹ƒoƒbƒN‚ð‹ÖŽ~‚·‚éD
     602                 *  送信すべき文字がない場合は,送信可能コールバックを禁止する.
    607603                 */
    608604                sio_dis_cbr(p_spcb->p_siopcb, SIO_RDY_SND);
     
    611607
    612608/*
    613  *  ƒVƒŠƒAƒ‹ƒ|[ƒg‚©‚ç‚ÌŽóM’Ê’mƒR[ƒ‹ƒoƒbƒN
     609 *  シリアルポートからの受信通知コールバック
    614610 */
    615611void
     
    624620        if (p_spcb->rcv_count != p_spcb->p_spinib->rcv_bufsz) {
    625621                /*
    626                  *  ŽóM‚µ‚½•¶Žš‚ðŽóMƒoƒbƒtƒ@‚É“ü‚ê‚éD
    627                  *  ƒoƒbƒtƒ@ƒtƒ‹‚̏ꍇCŽóM‚µ‚½•¶Žš‚ðŽÌ‚Ä‚éD
     622                 *  受信した文字を受信バッファに入れる.
     623                 *  バッファフルの場合,受信した文字を捨てる.
    628624                 */
    629625                p_spcb->p_spinib->rcv_buffer[p_spcb->rcv_write_ptr] = c;
     
    634630
    635631/*
    636  *  ƒVƒŠƒAƒ‹ƒCƒ“ƒ^ƒtƒF[ƒXƒhƒ‰ƒCƒo‚©‚ç‚Ì–¢‘—M•¶Žš‚ÌŽæo‚µ
     632 *  シリアルインタフェースドライバからの未送信文字の取出し
    637633 */
    638634bool_t
     
    641637        SPCB    *p_spcb;
    642638
    643         if (1 <= portid && portid <= TNUM_PORT) {       /* ƒ|[ƒg”ԍ†‚̃`ƒFƒbƒN */
     639        if (1 <= portid && portid <= TNUM_PORT) {       /* ポート番号のチェック */
    644640                p_spcb = get_spcb(portid);
    645                 if (p_spcb->openflag) {                                 /* ƒI[ƒvƒ“Ï‚Ý‚©‚̃`ƒFƒbƒN */
     641                if (p_spcb->openflag) {                                 /* オープン済みかのチェック */
    646642                        if (p_spcb->snd_count > 0U) {
    647643                                *p_c = p_spcb->p_spinib->snd_buffer[p_spcb->snd_read_ptr];
Note: See TracChangeset for help on using the changeset viewer.