1 #include "NyLPC_flash.h"
\r
2 #include "NyLPC_httpService.h"
\r
3 #include "NyLPC_cMiMicConfiglation.h"
\r
6 * Onchip flashを使ったコンフィギュレーション保存システムです。
\r
12 #define IP2Int(a0,a1,a2,a3) ((0xff000000&(a0<<24))|(0x00ff0000&(a1<<16))|(0x0000ff00&(a2<<8))|(0x000000ff&(a3)))
\r
16 #define MIMIC_CONFIGLATION_FLASH_SECTOR 29
\r
17 #define MIMIC_CONFIGLATION_FLASH_SECTOR_ADDR 0x00078000
\r
20 * コンフィギュレーション値はホストオーダーで保存する。
\r
22 const struct NyLPC_TMimicConfigulation factory_default=
\r
25 0x02010203,0x0405ffff,
\r
26 IP2Int(192,168,0,39),
\r
27 IP2Int(255,255,255,0),
\r
28 IP2Int(192,168,0,254),
\r
33 static NyLPC_TBool setUserConfigulation(void);
\r
34 static NyLPC_TBool hasUserConfigulation(void);
\r
37 * ユーザコンフィギュレーションを更新する。
\r
38 * この関数をコールするときは、割込/FreeRTOSを一時停止すること。
\r
40 NyLPC_TBool NyLPC_cMiMicConfiglation_updateConfigulation(const struct NyLPC_TMimicConfigulation* i_congfiglation)
\r
42 NyLPC_TcOnchipFlashWriter_t s;
\r
43 NyLPC_cOnchipFlashWriter_initialize(&s);
\r
45 if(!NyLPC_cOnchipFlashWriter_elase(&s,MIMIC_CONFIGLATION_FLASH_SECTOR,MIMIC_CONFIGLATION_FLASH_SECTOR)){
\r
46 NyLPC_OnErrorGoto(Error);
\r
49 if(!NyLPC_cOnchipFlashWriter_writeSector(&s,MIMIC_CONFIGLATION_FLASH_SECTOR,0x00000000,i_congfiglation,sizeof(struct NyLPC_TMimicConfigulation))){
\r
50 NyLPC_OnErrorGoto(Error);
\r
52 //ユーザコンフィギュレーションをONにする。
\r
53 if(!setUserConfigulation()){
\r
54 NyLPC_OnErrorGoto(Error);
\r
56 NyLPC_cOnchipFlashWriter_finalize(&s);
\r
57 return NyLPC_TBool_TRUE;
\r
59 NyLPC_cOnchipFlashWriter_finalize(&s);
\r
60 return NyLPC_TBool_FALSE;
\r
65 const struct NyLPC_TMimicConfigulation* NyLPC_cMiMicConfiglation_loadMiMicConfigulation(void)
\r
67 if(hasUserConfigulation()){
\r
68 //userコンフィギュレーション読むよ
\r
69 return (const struct NyLPC_TMimicConfigulation*)(MIMIC_CONFIGLATION_FLASH_SECTOR_ADDR);
\r
72 return &factory_default;
\r
80 * ユーザコンフィギュレーションが存在すると、true.
\r
82 static NyLPC_TBool hasUserConfigulation(void)
\r
84 volatile const NyLPC_TUInt32* fast_boot=&(factory_default.fast_boot);
\r
85 return (*fast_boot)!=0xffffffff;
\r
88 * コンフィギュレーションモードを、ユーザコンフィギュレーションにセットする。
\r
90 static NyLPC_TBool setUserConfigulation(void)
\r
92 const NyLPC_TUInt32* volatile fast_boot=&(factory_default.fast_boot);
\r
93 NyLPC_TUInt32 data=0xFFFFFFFE;
\r
94 NyLPC_TcOnchipFlashWriter_t s;
\r
96 if(*fast_boot==0xffffffff){
\r
97 //フラグ値のアドレスが4バイトアライメントにあるFlashメモリか確認する。
\r
98 if(((NyLPC_TUInt32)fast_boot)%4==0 && (!NyLPC_cOnchipFlashWriter_isOnchipFlash(fast_boot))){
\r
100 NyLPC_cOnchipFlashWriter_initialize(&s);
\r
101 NyLPC_cOnchipFlashWriter_write(&s,fast_boot,&data,4);
\r
102 NyLPC_cOnchipFlashWriter_finalize(&s);
\r
105 return NyLPC_TBool_FALSE;
\r
108 return NyLPC_TBool_TRUE;
\r