|
节点与计算机利用串口通信2-数据包分析 1号节点和2号节点运行BlinkToRadio程序,BaseSation中snoop的作用就是即使1号发送数据指定目的地为2号节点,利用snoop也可以收到数据 使用命令,对串口进行监听 root@ubuntu:~# java net.tinyos.tools.Listen -comm serial@/dev/ttyUSB0:telosb serial@/dev/ttyUSB0:115200: resynchronising 00 FF FF 00 01 04 00 06 00 01 01 E2 00 FF FF 00 02 04 00 06 00 02 01 B9 00 FF FF 00 01 04 00 06 00 01 01 E3 00 FF FF 00 02 04 00 06 00 02 01 BA 串口接收到的数据如上所示,其数据包的含义为: 00 FF FF 00 01 04 00 06 00 01 01 E2 00(数据包包头) FF FF(目的地,广播FFFF为广播地址) 00 01(源地址,该信息为1号节点发送) 04(数据长度,4个字节) 00 (组号) 06(AM数据包的类型) 负载部分(用户定义) 00 01 (发送节点id)01 E2(计数,2字节) 对Listen程序java程序的分析: package net.tinyos.tools; import java.io.*; import net.tinyos.packet.*; import net.tinyos.util.*; import net.tinyos.message.*; public class Listen { //接收参数,建立连接 public static void main(String args[]) throws IOException { String source = null; PacketSource reader; if (args.length == 2 && args[0].equals("-comm")) { source = args[1]; } else if (args.length > 0) { System.err.println("usage: java net.tinyos.tools.Listen [-comm PACKETSOURCE]"); System.err.println(" (default packet source from MOTECOM environment variable)"); System.exit(2); } if (source == null) { reader = BuildSource.makePacketSource(); } else { //连接数据 reader = BuildSource.makePacketSource(source); } if (reader == null) { System.err.println("Invalid packet source (check your MOTECOM environment variable)"); System.exit(2); } try { reader.open(PrintStreamMessenger.err);//打开数据 for (;;) {//一直循环监听数据 byte[] packet = reader.readPacket(); //读到的数据交给packet Dump.printPacket(System.out, packet);//打印出来数据 System.out.println(); System.out.flush(); } } catch (IOException e) { System.err.println("Error on " + reader.getName() + ": " + e); } } }
|
|