V1.0
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user