📄 gatewaymote.java
字号:
short byte_arg = (short)Integer.parseInt(argv[2]); command.set_type_data_data_args_byte_arg(byte_arg); } else if (cmd.equals("get_id")) { command.set_type_data_type(S4_CMD_GET_ID); } else if (cmd.equals("freeze")) { command.set_type_data_type(S4_CMD_FREEZE); } else if (cmd.equals("resume")) { command.set_type_data_type(S4_CMD_RESUME); } else if (cmd.equals("reset")) { command.set_type_data_type(S4_CMD_RESET); } else if (cmd.equals("route_to")) { // src_id route_to beacon dest_id if (argv.length < 4) { return null; } command.set_type_data_type(S4_CMD_APP_ROUTE_TO); //short valid = 0; /* for (int i = 5; i < argv.length && i < 20; i++) { //valid |= 1 << (i-5); System.out.println("Setting coord "+i+" to " +(short)Integer.parseInt(argv[i])); command.setElement_type_data_data_args_dest_coords_comps( i-5,(short)Integer.parseInt(argv[i]) ); }*/ //changed by maoy short closestBeacon = (short)Integer.parseInt(argv[2]); System.out.println("Setting the closest beacon to "+ closestBeacon); command.set_type_data_data_args_dest_closest_beacon(closestBeacon); //command.set_type_data_data_args_dest_coords_valid(valid); command.set_type_data_data_args_dest_addr((short)Integer.parseInt(argv[3])); //command.set_type_data_data_args_dest_mode((byte)Integer.parseInt(argv[3])); } else if (cmd.equals("adv_route_to")) { //maoy: this is new if (argv.length < 7) { return null; } command.set_type_data_type(S4_CMD_APP_ADV_ROUTE_TO); short closestBeacon = (short)Integer.parseInt(argv[2]); System.out.println("Setting the closest beacon to "+ closestBeacon); command.set_type_data_data_args_dest_closest_beacon(closestBeacon); command.set_type_data_data_args_dest_addr((short)Integer.parseInt(argv[3])); command.set_type_data_data_args_dest_init_delay((short)Integer.parseInt(argv[4])); command.set_type_data_data_args_dest_n_packets((short)Integer.parseInt(argv[5])); command.set_type_data_data_args_dest_interval((short)Integer.parseInt(argv[6])); } else { return null; } for (int trial=0;trial<TOTAL_TRIAL;trial++) { try { if (verbose) { System.err.print("Sending payload: "); for (int i = 0; i < command.dataLength(); i++) { System.err.print(Integer.toHexString(command.dataGet()[i] & 0xff)+ " "); } //System.err.println(command.toString()); System.err.println(); //%%%%%%%%%%%%%%%55 } mote.send(gateway_addr, command); synchronized (this) { if (response_received == false) { if (verbose) System.err.println("Waiting for response to command..."); this.wait(TIMEOUT); } if (response_received == false) { System.out.println("Warning: Timed out waiting for response to command!"); //saveSequenceNo(sequenceNo+1); //return null; if (cmd.equals("reset")) break; } } if (response_received) { saveSequenceNo(sequenceNo+1); return cmd_result; } } catch(Exception e) { e.printStackTrace(); } } System.out.println("ERROR: Timed out waiting for response to command!"); saveSequenceNo(sequenceNo+1); return null; } public static void main(String[] argv) throws IOException{ String cmd; short mote_id = 0; int gateway_addr = 0; short sequenceNo = 0; if (argv.length < 3) { //usage(); System.exit(-1); } //gateway_addr try { if (argv[0].startsWith("0x") || argv[0].startsWith("0X")) { gateway_addr = (byte)Integer.parseInt(argv[0].substring(2), 16); } else { gateway_addr = (byte)Integer.parseInt(argv[0]); } } catch (NumberFormatException nfe) { System.exit(-1); } String [] args = new String[argv.length-1]; System.arraycopy(argv, 1, args, 0, argv.length-1); GatewayMote m = new GatewayMote(gateway_addr, "cmd"); String [] test = "1 get_coords".split("\\s"); m.runCommand(test, true); test = "500 get_coords".split("\\s"); m.runCommand(test, true); S4CommandResponseMessage result = m.runCommand(args, false); System.out.println(result); System.exit(0); } public void messageReceived(int dest_addr, Message m) { S4CommandResponseMessage cm = (S4CommandResponseMessage) m; cmd_result = cm; if (bPrintMsg) { //System.out.println("Received message"); short cmd = cm.get_type_data_type(); if (cmd==S4_CMD_GET_FR_TIMER) { System.out.println("timer: "+cm.get_type_data_data_args_short_arg()); } if (cmd==S4_CMD_GET_RADIO_PWR) { System.out.println("power: "+cm.get_type_data_data_args_byte_arg()); } else if(cmd == S4_CMD_GET_INFO){ String s = ""; try { s += " [type_data.data.args.info.coords.comps="; for (int i = 0; i < 8; i++) { s += "0x"+Long.toHexString(cm.getElement_type_data_data_args_info_coords_comps(i) & 0xff)+" "; } s += "]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.info.neighbors=0x"+Long.toHexString(cm.get_type_data_data_args_info_neighbors())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.info.links=0x"+Long.toHexString(cm.get_type_data_data_args_info_links())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.info.is_root_beacon=0x"+Long.toHexString(cm.get_type_data_data_args_info_is_root_beacon())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.info.power=0x"+Long.toHexString(cm.get_type_data_data_args_info_power())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.info.routing_table_size=0x"+Long.toHexString(cm.get_type_data_data_args_info_routing_table_size())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } System.out.println(s); } else if (cmd==S4_CMD_GET_COORDS) { String s = ""; s += " [type_data.data.args.coords.comps="; for (int i = 0; i < 8; i++) { s += "0x"+Long.toHexString(cm.getElement_type_data_data_args_coords_comps(i) & 0xff)+" "; } s += "]\n"; System.out.println(s); } else if (cmd == S4_CMD_GET_ID ) { String s = ""; try { s += "install_id=0x" +Long.toHexString(cm.get_type_data_data_args_ident_install_id()) +"time: " +Long.toHexString(cm.get_type_data_data_args_ident_compile_time()) +"\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } //try { // s += " [type_data.data.args.ident.compile_time=0x"+Long.toHexString(cm.get_type_data_data_args_ident_compile_time())+"]\n"; //} catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } System.out.println(s); } else if (cmd == S4_CMD_GET_LINK_INFO ) { String s = ""; try { s += " [type_data.data.args.link_info.state=0x"+Long.toHexString(cm.get_type_data_data_args_link_info_state())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.addr=0x"+Long.toHexString(cm.get_type_data_data_args_link_info_addr())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.reverse_quality=0x"+Long.toHexString(cm.get_type_data_data_args_link_info_reverse_quality())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.reverse_expiration=0x"+Long.toHexString(cm.get_type_data_data_args_link_info_reverse_expiration())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.quality=0x"+Long.toHexString(cm.get_type_data_data_args_link_info_quality())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.strength=0x"+Long.toHexString(cm.get_type_data_data_args_link_info_strength())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.last_seqno=0x"+Long.toHexString(cm.get_type_data_data_args_link_info_last_seqno())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.missed="; for (int i = 0; i < 3; i++) { s += "0x"+Long.toHexString(cm.getElement_type_data_data_args_link_info_missed(i) & 0xff)+" "; } s += "]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.received="; for (int i = 0; i < 3; i++) { s += "0x"+Long.toHexString(cm.getElement_type_data_data_args_link_info_received(i) & 0xff)+" "; } s += "]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.age=0x"+Long.toHexString(cm.get_type_data_data_args_link_info_age())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.link_info.chances=0x"+Long.toHexString(cm.get_type_data_data_args_link_info_chances())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } System.out.println(s); } else if (cmd == S4_CMD_GET_ROUTING_TABLE) { String s = ""; try { s += " [type_data.data.args.routing_table.entry.valid=0x"+Long.toHexString(cm.get_type_data_data_args_routing_table_entry_valid())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.routing_table.entry.dest=0x"+Long.toHexString(cm.get_type_data_data_args_routing_table_entry_dest())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.routing_table.entry.parent=0x"+Long.toHexString(cm.get_type_data_data_args_routing_table_entry_parent())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.routing_table.entry.last_seqno=0x"+Long.toHexString(cm.get_type_data_data_args_routing_table_entry_last_seqno())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.routing_table.entry.hops=0x"+Long.toHexString(cm.get_type_data_data_args_routing_table_entry_hops())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.routing_table.entry.scope=0x"+Long.toHexString(cm.get_type_data_data_args_routing_table_entry_scope())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += " [type_data.data.args.routing_table.entry.updated=0x"+Long.toHexString(cm.get_type_data_data_args_routing_table_entry_updated())+"]\n"; } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } System.out.println(s); } //added by Feng Wang on Sept. 28 //maoy: changed the format for easy parsing else if (cmd == S4_CMD_GET_STATS) { String s = "get_stats::: src:"+cm.get_type_data_cmd_addr(); try { s += ",sent_bv:"+cm.get_type_data_data_args_stats_sent_bv(); } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += ",sent_dv:"+cm.get_type_data_data_args_stats_sent_dv(); } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += ",sent_data:"+cm.get_type_data_data_args_stats_sent_data(); } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } try { s += ",routing_state:"+cm.get_type_data_data_args_stats_routing_state(); } catch (ArrayIndexOutOfBoundsException aioobe) { /* Skip field */ } System.out.println(s); s += "\n"; } else { System.out.println("Received message: "+cm); //System.err.println(cm); } } synchronized (this) { response_received = true; this.notifyAll(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -