serial.h

シリアルインタフェースドライバ [詳細]

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

データ構造

struct  T_SERIAL_RPOR
 シリアルインタフェースドライバの用いるパケット [詳細]

マクロ定義

#define IOCTL_NULL   0u
#define IOCTL_ECHO   0x0001u
#define IOCTL_CRLF   0x0010u
#define IOCTL_FCSND   0x0100u
#define IOCTL_FCANY   0x0200u
#define IOCTL_FCRCV   0x0400u

関数

void serial_initialize (VP_INT exinf) throw ()
ER serial_opn_por (ID portid) throw ()
ER serial_cls_por (ID portid) throw ()
ER_UINT serial_rea_dat (ID portid, char *buf, UINT len) throw ()
ER_UINT serial_wri_dat (ID portid, char *buf, UINT len) throw ()
ER serial_ctl_por (ID portid, UINT ioctl) throw ()
ER serial_ref_por (ID portid, T_SERIAL_RPOR *pk_rpor) throw ()


説明

シリアルインタフェースドライバ

serial.h で定義されています。


マクロ定義

#define IOCTL_CRLF   0x0010u
 

serial.h76 行で定義されています。

参照元 main_task()serial_opn_por()serial_wri_chr().

#define IOCTL_ECHO   0x0001u
 

serial.h75 行で定義されています。

参照元 serial_opn_por()serial_rea_chr().

#define IOCTL_FCANY   0x0200u
 

serial.h78 行で定義されています。

参照元 sio_ierdy_rcv().

#define IOCTL_FCRCV   0x0400u
 

serial.h79 行で定義されています。

参照元 main_task()serial_opn_por()sio_ierdy_rcv().

#define IOCTL_FCSND   0x0100u
 

serial.h77 行で定義されています。

参照元 main_task()serial_opn_por()sio_ierdy_rcv().

#define IOCTL_NULL   0u
 

serial.h74 行で定義されています。


関数

ER serial_cls_por ID  portid  )  throw ()
 

serial.c194 行で定義されています。

参照先 _syscallE_CTXE_IDE_OBJE_OKFALSEget_spcbloc_cpu()serial_port_control_block::openflagsio_cls_por()serial_port_control_block::siopcbsns_ctx()TNUM_PORTunl_cpu().

00195 {
00196     SPCB    *spcb;
00197     ER  ercd;
00198 
00199     if (sns_ctx()) {        /* コンテキストのチェック */
00200         return(E_CTX);
00201     }
00202     if (!(1 <= portid && portid <= TNUM_PORT)) {
00203         return(E_ID);       /* ポート番号のチェック */
00204     }
00205     spcb = get_spcb(portid);
00206 
00207     _syscall(loc_cpu());
00208     if (!(spcb->openflag)) {    /* オープン済みかのチェック */
00209         ercd = E_OBJ;
00210     }
00211     else {
00212         /*
00213          *  ハードウェア依存のクローズ処理
00214          */
00215         sio_cls_por(spcb->siopcb);
00216         spcb->openflag = FALSE;
00217         ercd = E_OK;
00218     }
00219     _syscall(unl_cpu());
00220     return(ercd);
00221 }

関数の呼び出しグラフ:

ER serial_ctl_por ID  portid,
UINT  ioctl
throw ()
 

serial.c386 行で定義されています。

参照先 E_CTXE_IDE_OBJE_OKget_spcbserial_port_control_block::ioctlserial_port_control_block::openflagsns_ctx()TNUM_PORT.

参照元 main_task().

00387 {
00388     SPCB    *spcb;
00389 
00390     if (sns_ctx()) {        /* コンテキストのチェック */
00391         return(E_CTX);
00392     }
00393     if (!(1 <= portid && portid <= TNUM_PORT)) {
00394         return(E_ID);       /* ポート番号のチェック */
00395     }
00396 
00397     spcb = get_spcb(portid);
00398     if (!(spcb->openflag)) {    /* オープン済みかのチェック */
00399         return(E_OBJ);
00400     }
00401 
00402     spcb->ioctl = ioctl;
00403     return(E_OK);
00404 }

