OSDN Git Service

update libMiMic
[mimic/MiMicSDK.git] / lib / src / mimicvm / NyLPC_cMiMicVM.h
index 57e5be0..8884330 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
  *\r
  * For further information please contact.\r
- *     http://nyatla.jp/\r
- *     <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
+ *  http://nyatla.jp/\r
+ *  <airmail(at)ebony.plala.or.jp> or <nyatla(at)nyatla.jp>\r
  *\r
  *********************************************************************************/\r
 #ifndef NYLPC_CMIMICVM_H_\r
 #define NYLPC_CMIMICVM_H_\r
-typedef struct NyLPC_TcMiMicVM NyLPC_TcMiMicVM_t;\r
+\r
 #include "NyLPC_stdlib.h"\r
 \r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif /* __cplusplus */\r
+\r
+typedef struct NyLPC_TcMiMicVM NyLPC_TcMiMicVM_t;\r
+struct NyLPC_TcMiMicVM_TEvent;\r
+\r
+#define NyLPC_cMiMicVM_RESULT_OK 0x00000000\r
+#define NyLPC_cMiMicVM_RESULT_NG 0x80000000\r
+#define NyLPC_cMiMicVM_RESULT_RUNTIME_NG (NyLPC_cMiMicVM_RESULT_NG|0x00010000)\r
+#define NyLPC_cMiMicVM_RESULT_RUNTIME_NG_UNKNOWN_CALL (NyLPC_cMiMicVM_RESULT_RUNTIME_NG|0x00000021)\r
+#define NyLPC_cMiMicVM_RESULT_RUNTIME_NG_CALL (NyLPC_cMiMicVM_RESULT_RUNTIME_NG|0x00000022)\r
+#define NyLPC_cMiMicVM_RESULT_isOK(v) ((v&0x80000000)==0x00000000)\r
+\r
 /**\r
  * MiMicVMのワークメモリの個数\r
  */\r
@@ -36,26 +50,43 @@ typedef struct NyLPC_TcMiMicVM NyLPC_TcMiMicVM_t;
 typedef NyLPC_TUInt8 NyLPC_TcMiMicVM_OP_TYPE;\r
 typedef NyLPC_TUInt8 NyLPC_TcMiMicVM_OPR_TYPE;\r
 \r
-typedef NyLPC_TBool (*NyLPC_TcMiMicVM_putStream)(void* i_tag,NyLPC_TUInt32 i_val);\r
-typedef NyLPC_TBool (*NyLPC_TcMiMicVM_getStream)(void* i_tag,NyLPC_TUInt32* o_val);\r
+typedef NyLPC_TBool (*NyLPC_TcMiMicVM_putStream)(struct NyLPC_TcMiMicVM_TEvent* i_evh,NyLPC_TUInt32 i_val);\r
+typedef NyLPC_TBool (*NyLPC_TcMiMicVM_getStream)(struct NyLPC_TcMiMicVM_TEvent* i_evh,NyLPC_TUInt32* o_val);\r
+/**\r
+ * MiMicVMのCALL命令ハンドラ。\r
+ * i_idに関数IDを指定する。\r
+ * @param i_id\r
+ * CALL命令のパラメタ\r
+ * @param i_vm\r
+ * VMのインスタンス。\r
+ * @return\r
+ * MiMicVMのエラーコード。\r
+ * 関数コールが成功したら、NyLPC_cMiMicVM_RESULT_OKを返すこと。エラーの場合はNyLPC_cMiMicVM_RESULT_NG又はカスタムエラーコードを返すこと。\r
+ */\r
+typedef NyLPC_TUInt32 (*NyLPC_TcMiMicVM_nativeCall)(struct NyLPC_TcMiMicVM_TEvent* i_evh,NyLPC_TUInt32 i_id,NyLPC_TcMiMicVM_t* i_vm);\r
+typedef void (*NyLPC_TcMiMicVM_sleep)(struct NyLPC_TcMiMicVM_TEvent* i_evh,NyLPC_TUInt32 i_sleep_in_msec);\r
 struct NyLPC_TcMiMicVM_TEvent\r
 {\r
-       void* tag;\r
-       NyLPC_TcMiMicVM_putStream put_stream;\r
-       NyLPC_TcMiMicVM_getStream get_stream;\r
+    NyLPC_TcMiMicVM_putStream put_stream;\r
+    NyLPC_TcMiMicVM_getStream get_stream;\r
+    NyLPC_TcMiMicVM_sleep sleep;\r
+    NyLPC_TcMiMicVM_nativeCall native_call;\r
 };\r
 \r
 \r
 struct NyLPC_TcMiMicVM\r
 {\r
-       struct NyLPC_TcMiMicVM_TEvent* _event_handler;\r
-       NyLPC_TUInt32 wm[NyLPC_TcMiMicVM_NUMBER_OF_WM];\r
-       NyLPC_TUInt8 ret_code;\r
+    struct NyLPC_TcMiMicVM_TEvent* _event_handler;\r
+    NyLPC_TUInt32 wm[NyLPC_TcMiMicVM_NUMBER_OF_WM];\r
 };\r
 void NyLPC_cMiMicVM_initialize(NyLPC_TcMiMicVM_t* i_inst,struct NyLPC_TcMiMicVM_TEvent* i_handler);\r
 #define NyLPC_cMiMicVM_finalize(i);\r
-NyLPC_TBool NyLPC_cMiMicVM_run(NyLPC_TcMiMicVM_t* i_inst,const NyLPC_TUInt8* i_instruction,const char* i_stream,NyLPC_TUInt32* i_data);\r
-\r
+NyLPC_TUInt32 NyLPC_cMiMicVM_run(NyLPC_TcMiMicVM_t* i_inst,const NyLPC_TUInt32* i_instruction,const NyLPC_TUInt16 i_size_of_instruction);\r
+NyLPC_TBool NyLPC_cMiMicVM_sput(NyLPC_TcMiMicVM_t* i_inst,NyLPC_TUInt32 i_val);\r
+NyLPC_TBool NyLPC_cMiMicVM_sget(NyLPC_TcMiMicVM_t* i_inst,NyLPC_TUInt32* o_val);\r
 \r
+#ifdef __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
 \r
 #endif /* NYLPC_CMIMICVM_H_ */\r