Modularize main.c into rgb, event, database, ui, system, and app_manager modules
This commit is contained in:
140
App/database.c
Normal file
140
App/database.c
Normal file
@@ -0,0 +1,140 @@
|
||||
#include "database.h"
|
||||
|
||||
#define IAP_CMD_READ 1
|
||||
#define IAP_CMD_WRITE 2
|
||||
#define IAP_CMD_ERASE 3
|
||||
|
||||
// 定义全局常量数组
|
||||
char *code sensor_names_fr[5] = {
|
||||
"PORTE",
|
||||
"PIR",
|
||||
"FUMEE",
|
||||
"GAZ",
|
||||
"EAU"
|
||||
};
|
||||
|
||||
void IAP_Disable(void)
|
||||
{
|
||||
IAP_CONTR = 0;
|
||||
IAP_CMD = 0;
|
||||
IAP_TRIG = 0;
|
||||
IAP_ADDRH = 0xff;
|
||||
IAP_ADDRL = 0xff;
|
||||
}
|
||||
|
||||
u8 IAP_ReadByte(u16 addr)
|
||||
{
|
||||
IAP_CONTR = 0x80;
|
||||
IAP_TPS = (u8)(MAIN_Fosc / 1000000UL);
|
||||
IAP_CMD = IAP_CMD_READ;
|
||||
IAP_ADDRL = (u8)addr;
|
||||
IAP_ADDRH = (u8)(addr >> 8);
|
||||
IAP_ADDRE = 0;
|
||||
IAP_TRIG = 0x5a;
|
||||
IAP_TRIG = 0xa5;
|
||||
_nop_(); _nop_(); _nop_(); _nop_();
|
||||
IAP_Disable();
|
||||
return IAP_DATA;
|
||||
}
|
||||
|
||||
void IAP_WriteByte(u16 addr, u8 dat)
|
||||
{
|
||||
IAP_CONTR = 0x80;
|
||||
IAP_TPS = (u8)(MAIN_Fosc / 1000000UL);
|
||||
IAP_CMD = IAP_CMD_WRITE;
|
||||
IAP_ADDRL = (u8)addr;
|
||||
IAP_ADDRH = (u8)(addr >> 8);
|
||||
IAP_ADDRE = 0;
|
||||
IAP_DATA = dat;
|
||||
IAP_TRIG = 0x5a;
|
||||
IAP_TRIG = 0xa5;
|
||||
_nop_(); _nop_(); _nop_(); _nop_();
|
||||
IAP_Disable();
|
||||
}
|
||||
|
||||
void IAP_EraseSector(u16 addr)
|
||||
{
|
||||
IAP_CONTR = 0x80;
|
||||
IAP_TPS = (u8)(MAIN_Fosc / 1000000UL);
|
||||
IAP_CMD = IAP_CMD_ERASE;
|
||||
IAP_ADDRL = (u8)addr;
|
||||
IAP_ADDRH = (u8)(addr >> 8);
|
||||
IAP_ADDRE = 0;
|
||||
IAP_TRIG = 0x5a;
|
||||
IAP_TRIG = 0xa5;
|
||||
_nop_(); _nop_(); _nop_(); _nop_();
|
||||
IAP_Disable();
|
||||
}
|
||||
|
||||
void Load_Database(void)
|
||||
{
|
||||
u16 addr = 0;
|
||||
u8 *ptr = (u8 *)&sensor_list;
|
||||
u16 size = sizeof(sensor_list);
|
||||
u16 i;
|
||||
for (i = 0; i < size; i++) {
|
||||
ptr[i] = IAP_ReadByte(addr++);
|
||||
}
|
||||
}
|
||||
|
||||
void Save_Database(void)
|
||||
{
|
||||
u16 addr = 0;
|
||||
u8 *ptr = (u8 *)&sensor_list;
|
||||
u16 size = sizeof(sensor_list);
|
||||
u16 i;
|
||||
IAP_EraseSector(0);
|
||||
for (i = 0; i < size; i++) {
|
||||
IAP_WriteByte(addr++, ptr[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void Add_Sensor_With_Zone(u32 addr, u8 type, u8 zone)
|
||||
{
|
||||
u8 i;
|
||||
u8 slot_to_use = 15;
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (sensor_list[i].is_used == 0x01) {
|
||||
u32 existing_addr = ((u32)sensor_list[i].addr[0] << 16) |
|
||||
((u32)sensor_list[i].addr[1] << 8) |
|
||||
sensor_list[i].addr[2];
|
||||
if (existing_addr == addr) {
|
||||
slot_to_use = i;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
slot_to_use = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
sensor_list[slot_to_use].is_used = 0x01;
|
||||
sensor_list[slot_to_use].addr[0] = (u8)(addr >> 16);
|
||||
sensor_list[slot_to_use].addr[1] = (u8)(addr >> 8);
|
||||
sensor_list[slot_to_use].addr[2] = (u8)addr;
|
||||
sensor_list[slot_to_use].type = type;
|
||||
sensor_list[slot_to_use].zone = zone;
|
||||
|
||||
for (i = 0; i < 15; i++) {
|
||||
sensor_list[slot_to_use].name_gbk[i] = sensor_names_fr[type][i];
|
||||
if (sensor_names_fr[type][i] == '\0') break;
|
||||
}
|
||||
sensor_list[slot_to_use].name_gbk[15] = '\0';
|
||||
Save_Database();
|
||||
}
|
||||
|
||||
bit Check_Sensor_ID(u32 addr, u8 *out_slot_index)
|
||||
{
|
||||
u8 i;
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (sensor_list[i].is_used == 0x01) {
|
||||
u32 slot_addr = ((u32)sensor_list[i].addr[0] << 16) |
|
||||
((u32)sensor_list[i].addr[1] << 8) |
|
||||
sensor_list[i].addr[2];
|
||||
if (slot_addr == addr) {
|
||||
*out_slot_index = i;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user