OSDN Git Service

git-svn-id: http://svn.osdn.jp/svnroot/mimic/trunk@101 47198e57-cb75-475f-84c4-a814cd...
authornyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Tue, 15 Nov 2011 12:03:25 +0000 (12:03 +0000)
committernyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Tue, 15 Nov 2011 12:03:25 +0000 (12:03 +0000)
projects/app.RemoteMCU/src/native_function.c [new file with mode: 0644]
projects/app.RemoteMCU/src/native_function.h [new file with mode: 0644]

diff --git a/projects/app.RemoteMCU/src/native_function.c b/projects/app.RemoteMCU/src/native_function.c
new file mode 100644 (file)
index 0000000..6383a6f
--- /dev/null
@@ -0,0 +1,93 @@
+/*\r
+ * native_function.c\r
+ *\r
+ *  Created on: 2011/11/12\r
+ *      Author: nyatla\r
+ */\r
+#include "native_function.h"\r
+\r
+/**\r
+ * This function is sample of Native function call.\r
+ * You can call function from MiMicIL editor.\r
+ * <pre>\r
+ * ;MiMicIL example\r
+ * CALL 0x39000000\r
+ * EXIT\r
+ * .END\r
+ * .D32 0x3939\r
+ * </pre>\r
+ * The result stream is [0x3939]\r
+ */\r
+static NyLPC_TBool jp_nyatla_native_sample(NyLPC_TcMiMicVM_t* i_vm);\r
+\r
+static NyLPC_TBool jp_nyatla_native_sample2(NyLPC_TcMiMicVM_t* i_vm);\r
+\r
+\r
+/**\r
+ * Native function table.\r
+ */\r
+const struct TNativeFunctionItem naitive_function_table[]=\r
+{\r
+       {0x39000000,"jp.nyatla.native_sample",jp_nyatla_native_sample},\r
+       {0x39000001,"jp.nyatla.native_sample2",jp_nyatla_native_sample2},\r
+       //\r
+       // add your native function here!\r
+       //\r
+       {0x39FFFFFF,NULL,NULL} //This is terminator.\r
+};\r
+\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+// public functions\r
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+/**\r
+ * 関数さがす\r
+ */\r
+NyLPC_TNativeFunction getNativeFunctionById(NyLPC_TUInt32 i_id)\r
+{\r
+       int i;\r
+       for(i=0;naitive_function_table[i].function!=NULL;i++){\r
+               if(i_id==naitive_function_table[i].id){\r
+                       return naitive_function_table[i].function;\r
+               }\r
+       }\r
+       return NULL;\r
+}\r
+\r
+////////////////////////////////////////////////////////////////////////////////\r
+// native functions\r
+////////////////////////////////////////////////////////////////////////////////\r
+\r
+/**\r
+ * この関数はネイティブインタフェイスのサンプルです。i_vmのストリームから32bit値を1個読み出して、そのままエコーバックします。\r
+ * VMのワークメモリの操作、VMの持つストリームの操作が出来ます。\r
+ */\r
+NyLPC_TBool jp_nyatla_native_sample(NyLPC_TcMiMicVM_t* i_vm)\r
+{\r
+       NyLPC_TUInt32 v;\r
+\r
+       //read uint32 value from stream.\r
+       if(!NyLPC_cMiMicVM_sget(i_vm,&v)){\r
+               return NyLPC_TBool_FALSE;\r
+       }\r
+\r
+       //you can access VM work memory.\r
+       //i_vm.wm[0],i_vm.wm[1]...i_vm.wm[NyLPC_TcMiMicVM_NUMBER_OF_WM-1]\r
+\r
+       //write your native code here.\r
+       v=v+39;\r
+       v=v-39;\r
+\r
+       //write uint32 value from stream.\r
+       if(!NyLPC_cMiMicVM_sput(i_vm,v)){\r
+               return NyLPC_TBool_FALSE;\r
+       }\r
+       return NyLPC_TBool_TRUE;//OK\r
+}\r
+NyLPC_TBool jp_nyatla_native_sample2(NyLPC_TcMiMicVM_t* i_vm)\r
+{\r
+       i_vm->wm[0]++;\r
+       return NyLPC_TBool_TRUE;//OK\r
+}\r
diff --git a/projects/app.RemoteMCU/src/native_function.h b/projects/app.RemoteMCU/src/native_function.h
new file mode 100644 (file)
index 0000000..7770f7c
--- /dev/null
@@ -0,0 +1,51 @@
+/*\r
+ * naitive_interface.h\r
+ *\r
+ * このファイルは、ネイティブファンクションのテーブルを定義します。\r
+ * ネイティブファンクションコールは、TNativeFunctionItem_t\r
+ */\r
+\r
+#ifndef NAITIVE_INTERFACE_H_\r
+#define NAITIVE_INTERFACE_H_\r
+#include "NyLPC_mimicVm.h"\r
+\r
+typedef NyLPC_TBool (*NyLPC_TNativeFunction)(NyLPC_TcMiMicVM_t* i_vm);\r
+\r
+struct TNativeFunctionItem\r
+{\r
+       /**\r
+        * 関数id。関数のidを定義する。関数idはビットフィールドを持つ。フォーマットは以下の通り。\r
+        * <table>\r
+        * <tr><td>bit field</td><td>bit field</td></tr>\r
+        * <tr><td>31-24</td><td>Addr type</td></tr>\r
+        * <tr><td>23-0</td><td>Number</td></tr>\r
+        * </table>\r
+        * AddrType\r
+        * <ul>\r
+        * <li>0x00: LocalIDモード。23-0に、ユーザ定義IDが含まれていることを示す。他のシステムと重複の可能性があるので注意すること。</li>\r
+        * <li>0x01: MAC-OUIモード。23-0に、MACAddrのOUI値が含まれていることを示す。OUI所有事業者が、ベンダ固有の関数を定義する場合に使用する。</li>\r
+        * <li>0x02: MiMicDomainモード。23-0に、MiMic projectがユーザに割り当てたIDが格納されていることを示す。</li>\r
+        * <li>0x39: MiMic予約値。</li>\r
+        * <li>other: reserved</li>\r
+        * </ul>\r
+        */\r
+       NyLPC_TUInt32 id;\r
+       /**\r
+        * 関数の名前。Javaパッケージ風に定義すると良い。重複可。\r
+        * @example "jp.nyatla.sample"\r
+        */\r
+       const char* name;\r
+       /**\r
+        * 関数ポインタ。\r
+        */\r
+       NyLPC_TNativeFunction function;\r
+};\r
+typedef struct TNativeFunctionItem TNativeFunctionItem_t;\r
+\r
+/**\r
+ * ネイティブ関数テーブルから、idに一致する関数を検索する。\r
+ */\r
+NyLPC_TNativeFunction getNativeFunctionById(NyLPC_TUInt32 i_id);\r
+\r
+\r
+#endif /* NAITIVE_INTERFACE_H_ */\r