?? cc2420db_library.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 + -