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

📄 end_dev.c

📁 ucos在NEC平台下的移植
💻 C
字号:
//-----------------------------------------------------------------------------
//
//	file:			end_dev.c
//	description:	demonstration program, end device function
//	Version:		1.0
//
//-------------------------------------------------------------------------------
#pragma SFR
#pragma NOP
#pragma STOP
#pragma HALT
#pragma DI
#pragma EI

///////////////////////////////////////////////////////////////////////////////
//	Include
#include	"../include/config.h"
#include	<stdio.h>
#include	<mac_headers.h>
#include	"../include/780547.h"
#include	"../include/mac_def.h"

///////////////////////////////////////////////////////////////////////////////
// prototype 
int		UART_StartTx(char *buffer);

///////////////////////////////////////////////////////////////////////////////
//	extern
extern	volatile WORD g_myShortAddr;
extern	WORD		g_PanId;		// The PAN ID
extern	ADDRESS		g_coordAddr;	// Address of the Coordinator
extern	BYTE		pTxBuffer[PACKET_LENGTH];
extern	BOOL		g_KeyPush;
extern	BYTE		g_KeyMap;
extern	BOOL		g_DataConfirm;
extern	MAC_ENUM	g_DataStatus;

///extern         UINT32 test;////
///extern         char str[10];///

//-------------------------------------------------------------------
//	Init End-Device (Data transmitter side)
void	InitEndDevice()		// __fn__
{
	BYTE				i,j;
	MAC_ENUM			status;
	MAC_SCAN_RESULT		scanResult;		// Scan result (can overlap with the beacon payload or the MSDU buffer)
	PAN_DESCRIPTOR		*pPanDescriptor;
	BYTE				setAttributeValue;
	char				s[60];

	LED_ON(LED3);	// LED3 is ON when End device.

	/////////////////////////////////////////////////////////////////
	// Initialize variable
	g_myShortAddr = 0xFFFF;

	WDTE = 0xAC;		//	Reset Watch Dog Timer
	LED_ON(LED4);

	// Scan of the Coordinator
///UART_StartTx("\r\n-- Start mlmeScanRequest");

///sprintf(str, "\n%d\n", test);///
///UART_StartTx(str);///
	

	///halWait(1000);///

	do {
		status = mlmeScanRequest(
					ACTIVE_SCAN,			// Scan type
					MSC_VALID_CHANNELS,		// Scan channel
					SCAN_DURATION,			// Scan duration
					&scanResult);			// scan result
		

		UART_StartTx(".");					// display scan times
	} while ( status != SUCCESS );
	
	UART_StartTx("\r\n\r\n-- finish mlmeScanRequest....\r\n>");

	for (i = 0; i < scanResult.resultListSize; i++) {
		pPanDescriptor = &scanResult.sf.pPANDescriptorList[i];
		if (pPanDescriptor->superframeSpec & SS_ASSOCIATION_PERMIT_BM) {
			break;
		} // if
	} // for

	/* Check Association Permit */
	if ((pPanDescriptor->superframeSpec & SS_ASSOCIATION_PERMIT_BM) == 0 ) {
		UART_StartTx("\r\n-- ERROR: Coodinator could not permit Associate.\r\n>");
		while (1);
	}

	/* Check Beacon Order */
	if ((pPanDescriptor->superframeSpec & SS_BEACON_ORDER_BM) != 15) {
		UART_StartTx("\r\n-- mlmeSyncRequest\r\n>");
		mlmeSyncRequest(
			pPanDescriptor->logicalChannel,	// Channel
			TRUE);							// TrackBeacon ?
	} else {
		UART_StartTx("\r\n-- ERROR: Coodinator shall not transmit Beacon.\r\n>");
		while (1) ;
	}

	/////////////////////////////////////////////////////////////////
	// Get PAN_ID & Short Address
	memcpy(&g_coordAddr, &(pPanDescriptor->coordAddress), sizeof(ADDRESS));
	LED_OFF(LED3) ;
	g_PanId = pPanDescriptor->coordPanId;
	g_coordAddr.Short = pPanDescriptor->coordAddress.Short;

	sprintf(s, "\r\n-- PAN ID : 0x%x, Coodinator Address : 0x%x\r\n>", g_PanId, g_coordAddr.Short);
	UART_StartTx(s);

	/////////////////////////////////////////////////////////////////
	// Setting MAC Layer
	setAttributeValue = TRUE ;
	mlmeSetRequest(MAC_RX_ON_WHEN_IDLE, &setAttributeValue);		// Receive OK, while Idle
	mlmeSetRequest(MAC_PAN_ID, &g_PanId);
	setAttributeValue = (BYTE) BF(pPanDescriptor->superframeSpec, SS_BEACON_ORDER_BM, SS_BEACON_ORDER_IDX);
	mlmeSetRequest(MAC_BEACON_ORDER, &setAttributeValue);
	setAttributeValue = (BYTE) BF(pPanDescriptor->superframeSpec, SS_SUPERFRAME_ORDER_BM, SS_SUPERFRAME_ORDER_IDX);
	mlmeSetRequest(MAC_SUPERFRAME_ORDER, &setAttributeValue);

	UART_StartTx("\r\n-- Start mlmeAssociateRequest, and Waiting for my address.\r\n>");

	mlmeAssociateRequest(
//		CHANNEL_NO,			// Logical Channel No
		pPanDescriptor->logicalChannel, // Logical Channel No
		AM_SHORT_16,		// AddressMode for Coordinator
		g_PanId,			// PAN_ID for Coordinator
		&g_coordAddr,		// Pointer of Coordinatior Address
		(CI_DEVICE_TYPE_IS_FFD_BM | CI_POWER_SOURCE_BM | CI_RX_ON_WHEN_IDLE_BM),	// Capability Information
		FALSE);			 	// Security

	// Waiting for deciding myAddress
	while(g_myShortAddr == 0xFFFF);

	LED_OFF(LED4);

	UART_StartTx("\r\n\r\n-- finish mlmeAssociateRequest....\r\n>");
}

