⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 api.h

📁 NEC 的无线通讯方案
💻 H
字号:
/*
* $Id: api.h,v 1.55 2007/11/02 07:54:35 chunchia Exp $
*/
/*******************************************************************************

       UBEC (Uniband Electronic Corp.)

       Project: U-NET01, Ubiquitous network platform

       File: api.h

       Version: 0.3.0

       Usage: all function definition

       Platform: U-NET01 DK with Keil 8051 C compiler

       Reference:

               Silicon Laboratories: C8051F124, C8051F340

               UBEC: UZ2400, UZ2410

       Note : LED 4~7 Only for U-zig interface

               Copyright (C) 2007 Uniband Electronic Corporation, All rights reserved

********************************************************************************/

#ifndef _API_H_
#define	_API_H_

#include "frame.h"
#include "msg.h"
#include "data.h"

/**************************************************************

	User Application Function Entry

**************************************************************/

void SystemInit(void);
//void SystemReset(void);

UINT16 GetMacAddress(void);
void AppInit( void );
void AppMain( void );
UINT8 AppProcUnetRxData( TX_UNET_FRAME *MsgPtr );
UINT8 AppProcUartRxData( UINT8 *MsgPtr );

/**************************************************************

	MAC Main Function

**************************************************************/

UINT8 unet_tx_bcn_req(void);
UINT8 unet_tx_bcn(void);
UINT8 unet_rx_bcn_ind(MAC_BCN_PKT *BcnPkt, UINT8 PktLength);
UINT8 unet_tx_asso_req(void);
UINT8 unet_rx_asso_req(MCP_ASSO_REQ *MsgPtr);
void unet_rx_asso_rsp(MCP_ASSO_RSP *RsPtr);
UINT8 unet_rx_data_ind(TX_UNET_FRAME **MsgPtr, UINT8 Length);
UINT8 unet_tx_disasso(UINT8 *DST_MAC, UINT8 Reason, UINT16 NewParent);
UINT8 unet_rx_disasso(MCP_DISASSO_NTF *CmdPtr);
void unet_active_scan(BOOL AUTO);

/**************************************************************

	UNET Main Function

**************************************************************/

UINT8 UNET_INIT(UINT16 PanId, UINT8 Channel, UINT16 NewParent, UINT8 MaxChild, UINT8 MaxRouter, UINT8 MaxDepth);
UINT8 UNET_ESTABLISH(void);
UINT8 UNET_JOIN(void);

UINT8 CHECK_UNET_DATA(void);
UINT8 *RECV_FROM_UNET(void);

#ifdef I_Am_Coordinator
UINT8 UNET_KICK(UINT16 ParentAddr, UINT16 KickChildAddr, UINT16 NewParent);
UINT8 UNET_REMOTE_RESET(UINT16 DstAddr, UINT8 maxchild, UINT8 maxrouter, UINT8 maxdepth);
void UNET_GET_TABLE(void);
void UNET_INFOMATION(void);
UINT8 UNET_QUERY(UINT16 DstAddr);
UINT8 RxUnetJoinReport(UNET_JOINREPORT_FRAME* MsgPtr);
UINT8 RxUnetLeaveReport(UNET_LEAVE_FRAME* MsgPtr);
UINT8 RxUnetRspTable(UNET_TAB_FRAME* MsgPtr);
#endif

UINT8 UNET_TX16(UINT16 DstAddr, UINT8 *DataPtr, UINT8 Length);
UINT8 UNET_TX64(UINT8* DstMAC, UINT8* DataPtr, UINT8 Length);
UINT8 UNET_ADDR16_64(UINT16 DstAddr);


UINT8 UNET_LEAVE(void);

UINT8 TxUnetJoinReport(UINT8* JoinChildMACAddr, UINT16 JoinChildNWKAddr);
UINT8 TxUnetLocalQuery(UINT16 DstAddr, UINT32 Interval, UINT8 Switch);
UINT8 TxUnetLocalTalk(void);
UINT8 TxUnetLocalTalkAlert(UINT16 nwkAddress);
UINT8 TxUnetReqTable(UINT16 dst_nwk_address);
UINT8 TxUnetMARsp(UINT16 DstAddr);
#if 0
UINT8 TxUnetCleanSpace(UINT16 parentaddr, UINT16 childaddr);
#endif
UINT8 TxUnetLeaveReport(UINT16 LeaveChildAddr);
UINT8 TxUnetRspQueryRelay(void);

UINT8 RxUnetFrameParsing(TX_UNET_FRAME* RxPtr);
void RxUnetData(TX_UNET_FRAME* RxPtr);
void RxUnetReset(void);
UINT8 RxUnetKick(UNET_KICK_FRAME *MsgPtr);
UINT8 RxUnetRspMA(UNET_RSP_MA_FRAME* MsgPtr);
UINT8 RxUnetLeave(TX_UNET_FRAME* MsgPtr);
#if 0
UINT8 RxUnetCleanSpace(UNET_LEAVE_FRAME* MsgPtr);
#endif
UINT8 RxUnetRspQuery(UNET_QUERY_FRAME* MsgPtr);
#ifdef I_Am_Coordinator
UINT8 RxUnetMACRouting(UNET_MAC_ROUTE_FRAME* MsgPtr);
#endif
UINT8 RxUnetRspQueryRelay(UNET_QUERY_FRAME* RxPtr);
UINT8 RxUnetLocalQuery(UNET_LOCAL_QUERY_FRAME* MsgPtr);
void RxUnetLocalTalk(UNET_LOCAL_TALK_FRAME* MsgPtr);
UINT8 RxUnetReqTable(void);
void PollCheck(UINT16 *nwk_address);

void unet_initial(void);
void init_unet_vars(void *denier_list);
void unet_proc(void);
INT8 unet_queue_proc(UINT8 frequency, MSG_QUEUE *QueuePtr);
UINT8 unet_msg_dispatch(void);	// REENTRANT;
UINT8 unet_tree_routing(TX_UNET_FRAME *MsgPtr);
UINT8 unet_check_child(UINT16 NwkAddr, struct _child_list_ **CurrPtr);
void clean_branch(UINT16 Caddr, UINT16 Paddr);
void clear_table(void **HeadAddr);
UINT16 compute_Cskip(INT8 depth);
void NetworkReset(void);
UINT16 power(UINT16 number, UINT8 power);
void UnetRecovery(UINT16 failure_address);
void UnetChildAliveCheck(void);
UINT8 UnetTxCheck(UINT16 dstaddr);


#ifdef CHECKSUM
UINT8 UnetCheckSum(UINT8* DataPtr, UINT8 Length);
BOOL UnetCheckSumCertification(UINT8* DataPtr, UINT8 Length, UINT8 CSM);
UINT32 ReceivedNumber;
#endif

#if DEBUG_FUNC

#ifdef I_Am_Coordinator
void dbg_rssi_query(void);
uint8 dbg_rx_node_info_rsp(UNET_NODE_INFO_FRAME* msgptr);

void dbg_child_number_set(uint8 child_number, uint8 isMonitor);
void dbg_child_monitor(void);
#endif

uint8 dbg_tx_node_info_req(uint16 dst_addr);
uint8 dbg_rx_node_info_req(void);
uint8 dbg_tx_node_info_rsp(void);

#endif


/**************************************************************

	Rf Function

**************************************************************/

void UzChipReset(void);

void UzGetIntStatus(void);

void UzInit(void);

void UzEnablePA(void);

void UzSetChannel(UINT8 NewChannel);

UINT8 UzReadRSSI(void);

void UzSetMacAddress(UINT8 *MacAddress);

void UzSetPanId(UINT16 PanId);

void UzSetNwkAddr(UINT16 NwkAddr);

void UzSoftReset(void);

void UzRxOnlyBeacon(void);

void UzRxAllFrame(void);

void UzRxFlush(void);

void UzSleep(void);

UINT8 UzTx(UINT8 *DataPtr, UINT8 Length, UINT8 mactpye, UINT8 unettpye);

void UzSetCoordinator(void);

void UzEnabTurboMode(void);

void UzDisTurboMode(void);

/**************************************************************

	SPI Functions

**************************************************************/

void InitSPI(void);

#ifdef IOUZ2410
#define spi_sw(Address, Value)		*((XUINT8 *)(0xF800 + (Address))) = Value

#define spi_sr(Address)			*((XUINT8 *)(0xF800 + (Address)))

#define spi_lw(Address, Value)		*((XUINT8 *)(0xFC00 + (Address))) = Value

#define spi_lr(Address)			*((XUINT8 *)(0xFC00 + (Address)))

#else
void spi_sw(UINT8 Address, UINT8 Value);

UINT8 spi_sr(UINT8 Address);

void spi_lw(UINT16 Address, UINT8 Value);

UINT8 spi_lr(UINT16 Address);
#endif // #ifdef IOUZ2410

void spi_fill_fifo(UINT16 Address, UINT8 *DataPtr, UINT8 Length);

void spi_rd_rx_fifo(UINT8 *DataPtr, UINT8 buf_size);


/**************************************************************

	Uart Functions

**************************************************************/
#ifdef CONSOLE

#define uart_fifo_empty(fifo)		((fifo)->front == (fifo)->rear)
#define isUartRxDataReady()		(!uart_fifo_empty(&(UART_BUFF.rx)))

#define set_uart_tx_busy(uart)		(uart)->tx_busy = 1
#define clear_uart_tx_busy(uart)	(uart)->tx_busy = 0
#define is_uart_tx_busy(uart)		(uart)->tx_busy

void ProcUartRxData(void);
void uart_rx_isr(void);
void uart_tx_isr(void);

void InitUART(void);
void InitUartVars(void);

UINT8 getch(void);
//int puts(char *s);

void putdata(UINT8 UARTWLength, UINT8* DataPtr);
void print_hex(UINT8 c);

