OSDN Git Service

(none)
authorryuz <ryuz>
Sun, 28 Oct 2007 04:19:51 +0000 (04:19 +0000)
committerryuz <ryuz>
Sun, 28 Oct 2007 04:19:51 +0000 (04:19 +0000)
25 files changed:
aplfw/hosaplfw.h
aplfw/system/event/event.h [new file with mode: 0755]
aplfw/system/event/event_create.c [new file with mode: 0755]
aplfw/system/event/event_delete.c [new file with mode: 0755]
aplfw/system/event/event_local.h [new file with mode: 0755]
aplfw/system/event/event_set.c [new file with mode: 0755]
aplfw/system/event/event_wait.c [new file with mode: 0755]
aplfw/system/file/chrdrv.h
aplfw/system/file/chrdrv_create.c
aplfw/system/file/chrdrv_delete.c
aplfw/system/file/chrdrv_iocontrol.c [new file with mode: 0755]
aplfw/system/file/chrdrv_local.h
aplfw/system/file/chrdrv_setreadsignal.c [new file with mode: 0755]
aplfw/system/file/chrdrv_setwritesignal.c [new file with mode: 0755]
aplfw/system/file/chrfile.h
aplfw/system/file/chrfile_create.c
aplfw/system/file/file.h
aplfw/system/handle/handleobj.h
aplfw/system/mutex/mutex.h
aplfw/system/system/system.h
aplfw/system/system/system_boot.c
aplfw/system/system/system_initialize.c
aplfw/system/system/system_local.h [new file with mode: 0755]
aplfw/system/system/system_process.c [new file with mode: 0755]
aplfw/system/system/system_requestproc.c [new file with mode: 0755]

index aa0b825..3a7493d 100755 (executable)
@@ -7,6 +7,8 @@
 
 #include "system/handle/handle.h"
 #include "system/memory/memory.h"
+#include "system/event/event.h"
+#include "system/mutex/mutex.h"
 #include "system/time/time.h"
 #include "system/process/process.h"
 #include "system/command/command.h"
