Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/syssvc/tSerialPortMain.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r388 r389  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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 *      免責すること.
    4733 *
    48  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    49 ãŠ
    50  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
    51  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
    52  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
    53  *  の責任を負わない.
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    5439 *
    5540 *  $Id$
     
    5742
    5843/*
    59  *              シリアルインタフェースドライバ
     44 *              シリアルインタフェースドライバ
    6045 */
    6146
     
    6550
    6651/*
    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 *  ポインタのインクリメント
    7762 */
    7863#define INC_PTR(ptr, bufsz) do {        \
     
    8368
    8469/*
    85  *  サービスコール呼出しマクロ
     70 *  サービスコール呼出しマクロ
    8671 *
    87  *  サービスコール呼出しを含む式expを評価し,返値がエラー(負の値)の場
    88  *  合には,ercにercd_expを評価した値を代å
    89 ¥ã—,error_exitにgotoする.
     72 *  サービスコール呼出しを含む式expを評価し,返値がエラー(負の値)の場
     73 *  合には,ercにercd_expを評価した値を代入し,error_exitにgotoする.
    9074 */
    9175#define SVC(exp, ercd_exp) do {         \
     
    9781
    9882/*
    99  *  E_SYSエラーの生成
     83 *  E_SYSエラーの生成
    10084 */
    10185static ER
     
    10791
    10892/*
    109  *  å¾
    110 ã¡ã«å
    111 ¥ã‚‹ã‚µãƒ¼ãƒ“スコールからのエラーの変換
     93 *  待ちに入るサービスコールからのエラーの変換
    11294 */
    11395static ER
     
    126108
    127109/*
    128  *  シリアルポートのオープン(受け口関数)
     110 *  シリアルポートのオープン(受け口関数)
    129111 */
    130112ER
     
    134116        ER              ercd;
    135117
    136         if (sns_dpn()) {                                /* コンテキストのチェック */
     118        if (sns_dpn()) {                                /* コンテキストのチェック */
    137119                return(E_CTX);
    138120        }
    139121        if (!VALID_IDX(idx)) {
    140                 return(E_ID);                           /* ポート番号のチェック */
     122                return(E_ID);                           /* ポート番号のチェック */
    141123        }
    142124        p_cellcb = GET_CELLCB(idx);
    143125
    144126        SVC(dis_dsp(), gen_ercd_sys(p_cellcb));
    145         if (VAR_openFlag) {                             /* オープン済みかのチェック */
     127        if (VAR_openFlag) {                             /* オープン済みかのチェック */
    146128                ercd = E_OBJ;
    147129        }
    148130        else {
    149131                /*
    150                  *  変数の初期化
     132                 *  変数の初期化
    151133                 */
    152134                VAR_ioControl = (IOCTL_ECHO | IOCTL_CRLF | IOCTL_FCSND | IOCTL_FCRCV);
     
    164146
    165147                /*
    166                  *  これ以降,割込みを禁止する.
     148                 *  これ以降,割込みを禁止する.
    167149                 */
    168150                if (loc_cpu() < 0) {
     
    172154
    173155                /*
    174                  *  ハードウェア依存のオープン処理
     156                 *  ハードウェア依存のオープン処理
    175157                 */
    176158                cSIOPort_open();
    177159
    178160                /*
    179                  *  受信通知コールバックを許可する.
     161                 *  受信通知コールバックを許可する.
    180162                 */
    181163                cSIOPort_enableCBR(SIOReceiveReady);
     
    199181
    200182/*
    201  *  シリアルポートのクローズ(受け口関数)
     183 *  シリアルポートのクローズ(受け口関数)
    202184 */
    203185ER
     
    208190        bool_t  eflag = false;
    209191
    210         if (sns_dpn()) {                                /* コンテキストのチェック */
     192        if (sns_dpn()) {                                /* コンテキストのチェック */
    211193                return(E_CTX);
    212194        }
    213195        if (!VALID_IDX(idx)) {
    214                 return(E_ID);                           /* ポート番号のチェック */
     196                return(E_ID);                           /* ポート番号のチェック */
    215197        }
    216198        p_cellcb = GET_CELLCB(idx);
    217199
    218200        SVC(dis_dsp(), gen_ercd_sys(p_cellcb));
    219         if (!VAR_openFlag) {                    /* オープン済みかのチェック */
     201        if (!VAR_openFlag) {                    /* オープン済みかのチェック */
    220202                ercd = E_OBJ;
    221203        }
    222204        else {
    223205                /*
    224                  *  ハードウェア依存のクローズ処理
     206                 *  ハードウェア依存のクローズ処理
    225207                 */
    226208                if (loc_cpu() < 0) {
     
    234216
    235217                /*
    236                  *  セマフォの初期化
     218                 *  セマフォの初期化
    237219                 */
    238220                if (cSendSemaphore_initialize() < 0) {
     
    244226
    245227                /*
    246                  *  エラーコードの設定
     228                 *  エラーコードの設定
    247229                 */
    248230                if (eflag) {
     
    260242
    261243/*
    262  *  シリアルポートへの文字送信
     244 *  シリアルポートへの文字送信
    263245 *
    264  *  p_cellcbで指定されるSIOポートに対して,文字cを送信する.文字を送信
    265  *  レジスタにいれた場合にはtrueを返す.そうでない場合には,送信レジス
    266  *  タが空いたことを通知するコールバック関数を許可し,falseを返す.この
    267  *  関数は,CPUロック状æ
    268 ‹ã§å‘¼ã³å‡ºã•ã‚Œã‚‹ï¼Ž
     246 *  p_cellcbで指定されるSIOポートに対して,文字cを送信する.文字を送信
     247 *  レジスタにいれた場合にはtrueを返す.そうでない場合には,送信レジス
     248 *  タが空いたことを通知するコールバック関数を許可し,falseを返す.この
     249 *  関数は,CPUロック状態で呼び出される.
    269250 */
    270251Inline bool_t
     
    281262
    282263/*
    283  *  シリアルポートへの1文字送信
     264 *  シリアルポートへの1文字送信
    284265 */
    285266static ER_BOOL
     
    290271
    291272        /*
    292          *  LFの前にCRを送信する.
     273         *  LFの前にCRを送信する.
    293274         */
    294275        if (c == '\n' && (VAR_ioControl & IOCTL_CRLF) != 0U) {
    295276                /*
    296                  *  以下のコードは再帰呼出しになっているが,引数cが'\n'の場合に
    297                  *  引数cを'\r'として呼び出すことから,この再帰呼出しは2回目の
    298                  *  呼び出しでå¿
    299 ãšæ­¢ã¾ã‚‹ï¼Ž
     277                 *  以下のコードは再帰呼出しになっているが,引数cが'\n'の場合に
     278                 *  引数cを'\r'として呼び出すことから,この再帰呼出しは2回目の
     279                 *  呼び出しで必ず止まる.
    300280                 */
    301281                SVC(rercd = serialPort_writeChar(p_cellcb, '\r'), rercd);
     
    310290                                                                && serialPort_sendChar(p_cellcb, c)) {
    311291                /*
    312                  *  SIOの送信レジスタに文字をå
    313 ¥ã‚Œã‚‹ã“とに成功した場合.
     292                 *  SIOの送信レジスタに文字を入れることに成功した場合.
    314293                 */
    315294                buffer_full = false;
     
    317296        else {
    318297                /*
    319                  *  送信バッファに文字をå
    320 ¥ã‚Œã‚‹ï¼Ž
     298                 *  送信バッファに文字を入れる.
    321299                 */
    322300                VAR_sendBuffer[VAR_sendWritePointer] = c;
     
    334312
    335313/*
    336  *  シリアルポートへの文字列送信(受け口関数)
     314 *  シリアルポートへの文字列送信(受け口関数)
    337315 */
    338316ER_UINT
     
    344322        ER              ercd, rercd;
    345323
    346         if (sns_dpn()) {                                /* コンテキストのチェック */
     324        if (sns_dpn()) {                                /* コンテキストのチェック */
    347325                return(E_CTX);
    348326        }
    349         if (!VALID_IDX(idx)) {                  /* ポート番号のチェック */
     327        if (!VALID_IDX(idx)) {                  /* ポート番号のチェック */
    350328                return(E_ID);
    351329        }
    352330
    353331        p_cellcb = GET_CELLCB(idx);
    354         if (!VAR_openFlag) {                    /* オープン済みかのチェック */
     332        if (!VAR_openFlag) {                    /* オープン済みかのチェック */
    355333                return(E_OBJ);
    356334        }
    357         if (VAR_errorFlag) {                    /* エラー状æ
    358 ‹ã‹ã®ãƒã‚§ãƒƒã‚¯ */
     335        if (VAR_errorFlag) {                    /* エラー状態かのチェック */
    359336                return(E_SYS);
    360337        }
    361338
    362         buffer_full = true;                             /* ループの1回めはwai_semする */
     339        buffer_full = true;                             /* ループの1回めはwai_semする */
    363340        while (wricnt < length) {
    364341                if (buffer_full) {
     
    380357
    381358/*
    382  *  シリアルポートからの1文字受信
     359 *  シリアルポートからの1文字受信
    383360 */
    384361static bool_t
     
    391368
    392369        /*
    393          *  受信バッファから文字を取り出す.
     370         *  受信バッファから文字を取り出す.
    394371         */
    395372        *p_c = VAR_receiveBuffer[VAR_receiveReadPointer];
     
    399376
    400377        /*
    401          *  STARTを送信する.
     378         *  STARTを送信する.
    402379         */
    403380        if (VAR_receiveStopped && VAR_receiveCount
     
    417394
    418395/*
    419  *  シリアルポートからの文字列受信(受け口関数)
     396 *  シリアルポートからの文字列受信(受け口関数)
    420397 */
    421398ER_UINT
     
    425402        bool_t  buffer_empty;
    426403        uint_t  reacnt = 0U;
    427         char    c = '\0';               /* コンパイラの警告を抑止するために初期化する */
     404        char    c = '\0';               /* コンパイラの警告を抑止するために初期化する */
    428405        ER              ercd, rercd;
    429406
    430         if (sns_dpn()) {                                /* コンテキストのチェック */
     407        if (sns_dpn()) {                                /* コンテキストのチェック */
    431408                return(E_CTX);
    432409        }
    433         if (!VALID_IDX(idx)) {                  /* ポート番号のチェック */
     410        if (!VALID_IDX(idx)) {                  /* ポート番号のチェック */
    434411                return(E_ID);
    435412        }
    436413
    437414        p_cellcb = GET_CELLCB(idx);
    438         if (!VAR_openFlag) {                    /* オープン済みかのチェック */
     415        if (!VAR_openFlag) {                    /* オープン済みかのチェック */
    439416                return(E_OBJ);
    440417        }
    441         if (VAR_errorFlag) {                    /* エラー状æ
    442 ‹ã‹ã®ãƒã‚§ãƒƒã‚¯ */
     418        if (VAR_errorFlag) {                    /* エラー状態かのチェック */
    443419                return(E_SYS);
    444420        }
    445421
    446         buffer_empty = true;                    /* ループの1回めはwai_semする */
     422        buffer_empty = true;                    /* ループの1回めはwai_semする */
    447423        while (reacnt < length) {
    448424                if (buffer_empty) {
     
    462438
    463439                /*
    464                  *  エコーバック処理.
     440                 *  エコーバック処理.
    465441                 */
    466442                if ((VAR_ioControl & IOCTL_ECHO) != 0U) {
     
    483459
    484460/*
    485  *  シリアルポートの制御(受け口関数)
     461 *  シリアルポートの制御(受け口関数)
    486462 */
    487463ER
     
    490466        CELLCB  *p_cellcb;
    491467
    492         if (sns_dpn()) {                                /* コンテキストのチェック */
     468        if (sns_dpn()) {                                /* コンテキストのチェック */
    493469                return(E_CTX);
    494470        }
    495471        if (!VALID_IDX(idx)) {
    496                 return(E_ID);                           /* ポート番号のチェック */
    497         }
    498 
    499         p_cellcb = GET_CELLCB(idx);
    500         if (!VAR_openFlag) {                    /* オープン済みかのチェック */
     472                return(E_ID);                           /* ポート番号のチェック */
     473        }
     474
     475        p_cellcb = GET_CELLCB(idx);
     476        if (!VAR_openFlag) {                    /* オープン済みかのチェック */
    501477                return(E_OBJ);
    502478        }
    503         if (VAR_errorFlag) {                    /* エラー状æ
    504 ‹ã‹ã®ãƒã‚§ãƒƒã‚¯ */
     479        if (VAR_errorFlag) {                    /* エラー状態かのチェック */
    505480                return(E_SYS);
    506481        }
     
    511486
    512487/*
    513  *  シリアルポート状æ
    514 ‹ã®å‚ç
    515 §ï¼ˆå—け口関数)
     488 *  シリアルポート状態の参照(受け口関数)
    516489 */
    517490ER
     
    520493        CELLCB  *p_cellcb;
    521494
    522         if (sns_dpn()) {                                /* コンテキストのチェック */
     495        if (sns_dpn()) {                                /* コンテキストのチェック */
    523496                return(E_CTX);
    524497        }
    525498        if (!VALID_IDX(idx)) {
    526                 return(E_ID);                           /* ポート番号のチェック */
    527         }
    528 
    529         p_cellcb = GET_CELLCB(idx);
    530         if (!VAR_openFlag) {                    /* オープン済みかのチェック */
     499                return(E_ID);                           /* ポート番号のチェック */
     500        }
     501
     502        p_cellcb = GET_CELLCB(idx);
     503        if (!VAR_openFlag) {                    /* オープン済みかのチェック */
    531504                return(E_OBJ);
    532505        }
    533         if (VAR_errorFlag) {                    /* エラー状æ
    534 ‹ã‹ã®ãƒã‚§ãƒƒã‚¯ */
     506        if (VAR_errorFlag) {                    /* エラー状態かのチェック */
    535507                return(E_SYS);
    536508        }
     
    542514
    543515/*
    544  *  シリアルポートからの送信可能コールバック(受け口関数)
     516 *  シリアルポートからの送信可能コールバック(受け口関数)
    545517 */
    546518void
     
    553525        if (VAR_receiveFlowControl != '\0') {
    554526                /*
    555                  *  START/STOP を送信する.
     527                 *  START/STOP を送信する.
    556528                 */
    557529                (void) cSIOPort_putChar(VAR_receiveFlowControl);
     
    560532        else if (!VAR_sendStopped && VAR_sendCount > 0U) {
    561533                /*
    562                  *  送信バッファ中から文字を取り出して送信する.
     534                 *  送信バッファ中から文字を取り出して送信する.
    563535                 */
    564536                (void) cSIOPort_putChar(VAR_sendBuffer[VAR_sendReadPointer]);
     
    573545        else {
    574546                /*
    575                  *  送信すべき文字がない場合は,送信可能コールバックを禁止する.
     547                 *  送信すべき文字がない場合は,送信可能コールバックを禁止する.
    576548                 */
    577549                cSIOPort_disableCBR(SIOSendReady);
     
    580552
    581553/*
    582  *  シリアルポートからの受信通知コールバック(受け口関数)
     554 *  シリアルポートからの受信通知コールバック(受け口関数)
    583555 */
    584556void
     
    593565        if ((VAR_ioControl & IOCTL_FCSND) != 0U && c == FC_STOP) {
    594566                /*
    595                  *  送信を一時停止する.送信中の文字はそのまま送信する.
     567                 *  送信を一時停止する.送信中の文字はそのまま送信する.
    596568                 */
    597569                VAR_sendStopped = true;
     
    600572                                || (VAR_ioControl & IOCTL_FCANY) != 0U)) {
    601573                /*
    602                  *  送信を再開する.
     574                 *  送信を再開する.
    603575                 */
    604576                VAR_sendStopped = false;
     
    618590        else if ((VAR_ioControl & IOCTL_FCSND) != 0U && c == FC_START) {
    619591                /*
    620                  *  送信に対してフロー制御している場合,START は捨てる.
     592                 *  送信に対してフロー制御している場合,START は捨てる.
    621593                 */
    622594        }
    623595        else if (VAR_receiveCount == ATTR_receiveBufferSize) {
    624596                /*
    625                  *  バッファフルの場合,受信した文字を捨てる.
     597                 *  バッファフルの場合,受信した文字を捨てる.
    626598                 */
    627599        }
    628600        else {
    629601                /*
    630                  *  受信した文字を受信バッファにå
    631 ¥ã‚Œã‚‹ï¼Ž
     602                 *  受信した文字を受信バッファに入れる.
    632603                 */
    633604                VAR_receiveBuffer[VAR_receiveWritePointer] = c;
     
    641612
    642613                /*
    643                  *  STOPを送信する.
     614                 *  STOPを送信する.
    644615                 */
    645616                if ((VAR_ioControl & IOCTL_FCRCV) != 0U && !VAR_receiveStopped
     
    654625
    655626/*
    656  *  シリアルインタフェースドライバからの未送信文字の取出し
     627 *  シリアルインタフェースドライバからの未送信文字の取出し
    657628 */
    658629bool_t
     
    661632        CELLCB  *p_cellcb;
    662633
    663         if (VALID_IDX(idx)) {                                           /* ポート番号のチェック */
     634        if (VALID_IDX(idx)) {                                           /* ポート番号のチェック */
    664635                p_cellcb = GET_CELLCB(idx);
    665                 if (VAR_openFlag) {                                             /* オープン済みかのチェック */
     636                if (VAR_openFlag) {                                             /* オープン済みかのチェック */
    666637                        if (VAR_sendCount > 0U) {
    667638                                *p_c = VAR_sendBuffer[VAR_sendReadPointer];
Note: See TracChangeset for help on using the changeset viewer.