#endif
/**************************************************************

	1ms Timer Functions

**************************************************************/
void init_1ms_timer(void);
void InitTimerVars(void);
void UpdateTimerVars(void);

TIMER *setup_timer(UINT32 count, UINT8 close_timer_flag, void (*fn)(), void *fn_param);

void update_timer_chain(void) REENTRANT;

UINT8 is_timer_expired(TIMER *target_tm);

UINT8 reset_timer(TIMER *target_tm);

void close_timer(TIMER *tm);

void WaitMS(UINT16 count);

/**************************************************************

	LED Functions

**************************************************************/

#define	LED_CTRL_ON		0
#define	LED_CTRL_OFF		1

#define	Is_LED_On(p)		((p) == LED_CTRL_ON)
#define	LED_OFF(p)		((p) = LED_CTRL_OFF)
#define	LED_ON(p)		((p) = LED_CTRL_ON)
#define LED_TOGGLE(p)		((p) ^= 1)

#ifdef LINK_LED
	#define Link_LED_On()		LED_ON(LINK_LED)
	#define Link_LED_Off()		LED_OFF(LINK_LED)
	#define Link_LED_Toggle()	LED_TOGGLE(LINK_LED)
	#define Is_Link_LED_On()	Is_LED_On(LINK_LED)
#else
	#define Link_LED_On()
	#define Link_LED_Off()
	#define Link_LED_Toggle()
	#define Is_Link_LED_On()	0
#endif // #ifdef LINK_LED

#ifdef RXTX_LED
	#define RxTx_LED_On()		LED_ON(RXTX_LED)
	#define RxTx_LED_Off()		LED_OFF(RXTX_LED)
	#define RxTx_LED_Toggle()	LED_TOGGLE(RXTX_LED)
	#define Is_RxTx_LED_On()	Is_LED_On(RXTX_LED)
#else
	#define RxTx_LED_On()
	#define RxTx_LED_Off()
	#define RxTx_LED_Toggle()
	#define Is_RxTx_LED_On()	0
#endif // #ifdef RXTX_LED

#ifdef POLLING_LED
	#define Polling_LED_On()	LED_ON(POLLING_LED)
	#define Polling_LED_Off()	LED_OFF(POLLING_LED)
	#define Polling_LED_Toggle()	LED_TOGGLE(POLLING_LED)
	#define Is_Polling_LED_On()	Is_LED_On(POLLING_LED)
#else
	#define Polling_LED_On()
	#define Polling_LED_Off()
	#define Polling_LED_Toggle()
	#define Is_Polling_LED_On()	0
#endif // #ifdef POLLING_LED

#ifdef UART_LED
	#define UART_LED_On()		LED_ON(UART_LED)
	#define UART_LED_Off()		LED_OFF(UART_LED)
	#define UART_LED_Toggle()	LED_TOGGLE(UART_LED)
	#define Is_UART_LED_On()	Is_LED_On(UART_LED)
#else
	#define UART_LED_On()
	#define UART_LED_Off()
	#define UART_LED_Toggle()
	#define Is_UART_LED_On()	0
#endif // #ifdef UART_LED

/*******************************************************************************

	MSG Function

********************************************************************************/

void  *MM_Alloc(UINT8 size);

void MM_Free(void *allocaddr);

void MM_Init(MSG_QUEUE *queueaddr);

#define MSG_Alloc(size) MM_Alloc(size)

#define MSG_AllocType(type) MM_Alloc(sizeof(type))

#define MSG_Free(allocaddr) MM_Free(allocaddr)

#define MSG_Init(queueaddr) MM_Init(queueaddr)

INT8 MSG_Add(void * Msg, UINT8 msgType, MSG_QUEUE * QueuePtr, UINT8 Length);

INT8 MSG_Fetch(MSG_QUEUE *QueuePtr);

#define MSG_Copy(dest, src, len) memcpy((void *)(dest), (const void *)(src), (size_t)(len));

void *insert_node(void **TailAddr, UINT8 TypeSize);

void delete_node(void **TailAddr, void **DelAddr);

/*******************************************************************************

	Debug Function

********************************************************************************/


/*******************************************************************************

	Endian Function

********************************************************************************/
#if BIGENDIAN
	void SWAPINT32(UINT32* Value);
	void SWAPINT16(UINT16* Value);
	void Endian_Modify(UINT8 *DataPtr,UINT8 mactype,UINT8 unettype);

	void BE_MAC_DATA_PKT(UINT8 *DataPtr);
	void BE_MAC_BCN_PKT(UINT8 *DataPtr);
	void BE_MCP_BCN_REQ(UINT8 *DataPtr);
	void BE_MCP_ASSO_REQ(UINT8 *DataPtr);
	void BE_MCP_ASSO_RSP(UINT8 *DataPtr);
	void BE_MCP_DISASSO_NTF(UINT8 *DataPtr);
#else
	#define SWAPINT32(Value)
	#define SWAPINT16(Value)
	#define Endian_Modify(DataPtr, mactype, unettype)
#endif

#endif // #ifndef _API_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -