001package jmri.jmrix.can.adapters.gridconnect.net; 002 003import jmri.jmrix.can.CanSystemConnectionMemo; 004import jmri.jmrix.can.ConfigurationManager; 005import jmri.jmrix.can.TrafficController; 006import jmri.jmrix.can.adapters.gridconnect.GcTrafficController; 007import jmri.jmrix.can.adapters.gridconnect.canrs.MergTrafficController; 008 009/** 010 * Implements SerialPortAdapter for the OpenLCB system network connection. 011 * <p> 012 * This connects via a telnet connection. Normally controlled by the 013 * NetworkDriverFrame class. 014 * 015 * @author Bob Jacobsen Copyright (C) 2010 016 */ 017public class NetworkDriverAdapter extends jmri.jmrix.AbstractNetworkPortController { 018 019 public NetworkDriverAdapter() { 020 super(new CanSystemConnectionMemo()); 021 option1Name = "Gateway"; // NOI18N 022 options.put(option1Name, new Option(Bundle.getMessage("ConnectionGateway"), new String[]{"Pass All", "Filtering"})); 023 option2Name = "Protocol"; // NOI18N 024 options.put(option2Name, new Option(Bundle.getMessage("ConnectionProtocol"), jmri.jmrix.can.ConfigurationManager.getSystemOptions(), false)); 025 super.setManufacturer(jmri.jmrix.openlcb.OlcbConnectionTypeList.OPENLCB); // overriden by MERG Connections. 026 allowConnectionRecovery = true; 027 } 028 029 /** 030 * Set up all of the other objects to operate with the CAN bus connected via 031 * this TCP/IP link. 032 */ 033 @Override 034 public void configure() { 035 TrafficController tc; 036 switch (getOptionState(option2Name)) { 037 case ConfigurationManager.MERGCBUS: 038 case ConfigurationManager.SPROGCBUS: 039 // Register the CAN traffic controller being used for this connection 040 tc = new MergTrafficController(); 041 tc.setCanId(getOptionState("CANID")); 042 break; 043 default: 044 tc = new GcTrafficController(); 045 break; 046 } 047 this.getSystemConnectionMemo().setTrafficController(tc); 048 049 // Now connect to the traffic controller 050 log.debug("Connecting port"); 051 tc.connectPort(this); 052 this.getSystemConnectionMemo().setProtocol(getOptionState(option2Name)); 053 054 // do central protocol-specific configuration 055 this.getSystemConnectionMemo().configureManagers(); 056 if (socketConn != null) { 057 log.info("{} Connection via {} complete with {}", 058 this.getSystemConnectionMemo().getUserName(), 059 getOptionState(option2Name), socketConn.getInetAddress()); 060 } 061 } 062 063 @Override 064 public boolean status() { 065 return opened; 066 } 067 068 @Override 069 public CanSystemConnectionMemo getSystemConnectionMemo() { 070 return (CanSystemConnectionMemo) super.getSystemConnectionMemo(); 071 } 072 073 /** 074 * {@inheritDoc} 075 */ 076 @Override 077 protected void resetupConnection() { 078 log.info("reconnected to Network after lost connection"); 079 if (opened) { 080 this.getSystemConnectionMemo().getTrafficController().connectPort(this); 081 } 082 } 083 084 private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(NetworkDriverAdapter.class); 085 086}