関数の呼び出しグラフ:

void serial_initialize VP_INT  exinf  )  throw ()
 

serial.c124 行で定義されています。

参照先 FALSEserial_port_control_block::openflagsio_initializespcb_tableserial_port_control_block::spinibspinib_tableTNUM_PORT.

00125 {
00126     SPCB    *spcb;
00127     UINT    i;
00128 
00129     sio_initialize();
00130     for (spcb = spcb_table, i = 0; i < TNUM_PORT; spcb++, i++) {
00131         spcb->spinib = &(spinib_table[i]);
00132         spcb->openflag = FALSE;
00133     }
00134 }

ER serial_opn_por ID  portid  )  throw ()
 

serial.c140 行で定義されています。

参照先 _syscallE_CTXE_IDE_OBJE_OKFALSEget_spcbserial_port_control_block::ioctlIOCTL_CRLFIOCTL_ECHOIOCTL_FCRCVIOCTL_FCSNDloc_cpu()serial_port_control_block::openflagserial_port_control_block::rcv_countserial_port_control_block::rcv_fc_chrserial_port_control_block::rcv_read_ptrserial_port_control_block::rcv_stoppedserial_port_control_block::rcv_write_ptrsio_ena_cbrSIO_ERDY_RCVsio_opn_por()serial_port_control_block::siopcbserial_port_control_block::snd_countserial_port_control_block::snd_read_ptrserial_port_control_block::snd_stoppedserial_port_control_block::snd_write_ptrsns_ctx()TNUM_PORTTRUEunl_cpu().

参照元 logtask().

00141 {
00142     SPCB    *spcb;
00143     ER  ercd;
00144 
00145     if (sns_ctx()) {        /* コンテキストのチェック */
00146         return(E_CTX);
00147     }
00148     if (!(1 <= portid && portid <= TNUM_PORT)) {
00149         return(E_ID);       /* ポート番号のチェック */
00150     }
00151     spcb = get_spcb(portid);
00152 
00153     _syscall(loc_cpu());
00154     if (spcb->openflag) {       /* オープン済みかのチェック */
00155         ercd = E_OBJ;
00156     }
00157     else {
00158         /*
00159          *  変数の初期化
00160          */
00161         spcb->ioctl = (IOCTL_ECHO | IOCTL_CRLF
00162                     | IOCTL_FCSND | IOCTL_FCRCV);
00163 
00164 
00165         spcb->rcv_read_ptr = spcb->rcv_write_ptr = 0;
00166         spcb->rcv_count = 0;
00167         spcb->rcv_fc_chr = '\0';
00168         spcb->rcv_stopped = FALSE;
00169 
00170         spcb->snd_read_ptr = spcb->snd_write_ptr = 0;
00171         spcb->snd_count = 0;
00172         spcb->snd_stopped = FALSE;
00173 
00174         /*
00175          *  ハードウェア依存のオープン処理
00176          */
00177         spcb->siopcb = sio_opn_por(portid, (VP_INT) spcb);
00178 
00179         /*
00180          *  受信通知コールバックを許可する.
00181          */
00182         sio_ena_cbr(spcb->siopcb, SIO_ERDY_RCV);
00183         spcb->openflag = TRUE;
00184         ercd = E_OK;
00185     }
00186     _syscall(unl_cpu());
00187     return(ercd);
00188 }

関数の呼び出しグラフ:

ER_UINT serial_rea_dat ID  portid,
char *  buf,
UINT  len
throw ()
 

serial.c351 行で定義されています。

参照先 _syscallE_CTXE_IDE_OBJget_spcbserial_port_control_block::openflagserial_port_initialization_block::rcv_semidsns_dpn()serial_port_control_block::spinibTNUM_PORTTRUEwai_sem().

参照元 main_task().

00352 {
00353     SPCB    *spcb;
00354     BOOL    buffer_empty;
00355     UINT    i;
00356 
00357     if (sns_dpn()) {        /* コンテキストのチェック */
00358         return(E_CTX);
00359     }
00360     if (!(1 <= portid && portid <= TNUM_PORT)) {
00361         return(E_ID);       /* ポート番号のチェック */
00362     }
00363 
00364     spcb = get_spcb(portid);
00365     if (!(spcb->openflag)) {    /* オープン済みかのチェック */
00366         return(E_OBJ);
00367     }
00368 
00369     buffer_empty = TRUE;        /* ループの1回めは wai_sem する */
00370     for (i = 0; i < len; i++) {
00371         if (buffer_empty) {
00372             _syscall(wai_sem(spcb->spinib->rcv_semid));
00373         }
00374         buffer_empty = serial_rea_chr(spcb, buf++);
00375     }
00376     if (!buffer_empty) {
00377         _syscall(sig_sem(spcb->spinib->rcv_semid));
00378     }
00379     return(len);
00380 }

関数の呼び出しグラフ:

ER serial_ref_por ID  portid,
T_SERIAL_RPOR pk_rpor
throw ()
 

serial.c410 行で定義されています。

参照先 E_CTXE_IDE_OBJE_OKget_spcbserial_port_control_block::openflagserial_port_control_block::rcv_countT_SERIAL_RPOR::reacntserial_port_control_block::snd_countsns_ctx()TNUM_PORTT_SERIAL_RPOR::wricnt.

00411 {
00412     SPCB    *spcb;
00413 
00414     if (sns_ctx()) {        /* コンテキストのチェック */
00415         return(E_CTX);
00416     }
00417     if (!(1 <= portid && portid <= TNUM_PORT)) {
00418         return(E_ID);       /* ポート番号のチェック */
00419     }
00420 
00421     spcb = get_spcb(portid);
00422     if (!(spcb->openflag)) {    /* オープン済みかのチェック */
00423         return(E_OBJ);
00424     }
00425 
00426     pk_rpor->reacnt = spcb->rcv_count;
00427     pk_rpor->wricnt = spcb->snd_count;
00428     return(E_OK);
00429 }

関数の呼び出しグラフ:

ER_UINT serial_wri_dat ID  portid,
char *  buf,
UINT  len
throw ()
 

serial.c278 行で定義されています。

参照先 _syscallE_CTXE_IDE_OBJget_spcbserial_port_control_block::openflagserial_port_initialization_block::snd_semidsns_dpn()serial_port_control_block::spinibTNUM_PORTTRUEwai_sem().

参照元 logtask_putc().

00279 {
00280     SPCB    *spcb;
00281     BOOL    buffer_full;
00282     UINT    i;
00283 
00284     if (sns_dpn()) {        /* コンテキストのチェック */
00285         return(E_CTX);
00286     }
00287     if (!(1 <= portid && portid <= TNUM_PORT)) {
00288         return(E_ID);       /* ポート番号のチェック */
00289     }
00290 
00291     spcb = get_spcb(portid);
00292     if (!(spcb->openflag)) {    /* オープン済みかのチェック */
00293         return(E_OBJ);
00294     }
00295 
00296     buffer_full = TRUE;     /* ループの1回めは wai_sem する */
00297     for (i = 0; i < len; i++) {
00298         if (buffer_full) {
00299             _syscall(wai_sem(spcb->spinib->snd_semid));
00300         }
00301         buffer_full = serial_wri_chr(spcb, *buf++);
00302     }
00303     if (!buffer_full) {
00304         _syscall(sig_sem(spcb->spinib->snd_semid));
00305     }
00306     return(len);
00307 }

関数の呼び出しグラフ:


Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:18 2006 に Doxygen によって生成されました。