配置块的大小,只有第一次能够修改,以后即使废弃也不能修改,仅仅清空名称
This commit is contained in:
parent
edf407cc67
commit
73a98811d4
34
Config.cpp
34
Config.cpp
|
@ -56,11 +56,17 @@ bool ConfigBlock::Init(const char* name, const ByteArray& bs)
|
||||||
uint slen = strlen(name);
|
uint slen = strlen(name);
|
||||||
if(slen > sizeof(Name)) return false;
|
if(slen > sizeof(Name)) return false;
|
||||||
|
|
||||||
Size = bs.Length();
|
//Size = bs.Length();
|
||||||
|
|
||||||
if(slen > ArrayLength(Name)) slen = ArrayLength(Name);
|
if(slen > ArrayLength(Name)) slen = ArrayLength(Name);
|
||||||
memset(Name, 0, ArrayLength(Name));
|
memset(Name, 0, ArrayLength(Name));
|
||||||
memcpy(Name, name, slen);
|
|
||||||
|
// 配置块的大小,只有第一次能够修改,以后即使废弃也不能修改,仅仅清空名称
|
||||||
|
if(bs.Length() > 0)
|
||||||
|
{
|
||||||
|
Size = bs.Length();
|
||||||
|
memcpy(Name, name, slen);
|
||||||
|
}
|
||||||
|
|
||||||
HeaderCRC = GetHash();
|
HeaderCRC = GetHash();
|
||||||
|
|
||||||
|
@ -96,7 +102,7 @@ Config::Config(Storage* st, uint addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 循环查找配置块
|
// 循环查找配置块
|
||||||
const void* Config::Find(const char* name, bool fAppend)
|
const void* Config::Find(const char* name, int size)
|
||||||
{
|
{
|
||||||
uint c_Version = 0x534F5453; // STOS
|
uint c_Version = 0x534F5453; // STOS
|
||||||
|
|
||||||
|
@ -106,7 +112,7 @@ const void* Config::Find(const char* name, bool fAppend)
|
||||||
// 检查签名,如果不存在则写入
|
// 检查签名,如果不存在则写入
|
||||||
if(*(uint*)addr != c_Version)
|
if(*(uint*)addr != c_Version)
|
||||||
{
|
{
|
||||||
if(!fAppend) return NULL;
|
if(!size) return NULL;
|
||||||
|
|
||||||
Device->Write(addr, ByteArray(&c_Version, sizeof(c_Version)));
|
Device->Write(addr, ByteArray(&c_Version, sizeof(c_Version)));
|
||||||
}
|
}
|
||||||
|
@ -125,7 +131,19 @@ const void* Config::Find(const char* name, bool fAppend)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果需要添加,返回最后一个非法块的地址
|
// 如果需要添加,返回最后一个非法块的地址
|
||||||
return fAppend ? cfg : NULL;
|
//return fAppend ? cfg : NULL;
|
||||||
|
|
||||||
|
if(!size) return NULL;
|
||||||
|
|
||||||
|
// 找一块合适的区域
|
||||||
|
while(cfg->Valid())
|
||||||
|
{
|
||||||
|
if(cfg->Name[0] && cfg->Size == size) return cfg;
|
||||||
|
|
||||||
|
cfg = cfg->Next();
|
||||||
|
}
|
||||||
|
|
||||||
|
return cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 废弃
|
// 废弃
|
||||||
|
@ -141,7 +159,7 @@ const void* Config::Set(const char* name, const ByteArray& bs)
|
||||||
|
|
||||||
assert_param2(Device, "未指定配置段的存储设备");
|
assert_param2(Device, "未指定配置段的存储设备");
|
||||||
|
|
||||||
const ConfigBlock* cfg = (const ConfigBlock*)Find(name, bs.Length() > 0);
|
const ConfigBlock* cfg = (const ConfigBlock*)Find(name, bs.Length());
|
||||||
if(cfg)
|
if(cfg)
|
||||||
{
|
{
|
||||||
// 重新搞一个配置头,使用新的数据去重新初始化
|
// 重新搞一个配置头,使用新的数据去重新初始化
|
||||||
|
@ -160,7 +178,7 @@ bool Config::Get(const char* name, ByteArray& bs)
|
||||||
{
|
{
|
||||||
if(name == NULL) return false;
|
if(name == NULL) return false;
|
||||||
|
|
||||||
const ConfigBlock* cfg = (const ConfigBlock*)Find(name, false);
|
const ConfigBlock* cfg = (const ConfigBlock*)Find(name, 0);
|
||||||
if(cfg && cfg->Size > 0 && cfg->Size <= bs.Capacity())
|
if(cfg && cfg->Size > 0 && cfg->Size <= bs.Capacity())
|
||||||
{
|
{
|
||||||
bs.Copy(cfg->Data(), 0, cfg->Size);
|
bs.Copy(cfg->Data(), 0, cfg->Size);
|
||||||
|
@ -176,7 +194,7 @@ const void* Config::Get(const char* name)
|
||||||
{
|
{
|
||||||
if(name == NULL) return NULL;
|
if(name == NULL) return NULL;
|
||||||
|
|
||||||
const ConfigBlock* cfg = (const ConfigBlock*)Find(name, false);
|
const ConfigBlock* cfg = (const ConfigBlock*)Find(name, 0);
|
||||||
if(cfg && cfg->Size) return cfg->Data();
|
if(cfg && cfg->Size) return cfg->Data();
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
4
Config.h
4
Config.h
|
@ -17,8 +17,8 @@ public:
|
||||||
|
|
||||||
Config(Storage* st, uint addr);
|
Config(Storage* st, uint addr);
|
||||||
|
|
||||||
// 查找
|
// 查找。size不为0时表示要查找该大小的合适配置块
|
||||||
const void* Find(const char* name, bool fAppend = false);
|
const void* Find(const char* name, int size = 0);
|
||||||
// 废弃。仅清空名称,并不删除数据区
|
// 废弃。仅清空名称,并不删除数据区
|
||||||
bool Invalid(const char* name);
|
bool Invalid(const char* name);
|
||||||
// 设置配置数据
|
// 设置配置数据
|
||||||
|
|
|
@ -571,13 +571,12 @@ void TinyServer::SaveDevices()
|
||||||
|
|
||||||
void TinyServer::ClearDevices()
|
void TinyServer::ClearDevices()
|
||||||
{
|
{
|
||||||
debug_printf("TinyServer::ClearDevices:设备区清零!\r\n");
|
|
||||||
// 最后4k的位置作为存储位置
|
// 最后4k的位置作为存储位置
|
||||||
uint addr = 0x8000000 + (Sys.FlashSize << 10) - (4 << 10);
|
uint addr = 0x8000000 + (Sys.FlashSize << 10) - (4 << 10);
|
||||||
Flash flash;
|
Flash flash;
|
||||||
Config cfg(&flash, addr);
|
Config cfg(&flash, addr);
|
||||||
|
|
||||||
debug_printf("TinyServer::ClearDevices 重置设备列表 0x%08X \r\n", addr);
|
debug_printf("TinyServer::ClearDevices 清空设备列表 0x%08X \r\n", addr);
|
||||||
|
|
||||||
cfg.Invalid("Devs");
|
cfg.Invalid("Devs");
|
||||||
|
|
||||||
|
@ -627,7 +626,7 @@ void TinyServer::SaveConfig()
|
||||||
|
|
||||||
void TinyServer::ClearConfig()
|
void TinyServer::ClearConfig()
|
||||||
{
|
{
|
||||||
debug_printf("TinyServer::ClearDevices:设备区清零!\r\n");
|
debug_printf("TinyServer::ClearDevices 设备区清零!\r\n");
|
||||||
// 最后4k的位置作为存储位置
|
// 最后4k的位置作为存储位置
|
||||||
uint addr = 0x8000000 + (Sys.FlashSize << 10) - (4 << 10);
|
uint addr = 0x8000000 + (Sys.FlashSize << 10) - (4 << 10);
|
||||||
Flash flash;
|
Flash flash;
|
||||||
|
@ -639,5 +638,3 @@ void TinyServer::ClearConfig()
|
||||||
|
|
||||||
Devices.Clear();
|
Devices.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1101,7 +1101,7 @@ namespace NewLife.Reflection
|
||||||
|
|
||||||
var ss = new String[] { "bak", "dep", "txt", "ini", "htm" };
|
var ss = new String[] { "bak", "dep", "txt", "ini", "htm" };
|
||||||
var list = new List<String>(ss);
|
var list = new List<String>(ss);
|
||||||
list.Add(Environment.UserName);
|
//list.Add(Environment.UserName);
|
||||||
|
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue