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

📄 debug.c

📁 ucos在NEC平台下的移植
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
 * "Copyright (c) 2006 Robert B. Reese ("AUTHOR")"
 * All rights reserved.
 * (R. Reese, reese@ece.msstate.edu, Mississippi State University)
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose, without fee, and without written agreement is
 * hereby granted, provided that the above copyright notice, the following
 * two paragraphs and the author appear in all copies of this software.
 *
 * IN NO EVENT SHALL THE "AUTHOR" BE LIABLE TO ANY PARTY FOR
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
 * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE "AUTHOR"
 * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * THE "AUTHOR" SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
 * ON AN "AS IS" BASIS, AND THE "AUTHOR" HAS NO OBLIGATION TO
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
 *
 * Please maintain this header in its entirety when copying/modifying
 * these files.
 *
 * Files in this software distribution may have different usage
 * permissions, see the header in each file. Some files have NO permission
 * headers since parts of the original sources in these files
 * came from vendor  sources with no usage restrictions.
 *
 */

/*
V0.2 added PC-based binding         21/July/2006  RBR
V0.1 Initial Release                10/July/2006  RBR

*/



#include "compiler.h"               //compiler specific
#include "lrwpan_common_types.h"
#include "lrwpan_config.h"
#include "ieee_lrwpan_defs.h"
#include "hal.h"
#include "console.h"
#include "debug.h"
//#include "nwk.h"
//#include "aps.h"
#include "neighbor.h"

#include "mac_headers.h"
#include "swsZigbeeNWK_headers.h"
#include "aps_headers.h"

//extern reference
extern NEIGHBOR_RECORD        *pCurrentNeighborRecord;
extern NEIGHBOR_RECORD         currentNeighborRecord;    
extern NEIGHBOR_RECORD neighborTable[NEIGHBOR_TABLE_ENTRIES];

//print functions for debugging

#define LRWPAN_FRAME_TYPE_BEACON 0
#define LRWPAN_FRAME_TYPE_DATA 1
#define LRWPAN_FRAME_TYPE_ACK 2
#define LRWPAN_FRAME_TYPE_MAC_COMMENT 3

BYTE debug_level;

#define PRINTBIT(x)\
{\
	if(x){ conPrintROMString("1");}\
 else {conPrintROMString("0");}}

#ifdef LRWPAN_DEBUG

BYTE *dbgPrintNwkPacket (BYTE *ptr);
BYTE *dbgPrintApsPacket (BYTE *ptr);
void dbgPrintAfPacket (BYTE *ptr);
static void dbgPrintBeacon(BYTE *ptr);
static void dbgPrintMacCmd(BYTE *ptr, BYTE plen);

void dbgPrintMacPacketFCS(BYTE *ptr){
	//FCS 
    conPrintROMString("\nFCS bytes (2): ");
    conPrintUINT8(*ptr);ptr++;
    conPrintROMString("  ")
    conPrintUINT8(*ptr);
    conPrintROMString("\n");
}

void dbgPrintPacket(BYTE *ptr, BYTE plen){

	ptr = dbgPrintMacPacket(ptr,plen);
	if (!ptr) return;
	ptr = dbgPrintNwkPacket(ptr);
	if (!ptr) return;
    ptr = dbgPrintApsPacket(ptr);
    if (!ptr) return;
	dbgPrintAfPacket(ptr);
}


//returns a ptr to the payload if this is a data packet
BYTE *dbgPrintMacPacket (BYTE *ptr, BYTE plen){

	BYTE c, fcflsb;
	BYTE srcmode, dstmode;
	BYTE addr[8];
	SADDR saddr;
	BYTE len;
	BYTE *orgptr;

	orgptr = ptr;
	len = 0;
	//FCS LSB
	c = *ptr;ptr++;len++;	
	fcflsb = c;
	conPrintROMString("#########DUMPED PACKET################\n");
	conPrintROMString("Length: ");conPrintUINT8(plen);conPrintROMString("\n");
	conPrintROMString("Frame Control LSB: ");conPrintUINT8(c);conPrintROMString("\n");
	conPrintROMString("  Frame Type: ");
	switch(LRWPAN_GET_FRAME_TYPE(c)) {
		case LRWPAN_FRAME_TYPE_BEACON: conPrintROMString("BCN");break;
		case LRWPAN_FRAME_TYPE_DATA: conPrintROMString("DAT");break;
		case LRWPAN_FRAME_TYPE_ACK:conPrintROMString("ACK");break;
		case LRWPAN_FRAME_TYPE_MAC:conPrintROMString("MAC");break;
		default: conPrintROMString("RSV");break;
	}
	conPrintROMString(", Security:");
	PRINTBIT(LRWPAN_GET_SECURITY_ENABLED(c));
	conPrintROMString(", FrmPend:");
	PRINTBIT(LRWPAN_GET_FRAME_PENDING(c));
	conPrintROMString(", AckReq:");
	PRINTBIT(LRWPAN_GET_ACK_REQUEST(c));
	conPrintROMString(", IntraPan:");
	PRINTBIT(LRWPAN_GET_INTRAPAN(c));
	if (len >= plen) return(NULL);

	//FCS MSB
	c = *ptr;ptr++;len++;
	dstmode = LRWPAN_GET_DST_ADDR(c);
	conPrintROMString("\nFrame Control MSB: ");conPrintUINT8(c);conPrintROMString("\n");
	conPrintROMString("  DstMode: ");
	switch(dstmode) {
	  case LRWPAN_ADDRMODE_NOADDR: conPrintROMString("NONE");  break;
	  case LRWPAN_ADDRMODE_SADDR:  conPrintROMString("SHORT");  break;
	  case LRWPAN_ADDRMODE_LADDR:  conPrintROMString("LONG");  break;
	  default:  conPrintROMString("RSV");break;
	}
	conPrintROMString("\n  SrcMode: ");
	srcmode = LRWPAN_GET_SRC_ADDR(c);
	switch(srcmode) {
	  case LRWPAN_ADDRMODE_NOADDR: conPrintROMString("NONE");  break;
	  case LRWPAN_ADDRMODE_SADDR:  conPrintROMString("SHORT");  break;
	  case LRWPAN_ADDRMODE_LADDR:  conPrintROMString("LONG");  break;
	  default:  conPrintROMString("RSV");break;
	}
	if (len >= plen) return(NULL);


	//DSN
	c = *ptr;ptr++;len++;
	conPrintROMString("\nData Sequence Num: ");conPrintUINT8(c);conPrintROMString("\n");
	if (len >= plen) return(NULL);

	if (LRWPAN_IS_ACK(fcflsb)){
		dbgPrintMacPacketFCS(ptr);
		return(NULL);
	}
		

	//DEST PANID
	conPrintROMString("\n");
	if (dstmode != LRWPAN_ADDRMODE_NOADDR){
		conPrintROMString(" DstPanID (MSB 1st): ");
		addr[0] = *ptr; ptr++;
		addr[1] = *ptr; ptr++;
		len = len + 2;
		saddr = ((UINT16)addr[1]) << 8;
		saddr = saddr + addr[0];
		conPrintUINT16(saddr);
	}
	//addressing information
	if (dstmode == LRWPAN_ADDRMODE_SADDR || dstmode == LRWPAN_ADDRMODE_LADDR) {
		conPrintROMString("  DstAddress (MSB 1st): ");
		if (dstmode == LRWPAN_ADDRMODE_SADDR) {
			addr[0] = *ptr; ptr++;
			addr[1] = *ptr; ptr++;
			len = len + 2;
			saddr = ((UINT16)addr[1]) << 8;
			saddr = saddr + addr[0];
			conPrintUINT16(saddr);
		} else {
			conPrintLADDR_bytes(ptr);
			len = len + 8;
			ptr = ptr + 8;
		}
	}

	conPrintROMString("\n");
	if ( !LRWPAN_GET_INTRAPAN(fcflsb) &&
		srcmode != LRWPAN_ADDRMODE_NOADDR
		) {
			//PANID present if INTRAPAN is zero, and src is nonzero
			conPrintROMString(" SrcPanID(MSB 1st): ");
			addr[0] = *ptr; ptr++;
			addr[1] = *ptr; ptr++;
			len = len + 2;
			saddr = ((UINT16)addr[1]) << 8;
			saddr = saddr + addr[0];
			conPrintUINT16(saddr);

		}
		if (srcmode == LRWPAN_ADDRMODE_SADDR || srcmode == LRWPAN_ADDRMODE_LADDR) {
			conPrintROMString("  SrcAddress(MSB 1st): ");
			if (srcmode == LRWPAN_ADDRMODE_SADDR) {
				addr[0] = *ptr; ptr++;
				addr[1] = *ptr; ptr++;
				len = len + 2;
				saddr = ((UINT16)addr[1]) << 8;
				saddr = saddr + addr[0];
				conPrintUINT16(saddr);
			} else {
				conPrintLADDR_bytes(ptr);
				len = len+8;
				ptr = ptr + 8;				
			}
		}
		conPrintROMString("\n")


	//payload
    conPrintROMString("MAC payload size: ");
    conPrintUINT8(plen - (len + PACKET_FOOTER_SIZE) );
    conPCRLF();
    dbgPrintMacPacketFCS(orgptr+plen-PACKET_FOOTER_SIZE);
	if (LRWPAN_IS_DATA(fcflsb)) {
		return(ptr);
	} else if (LRWPAN_IS_BCN(fcflsb)){
		if ((plen - (len +PACKET_FOOTER_SIZE)) == LRWPAN_NWK_BEACON_SIZE) dbgPrintBeacon(ptr);
		return(NULL);
	}else if (LRWPAN_IS_MAC(fcflsb)){
          dbgPrintMacCmd(ptr, (plen - (len + PACKET_FOOTER_SIZE)));
		  return(NULL);
	}
	return(NULL);
}

static void dbgPrintMacCmd(BYTE *ptr, BYTE plen){
  conPrintROMString("MAC CMD: ");
  switch(*ptr) {

	 case LRWPAN_MACCMD_ASSOC_REQ : conPrintROMString("Assoc Request"); break;
	 case LRWPAN_MACCMD_ASSOC_RSP: conPrintROMString("Assoc Response"); break;
     case LRWPAN_MACCMD_DISASSOC: conPrintROMString("DisAssoc Request"); break;
     case LRWPAN_MACCMD_DATA_REQ : conPrintROMString("Data Request"); break;
     case LRWPAN_MACCMD_PAN_CONFLICT : conPrintROMString("Pan Conflict"); break;
     case LRWPAN_MACCMD_ORPHAN: conPrintROMString("Orphan Notification"); break;
     case LRWPAN_MACCMD_BCN_REQ: conPrintROMString("Beacon Request"); break;
     case LRWPAN_MACCMD_COORD_REALIGN: conPrintROMString("Coord Realign"); break;
     case LRWPAN_MACCMD_GTS_REQ : conPrintROMString("GTS Request"); break;
	 default: conPrintROMString("Unknown");

  }
 conPCRLF();
 ptr++;plen--;
 conPrintROMString("MAC Payload bytes: ");
 while (plen) {
	 conPrintUINT8(*ptr);
	 ptr++, plen--;
	 conPrintROMString(" ");
 }
 conPCRLF();
}

//works only for our beacons
static void dbgPrintBeacon(BYTE *ptr){
	BYTE i;

	conPrintROMString("Beacon Superframe, LSB: ");
	conPrintUINT8(*ptr);
	ptr++;
	conPrintROMString(", MSB: ");
	conPrintUINT8(*ptr);
	ptr++;
    conPCRLF();
	conPrintROMString("GTS spec: ");
    conPrintUINT8(*ptr);
	ptr++;
	conPrintROMString(", Pending addr: ");
    conPrintUINT8(*ptr);
	ptr++;
	conPCRLF();
    conPrintROMString("Beacon payload\n");
	conPrintROMString("Protocol: ");
	conPrintUINT8(*ptr); ptr++;
	conPrintROMString(", StkProfile: ");
    conPrintUINT8(*ptr); ptr++;
    conPrintROMString(", ProtoVer: ");
    conPrintUINT8(*ptr); ptr++;
    conPrintROMString(", Router Room?: ");
	if (*ptr) {
		 conPrintROMString("Y");
	}
	else {
		conPrintROMString("N");
	}
	ptr++;
    conPrintROMString(", Depth: ");
    conPrintUINT8(*ptr); ptr++;
    conPrintROMString(", EndDev Room?: ");
	if (*ptr) {
		conPrintROMString("Y");
	}
	else {

⌨️ 快捷键说明

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