diff --git a/aplfw/system/event/event.h b/aplfw/system/event/event.h
new file mode 100755 (executable)
index 0000000..f28fae2
--- /dev/null
@@ -0,0 +1,44 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  event.h
+ * @brief %jp{イベントオブジェクト}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __HOS__event_h__
+#define __HOS__event_h__
+
+
+#include "system/handle/handle.h"
+
+
+/* エラーコード定義 */
+#define EVENT_ERR_OK                   0
+#define EVENT_ERR_NG                   (-1)
+
+/* エラー型 */
+typedef int            EVENT_ERR;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HANDLE    Event_Create(void);
+void      Event_Delete(HANDLE hEvent);
+EVENT_ERR Event_Set(HANDLE hEvent);
+EVENT_ERR Event_Wait(HANDLE hEvent);
+int       Event_Ref(HANDLE hEvent);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS__event_h__ */
+
+
+/* end of file */
diff --git a/aplfw/system/event/event_create.c b/aplfw/system/event/event_create.c
new file mode 100755 (executable)
index 0000000..0a9b6dd
--- /dev/null
@@ -0,0 +1,45 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  event.h
+ * @brief %jp{イベントオブジェクト}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "event_local.h"
+
+
+/* 仮想関数テーブル */
+const static T_HANDLEOBJ_METHODS Event_Methods =
+       {
+               Event_Delete
+       };
+
+
+HANDLE Event_Create(void)
+{
+       C_EVENT *self;
+
+       /* メモリ確保 */
+       if ( (self = SysMem_Alloc(sizeof(*self))) == NULL )
+       {
+               return HANDLE_NULL;
+       }
+       
+       /* オブジェクト生成 */
+       if ( (self->hSysEvt = SysEvt_Create()) == SYSEVT_HANDLE_NULL )
+       {
+               SysMem_Free(self);
+       }
+       
+       /* 親クラスコンストラクタ呼び出し */
+       HandleObj_Create(&self->HandleObj, &Event_Methods);
+}
+
+
+
+/* end of file */
diff --git a/aplfw/system/event/event_delete.c b/aplfw/system/event/event_delete.c
new file mode 100755 (executable)
index 0000000..52109b7
--- /dev/null
@@ -0,0 +1,34 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  event.h
+ * @brief %jp{イベントオブジェクト}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "event_local.h"
+
+
+/* デストラクタ */
+void Event_Delete(HANDLE hEvent)
+{
+       C_EVENT *self;
+       
+       /* キャスト */
+       self = (C_EVENT *)hEvent;
+       
+       /* イベント削除 */
+       SysEvt_Delete(self->hSysEvt);
+       
+       /* 親クラスデストラクタ呼び出し */
+       HandleObj_Delete(&self->HandleObj);
+       
+       /* メモリ削除 */
+       SysMem_Free(self);
+}
+
+
+/* end of file */
diff --git a/aplfw/system/event/event_local.h b/aplfw/system/event/event_local.h
new file mode 100755 (executable)
index 0000000..1e23d32
--- /dev/null
@@ -0,0 +1,34 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  event.h
+ * @brief %jp{イベントオブジェクト}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef __HOS__event_local_h__
+#define __HOS__event_local_h__
+
+
+#include "event.h"
+#include "system/handle/handleobj.h"
+#include "system/sysapi/sysapi.h"
+
+
+/* イベントオブジェクトクラス定義 */
+typedef struct c_event
+{
+       C_HANDLEOBJ             HandleObj;              /* ハンドルオブジェクトを継承 */
+
+       SYSEVT_HANDLE   hSysEvt;                /* イベント */
+} C_EVENT;
+
+
+#endif /* __HOS__event_local_h__ */
+
+
+/* end of file */
diff --git a/aplfw/system/event/event_set.c b/aplfw/system/event/event_set.c
new file mode 100755 (executable)
index 0000000..349ffc9
--- /dev/null
@@ -0,0 +1,30 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  event.h
+ * @brief %jp{イベントオブジェクト}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "event_local.h"
+
+
+/* イベントセット */
+EVENT_ERR Event_Set(HANDLE hEvent)
+{
+       C_EVENT *self;
+       
+       /* キャスト */
+       self = (C_EVENT *)hEvent;
+       
+       /* イベントセット */
+       SysEvt_Set(self->hSysEvt);
+       
+       return EVENT_ERR_OK;
+}
+
+
+/* end of file */
diff --git a/aplfw/system/event/event_wait.c b/aplfw/system/event/event_wait.c
new file mode 100755 (executable)
index 0000000..98d18a6
--- /dev/null
@@ -0,0 +1,30 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  event.h
+ * @brief %jp{イベントオブジェクト}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "event_local.h"
+
+
+/* イベント待ち */
+EVENT_ERR Event_Wait(HANDLE hEvent)
+{
+       C_EVENT *self;
+       
+       /* キャスト */
+       self = (C_EVENT *)hEvent;
+       
+       /* イベント待ち */
+       SysEvt_Wait(self->hSysEvt);
+       
+       return EVENT_ERR_OK;
+}
+
+
+/* end of file */
index 5a35add..02a1414 100755 (executable)
@@ -13,6 +13,7 @@
 #define __HOS__chrdrv_h__
 
 
+#include "system/sysapi/sysapi.h"
 #include "system/file/chrfile.h"
 #include "system/file/drvobj.h"
 
 /* デバイスドライバオブジェクト基本クラス */
 typedef struct c_chrdrv
 {
-       C_DRVOBJ        DrvObj;                 /* DrvObjクラスを継承 */
+       C_DRVOBJ                DrvObj;                         /**< DrvObjクラスを継承 */
        
-       char            iWriteSignal;   /* 書込み状態 */
-       char            iReadSignal;    /* 読出し状態 */
-       C_CHRFILE       *pMonHead;              /* 状態監視オブジェクトの連結ポインタ */
+       SYSEVT_HANDLE   hMtx;                           /* 排他制御ミューテックス */
+       SYSEVT_HANDLE   hEvtWrite;                      /* 書込みイベント */
+       SYSEVT_HANDLE   hEvtRead;                       /* 読込みイベント */
+       
+       C_CHRFILE               *pFileHead;                     /**< 状態監視オブジェクトの連結ポインタ */
 } C_CHRDRV;
 
 
