#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; }