1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include <global_param.h>
#include "mk_flash.h"
//#include "dw_app.h"
#include <string.h>
#define FLASH_IAP_CTRL_MAP        (uint32_t)0x0402E000    //the control map start address, 63K MK8000ÐÞ¸Ä
#define FLASH_Authorization_MAP  (uint32_t)0x0402f000 //ÊÚȨ±êÇ©ÁбíÆðʼµØÖ·
#define AUTHORIZATION_NUM 1024
uint32_t tag_id_authorization_list[AUTHORIZATION_NUM];
uint32_t tag_id_authorization_list_num;
uint16_t g_com_map[COM_MAP_SIZE];
uint8_t parameter_check(void)
{
//    if(g_com_map[0] != 0x55AA)
//    {
//        return 1;
//    }
//    if(g_com_map[COM_INTERVAL]<50||COM_INTERVAL>1000)
//    {
//        return 1;
//    }
//    if(g_com_map[POWER]>67)
//    {
//        return 1;
//    }
//    if(g_com_map[MOTOR_ENABLE]>1)
//    {
//        return 1;
//    }
//    if(g_com_map[IMU_ENABLE]>1)
//    {
//        return 1;
//    }
//    if(g_com_map[ACTIVE_INDEX]>1)
//    {
//        return 1;
//    }
    return 0;
}
uint32_t save_com_map_to_flash(void)
{
    uint32_t result = 0;
    if(parameter_check()) //²ÎÊý´íÎ󣬲»±£´æ
    {
        return 1;
    }
    __disable_irq();
    //result = FLASH_Prepare(FLASH_IAP_CTRL_MAP, (COM_MAP_SIZE<<1));MK8000ÐÞ¸Ä
    result=flash_open(FLASH_ID0,NULL);
    //MK8000ûÓжÔÓ¦º¯Êý
    if(!result) {
        flash_erase(FLASH_ID0,FLASH_Authorization_MAP,FLASH_SECTOR_SIZE);
        flash_write_nbytes(FLASH_ID0, FLASH_Authorization_MAP, (const uint8_t*)g_com_map, sizeof(g_com_map));
    }
    //flash_close(FLASH_ID0);
    __enable_irq();
    return result;
}
uint32_t save_taglist_map_to_flash(void)
{
    uint32_t result = 0;
    if(parameter_check()) //²ÎÊý´íÎ󣬲»±£´æ
    {
        return 1;
    }
    __disable_irq();
    //result = FLASH_Prepare(FLASH_IAP_CTRL_MAP, (COM_MAP_SIZE<<1));MK8000ÐÞ¸Ä
    result=flash_open(FLASH_ID0,NULL);
    //MK8000ûÓжÔÓ¦º¯Êý
    if(!result) {
        flash_erase(FLASH_ID0,FLASH_IAP_CTRL_MAP,FLASH_SECTOR_SIZE);
        flash_write_nbytes(FLASH_ID0, FLASH_IAP_CTRL_MAP, (const uint8_t*)tag_id_authorization_list, sizeof(tag_id_authorization_list));
        //result = FLASH_Write(FLASH_IAP_CTRL_MAP, (const uint8_t*)g_com_map, (COM_MAP_SIZE<<1));
    }
    //flash_close(FLASH_ID0);
    __enable_irq();
    return result;
}
void parameter_init(void)//×¢Òâ¿´Ç°ÃæÓÐûÓйرÕflashÈç¹ûÓÐÔò´ò¿ªflashÔÚ¶ÁÈ¡£¬·ñÔò»á³ö´í
{   flash_open(FLASH_ID0,NULL);
    //FLASH_Read(FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, (COM_MAP_SIZE<<1));MK8000ÐÞ¸Ä
    flash_read(FLASH_ID0, FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, sizeof(g_com_map));
    if(g_com_map[0] != 0x55AA)//µÚÒ»´ÎûÓÐÈκÎÊý¾ÝµÄ»°¾ÍĬÈÏÕâ¸ö
    {
        g_com_map[0] = 0x55AA;
        g_com_map[DEV_ID] =0x1234;//DEFAULT_DEV_ID;    //ĬÈÏÉ豸ID
 
        g_com_map[COM_INTERVAL]=200;   //ƵÂÊ2HZ
        g_com_map[MAX_REPORT_ANC_NUM]=10;
        g_com_map[GROUP_ID]=0;
        g_com_map[DIST_OFFSET]=-31;
 
        g_com_map[DEV_ROLE] =0x1;  //±êÇ©
 
 
        g_com_map[HEARTBEAT]=0;
 
        g_com_map[POWER]=67;    //·¢É书ÂÊ
        g_com_map[IMU_THRES]=2;
        g_com_map[NOMOVESLEEP_TIME]=120;   //¾²Ö¹ÐÝÃß2·ÖÖÓ
        g_com_map[MOTOR_ENABLE]=1;       //Õ𶯵ç»úʹÄÜ
        g_com_map[IMU_ENABLE]=1;        //¾²Ö¹ÐÝÃßʹÄÜ
 
        g_com_map[CNT_RESTART]=0;
        g_com_map[CNT_REBOOT]=0;
        g_com_map[CNT_UPDATE]=0;
        g_com_map[MOTOR_ONTIME_INDEX]=10;
        g_com_map[ACTIVE_INDEX]=0;
 
        g_com_map[TCP_IP_0]=0x111;
        g_com_map[TCP_IP_0]=0x198;
        g_com_map[TCP_IP_0]=0x60; 
        g_com_map[TCP_IP_0]=0x6;
        g_com_map[TCP_IP_0]=1234;
        
        g_com_map[HEIGHTOFFEST_INDEX]=0;
        save_com_map_to_flash();
    }
    
        
}
 
uint32_t check_tag_id_authorization_list_num(void)
{
    uint32_t count = 0;
    
    for (uint32_t i = 0; i < AUTHORIZATION_NUM; i++) {
        if (tag_id_authorization_list[i] != 0) {
            count++;
        }
    }
    
    return count;
}
void parameter_init_anchor(void)
{
    flash_open(FLASH_ID0,NULL);
    //FLASH_Read(FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, (COM_MAP_SIZE<<1));MK8000ÐÞ¸Ä
    flash_read(FLASH_ID0, FLASH_IAP_CTRL_MAP, (uint8_t*)&g_com_map, sizeof(g_com_map));
    if(g_com_map[0] != 0x55AA)//µÚÒ»´ÎûÓÐÈκÎÊý¾ÝµÄ»°¾ÍĬÈÏÕâ¸ö
    {
        g_com_map[0] = 0x55AA;
        g_com_map[DEV_ID] =0x1234;//DEFAULT_DEV_ID;    //ĬÈÏÉ豸ID
 
        g_com_map[COM_INTERVAL]=200;   //ƵÂÊ2HZ
        g_com_map[MAX_REPORT_ANC_NUM]=10;
        g_com_map[GROUP_ID]=0;
        g_com_map[DIST_OFFSET]=-31;
 
        g_com_map[DEV_ROLE] =0x0;  //»ùÕ¾
 
 
        g_com_map[HEARTBEAT]=0;
 
        g_com_map[POWER]=67;    //·¢É书ÂÊ
        g_com_map[IMU_THRES]=2;
        g_com_map[NOMOVESLEEP_TIME]=120;   //¾²Ö¹ÐÝÃß2·ÖÖÓ
        g_com_map[MOTOR_ENABLE]=1;       //Õ𶯵ç»úʹÄÜ
        g_com_map[IMU_ENABLE]=1;        //¾²Ö¹ÐÝÃßʹÄÜ
 
        g_com_map[CNT_RESTART]=0;
        g_com_map[CNT_REBOOT]=0;
        g_com_map[CNT_UPDATE]=0;
        g_com_map[MODBUS_MODE]=0;
        g_com_map[ACTIVE_INDEX]=0;
 
        g_com_map[TCP_IP_0]=0x111;
        g_com_map[TCP_IP_1]=0x198;
        g_com_map[TCP_IP_2]=0x60; 
        g_com_map[TCP_IP_3]=0x6;
        g_com_map[TCP_PORT]=0x1234;
        
        g_com_map[HEIGHTOFFEST_INDEX]=0;
        save_com_map_to_flash();
    }
        //ÐÂÔöÉϵç»ñÈ¡ÊÚȨ±êÇ©Áбí
        flash_read(FLASH_ID0, FLASH_Authorization_MAP, (uint8_t*)&tag_id_authorization_list, sizeof(tag_id_authorization_list));//´ÓflashÖÐÄóöÀ´ÊÚȨ±í
        tag_id_authorization_list_num=check_tag_id_authorization_list_num();//»ñȡʵ¼ÊÓÐЧ³¤¶È¼õÉÙÂÖѵ¿ªÏú
}