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

📄 cc2420db_library.m

📁 MatLab图像传感器网络仿真平台WiSNAP
💻 M
字号:
function status = cc2420db_library(command);
%Chipcon CC2420DB Wireless Mote Library.
%   STATUS = CC2420DB_LIBRARY(COMMAND);
%
%   Input Parameters:
%   ================
%
%      command -----------> Library function (string):
%                           'open'  - Open communications session.
%                           'init'  - Initialize wireless mote.
%                           'recv'  - Receive IEEE 802.15.4 MAC packet.
%                           'send'  - Send IEEE 802.15.4 MAC packet.
%                           'close' - Close communications session.
%
%   Output Parameters:
%   =================
%
%      status ------------> Success status (-1 = error, +1 = success).
%
%   See also N/A.

% Stephan Hengstler
% Stanford Wireless Sensor Networks Lab
% February 08, 2005
%
% Last modified: 02-21-2005

%************************ Chipcon CC2420DB Wireless Mote Library **************************

%--- Section: Global Variables ------------------------------------------------------------

global		handle;							% device handle
global 		PORT;								% communications port
global		reg;								% register structure
global		PhyInfo;							% PHY information structure
global		RxMacPckt;						% receive MAC packet structure
global		TxMacPckt;						% transmit MAC packet structure

%--- Section: System Parameters -----------------------------------------------------------

WM_INT_BAUDRATE		= 115200;			% Interface: serial baud rate.

CC_REG_MANFIDL			= hex2dec('1E');	% CC2420 Register: Manufacturer ID, low 16 bits.
CC_REG_MANFIDH			= hex2dec('1F');	% CC2420 Register: Manufacturer ID, high 16 bits.

%--- Command: Open Communications Session -------------------------------------------------

if (~isempty(strmatch('open',command,'exact')))
   
	% open serial port to wireless mote
	handle 		= com_open(PORT,WM_INT_BAUDRATE);
   if (handle < 0), status = -1, return, end
   
   % return status
   status		= 1;
   
%--- Command: Read ATmega128 Register -----------------------------------------------------

elseif (~isempty(strmatch('read_at_register',command,'exact')))

	% generate command packet
	packet		= sprintf('a%02x\n',reg.address);

	% execute command
	status		= com_send(handle,packet);
   packet		= com_recv(handle,512);

	% parse reponse packet
   response		= sscanf(packet,'%*2c%2x%2x');
   reg.address	= response(1);
   reg.value	= response(2);
   
   % return status
   status		= 1;
   
%--- Command: Write ATmega128 Register ----------------------------------------------------

elseif (~isempty(strmatch('write_at_register',command,'exact')))

	% generate command packet
	packet		= sprintf('b%02x%02x\n',reg.address,reg.value);

	% execute command
	status		= com_send(handle,packet);
   packet		= com_recv(handle,512);

	% parse reponse packet
   response		= sscanf(packet,'%*2c%2x%2x');
   reg.address	= response(1);
   reg.value	= response(2);
   
   % return status
   status		= 1;

%--- Command: Read CC2420 Register --------------------------------------------------------

elseif (~isempty(strmatch('read_cc_register',command,'exact')))

	% generate command packet
	packet		= sprintf('c%02x\n',reg.address);

	% execute command
	status		= com_send(handle,packet);
   packet		= com_recv(handle,512);

	% parse reponse packet
   response		= sscanf(packet,'%*2c%2x%4x');
   reg.address	= response(1);
   reg.value	= response(2);
   
   % return status
   status		= 1;
   
%--- Command: Write CC2420 Register -------------------------------------------------------

elseif (~isempty(strmatch('write_cc_register',command,'exact')))

	% generate command packet
	packet		= sprintf('d%02x%04x\n',reg.address,reg.value);

	% execute command
	status		= com_send(handle,packet);
   packet		= com_recv(handle,512);

	% parse reponse packet
   response		= sscanf(packet,'%*2c%2x%4x');
   reg.address	= response(1);
   reg.value	= response(2);
   
   % return status
   status		= 1;
   
%--- Command: Initialize Wireless Mote ----------------------------------------------------

elseif (~isempty(strmatch('init',command,'exact')))

	% generate command packet
	packet		= sprintf('i%02x%04x%04x\n',PhyInfo.Channel,PhyInfo.PanId,PhyInfo.Address);

	% execute command
	status		= com_send(handle,packet);
   packet		= com_recv(handle,512);

	% parse reponse packet
   response				= sscanf(packet,'%*2c%2x%4x%4x');
   PhyInfo.Channel	= response(1);
   PhyInfo.PanId		= response(2);
   PhyInfo.Address	= response(3);
   
	% get transceiver manufacturer id
	reg.address	= CC_REG_MANFIDH;
	status		= cc2420db_library('read_cc_register');
	radio_id		= reg.value;
	reg.address	= CC_REG_MANFIDL;
	status		= cc2420db_library('read_cc_register');
	radio_id		= dec2hex(2^16*radio_id+reg.value,8)
   
   % return status
   status		= 1;
   
%--- Command: Receive IEEE 802.15.4 MAC Packet --------------------------------------------

elseif (~isempty(strmatch('recv',command,'exact')))

	% generate command packet
	packet		= sprintf('r\n');

	% execute command
	status		= com_send(handle,packet);
   packet		= com_recv(handle,512);

   % new receive packet available?
   if (length(packet) < 14)
      
      % return status
      RxMacPckt	= -1;
      status		= -1;
      return;
      
   end
   
	% parse reponse packet
   response					= sscanf(packet(1:15),'%*2c%2x%4x%4x%2x');
   
   % extract packet header
   RxMacPckt.seqNumber	= response(1);
   RxMacPckt.scrAddr		= response(2);
   RxMacPckt.scrPanId	= response(3);
   RxMacPckt.length		= response(4);
   
   % extract packet payload
   RxMacPckt.pPayload	= sscanf(packet(15:15+2*RxMacPckt.length-1),'%2x')';
   
   % extract packet footer
   response					= sscanf(packet(15+2*RxMacPckt.length:end),'%2x');
   RxMacPckt.ackRequest	= response(1);
   RxMacPckt.rssi			= response(2);
   
   % typecast received signal strength indicator to signed
   if (RxMacPckt.rssi > 127)
		RxMacPckt.rssi			= RxMacPckt.rssi - 256;
	end      
      
   % return status
   status		= 1;
   
%--- Command: Send IEEE 802.15.4 MAC Packet -----------------------------------------------

elseif (~isempty(strmatch('send',command,'exact')))

	% add packet header
   packet		= sprintf('s%04x%04x%02x',TxMacPckt.destPanId,TxMacPckt.destAddr,...
   	TxMacPckt.length);

   % add packet payload
   packet		= [packet,sprintf('%02x',TxMacPckt.pPayload)];
   
	% add packet footer
   packet		= [packet,sprintf('%02x\n',TxMacPckt.ackRequest)];
   
   % execute command
	status		= com_send(handle,packet);
   packet		= com_recv(handle,512);
   
	% parse reponse packet
   response		= sscanf(packet,'%*2c%2x');
   status		= response(1);
      
   % send packet successful?
   if (status == 0)
      
      % return status
      status		= -1;
      return;
      
   end
   
   % return status
   status		= 1;

%--- Command: Close Communications Session ------------------------------------------------

elseif (~isempty(strmatch('close',command,'exact')))

	% close serial port
	com_close(handle);

   % return status
   status		= 1;

%--- Command: Undefined -------------------------------------------------------------------

else

   % return status
   status		= -1;

end

⌨️ 快捷键说明

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