@@ -33,11 +36,19 @@ typedef struct c_chrdrv
 extern "C" {
 #endif
 
-void ChrDrv_Create(C_CHRDRV *self, const T_DRVOBJ_METHODS *pMethods);          /**< コンストラクタ */
-void ChrDrv_Delete(C_CHRDRV *self);                                                                                    /**< デストラクタ */
+FILE_ERR ChrDrv_Create(C_CHRDRV *self, const T_DRVOBJ_METHODS *pMethods);      /**< コンストラクタ */
+void     ChrDrv_Delete(C_CHRDRV *self);                                                                                /**< デストラクタ */
+
+#define  ChrDrv_Lock(self)                             SysMtx_Lock((self)->hMtx)                       /**< 書込み可能になった可能性があることを通知 */
+#define  ChrDrv_Unlock(self)                   SysMtx_Unlock((self)->hMtx)                     /**< 書込み可能になった可能性があるまで待つ */
+
+void     ChrDrv_SetWriteSignal(C_CHRDRV *self);                                                                /**< 書込み可能になった可能性があることを通知 */
+#define  ChrDrv_WaitWriteSignal(self)  SysEvt_Wait((self)->hEvtWrite)          /**< 書込み可能になった可能性があるまで待つ */
+#define  ChrDrv_RefWriteSignal(self)   SysEvt_Ref((self)->hEvtWrite)           /**< 書込み可能状況参照 */
 
-void ChrDrv_WriteSignal(C_CHRDRV *self);               /**< 書込み可能になったことを通知 */
-void ChrDrv_ReadSignal(C_CHRDRV *self);                        /**< 読込み可能になったことを通知 */
+void     ChrDrv_SetReadSignal(C_CHRDRV *self);                                                         /**< 読込み可能になったことを通知 */
+#define  ChrDrv_WaitReadSignal(self)   SysEvt_Wait((self)->hEvtRead)           /**< 読込み可能になった可能性があるまで待つ */
+#define  ChrDrv_RefReadSignal(self)            SysEvt_Ref((self)->hEvtRead)            /**< 読込み可能状況参照 */
 
 #ifdef __cplusplus
 }
index b0372f3..22744bf 100755 (executable)
@@ -1,10 +1,8 @@
 /** 
  *  Hyper Operating System  Application Framework
  *
- * @file  chrfile.h
- * @brief %jp{キャラクタ型デバイスドライバ用ファイルディスクリプタ}
- *
- * %jp{ファイルディスクリプタとして機能するクラス}
+ * @file  chrdrv.h
+ * @brief %jp{キャラクタ型デバイスドライバ用基本クラス}
  *
  * Copyright (C) 2006-2007 by Project HOS
  * http://sourceforge.jp/projects/hos/
 #include "chrdrv.h"
 
 
-void ChrDrv_Create(C_CHRDRV *self, const T_DRVOBJ_METHODS *pMethods)
+FILE_ERR ChrDrv_Create(C_CHRDRV *self, const T_DRVOBJ_METHODS *pMethods)
 {
+       self->hMtx      = SysMtx_Create();              /* 排他制御ミューテックス */
+       self->hEvtWrite = SysEvt_Create();              /* 書込みイベント */
+       self->hEvtRead  = SysEvt_Create();              /* 読込みイベント */
+       
+       self->pFileHead = NULL;                                 /**< 状態監視オブジェクトの連結ポインタ */
+
        /* 親クラスコンストラクタ呼び出し */
        DrvObj_Create(&self->DrvObj, pMethods);
+       
+       return FILE_ERR_OK;
 }
 
 
