This commit is contained in:
moyuhai
2026-06-09 16:39:17 +08:00
commit 41a602f89c
3057 changed files with 771495 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
#ifndef __APP_H
#define __APP_H
#include "mtypes.h"
#include "hal_api.h"
#include "func.h"
#define LAMPTYPE 0x95
#define ID_MAP1 0
#define ID_MAP2 0
#define ID_MAP3 1
#define ID_MAP4 2
#define ID_MAP5 3
#define ID_MAP6 4
#define ID_MAP7 5
#define ID_MAP8 6
enum _param_type_t {
PARAM1,
PARAM2,
PARAM3,
PARAM4,
PARAM5,
PARAM6,
PARAM7,
PARAM8,
PARAM9,
PARAM10,
PARAM11,
PARAM12,
PARAM13,
};
typedef struct _param_t {
uint8_t aa;
uint8_t bb;
uint8_t cc;
uint8_t dd;
uint8_t ee[4];
uint8_t ff[4];
uint8_t gg[12];
configa_t ca;
configb_t cb;
configc_t cd;
configd_t ce;
confige_t cf;
uint8_t cg[8][4];
}param_t;
extern param_t param;
extern setting_t settinga;
extern setting_t settingb;
extern setting_t settingc;
extern cfga_t cfga;
extern cfgb_t cfgb;
extern cfgc_t cfgc;
//main.c
extern mftest_t mftest;
extern uint16_t ccctime;
extern uint8_t radar_setting(uint8_t *data, uint8_t save);
//app_light.c
extern configa_t lampcfg;
extern void light_init(void);
extern void light_tick(void);
extern void light_loop(void);
extern void light_process_100ms(void);
extern void light_set_mode(uint8_t *data, uint8_t save);
extern void light_set_color(uint8_t *data, uint8_t save);
extern void light_get_mode(uint8_t *data);
extern void light_set_trig(void);
extern void light_blink(uint32_t cycle, uint16_t times, uint8_t type);
extern uint16_t light_nowout(void);
//app_rad.c
extern uint16_t tttimes;
extern void rad_init(void);
extern void rad_tick(void);
extern void rad_loop(void);
extern void rad_100ms(void);
extern void rad_minute(void);
extern void rad_sethh(void);
extern void rad_setout(uint8_t type, uint8_t wait);
extern void rad_setled(uint16_t wait);
extern uint8_t rad_getstat(void);
extern uint32_t rad_getcount(void);
//app_store.h
extern void store_init(void);
extern void store_process_100ms(void);
extern void store_write_param(uint8_t type, uint8_t *data);
extern void store_clear_map(uint8_t mapid);
extern void store_write_map(uint8_t mapid, uint8_t *data);
extern void store_read_map(uint8_t mapid, uint8_t *data);
extern void store_setfl(uint8_t number);
#endif
@@ -0,0 +1,494 @@
#include "check.h"
//获取校验长度
uint8_t check_size(uint8_t type)
{
uint8_t size = 0;
switch(type)
{
case CHECK_SUM8:
case CHECK_XOR8:
case CHECK_CRC8_MAXIM:
size = 1;
break;
case CHECK_CRC16_MODBUS:
size = 2;
break;
}
return size;
}
//获取校验值
uint32_t check_value(check_t check, uint8_t *data)
{
uint32_t value = 0; //校验值
switch(check.type)
{
case CHECK_SUM8:
value = CHECKSUM8(data+check.start, check.length);
break;
case CHECK_XOR8:
value = XOR8(data+check.start, check.length);
break;
case CHECK_CRC8_MAXIM:
value = CRC8_MAXIM(data+check.start, check.length);
break;
case CHECK_CRC16_MODBUS:
value = CRC16_MODBUS(data+check.start, check.length);
break;
}
return value;
}
//计算并比较校验
uint8_t check_cmp(check_t check, uint8_t *data)
{
if(check.length > 0)
{
uint8_t size = check_size(check.type); //校验长度
uint32_t value = check_value(check, data); //校验值
switch(size)
{
case 1: //1字节校验
if(data[check.index] == (value&0xFF))
{
return 1;
}
break;
case 2: //2字节校验
if((data[check.index] == (value&0xFF)) && (data[check.index+1] == ((value>>8)&0xFF)))
{
return 1;
}
break;
}
}
return 0;
}
//计算并添加校验
void check_add(check_t check, uint8_t *data)
{
if(check.length > 0)
{
uint8_t size = check_size(check.type); //校验长度
uint32_t value = check_value(check, data); //校验值
switch(size)
{
case 1: //1字节校验
data[check.index] = value & 0xFF;
break;
case 2: //2字节校验
data[check.index] = value & 0xFF;
data[check.index+1] = (value>>8) & 0xFF;
break;
}
}
}
//校验和
uint8_t CHECKSUM8(const uint8_t *data, uint16_t length)
{
uint8_t sum = 0;
while(length--)
{
sum += *data++;
}
return (sum);
}
//异或校验
uint8_t XOR8(const uint8_t *data, uint16_t length)
{
uint8_t x = 0;
while(length--)
{
x ^= *data++;
}
return (x);
}
/*************************************************
* CRC-8: X8+X2+X+1
* POLY: 0x07
* INIT: 0x00
* REFIN: FALSE
* REFOUT: FALSE
* XOROUT: 0x00
**************************************************/
uint8_t CRC8(const uint8_t *data, uint16_t length)
{
uint8_t crc = 0x00;
uint8_t poly = 0x07;
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x80)
crc = (crc << 1) ^ poly;
else
crc = crc << 1;
}
}
return (crc);
}
/*************************************************
* CRC-8/ITU: X8+X2+X+1
* POLY: 0x07
* INIT: 0x00
* REFIN: FALSE
* REFOUT: FALSE
* XOROUT: 0x55
**************************************************/
uint8_t CRC8_ITU(const uint8_t *data, uint16_t length)
{
uint8_t crc = 0x00;
uint8_t poly = 0x07;
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x80)
crc = (crc << 1) ^ poly;
else
crc = crc << 1;
}
}
return (crc ^ 0x55);
}
/*************************************************
* CRC-8/ROHC: X8+X2+X+1
* POLY: 0x07
* INIT: 0xFF
* REFIN: TRUE
* REFOUT: TRUE
* XOROUT: 0x00
**************************************************/
uint8_t CRC8_ROHC(const uint8_t *data, uint16_t length)
{
uint8_t crc = 0xFF;
uint8_t poly = 0xE0; //0x07字节颠倒后为0xE0
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x01)
crc = (crc >> 1) ^ poly;
else
crc = crc >> 1;
}
}
return (crc);
}
/*************************************************
* CRC-8/MAXIM: X8+X2+X+1
* POLY: 0x31
* INIT: 0x00
* REFIN: TRUE
* REFOUT: TRUE
* XOROUT: 0x00
**************************************************/
uint8_t CRC8_MAXIM(const uint8_t *data, uint16_t length)
{
uint8_t crc = 0x00;
uint8_t poly = 0x8C; //0x31字节颠倒后为0x8C
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x01)
crc = (crc >> 1) ^ poly;
else
crc = crc >> 1;
}
}
return (crc);
}
/*************************************************
* CRC-8: X8+X4+X3+X2+1
* POLY: 0x1D
* INIT: 0x00
* REFIN: FALSE
* REFOUT: FALSE
* XOROUT: 0x00
**************************************************/
uint8_t CRC8_SAE(const uint8_t *data, uint16_t length)
{
uint8_t crc = 0x00;
uint8_t poly = 0x1D;
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x80)
crc = (crc << 1) ^ poly;
else
crc = crc << 1;
}
}
return (crc);
}
/*************************************************
* CRC-16/CCITT: X16+X12+X5+1
* POLY: 0x1021
* INIT: 0x0000
* REFIN: TRUE
* REFOUT: TRUE
* XOROUT: 0x0000
**************************************************/
uint16_t CRC16_CCITT(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0x0000;
uint16_t poly = 0x8408; //0x1021字节颠倒后为0x8408
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x01)
crc = (crc >> 1) ^ poly;
else
crc = crc >> 1;
}
}
return (crc);
}
/*************************************************
* CRC-16/CCITT-FALSE: X16+X12+X5+1
* POLY: 0x1021
* INIT: 0xFFFF
* REFIN: FALSE
* REFOUT: FALSE
* XOROUT: 0x0000
**************************************************/
uint16_t CRC16_CCITT_FALSE(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0xFFFF;
uint16_t poly = 0x1021;
while(length--)
{
crc ^= ((*data++) << 8);
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x8000)
crc = (crc << 1) ^ poly;
else
crc = crc << 1;
}
}
return (crc);
}
/*************************************************
* CRC-16/XMODEM: X16+X12+X5+1
* POLY: 0x1021
* INIT: 0x0000
* REFIN: FALSE
* REFOUT: FALSE
* XOROUT: 0x0000
**************************************************/
uint16_t CRC16_XMODEM(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0x0000;
uint16_t poly = 0x1021;
while(length--)
{
crc ^= ((*data++) << 8);
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x8000)
crc = (crc << 1) ^ poly;
else
crc = crc << 1;
}
}
return (crc);
}
/*************************************************
* CRC-16/X25: X16+X12+X5+1
* POLY: 0x1021
* INIT: 0xFFFF
* REFIN: TRUE
* REFOUT: TRUE
* XOROUT: 0xFFFF
**************************************************/
uint16_t CRC16_X25(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0xFFFF;
uint16_t poly = 0x8408; //0x1021字节颠倒后为0x8408
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x01)
crc = (crc >> 1) ^ poly;
else
crc = crc >> 1;
}
}
return (crc^0xFFFF);
}
/*************************************************
* CRC-16/MODBUS: X16+X12+X5+1
* POLY: 0x8005
* INIT: 0xFFFF
* REFIN: TRUE
* REFOUT: TRUE
* XOROUT: 0x0000
**************************************************/
uint16_t CRC16_MODBUS(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0xFFFF;
uint16_t poly = 0xA001; //0x8005字节颠倒后为0xA001
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x01)
crc = (crc >> 1) ^ poly;
else
crc = crc >> 1;
}
}
return (crc);
}
/*************************************************
* CRC-16/IBM: X16+X12+X5+1
* POLY: 0x8005
* INIT: 0x0000
* REFIN: TRUE
* REFOUT: TRUE
* XOROUT: 0x0000
**************************************************/
uint16_t CRC16_IBM(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0x0000;
uint16_t poly = 0xA001; //0x8005字节颠倒后为0xA001
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x01)
crc = (crc >> 1) ^ poly;
else
crc = crc >> 1;
}
}
return (crc);
}
/*************************************************
* CRC-16/MAXIM: X16+X12+X5+1
* POLY: 0x8005
* INIT: 0x0000
* REFIN: TRUE
* REFOUT: TRUE
* XOROUT: 0xFFFF
**************************************************/
uint16_t CRC16_MAXIM(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0x0000;
uint16_t poly = 0xA001; //0x8005字节颠倒后为0xA001
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x01)
crc = (crc >> 1) ^ poly;
else
crc = crc >> 1;
}
}
return (crc^0xFFFF);
}
/*************************************************
* CRC-16/USB: X16+X12+X5+1
* POLY: 0x8005
* INIT: 0xFFFF
* REFIN: TRUE
* REFOUT: TRUE
* XOROUT: 0xFFFF
**************************************************/
uint16_t CRC16_USB(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0xFFFF;
uint16_t poly = 0xA001; //0x8005字节颠倒后为0xA001
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x01)
crc = (crc >> 1) ^ poly;
else
crc = crc >> 1;
}
}
return (crc^0xFFFF);
}
/*************************************************
* CRC-16/NDP: X16+X12+X5+1
* POLY: 0x3D65
* INIT: 0x0000
* REFIN: TRUE
* REFOUT: TRUE
* XOROUT: 0xFFFF
**************************************************/
uint16_t CRC16_NDP(const uint8_t *data, uint16_t length)
{
uint16_t crc = 0x0000;
uint16_t poly = 0xA6BC; //0x3D65字节颠倒后为0xA6BC
while(length--)
{
crc ^= *data++;
for(uint8_t i = 0; i < 8; i++)
{
if(crc & 0x01)
crc = (crc >> 1) ^ poly;
else
crc = crc >> 1;
}
}
return (crc^0xFFFF);
}
@@ -0,0 +1,46 @@
#ifndef __CHECK_H
#define __CHECK_H
#include <stdint.h>
//¶¨ÒåУÑéÀàÐÍ
enum _checktype_t
{
CHECK_SUM8,
CHECK_XOR8,
CHECK_CRC8_MAXIM,
CHECK_CRC16_MODBUS,
};
//¶¨ÒåУÑé¸ñʽ
typedef struct _check_t {
uint8_t type; //УÑéÀàÐÍ
uint8_t start; //УÑéÆðʼλÖÃ
uint8_t length;//УÑ鳤¶È
uint8_t index; //УÑéֵλÖÃ
}check_t;
extern uint8_t check_size(uint8_t type);
extern uint8_t check_cmp(check_t check, uint8_t *data);
extern void check_add(check_t check, uint8_t *data);
extern uint8_t CHECKSUM8(const uint8_t *data, uint16_t length);
extern uint8_t XOR8(const uint8_t *data, uint16_t length);
extern uint8_t CRC8(const uint8_t *data, uint16_t length);
extern uint8_t CRC8_ITU(const uint8_t *data, uint16_t length);
extern uint8_t CRC8_ROHC(const uint8_t *data, uint16_t length);
extern uint8_t CRC8_MAXIM(const uint8_t *data, uint16_t length);
extern uint8_t CRC8_SAE(const uint8_t *data, uint16_t length);
extern uint16_t CRC16_CCITT(const uint8_t *data, uint16_t length);
extern uint16_t CRC16_CCITT_FALSE(const uint8_t *data, uint16_t length);
extern uint16_t CRC16_XMODEM(const uint8_t *data, uint16_t length);
extern uint16_t CRC16_X25(const uint8_t *data, uint16_t length);
extern uint16_t CRC16_MODBUS(const uint8_t *data, uint16_t length);
extern uint16_t CRC16_IBM(const uint8_t *data, uint16_t length);
extern uint16_t CRC16_MAXIM(const uint8_t *data, uint16_t length);
extern uint16_t CRC16_USB(const uint8_t *data, uint16_t length);
extern uint16_t CRC16_NDP(const uint8_t *data, uint16_t length);
#endif
@@ -0,0 +1,286 @@
#include "app.h"
#include "xc_hal.h"
#include "xc_24g.h"
const uint16_t lightmap[32] = {65535, 13107, 6554, 2621, 1311, 655, 328, 218, 164, 131, 82, 66, 44, 33, 26, 22, 19, 16, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1};//ÁÁÃðµÆËٶȱí
configa_t lampcfg = {0};
struct _lamprun_t {
uint16_t ll1;
uint16_t ll2;
uint32_t ll3;
uint16_t ll4;
uint16_t ll5;
uint16_t ll6[5];
uint16_t ll7[5];
}runval;
struct _rlight_t {
uint16_t val;
uint16_t tar;
uint16_t out;
float now;
float step;
}rlight;
struct _rcolor_t {
uint16_t val[5];
uint16_t tar[5];
uint16_t out[5];
float now[5];
float step[5];
}rcolor;
uint16_t rspeed;
uint16_t blink_speed = 0;
uint16_t blink_cycle = 0;
uint8_t blink_type = 0;
volatile uint16_t updata_wait = 0;
volatile uint32_t blink_wait = 0;
volatile uint32_t light_count;
volatile uint32_t test1_wait = 0;
volatile uint32_t test2_wait = 0;
static void updata_runval(void)
{
runval.ll1 = (uint32_t)(lampcfg.light1 * 65535) / 100;
runval.ll2 = (uint32_t)(lampcfg.light0 * 65535) / 100;
runval.ll3 = lampcfg.time * SEC(10);
runval.ll4 = lightmap[(lampcfg.uidx>>1)&0x1F];
runval.ll5 = lightmap[lampcfg.didx&0x1F];
for(uint8_t i = 0; i < 5; i++)
{
runval.ll6[i] = lampcfg.color1[i] * 257;
runval.ll7[i] = lampcfg.color0[i] * 257;
}
}
void light_init(void)
{
lampcfg = param.ca;
updata_runval();
if(runval.ll1 == runval.ll2)
{
for(uint8_t i = 0; i < 5; i++)
{
rcolor.now[i] = (float)runval.ll7[i];
}
}
else
{
for(uint8_t i = 0; i < 5; i++)
{
rcolor.now[i] = (float)runval.ll6[i];
}
}
}
void light_tick(void)
{
if(light_count < 0xFFFFFFFF)
{
light_count++;
}
if(updata_wait > 0)
{
updata_wait--;
}
if(blink_wait > 0)
{
blink_wait--;
}
}
void light_process_100ms(void)
{
if(test1_wait > 0)
{
test1_wait--;
}
if(test2_wait > 0)
{
test2_wait--;
}
}
static float light_updata(float now, float target, float speed)
{
if(now < target)
{
now += speed;
if(now > target) {now = target;}
}
else if(now > target)
{
now -= speed;
if(now < target) {now = target;}
}
return now;
}
static void setout1(void)
{
rlight.val = runval.ll1;
for(uint8_t i = 0; i < 5; i++)
{
rcolor.val[i] = runval.ll6[i];
}
}
static void setout0(void)
{
rlight.val = runval.ll2;
for(uint8_t i = 0; i < 5; i++)
{
rcolor.val[i] = runval.ll7[i];
}
}
__RAM_CODE void light_loop(void)
{
if(blink_wait > 0)
{
if(blink_type == BLINK)
{
rlight.val = ((blink_wait%blink_cycle) > (blink_cycle>>1)) ? 0 : 45874;
}
else if(blink_type == BLINK2)
{
rlight.val = ((blink_wait%blink_cycle) > (blink_cycle>>1)) ? 45874 : 3276;
}
rspeed = blink_speed;
}
else
{
if(runval.ll3 == 0)
{
if(blink_type == 0) rspeed = runval.ll5;
}
else if(runval.ll1 == runval.ll2)
{
setout0();
if(blink_type == 0) rspeed = runval.ll4;
}
else if(light_count < runval.ll3)
{
setout1();
if(blink_type == 0) rspeed = runval.ll4;
}
else
{
setout0();
if(blink_type == 0) rspeed = runval.ll5;
}
}
if(updata_wait == 0)
{
updata_wait = MSEC(10);
if(rlight.tar != rlight.val || rcolor.tar[0] != rcolor.val[0] || rcolor.tar[1] != rcolor.val[1] ||
rcolor.tar[2] != rcolor.val[2] || rcolor.tar[3] != rcolor.val[3] || rcolor.tar[4] != rcolor.val[4])
{
rlight.tar = rlight.val;
for(uint8_t i = 0; i < 5; i++)
{
rcolor.tar[i] = rcolor.val[i];
}
rlight.step = (rspeed * f_delta(rlight.now, rlight.tar)) / 65535.0f;
for(uint8_t i = 0; i < 5; i++)
{
rcolor.step[i] = (rspeed * f_delta(rcolor.now[i], rcolor.tar[i])) / 65535.0f;
}
}
rlight.now = light_updata(rlight.now, rlight.tar, rlight.step);
rlight.out = (uint16_t)rlight.now;
for(uint8_t i = 0; i < 5; i++)
{
rcolor.now[i] = light_updata(rcolor.now[i], rcolor.tar[i], rcolor.step[i]);
rcolor.out[i] = (uint16_t)rcolor.now[i];
}
api_pwm_out(rlight.out, rcolor.out);
if((blink_wait == 0) && (rlight.out == rlight.tar))
{
blink_type = 0;
}
}
}
void light_set_mode(uint8_t *data, uint8_t save)
{
if(data[0] <= 100) lampcfg.light1 = data[0];
if(data[1] <= 100) lampcfg.light0 = data[1];
if(data[2] <= 254) lampcfg.time = data[2];
lampcfg.didx = (data[3]&0x3F);
lampcfg.uidx = (data[6]&0x3F);
if((data[5]<<8|data[4]) < 65535)
{
lampcfg.weight = data[5]<<8|data[4];
}
updata_runval();
if(save != 0) store_write_param(PARAM8, lampcfg.data);
}
void light_set_color(uint8_t *data, uint8_t save)
{
if(data[0] <= 100) lampcfg.light1 = data[0];
if(data[1] <= 100) lampcfg.light0 = data[1];
for(uint8_t i = 0; i < 5; i++)
{
lampcfg.color1[i] = data[2+i];
lampcfg.color0[i] = data[7+i];
}
updata_runval();
if(save != 0) store_write_param(PARAM8, lampcfg.data);
}
void light_get_mode(uint8_t *data)
{
data[0] = lampcfg.light1;
data[1] = lampcfg.light0;
data[2] = lampcfg.time;
data[6] = lampcfg.uidx;
data[3] = lampcfg.didx;
data[4] = lampcfg.weight & 0xFF;
data[5] = lampcfg.weight >> 8;
}
void light_set_trig(void)
{
light_count = 0;
}
void light_blink(uint32_t cycle, uint16_t times, uint8_t type)
{
if(blink_wait == 0 && times > 0)
{
blink_type = type;
blink_cycle = cycle;
blink_speed = 2621400/cycle;
blink_wait = blink_cycle*times-1;
if(blink_type == BLINK2)
{
light_count = 0xFFFFFFFF;
}
}
else if(times == 0)
{
blink_wait = 0;
}
}
uint16_t light_nowout(void)
{
return rlight.now;
}
@@ -0,0 +1,449 @@
/*
* @Descripttion:
* @version:
* @Author: sueRimn
* @Date: 2023-12-12 14:23:55
* @LastEditors: sueRimn
* @LastEditTime: 2024-03-28 11:25:14
*/
/*!
* \file main.c
*
* \brief Target main implementation
*
* \copyright Revised BSD License, see section \ref LICENSE.
*
* \code
*
* _ __ _ ________ _
* | |/ /(_)___ / ____/ /_ (_)___
* | // / __ \/ / / __ \/ / __ \
* / |/ / / / / /___/ / / / / /_/ /
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
* /_/
* (C) 2022-2025 XinChip
*
* \endcode
*
* \author ( XinChip ) Alex-J
*
* \author ( XinChip )
*/
/*-----------------------------------------------------------------------------------
INCLUDE HEADE FILES
------------------------------------------------------------------------------------*/
#include "main.h"
#include "xc6xxx_rf_ADV.h"
#include "mtypes.h"
/*------------------------------------------------------------------------------------
Macros
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Global Variables
-------------------------------------------------------------------------------------*/
uint8_t recv_adv_buf[ADV_BUFF_LEN] = {0};
uint8_t rf_adv_channel[] = {RF_ADV_CHANNEL_37, RF_ADV_CHANNEL_38, RF_ADV_CHANNEL_39};
uint8_t adv_index = 0;
/*------------------------------------------------------------------------------------
Func Prototype
-------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------
Functions
-------------------------------------------------------------------------------------*/
/**
* @brief clock_init
* @details
* @param void
* @retval void
*/
void clock_init(void)
{
CLOCK_InitCfg_t clock_cfg;
clock_cfg.hfclk_src = CLOCK_HFCLK_SRC_XTAL;
clock_cfg.hfclk_in = CLOCK_HFCLK_IN_32M;
#if (RC_32K)
clock_cb.lfclk_src = CLOCK_LFCLK_SRC_RC;
#endif //(RC_32K)
#if (XTAL_32K)
clock_cb.lfclk_src = CLOCK_LFCLK_SRC_XTAL;
#endif // (XTAL_32K)
#if (XTAL_32768K)
clock_cb.lfclk_src = CLOCK_LFCLK_SRC_XTAL;
#endif // (XTAL_32768K)
if (clock_cfg.lfclk_src == CLOCK_LFCLK_SRC_XTAL) {
clock_cfg.lfclk_in = CLOCK_LFCLK_IN_32768;
} else if (clock_cfg.lfclk_src == CLOCK_LFCLK_SRC_RC) {
clock_cfg.lfclk_in = CLOCK_LFCLK_IN_32K;
}
xc_clock_init_cfg(&clock_cfg);
SysTick_Config(xc_clock_hfclk_in_get() / 100);
SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk;
}
void app_uart_init(void)
{
GPIO_InitCfg_t gpio_cfg = {0};
gpio_cfg.Mux = GPIO_Mux0;
gpio_cfg.Pull = GPIO_PULLUP;
gpio_cfg.Int = NOT_INT;
gpio_cfg.FunSel = UART0_TX;
gpio_cfg.Pin = GPIO_18;
gpio_cfg.Dir = GPIO_DIR_OUTPUT;
xc_gpio_init(&gpio_cfg);
gpio_cfg.FunSel = UART0_RX;
gpio_cfg.Pin = GPIO_19;
gpio_cfg.Dir = GPIO_DIR_INPUT;
xc_gpio_init(&gpio_cfg);
UART_InitCfg_t uart_cfg = {0};
uart_cfg.Parity = UART_PARITY_DISABLE;
uart_cfg.StopBits = UART_STOP_1_BITS;
uart_cfg.WordLength = UART_DATA_8_BITS;
uart_cfg.BaudRate = UART_BAUDRATE_115200;
uart_cfg.HardwareFlowControl = UART_HWFC_DISABLE;
xc_uart_init(UART0_IDX, &uart_cfg);
}
/**
* @brief Rf 2.4g dump log
* @param void
*
* @retval void
*/
#ifdef DEBUG_LOG
void rf_dump_log(void)
{
LOGI("***************** 2.4G Param ******************\n");
LOGI("CFG_TOP: 0x%08x\r\n", XC_RF_2_4G->CFG_TOP);
LOGI("EN_AA: 0x%08x\r\n", XC_RF_2_4G->EN_AA);
LOGI("EN_RXADDR: 0x%08x\r\n", XC_RF_2_4G->EN_RXADDR);
LOGI("SETUP_AW: 0x%08x\r\n", XC_RF_2_4G->SETUP_AW);
LOGI("SETUP_RETR: 0x%08x\r\n", XC_RF_2_4G->SETUP_RETR);
LOGI("RF_CH: 0x%08x\r\n", XC_RF_2_4G->RF_CH);
LOGI("SETUP_RF: 0x%08x\r\n", XC_RF_2_4G->SETUP_RF);
LOGI("STATUS: 0x%08x\r\n", XC_RF_2_4G->STATUS);
LOGI("OBSERVE_TX: 0x%08x\r\n", XC_RF_2_4G->OBSERVE_TX);
LOGI("RSSI: 0x%08x\r\n", XC_RF_2_4G->RSSI);
LOGI("RX_ADDR_P0: 0x%02x %08x\r\n", 0xFF & (XC_RF_2_4G->RX_ADDR_P0_H), XC_RF_2_4G->RX_ADDR_P0_L);
LOGI("RX_ADDR_P1: 0x%02x %08x\r\n", 0xFF & (XC_RF_2_4G->RX_ADDR_P1_H), XC_RF_2_4G->RX_ADDR_P1_L);
LOGI("RX_ADDR_P2TOP5:0x%08x\r\n", XC_RF_2_4G->RX_ADDR_P2TOP5);
LOGI("BER_RESULT: 0x%08x%08x\r\n", XC_RF_2_4G->BER_ERR_CNT, XC_RF_2_4G->BER_RECV_CNT);
LOGI("AGC_SETTING: 0x%08x\r\n", XC_RF_2_4G->AGC_SETTING);
LOGI("PGA_SETTING: 0x%02x %08x\r\n", ((XC_RF_2_4G->TX_ADDR_H) & 0xFF00) >> 8, XC_RF_2_4G->PGA_SETTING);
LOGI("TX_ADDR: 0x%02x %08x\r\n", ((XC_RF_2_4G->TX_ADDR_H) & 0xFF), XC_RF_2_4G->TX_ADDR_L);
LOGI("RX_PW_PX: 0x%04x %08x\r\n", 0xFFFF & (XC_RF_2_4G->RX_PW_Px_H), XC_RF_2_4G->RX_PW_Px_L);
LOGI("STATUS_FIFO: 0x%08x\r\n", XC_RF_2_4G->STATUS_FIFO);
LOGI("RSSIREC: 0x%08x\r\n", XC_RF_2_4G->RSSIREC);
LOGI("TXPROC_CFG: 0x%08x\r\n", XC_RF_2_4G->TXPROC_CFG);
LOGI("RXPROC_CFG: 0x%02x %08x\r\n", 0xFF & (XC_RF_2_4G->RXPROC_CFG_H), XC_RF_2_4G->RXPROC_CFG_L);
LOGI("DYNPD: 0x%08x\r\n", XC_RF_2_4G->DYNPD);
LOGI("FEATURE: 0x%08x\r\n", XC_RF_2_4G->FEATURE);
LOGI("PGA_SETTING_H: 0x%08x\r\n", XC_RF_2_4G->TX_ADDR_H);
LOGI("***********************************************\n");
LOGI("\r\n");
}
#endif // DEBUG_LOG
/**
* @brief RF ADV data package filling
* @param uint8_t * - buff
* uint8_t - len
* @return uint8_t - data len
*/
uint8_t rf_adv_packet(uint8_t *buff)
{
if (sizeof(buff) > ADV_LENGTH) {
buff = NULL;
return FAIL;
}
uint8_t l = 0;
buff[l++] = 0x42;
buff[l++] = ADV_LENGTH - 5;
/* Simulate Bluetooth MAC address */
uint8_t rf_adv_mac_addr[6] = {MAC_ADDR_0, MAC_ADDR_1, MAC_ADDR_2, MAC_ADDR_3, MAC_ADDR_4, MAC_ADDR_5};
memcpy(&buff[l], rf_adv_mac_addr, sizeof(rf_adv_mac_addr));
l += sizeof(rf_adv_mac_addr);
buff[l++] = 0x02;
buff[l++] = 0x01;
buff[l++] = 0x06;
buff[l++] = ADV_LENGTH - 15;
// Complete Local Name
buff[l++] = 0x09;
/* Simulate Bluetooth broadcast data */
uint8_t rf_adv_data_buff[26] = {"RF-ADV-TEST-123456789BLE52"};
memcpy(&buff[l], rf_adv_data_buff, sizeof(rf_adv_data_buff));
l += sizeof(rf_adv_data_buff);
/* CRC */
buff[l++] = 0x55;
buff[l++] = 0x55;
buff[l++] = 0x55;
return l;
}
/**
* @brief Rf adv tx event
* @param void
*
* @retval void
*/
void rf_adv_tx_evevt(void)
{
uint8_t len = 0;
uint8_t buff[ADV_LENGTH];
LOGI("************ADV Send Start**************\r\n");
while (1) {
/* Set testing frequency points */
rf_set_channel(RF_ADV_BASE + rf_adv_channel[adv_index]);
/* Simulate Bluetooth broadcast data filling */
len = rf_adv_packet(buff);
/* Simulate Bluetooth broadcast package software CRC */
ble_crc(buff, len - 3, buff + len - 3);
/* Simulate Bluetooth broadcast package software whitening */
ble_whiten(buff, len, bleWhitenStart(RF_ADV_BASE + rf_adv_channel[adv_index]));
/* Send data processing */
rf_tx_packet(buff, len);
adv_index += 1;
if (adv_index == sizeof(rf_adv_channel)) {
adv_index = 0;
}
delay_ms(10);
}
}
/**
* @brief RF rx adv event
* @param void
*
* @retval void
*/
#if (XINCX_RF_ADV_NVIC_MODE == true)
void rf_adv_rx_evevt(void)
{
uint8_t data_len = 0;
uint32_t blecrc = 0;
uint8_t rf_adv_crc_stat = CRC_IDLE;
LOGI("************ADV Recv Start**************\r\n");
/* Set testing frequency points */
rf_set_channel(XINCX_ADV_CHANNEL);
/* Enable RF24G interrupt */
NVIC_EnableIRQ(RF24G_IRQn);
/* Entering the receiver */
CE_CTL_HIGH;
while (1) {
if ((recv_len != 0) && (rf24g_handler_flag)) {
/* Entering standby mode */
CE_CTL_LOW;
rf24g_handler_flag = false;
/* Whitening of packet software */
blecrc = rf_adv_packet_whiten(&data_len);
/* Packet software CRC judgment */
rf_adv_crc_stat = rf_adv_crc(recv_adv_buf, &data_len, blecrc);
if (rf_adv_crc_stat == CRC_OK) {
/* Only after 5 bytes is valid data */
for (uint8_t i = 0; i < data_len + 5; i++)
LOGI("%02x ", recv_adv_buf[i]);
LOGI("\r\n");
}
memset(recv_adv_buf, 0, sizeof(recv_adv_buf));
recv_len = 0;
/* Entering the receiver */
CE_CTL_HIGH;
}
}
}
#else
void rf_adv_rx_evevt(void)
{
uint8_t data_len = 0;
uint32_t blecrc = 0;
uint8_t rf_adv_crc_stat = CRC_IDLE;
LOGI("************ADV Recv Start**************\r\n");
/* Set testing frequency points */
rf_set_channel(XINCX_ADV_CHANNEL);
/* Entering the receiver */
CE_CTL_HIGH;
while (1) {
if ((XC_RF_2_4G->STATUS) & MASK_RX_DR) {
/* Entering standby mode */
CE_CTL_LOW;
recv_len = rf_rx_packet(recv_adv_buf);
if (recv_len != 0) {
/* Whitening of packet software */
blecrc = rf_adv_packet_whiten(&data_len);
/* Packet software CRC judgment */
rf_adv_crc_stat = rf_adv_crc(recv_adv_buf, &data_len, blecrc);
if (rf_adv_crc_stat == CRC_OK) {
for (uint8_t i = 0; i < data_len + 5; i++)
LOGI("%02x ", recv_adv_buf[i]);
LOGI("\r\n");
}
memset(recv_adv_buf, 0, sizeof(recv_adv_buf));
recv_len = 0;
}
/* Entering the receiver */
CE_CTL_HIGH;
}
}
}
#endif
#define RF_BLE_ADDR 0x1AB51376
#define RF_BLE_CHN37 2402
uint8_t rf_rxdata[32];
uint8_t rf_rxlen, rf_rssi;
uint8_t rf_irq_cnt = 0;
uint8_t rf_rx_cnt = 0;
mftest_t mftest = {0}; //生产测试
uint8_t getbuff[8] = {0};
uint8_t setbuff[8] = {0};
uint8_t saveflag = 1; //默认为断电保存状态
uint8_t setrad_flag = 0;
volatile uint16_t cnt_ms1 = 0;
volatile uint16_t cnt_ms2 = 0;
volatile uint32_t ticks[64] = {0};
void app_tick_handler(void)
{
cnt_ms1++;
cnt_ms2++;
light_tick();
rad_tick();
//以下代码模拟定时器中运行的程序
for(int i = 0; i < 64; i++)
{
if(ticks[i] < 0xFFFFFFFF)
{
ticks[i]++;
}
}
}
extern void readreg(void);
#define LED1_PIN GPIO_1
#define LED2_PIN GPIO_4
/**
* @brief main
* @details
* @param[in] void
* @param[out] void
* @retval int - 0
* @retval void
* @par identifier
* reserve
* @par other
* void
* @par change log
* Alex created on 2023-05-31
*/
int main(void)
{
/* Clock initialization */
clock_init();
/* Serial port initialization */
app_uart_init();
light_init();
rad_init();
test_init(20);
LOGI("__START__\n");
/* Simulate broadcast initialization */
rf24g_adv_init();
GPIO_InitCfg_t GPIO_InitCfg = { 0 };
GPIO_InitCfg.Mux = GPIO_Mux0;
GPIO_InitCfg.FunSel = GPIO_Dx;
GPIO_InitCfg.Pull = GPIO_PULLUP;
// Board Led1 Initialization
GPIO_InitCfg.Dir = GPIO_DIR_OUTPUT;
GPIO_InitCfg.Int = NOT_INT;
GPIO_InitCfg.Pin = LED1_PIN;
xc_gpio_init(&GPIO_InitCfg);
GPIO_InitCfg.Mux = GPIO_Mux0;
GPIO_InitCfg.FunSel = GPIO_Dx;
GPIO_InitCfg.Pull = GPIO_PULLUP;
// Board Led1 Initialization
GPIO_InitCfg.Dir = GPIO_DIR_OUTPUT;
GPIO_InitCfg.Int = NOT_INT;
GPIO_InitCfg.Pin = LED2_PIN;
xc_gpio_init(&GPIO_InitCfg);
xc_gpio_write_pin(LED1_PIN, GPIO_PIN_RESET);
xc_gpio_write_pin(LED2_PIN, GPIO_PIN_RESET);
#ifdef DEBUG_LOG
/* Register information printing */
rf_dump_log();
#endif // DEBUG_LOG
uint8_t data_len = 0;
uint32_t blecrc = 0;
uint8_t rf_adv_crc_stat = CRC_IDLE;
LOGI("************ADV Recv Start**************\r\n");
/* Set testing frequency points */
rf_set_channel(XINCX_ADV_CHANNEL);
/* Enable RF24G interrupt */
NVIC_EnableIRQ(RF24G_IRQn);
/* Entering the receiver */
CE_CTL_HIGH;
#if (XINCX_ADV_MODE == TX_MODE)
/* Send Event */
rf_adv_tx_evevt();
#elif (XINCX_ADV_MODE == RX_MODE)
/* Receive events */
rf_adv_rx_evevt();
#endif
ASSERT;
}
@@ -0,0 +1,179 @@
#ifndef __MTYPES_H
#define __MTYPES_H
#include <stdint.h>
#define NUM_MEMBERS 128
#define NUM_DEVICES 32
#define NUM_cfgb 8
#define NUM_cfgc 8
typedef union _mword_t {
uint32_t value;
uint8_t data[4];
}mword_t;
typedef enum _blink_t
{
BLINK = 1,
BLINK2 = 2,
}blink_t;
typedef enum _roles_t
{
ROLE_A = 0x01,
ROLE_B = 0x02,
ROLE_C = 0x04,
ROLE_D = 0x08,
ROLE_E = 0x10,
ROLE_F = 0x20,
ROLE_G = 0x40,
ROLE_H = 0x80,
}roles_t;
typedef enum _status_t
{
STAT_1 = 0,
STAT_2,
STAT_3
}status_t;
typedef struct _mftest_t
{
uint8_t status;
uint8_t mid;
uint8_t bid;
uint16_t rxtimes;
}mftest_t;
typedef struct _mport_t
{
uint8_t cmd;
uint8_t length;
uint8_t data[30];
}mport_t;
typedef union _configa_t {
struct {
uint8_t light1;
uint8_t light0;
uint8_t time;
uint8_t didx;
uint16_t weight;
uint8_t uidx;
uint8_t ctemp;
uint8_t color1[5];
uint8_t color0[5];
};
uint8_t data[20];
}configa_t;
typedef union _configb_t {
struct {
uint16_t a;
uint16_t b;
};
uint8_t data[4];
}configb_t;
typedef union _configc_t {
struct {
uint32_t a;
uint16_t b;
uint16_t c;
uint8_t d;
uint8_t e;
uint8_t f;
uint8_t g;
uint8_t h;
};
uint8_t data[16];
}configc_t;
typedef union _configd_t {
struct {
uint16_t a;
uint8_t b;
uint8_t c;
uint8_t d;
uint8_t e;
uint8_t f;
uint8_t g1 : 5;
uint8_t g2 : 3;
};
uint8_t data[8];
}configd_t;
typedef union _confige_t {
struct {
uint8_t a;
uint8_t b;
uint8_t c;
uint8_t d;
uint8_t e;
uint8_t f;
};
uint8_t data[8];
}confige_t;
typedef struct _sett_t {
uint8_t addr[4];
uint16_t aa;
uint16_t bb;
}setlist_t;
typedef struct _setting_t
{
setlist_t list[NUM_DEVICES];
uint16_t number;
}setting_t;
typedef struct _cfgg_t {
uint8_t addr[4];
uint8_t a;
uint8_t b;
uint16_t c;
uint16_t d;
uint16_t e;
uint16_t f;
}cfgglist_t;
typedef struct _cfga_t
{
cfgglist_t list[NUM_DEVICES];
uint16_t number;
}cfga_t;
typedef struct _cfggb_t
{
uint8_t addr[4];
uint16_t a;
uint16_t b;
uint8_t c;
}cfgblist_t;
typedef struct _cfgb_t
{
cfgblist_t list[NUM_cfgb];
uint16_t number;
}cfgb_t;
typedef struct _cfggc_t
{
uint8_t addr[4];
uint16_t a;
}cfggclist_t;
typedef struct _cfgc_t
{
cfggclist_t list[NUM_cfgb];
uint16_t number;
}cfgc_t;
#endif
+132
View File
@@ -0,0 +1,132 @@
#include "app.h"
volatile struct radval_t {
uint16_t aa;
uint16_t bb;
}radval;
uint8_t rad_status = 0;
uint8_t hhindex = 0;
uint8_t hhcount = 0;
uint16_t ttdata1[24];
uint16_t tttimes = 0;
uint16_t wwtimes = 0;
volatile uint32_t tt_count = 0;
volatile uint32_t hh_wait = 0;
volatile uint32_t rad_wait = 0;
void rad_init(void)
{
rad_sethh();
tt_count = SEC(6);
}
void rad_tick(void)
{
if(tt_count < 0xFFFFFFFF)
{
tt_count++;
}
}
void rad_loop(void)
{
api_radar_read((uint16_t *)&radval);
if(radval.bb >= param.cb.a)
{
rad_status = 1;
if(rad_wait > 0)
{
api_led_set(1);
}
}
else
{
rad_status = 0;
api_led_set(0);
}
if((rad_status != 0) && tt_count > SEC(10))
{
tt_count = 0;
light_set_trig();
ttdata1[hhindex]++;
if(mftest.status == 0)
{
}
}
}
//ÿ100msÖ´ÐÐÒ»´Î
void rad_100ms(void)
{
if(hh_wait > 0 && --hh_wait == 0)
{
}
if(wwtimes != 0)
{
wwtimes--;
}
if(rad_wait > 0)
{
rad_wait--;
}
}
void rad_minute(void)
{
if(++hhcount >= 60)
{
hhcount = 0;
tttimes = 0;
for(uint8_t i = 0, index = hhindex; i < 24; i++)
{
tttimes += ttdata1[index];
index = (index > 0) ? (index-1) : (23);
}
hhindex = (hhindex + 1) % 24;
ttdata1[hhindex] = 0;
}
}
void rad_sethh(void)
{
hh_wait = 600 + (api_random()%600);
}
void rad_setout(uint8_t type, uint8_t wait)
{
if(type == 0) //Í£Ö¹²¨ÐÎ
{
wwtimes = 0;
}
else if(wait < 100)
{
wwtimes = wait * 600;
}
else
{
wwtimes = 65535;
}
}
void rad_setled(uint16_t wait)
{
rad_wait = wait * 10;
}
uint8_t rad_getstat(void)
{
return rad_status;
}
uint32_t rad_getcount(void)
{
return tt_count;
}
@@ -0,0 +1,109 @@
#include "app.h"
#include "test.h"
//这段是用于模拟实际代码中RO-data的大小
const uint16_t randmap1[800] = {
0xC86E,0x0000,0x001F,0x00E3,0x00FC,0x0325,0x033A,0x03C6,0x03D9,0x054A,0x0555,0x05A9,0x05B6,0x066F,0x0670,0x068C,
0x0693,0x1826,0x1839,0x18C5,0x18DA,0x1B03,0x1B1C,0x1BE0,0x1BFF,0x1D6C,0x1D73,0x1D8F,0x1D90,0x1E49,0x1E56,0x1EAA,
0x1EB5,0x284B,0x2854,0x28A8,0x28B7,0x2B6E,0x2B71,0x2B8D,0x2B92,0x2D01,0x2D1E,0x2DE2,0x2DFD,0x2E24,0x2E3B,0x2EC7,
0x2ED8,0x306D,0x3072,0x308E,0x3091,0x3348,0x3357,0x33AB,0x33B4,0x3527,0x3538,0x35C4,0x35DB,0x3602,0x361D,0x36E1,
0x36FE,0x492B,0x4934,0x49C8,0x49D7,0x4A0E,0x4A11,0x4AED,0x4AF2,0x4C61,0x4C7E,0x4C82,0x4C9D,0x4F44,0x4F5B,0x4FA7,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x4FB8,0x510D,0x5112,0x51EE,0x51F1,0x5228,0x5237,0x52CB,0x52D4,0x5447,0x5458,0x54A4,0x54BB,0x5762,0x577D,0x5781,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x67F3,0x7946,0x7959,0x79A5,0x79BA,0x7A63,0x7A7C,0x7A80,0x7A9F,0x7C0C,0x7C13,0x7CEF,0x7CF0,0x7F29,0x7F36,0x7FCA,
0x7FD5,0x894D,0x8952,0x89AE,0x89B1,0x8A68,0x8A77,0x8A8B,0x8A94,0x8C07,0x8C18,0x8CE4,0x8CFB,0x8F22,0x8F3D,0x8FC1,
0x8FDE,0x916B,0x9174,0x9188,0x9197,0x924E,0x9251,0x92AD,0x92B2,0x9421,0x943E,0x94C2,0x94DD,0x9704,0x971B,0x97E7,
0x97F8,0xA106,0xA119,0xA1E5,0xA1FA,0xA223,0xA23C,0xA2C0,0xA2DF,0xA44C,0xA453,0xA4AF,0xA4B0,0xA769,0xA776,0xA78A,
0x8FDE,0x916B,0x9174,0x9188,0x9197,0x924E,0x9251,0x92AD,0x92B2,0x9421,0x943E,0x94C2,0x94DD,0x9704,0x971B,0x97E7,
0xC6F5,0xD840,0xD85F,0xD8A3,0xD8BC,0xDB65,0xDB7A,0xDB86,0xDB99,0xDD0A,0xDD15,0xDDE9,0xDDF6,0xDE2F,0xDE30,0xDECC,
0x36FE,0x492B,0x4934,0x49C8,0x49D7,0x4A0E,0x4A11,0x4AED,0x4AF2,0x4C61,0x4C7E,0x4C82,0x4C9D,0x4F44,0x4F5B,0x4FA7,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x4FB8,0x510D,0x5112,0x51EE,0x51F1,0x5228,0x5237,0x52CB,0x52D4,0x5447,0x5458,0x54A4,0x54BB,0x5762,0x577D,0x5781,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x67F3,0x7946,0x7959,0x79A5,0x79BA,0x7A63,0x7A7C,0x7A80,0x7A9F,0x7C0C,0x7C13,0x7CEF,0x7CF0,0x7F29,0x7F36,0x7FCA,
0xA795,0xB920,0xB93F,0xB9C3,0xB9DC,0xBA05,0xBA1A,0xBAE6,0xBAF9,0xBC6A,0xBC75,0xBC89,0xBC96,0xBF4F,0xBF50,0xBFAC,
0xBFB3,0xC066,0xC079,0xC085,0xC09A,0xC343,0xC35C,0xC3A0,0xC3BF,0xC52C,0xC533,0xC5CF,0xC5D0,0xC609,0xC616,0xC6EA,
0x8FDE,0x916B,0x9174,0x9188,0x9197,0x924E,0x9251,0x92AD,0x92B2,0x9421,0x943E,0x94C2,0x94DD,0x9704,0x971B,0x97E7,
0xC6F5,0xD840,0xD85F,0xD8A3,0xD8BC,0xDB65,0xDB7A,0xDB86,0xDB99,0xDD0A,0xDD15,0xDDE9,0xDDF6,0xDE2F,0xDE30,0xDECC,
0x36FE,0x492B,0x4934,0x49C8,0x49D7,0x4A0E,0x4A11,0x4AED,0x4AF2,0x4C61,0x4C7E,0x4C82,0x4C9D,0x4F44,0x4F5B,0x4FA7,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x4FB8,0x510D,0x5112,0x51EE,0x51F1,0x5228,0x5237,0x52CB,0x52D4,0x5447,0x5458,0x54A4,0x54BB,0x5762,0x577D,0x5781,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0xDED3,0xE82D,0xE832,0xE8CE,0xE8D1,0xEB08,0xEB17,0xEBEB,0xEBF4,0xED67,0xED78,0xED84,0xED9B,0xEE42,0xEE5D,0xEEA1,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x4FB8,0x510D,0x5112,0x51EE,0x51F1,0x5228,0x5237,0x52CB,0x52D4,0x5447,0x5458,0x54A4,0x54BB,0x5762,0x577D,0x5781,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0xC6F5,0xD840,0xD85F,0xD8A3,0xD8BC,0xDB65,0xDB7A,0xDB86,0xDB99,0xDD0A,0xDD15,0xDDE9,0xDDF6,0xDE2F,0xDE30,0xDECC,
0x36FE,0x492B,0x4934,0x49C8,0x49D7,0x4A0E,0x4A11,0x4AED,0x4AF2,0x4C61,0x4C7E,0x4C82,0x4C9D,0x4F44,0x4F5B,0x4FA7,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x67F3,0x7946,0x7959,0x79A5,0x79BA,0x7A63,0x7A7C,0x7A80,0x7A9F,0x7C0C,0x7C13,0x7CEF,0x7CF0,0x7F29,0x7F36,0x7FCA,
0xA795,0xB920,0xB93F,0xB9C3,0xB9DC,0xBA05,0xBA1A,0xBAE6,0xBAF9,0xBC6A,0xBC75,0xBC89,0xBC96,0xBF4F,0xBF50,0xBFAC,
0xBFB3,0xC066,0xC079,0xC085,0xC09A,0xC343,0xC35C,0xC3A0,0xC3BF,0xC52C,0xC533,0xC5CF,0xC5D0,0xC609,0xC616,0xC6EA,
0xBFB3,0xC066,0xC079,0xC085,0xC09A,0xC343,0xC35C,0xC3A0,0xC3BF,0xC52C,0xC533,0xC5CF,0xC5D0,0xC609,0xC616,0xC6EA,
0x8FDE,0x916B,0x9174,0x9188,0x9197,0x924E,0x9251,0x92AD,0x92B2,0x9421,0x943E,0x94C2,0x94DD,0x9704,0x971B,0x97E7,
0xC6F5,0xD840,0xD85F,0xD8A3,0xD8BC,0xDB65,0xDB7A,0xDB86,0xDB99,0xDD0A,0xDD15,0xDDE9,0xDDF6,0xDE2F,0xDE30,0xDECC,
0x36FE,0x492B,0x4934,0x49C8,0x49D7,0x4A0E,0x4A11,0x4AED,0x4AF2,0x4C61,0x4C7E,0x4C82,0x4C9D,0x4F44,0x4F5B,0x4FA7,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x4FB8,0x510D,0x5112,0x51EE,0x51F1,0x5228,0x5237,0x52CB,0x52D4,0x5447,0x5458,0x54A4,0x54BB,0x5762,0x577D,0x5781,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x36FE,0x492B,0x4934,0x49C8,0x49D7,0x4A0E,0x4A11,0x4AED,0x4AF2,0x4C61,0x4C7E,0x4C82,0x4C9D,0x4F44,0x4F5B,0x4FA7,
0x579E,0x6160,0x617F,0x6183,0x619C,0x6245,0x625A,0x62A6,0x62B9,0x642A,0x6435,0x64C9,0x64D6,0x670F,0x6710,0x67EC,
0x8FDE,0x916B,0x9174,0x9188,0x9197,0x924E,0x9251,0x92AD,0x92B2,0x9421,0x943E,0x94C2,0x94DD,0x9704,0x971B,0x97E7,
0xBFB3,0xC066,0xC079,0xC085,0xC09A,0xC343,0xC35C,0xC3A0,0xC3BF,0xC52C,0xC533,0xC5CF,0xC5D0,0xC609,0xC616,0xC6EA,
0xEEBE,0xF00B,0xF014,0xF0E8,0xF0F7,0xF32E,0xF331,0xF3CD,0xF3D2,0xF541,0xF55E,0xF5A2,0xF5BD,0xF664,0xF67B,0xF687};//下一个0xF698
//这段是用于模拟实际代码中RW-data的大小
uint8_t randmap2[200] = {
0x6E,0x00,0x0F,0xE3,0xFC,0x05,0x03,0x06,0x3D,0x0A,0x05,0x09,0x06,0x0F,0x00,0x8C,
0x65,0x03,0x0F,0xE3,0xFC,0x07,0x03,0x06,0x3D,0x0A,0x05,0x09,0x06,0x0F,0x03,0x1C,
0x6E,0x00,0x0F,0xE3,0xFC,0x05,0x03,0x06,0x36,0x0A,0x05,0x09,0x06,0x0F,0x05,0x5C,
0x67,0x00,0x0F,0x63,0xFC,0x05,0x03,0x06,0x3D,0x0A,0x05,0x09,0x06,0x32,0x05,0x87,
0x6E,0x30,0x0F,0xE3,0xFC,0x05,0x63,0x06,0x3D,0x0A,0x05,0x09,0x06,0x0F,0x07,0x81,
0x6E,0x00,0x0F,0xE3,0xFC,0x05,0x03,0x06,0x3D,0x0A,0x05,0x09,0x06,0x6F,0x03,0x8C,
0x6E,0x00,0x0F,0xE3,0x9C,0x85,0x03,0x06,0x86,0x3A,0x07,0x09,0x06,0x3F,0x07,0x87,
0x69,0x00,0x0F,0xE3,0xFC,0x05,0x03,0x06,0x3D,0x0A,0x05,0x09,0x06,0x0F,0x02,0x8C,
0x61,0x00,0x0F,0xE3,0xFC,0x05,0x58,0x06,0x37,0x0A,0x05,0x09,0x06,0x0F,0x06,0x35,
0x6E,0x00,0x0F,0xE3,0xFC,0x05,0x03,0x06,0x3D,0x0A,0x05,0x09,0x06,0x6F,0x60,0x48,
0x6E,0x00,0x0F,0xE3,0xFC,0x05,0x59,0x06,0x51,0x0A,0x05,0x09,0x06,0x07,0x34,0x85,
0x6E,0x00,0x0F,0xE3,0xFC,0x05,0x03,0x06,0x3D,0x0A,0x05,0x09,0x06,0x0F,0x67,0x13,
0x6E,0x00,0x0F,0xE3,0xFC,0x05,0x03,0x06,};
volatile int a, b;
uint16_t randnum = 0;
uint32_t total = 0;
uint8_t count = 0;
uint16_t rndindex = 0;
uint32_t buff1[1000]; //每分钟用电量记录
uint32_t buff2[1000]; //每分钟触发率记录
void test_init(uint8_t value)
{
randnum = randmap1[value&0xFF];
}
void test_100ms(void)
{
total += light_nowout();
if(total >= 683954)
{
total -= 683954;
buff1[count]++;
buff2[count] = buff1[count] + randnum;
}
randnum = (randmap1[rndindex] ^ 0xA002) | b;
count = (count + 1) % 1000;
rndindex = (rndindex+1) % 512;
for(int i = 0; i < 200; i++)
{
randmap2[i] = randnum ^ 0x7E;
a = randnum % 100;
b |= a ^ randnum;
}
}
@@ -0,0 +1,9 @@
#ifndef __TEST_H
#define __TEST_H
#include <stdint.h>
extern void test_init(uint8_t value);
extern void test_100ms(void);
#endif