136 lines
2.6 KiB
C
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;
|
|
}
|
|
|
|
|
|
|
|
|