index 172d9b4..47ba923 100755 (executable)
 
 void ChrDrv_Delete(C_CHRDRV *self)
 {
+       SysMtx_Delete(self->hMtx);                      /* 排他制御ミューテックス */
+       SysEvt_Delete(self->hEvtWrite);         /* 書込みイベント */
+       SysEvt_Delete(self->hEvtRead);          /* 読込みイベント */
+       
        /* 親クラスデストラクタ呼び出し */
        DrvObj_Delete(&self->DrvObj);
 }
diff --git a/aplfw/system/file/chrdrv_iocontrol.c b/aplfw/system/file/chrdrv_iocontrol.c
new file mode 100755 (executable)
index 0000000..7b744fd
--- /dev/null
@@ -0,0 +1,52 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  chrfile.h
+ * @brief %jp{キャラクタ型デバイスドライバ用ファイルディスクリプタ}
+ *
+ * %jp{ファイルディスクリプタとして機能するクラス}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "chrdrv.h"
+
+
+/* I/O制御 */
+FILE_ERR ChrDrv_IoControl(C_DRVOBJ *pDrvObj, C_FILEOBJ *pFileObj, int iFunc, void *pInBuf, FILE_SIZE InSize, const void *pOutBuf, FILE_SIZE OutSize)
+{
+       C_CHRDRV        *self;
+       C_CHRFILE       *pFile;
+       
+       /* upper cast */
+       self  = (C_CHRDRV *)pDrvObj;
+       pFile = (C_CHRFILE *)pFileObj;
+       
+       switch ( iFunc )
+       {
+       case FILE_IOCTL_SETWRITEMODE:           /* 書込みモードを設定 */
+               pFile->cWriteMode = (char)(*(int *)pOutBuf);
+               return FILE_ERR_OK;
+               
+       case FILE_IOCTL_SETREADEMODE:           /* 読込みモードを設定 */
+               pFile->cReadMode = (char)(*(int *)pOutBuf);
+               return FILE_ERR_OK;
+               
+       case FILE_IOCTL_SETWRITEVENT:           /* 書込みイベントを設定 */
+               pFile->hEventWrite = (*(HANDLE *)pOutBuf);
+               return FILE_ERR_OK;
+               
+       case FILE_IOCTL_SETREADEVENT:           /* 読込みイベントを設定 */    
+               pFile->hEventRead = (*(HANDLE *)pOutBuf);
+               return FILE_ERR_OK;
+               
+       }
+       
+       return FILE_ERR_NG;
+}
+
+
+/* end of file */
index 9674750..14c3136 100755 (executable)
@@ -10,7 +10,7 @@
 
 
 #ifndef __HOS__chrdrv_local_h__
-#define __HOS__drvobj_local_h__
+#define __HOS__chrdrv_local_h__
 
 
 #include "system/file/chrdrv.h"
