Files
2025-12-15 16:07:49 +08:00

136 lines
2.6 KiB
C

#include "addr.h"
#include "Mem.h"
#include "General.h"
#include "Flash.h"
extern void addr_set(u8 * addr);
static u8 broadcast_addr[6] = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
static u8 broadcast_addr_1[6] = {0x99, 0x99, 0x99, 0x99, 0x99, 0x99};
static u8 local_addr[6] = {0x11, 0x11, 0x11, 0x11, 0x11, 0x11};
u8 cmp_addr(u8 *addr)
{
if (cmp_datas(addr, local_addr, 6))
{
return ADDR_EQ;
}
else if (cmp_datas(addr, broadcast_addr, 6))
{
return BRODCAST_ADDRAA_EQ;
}
else if (cmp_datas(addr, broadcast_addr_1, 6))
{
return BRODCAST_ADDR99_EQ;
}
else
{
return ADDR_NEQ;
}
}
u8 * read_broadcast_addr(void)
{
return broadcast_addr;
}
/*****************************************************************************
Prototype : set_addr
Description : none
Input : void
Output : None
Return Value :
Date : 2014/3/15
Author : Barry
*****************************************************************************/
void set_addr(u8 *newaddr)
{
u8 local_temp[8];
u16 crc;
//ÊäÈëÊÇÕýÐò£¬´æ´¢·´Ðò
//memcpy(local_addr, newaddr, 6);
//memcpy(local_temp, newaddr, 6);
memset(local_temp,0,sizeof(local_temp));
memset(local_addr,0,sizeof(local_addr));
for (u8 i = 0; i < 6; i++)
{
local_addr[i] = newaddr[5 - i];
local_temp[i] = newaddr[5 - i];
}
// memmove(local_addr,&newaddr[1],5);
// memmove(local_temp,&newaddr[1],5);
// addr_set(&newaddr[1]);
crc = GetCRC16(local_addr, 6);
local_temp[6] = crc & 0xFF;
local_temp[7] = (u8)((crc >> 8) & 0xFF);
if (STM32_FlashPageErase(FLASH_LOCAL_ADDR_ADDRESS) == FLH_SUCCESS)
{
STM32_FlashWrite( FLASH_LOCAL_ADDR_ADDRESS, local_temp, 8);
}
}
/*****************************************************************************
Prototype : read_addr
Description : none
Input : void
Output : None
Return Value :
Date : 2014/3/15
Author : Barry
*****************************************************************************/
bool read_addr(u8 *addrbuf )
{
u8 tempaddr[8];
u16 crc;
memcpy(&tempaddr, (u8*)FLASH_LOCAL_ADDR_ADDRESS, sizeof(tempaddr));
crc = GetCRC16(tempaddr, 6);
if (crc == (tempaddr[6] + tempaddr[7]*256) )
{
memcpy(addrbuf, tempaddr, 6);
return TRUE;
}
else
{
memcpy(addrbuf, local_addr, 6);
return FALSE;
}
}
void init_local_addr(void)
{
u8 temp[6];
if (read_addr(temp) )
{
memcpy(local_addr,temp, 6);
return;
}
}
u8 * addr_get()
{
return local_addr;
}