OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / system / file / chrdrv_setwritesignal.c
1 /** 
2  *  Hyper Operating System  Application Framework
3  *
4  * @file  chrfile.h
5  * @brief %jp{キャラクタ型デバイスドライバ用ファイルディスクリプタ}
6  *
7  * %jp{ファイルディスクリプタとして機能するクラス}
8  *
9  * Copyright (C) 2006-2007 by Project HOS
10  * http://sourceforge.jp/projects/hos/
11  */
12
13
14
15 #include "hosaplfw.h"
16 #include "chrdrv.h"
17 #include "system/system/system.h"
18
19
20 static void ChrDrv_SetWriteSignalProc(VPARAM Param);
21
22
23 /** 書込み可能になったことを通知 */
24 void ChrDrv_SetWriteSignal(C_CHRDRV *self)
25 {
26         if ( SysCtx_IsIsr() )
27         {
28                 /* ISRからの呼び出しなら、システムプロセス経由で発動 */
29                 System_RequestProc(ChrDrv_SetWriteSignalProc, (VPARAM)self);    
30         }
31         else
32         {
33                 /* そうでなければ直接実行 */
34                 ChrDrv_SetWriteSignalProc((VPARAM)self);
35         }
36 }
37
38
39 /** 書込み可能になったことを通知 */
40 void ChrDrv_SetWriteSignalProc(VPARAM Param)
41 {
42         C_CHRDRV        *self;
43         C_CHRFILE       *pFile;
44         
45         self = (C_CHRDRV *)Param;
46         
47         SysEvt_Set(self->hEvtWrite);
48                 
49         SysMtx_Lock(self->hMtx);
50         
51         pFile = self->pFileHead;
52         if ( pFile != NULL )
53         {
54                 do
55                 {
56                         /* イベントハンドルが登録されていたらセット */
57                         if ( pFile->hEventWrite != HANDLE_NULL )
58                         {
59                                 Event_Set(pFile->hEventWrite);
60                         }
61                         
62                         /* 次に進む */
63                         pFile = pFile->pNext;
64                 } while ( pFile != self->pFileHead);
65         }
66         
67         SysMtx_Unlock(self->hMtx);
68 }
69
70
71
72
73 /* end of file */