diff --git a/aplfw/system/file/chrdrv_setreadsignal.c b/aplfw/system/file/chrdrv_setreadsignal.c
new file mode 100755 (executable)
index 0000000..9b9c4cd
--- /dev/null
@@ -0,0 +1,43 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  chrfile.h
+ * @brief %jp{キャラクタ型デバイスドライバ用ファイルディスクリプタ}
+ *
+ * %jp{ファイルディスクリプタとして機能するクラス}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "chrdrv.h"
+
+
+/** 読込み可能になったことを通知 */
+void ChrDrv_SetReadSignal(C_CHRDRV *self)
+{
+       C_CHRFILE *pFile;
+       
+       SysEvt_Set(self->hEvtRead);
+       
+       pFile = self->pFileHead;
+       if ( pFile != NULL )
+       {
+               do
+               {
+                       /* イベントハンドルが登録されていたらセット */
+                       if ( pFile->hEventRead != HANDLE_NULL )
+                       {
+                               Event_Set(pFile->hEventRead);
+                       }
+                       
+                       /* 次に進む */
+                       pFile = pFile->pNext;
+               } while ( pFile != self->pFileHead);
+       }
+}
+
+
+/* end of file */
diff --git a/aplfw/system/file/chrdrv_setwritesignal.c b/aplfw/system/file/chrdrv_setwritesignal.c
new file mode 100755 (executable)
index 0000000..1df65af
--- /dev/null
@@ -0,0 +1,43 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  chrfile.h
+ * @brief %jp{キャラクタ型デバイスドライバ用ファイルディスクリプタ}
+ *
+ * %jp{ファイルディスクリプタとして機能するクラス}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "chrdrv.h"
+
+
+/** 読込み可能になったことを通知 */
+void ChrDrv_SetWriteSignal(C_CHRDRV *self)
+{
+       C_CHRFILE *pFile;
+       
+       SysEvt_Set(self->hEvtWrite);
+       
+       pFile = self->pFileHead;
+       if ( pFile != NULL )
+       {
+               do
+               {
+                       /* イベントハンドルが登録されていたらセット */
+                       if ( pFile->hEventWrite != HANDLE_NULL )
+                       {
+                               Event_Set(pFile->hEventWrite);
+                       }
+                       
+                       /* 次に進む */
+                       pFile = pFile->pNext;
+               } while ( pFile != self->pFileHead);
+       }
+}
+
+
+/* end of file */
index c4b2d59..7347416 100755 (executable)
@@ -26,11 +26,11 @@ typedef struct c_chrfile
 {
        C_FILEOBJ                       FileObj;                /* ファイルオブジェクトを継承 */
        
-       struct c_chrfile        *pMonNext;              /* イベント監視リスト連結用 */
-       struct c_chrfile        *pMonPrev;              /* イベント監視リスト連結用 */
+       struct c_chrfile        *pNext;                 /* イベント監視リスト連結用 */
+       struct c_chrfile        *pPrev;                 /* イベント監視リスト連結用 */
        
-       HANDLE                          hEvntWrite;             /* 書込みイベント */
-       HANDLE                          hEvntRead;              /* 読込みイベント */
+       HANDLE                          hEventWrite;    /* 書込みイベント */
+       HANDLE                          hEventRead;             /* 読込みイベント */
        char                            cWriteMode;             /* 書込みモード */
        char                            cReadMode;              /* 読込みモード */
 } C_CHRFILE;
index 2d02784..2660238 100755 (executable)
@@ -21,12 +21,12 @@ void ChrFile_Create(C_CHRFILE *self, struct c_drvobj *pDrvObj, const T_FILEOBJ_M
        FileObj_Create(&self->FileObj, pDrvObj, pMethods);
 
        /* メンバ初期化 */        
-       self->pMonNext   = NULL;        
-       self->pMonPrev   = NULL;
-       self->hEvntWrite = HANDLE_NULL; 
-       self->hEvntRead  = HANDLE_NULL; 
-       self->cWriteMode = FILE_WMODE_BLOCKING;
-       self->cReadMode  = FILE_RMODE_BLOCKING;
+       self->pNext       = NULL;       
+       self->pPrev       = NULL;
+       self->hEventWrite = HANDLE_NULL;        
+       self->hEventRead  = HANDLE_NULL;        
+       self->cWriteMode  = FILE_WMODE_BLOCKING;
+       self->cReadMode   = FILE_RMODE_BLOCKING;
 }
 
 
index 0483ef0..33ce9a3 100755 (executable)
 #define FILE_IOCTL_CANWRITEBUF         0x0032          /* ライトバッファ破棄(省コピー版Write) */
 
 
+/* IoControl機能コード(キャラクタ系デバイスドライバ共通) */
+#define FILE_IOCTL_SETWRITEMODE                0x0081          /* 書込みモードを設定 */
+#define FILE_IOCTL_SETREADEMODE                0x0082          /* 読込みモードを設定 */
+#define FILE_IOCTL_SETWRITEVENT                0x0084          /* 書込みイベントを設定 */
+#define FILE_IOCTL_SETREADEVENT                0x0085          /* 読込みイベントを設定 */
+
+
 /* IoControl機能コード(ディレクトリ) */
 #define FILE_IOCTL_DIR_READ                    0x0101          /* デバイス情報を得る */
 
