OSDN Git Service

git-svn-id: http://svn.osdn.jp/svnroot/mimic/trunk@65 47198e57-cb75-475f-84c4-a814cd6...
authornyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Fri, 21 Oct 2011 16:09:29 +0000 (16:09 +0000)
committernyatla <nyatla@47198e57-cb75-475f-84c4-a814cd6f29e0>
Fri, 21 Oct 2011 16:09:29 +0000 (16:09 +0000)
projects/app.RemoteMCU/src/cConfiglationStorage.c [new file with mode: 0644]
projects/app.RemoteMCU/src/cConfiglationStorage.h [new file with mode: 0644]

diff --git a/projects/app.RemoteMCU/src/cConfiglationStorage.c b/projects/app.RemoteMCU/src/cConfiglationStorage.c
new file mode 100644 (file)
index 0000000..71fa829
--- /dev/null
@@ -0,0 +1,109 @@
+#include "NyLPC_flash.h"\r
+#include "NyLPC_httpService.h"\r
+#include "cConfiglationStorage.h"\r
+\r
+/**\r
+ * Onchip flashを使ったコンフィギュレーション保存システムです。\r
+ */\r
+\r
+\r
+\r
+\r
+#define IP2Int(a0,a1,a2,a3) ((0xff000000&(a0<<24))|(0x00ff0000&(a1<<16))|(0x0000ff00&(a2<<8))|(0x000000ff&(a3)))\r
+/**\r
+ * コンフィギュレーションの保存セクタ\r
+ */\r
+#define MIMIC_CONFIGLATION_FLASH_SECTOR 29\r
+#define MIMIC_CONFIGLATION_FLASH_SECTOR_ADDR 0x00078000\r
+\r
+/**\r
+ * コンフィギュレーション値はホストオーダーで保存する。\r
+ */\r
+const struct TMimicConfigulation factory_default=\r
+{\r
+       0xffffffff,\r
+       0x02010203,0x0405ffff,\r
+       IP2Int(192,168,0,39),\r
+       IP2Int(255,255,255,0),\r
+       IP2Int(192,168,0,254),\r
+       80,\r
+       0x0000FFFF\r
+};\r
+\r
+static NyLPC_TBool setUserConfigulation(void);\r
+static NyLPC_TBool hasUserConfigulation(void);\r
+\r
+/**\r
+ * ユーザコンフィギュレーションを更新する。\r
+ */\r
+NyLPC_TBool cConfiglationStorage_updateConfigulation(const struct TMimicConfigulation* i_congfiglation)\r
+{\r
+       NyLPC_TcOnchipFlashWriter_t s;\r
+       NyLPC_cOnchipFlashWriter_initialize(&s);\r
+       //イレース\r
+       if(!NyLPC_cOnchipFlashWriter_elase(&s,MIMIC_CONFIGLATION_FLASH_SECTOR,MIMIC_CONFIGLATION_FLASH_SECTOR)){\r
+               NyLPC_OnErrorGoto(Error);\r
+       }\r
+       //コンフィギュレーションを書き込む。\r
+       if(!NyLPC_cOnchipFlashWriter_writeSector(&s,MIMIC_CONFIGLATION_FLASH_SECTOR,0x00000000,i_congfiglation,sizeof(struct TMimicConfigulation))){\r
+               NyLPC_OnErrorGoto(Error);\r
+       }\r
+       //ユーザコンフィギュレーションをONにする。\r
+       if(setUserConfigulation()){\r
+               NyLPC_OnErrorGoto(Error);\r
+       }\r
+       NyLPC_cOnchipFlashWriter_finalize(&s);\r
+       return NyLPC_TBool_TRUE;\r
+Error:\r
+       NyLPC_cOnchipFlashWriter_finalize(&s);\r
+       return NyLPC_TBool_FALSE;\r
+}\r
+/**\r
+ * コンフィギュレーション値を返す。\r
+ */\r
+const struct TMimicConfigulation* cConfiglationStorage_loadMiMicConfigulation(void)\r
+{\r
+       if(hasUserConfigulation()){\r
+               //userコンフィギュレーション読むよ\r
+               return (const struct TMimicConfigulation*)(MIMIC_CONFIGLATION_FLASH_SECTOR_ADDR);\r
+       }else{\r
+               //Userコンフィギュレーションない\r
+               return &factory_default;\r
+       }\r
+}\r
+\r
+\r
+\r
+\r
+/**\r
+ * ユーザコンフィギュレーションが存在すると、true.\r
+ */\r
+static NyLPC_TBool hasUserConfigulation(void)\r
+{\r
+       volatile const NyLPC_TUInt32* fast_boot=&(factory_default.fast_boot);\r
+       return (*fast_boot)!=0xffffffff;\r
+}\r
+/**\r
+ * コンフィギュレーションモードを、ユーザコンフィギュレーションにセットする。\r
+ */\r
+static NyLPC_TBool setUserConfigulation(void)\r
+{\r
+       const NyLPC_TUInt32* volatile fast_boot=&(factory_default.fast_boot);\r
+       NyLPC_TUInt32 data=0xFFFFFFFE;\r
+       NyLPC_TcOnchipFlashWriter_t s;\r
+\r
+       if(*fast_boot==0xffffffff){\r
+               //フラグ値のアドレスが4バイトアライメントにあるFlashメモリか確認する。\r
+               if(((NyLPC_TUInt32)fast_boot)%4==0 && (!NyLPC_cOnchipFlashWriter_isOnchipFlash(fast_boot))){\r
+                       //書き込み\r
+                       NyLPC_cOnchipFlashWriter_initialize(&s);\r
+                       NyLPC_cOnchipFlashWriter_write(&s,fast_boot,&data,4);\r
+                       NyLPC_cOnchipFlashWriter_finalize(&s);\r
+               }else{\r
+                       //しくじった\r
+                       return NyLPC_TBool_FALSE;\r
+               }\r
+       }\r
+       return NyLPC_TBool_TRUE;\r
+}\r
+\r
diff --git a/projects/app.RemoteMCU/src/cConfiglationStorage.h b/projects/app.RemoteMCU/src/cConfiglationStorage.h
new file mode 100644 (file)
index 0000000..f8a1d7f
--- /dev/null
@@ -0,0 +1,40 @@
+/*\r
+ * cConfiglationStorage.h\r
+ *\r
+ *  Created on: 2011/10/18\r
+ *      Author: nyatla\r
+ */\r
+\r
+#ifndef CCONFIGLATIONSTORAGE_H_\r
+#define CCONFIGLATIONSTORAGE_H_\r
+/**\r
+ * IPアドレスはネットワークオーダーで格納する。\r
+ */\r
+struct TMimicConfigulation{\r
+       /**\r
+        * ROM焼検出用。0xFFFFFFFFを書く\r
+        */\r
+       NyLPC_TUInt32   fast_boot;\r
+       NyLPC_TUInt32   mac_00_01_02_03;\r
+       NyLPC_TUInt32   mac_04_05_xx_xx;\r
+       NyLPC_TUInt32   ipv4_addr_net;\r
+       NyLPC_TUInt32   ipv4_mask_net;\r
+       NyLPC_TUInt32   ipv4_drut_net;\r
+       NyLPC_TUInt32   ipv4_port;\r
+       NyLPC_TUInt32   accessmode;\r
+\r
+};\r
+\r
+/**\r
+ * ユーザコンフィギュレーションを更新する。\r
+ * この関数は、RTOSが停止中に実行すること。\r
+ */\r
+NyLPC_TBool cConfiglationStorage_updateConfigulation(const struct TMimicConfigulation* i_congfiglation);\r
+/**\r
+ * コンフィギュレーション値を返す。\r
+ * この関数は、RTOSが停止中に実行すること。\r
+ */\r
+const struct TMimicConfigulation* cConfiglationStorage_loadMiMicConfigulation(void);\r
+\r
+\r
+#endif /* CCONFIGLATIONSTORAGE_H_ */\r