//-------------------------------------------------------------------
//	End-Device proc.
void	EndDevProc()	// __fn__
{
	BOOL	send;

	//-------------------------------------------------
	// Sense of Key Info
	if (g_KeyPush) {
		send = FALSE;
		memset(pTxBuffer, 0, PACKET_LENGTH); // Initialize the Transmitting Packet

		// SW4 pushed
		if (g_KeyMap & BIT01) {
			UART_StartTx("\r\n-- mcpsDataRequest SW4.\r\n>");
			send = pTxBuffer[0] = TRUE;
		}

		// SW3 pushed
		if (g_KeyMap & BIT00) {
			UART_StartTx("\r\n-- mcpsDataRequest SW3.\r\n>");
		 	send = pTxBuffer[1] = TRUE;
		}

		/////////////////////////////////////////////////////////
		//	Transmitting the Switch Info.
		if (send) {
			mcpsDataRequest(
				SRC_ADDR_SHORT | DEST_ADDR_SHORT,	// Address mode for source and destination
				g_PanId,							// Source PAN identifier
				(ADDRESS*) &g_myShortAddr,			// Pointer to the source address (short or extended)
				g_PanId,							// Destination PAN identifier
				&g_coordAddr,						// Pointer to the destination address (short or extended)
				PACKET_LENGTH,						// The length of pMsdu[]
				pTxBuffer,							// A pointer to the packet payload
				7,									// A handle to this packet which is used later on with mcpsPurgeRequest() and mcpsDataConfirm()
				TX_OPT_NONE);						// txOptions
		}

		g_KeyPush = FALSE;	// Permit Key interrupt again
	}

	//-------------------------------------------------
	// Data confirmation
	if (g_DataConfirm) {
		if (g_DataStatus == SUCCESS) {
			UART_StartTx("\r\n-- mcpsDataConfirm SUCCESS.\r\n>");
		} else {
			UART_StartTx("\r\n-- mcpsDataConfirm FAILED.\r\n>");
		}
		g_DataConfirm = FALSE;
	}

}

⌨️ 快捷键说明

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