index 8078e3f..db259a4 100755 (executable)
@@ -1,7 +1,7 @@
 /** 
  *  Hyper Operating System  Application Framework
  *
- * @file  handle.h
+ * @file  handleobj.h
  * @brief %jp{ハンドルオブジェクト}
  *
  * Copyright (C) 2006 by Project HOS
@@ -9,8 +9,8 @@
  */
 
 
-#ifndef __HOS__hdlobj_h__
-#define __HOS__hdlobj_h__
+#ifndef __HOS__handleobj_h__
+#define __HOS__handleobj_h__
 
 
 #include "system/handle/handle.h"
@@ -42,7 +42,7 @@ void    HandleObj_Delete(C_HANDLEOBJ *self);                                                                          /* デストラクタ */
 #endif
 
 
-#endif /* __HOS__hdlobj_h__ */
+#endif /* __HOS__handleobj_h__ */
 
 
 /* end of file */
index c8c0ac7..1d354c5 100755 (executable)
@@ -7,16 +7,16 @@
 #define MUTEX_ERR_NG                   (-1)
 
 /* エラー型 */
-typedef int            MUTEXERR;               
+typedef int            MUTEX_ERR;              
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-HANDLE   Mutex_Create(void);
-MUTEXERR Mutex_Delete(HANDLE hMutex);
-MUTEXERR Mutex_Lock(HANDLE hMutex);
-MUTEXERR Mutex_Unlock(HANDLE hMutex);
+HANDLE    Mutex_Create(void);
+MUTEX_ERR Mutex_Delete(HANDLE hMutex);
+MUTEX_ERR Mutex_Lock(HANDLE hMutex);
+MUTEX_ERR Mutex_Unlock(HANDLE hMutex);
 
 
 #ifdef __cplusplus
index dc63cfe..98eee57 100755 (executable)
@@ -23,6 +23,7 @@ extern "C" {
 
 void System_Initialize(void *pMem, MEMSIZE Size);
 void System_Boot(HANDLE hTerminal, HANDLE hConsole, const char *pszCommand, int iStackSize);
+int  System_RequestProc(void (*pfncProc)(VPARAM Param), VPARAM Param);
 
 #ifdef __cplusplus
 }
index 5052dd1..cc70948 100755 (executable)
@@ -10,8 +10,8 @@
 
 
 #include "hosaplfw.h"
-#include "system/system/system.h"
 #include "system/sysapi/sysapi.h"
+#include "system/system/system_local.h"
 #include "system/process/process.h"
 #include "system/file/stdfile.h"
 
@@ -24,6 +24,7 @@ void System_Boot(HANDLE hTerminal, HANDLE hConsole, const char *pszCommand, int
 {
        T_PROCESS_INF   ProcInf;
        
+       /* システムプロセスのブート */
        ProcInf.hTerminal   = hTerminal;
        ProcInf.hConsole    = hConsole;
        ProcInf.hStdIn      = hConsole;
index 8108815..5bcb5d2 100755 (executable)
@@ -9,23 +9,41 @@
  */
 
 
-#include "system/system/system.h"
 #include "system/sysapi/sysapi.h"
+#include "system/system/system_local.h"
 #include "system/file/file.h"
 #include "system/command/command.h"
 
 
+/* システムクラス */
+C_SYSTEM g_System;
+
+
 /* システムの初期化 */
 void System_Initialize(void *pMem, MEMSIZE Size)
 {
+       C_SYSTEM        *self;
+       
+       self = &g_System;
+
        /* システムAPIの初期化 */
        SysApi_Initialize(pMem, Size);
        
+       /* システムクラスの初期化 */
+       g_System.hEvtProc  = SysEvt_Create();
+       g_System.iProcHead = 0;
+       g_System.iProcTail = 0;
+       
+       /* システムプロセスの開始 */
+       self->hPrcProc = SysPrc_Create(System_Process, (VPARAM)self, 1024, 1);
+       SysPrc_Start(self->hPrcProc);
+
+       
        /* ファイルシステム初期化 */
        File_Initialize();
        
        /* コマンドシステム初期化 */
-       Command_Initialize();   
+       Command_Initialize();
 }
 
 
diff --git a/aplfw/system/system/system_local.h b/aplfw/system/system/system_local.h
new file mode 100755 (executable)
index 0000000..b65bb2a
--- /dev/null
@@ -0,0 +1,61 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  system.h
+ * @brief %jp{システム用API定義}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef __HOS__system_local_h__
+#define __HOS__system_local_h__
+
+
+#include "system.h"
+#include "system/sysapi/sysapi.h"
+
+
+
+#define SYSTEM_PROCQUE_SIZE            64              /* システムプロシージャ要求キューイング数 */
+
+
+/* システムプロシージャ情報 */
+typedef struct t_system_procinf
+{
+       void            (*pfncProc)(VPARAM Param);
+       VPARAM          Param;
+} T_SYSTEM_PROCINF;
+
+
+/* システムクラス */
+typedef struct c_system
+{
+       SYSPRC_HANDLE           hPrcProc;
+       SYSEVT_HANDLE           hEvtProc;
+       volatile int            iProcHead;
+       volatile int            iProcTail;
+       T_SYSTEM_PROCINF        ProcQue[SYSTEM_PROCQUE_SIZE];
+} C_SYSTEM;
+
+
+extern C_SYSTEM g_System;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void System_Process(VPARAM Param);             /* システムプロセス */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS__system_h__ */
+
+
+/* end of file */
diff --git a/aplfw/system/system/system_process.c b/aplfw/system/system/system_process.c
new file mode 100755 (executable)
index 0000000..398879b
--- /dev/null
@@ -0,0 +1,54 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  system.h
+ * @brief %jp{システム用API定義}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "hosaplfw.h"
+#include "system/system/system_local.h"
+
+
+/* システムプロセス */
+void System_Process(VPARAM Param)
+{
+       C_SYSTEM        *self;
+       
+       self = &g_System;
+       
+       for ( ; ; )
+       {
+               int     iHead;
+
+               /* イベント待ち */
+               SysEvt_Wait(self->hEvtProc);
+               SysEvt_Clear(self->hEvtProc);
+               
+               /* プロシージャ実行 */
+               for ( ; ; )
+               {
+                       iHead = self->iProcHead;
+
+                       if ( iHead == self->iProcTail )
+                       {
+                               break;
+                       }
+                       
+                       self->ProcQue[iHead].pfncProc(self->ProcQue[iHead].Param);
+                       
+                       iHead++;
+                       if ( iHead >= SYSTEM_PROCQUE_SIZE )
+                       {
+                               iHead = 0;
+                       }
+                       self->iProcHead = iHead;
+               }
+       }
+}
+
+
+/* end of file */
diff --git a/aplfw/system/system/system_requestproc.c b/aplfw/system/system/system_requestproc.c
new file mode 100755 (executable)
index 0000000..55871c4
--- /dev/null
@@ -0,0 +1,52 @@
+/** 
+ *  Hyper Operating System  Application Framework
+ *
+ * @file  system.h
+ * @brief %jp{システム用API定義}
+ *
+ * Copyright (C) 2006-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "hosaplfw.h"
+#include "system/system/system_local.h"
+
+
+/* システムプロセス */
+int System_RequestProc(void (*pfncProc)(VPARAM Param), VPARAM Param)
+{
+       C_SYSTEM        *self;
+       int                     iTail;
+       int                     iNextTail;
+       
+       self = &g_System;
+       
+       iTail     = self->iProcTail;
+       iNextTail = iTail + 1;
+       if ( iNextTail >= SYSTEM_PROCQUE_SIZE )
+       {
+               iNextTail = 0;
+       }
+       
+       /* バッファフルチェック */
+       if ( iNextTail == self->iProcHead )
+       {
+               return 1;
+       }
+       
+       /* キューに格納 */
+       self->ProcQue[iTail].pfncProc = pfncProc;
+       self->ProcQue[iTail].Param    = Param;
+       
+       self->iProcTail= iNextTail;
+       
+       /* イベント設定 */
+       SysEvt_Set(self->hEvtProc);
+       
+       return 0;
+}
+
+
+
+/* end of file */