/******************************************************************************* * Copyright (c) 2011, 2016 Eurotech and/or its affiliates * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eurotech *******************************************************************************/ package org.eclipse.kura.net.admin.modem.sierra.mc87xx; import org.eclipse.kura.net.admin.modem.ModemPppConfigGenerator; import org.eclipse.kura.net.admin.modem.PppPeer; import org.eclipse.kura.net.admin.modem.telit.he910.TelitHe910AtCommands; import org.eclipse.kura.net.admin.visitor.linux.util.ModemXchangePair; import org.eclipse.kura.net.admin.visitor.linux.util.ModemXchangeScript; import org.eclipse.kura.net.modem.ModemConfig; import org.eclipse.kura.net.modem.ModemConfig.PdpType; public class SierraMc87xxConfigGenerator implements ModemPppConfigGenerator { @Override public PppPeer getPppPeer(String deviceId, ModemConfig modemConfig, String logFile, String connectScript, String disconnectScript) { PppPeer pppPeer = new PppPeer(); // default values pppPeer.setBaudRate(115200); pppPeer.setEnableDebug(true); pppPeer.setUseModemControlLines(true); pppPeer.setUseRtsCtsFlowControl(false); pppPeer.setLockSerialDevice(true); pppPeer.setPeerMustAuthenticateItself(false); pppPeer.setPeerToSupplyLocalIP(true); pppPeer.setAddDefaultRoute(true); pppPeer.setUsePeerDns(true); pppPeer.setAllowProxyArps(false); pppPeer.setAllowVanJacobsonTcpIpHdrCompression(false); pppPeer.setAllowVanJacobsonConnectionIDCompression(false); pppPeer.setAllowBsdCompression(false); pppPeer.setAllowDeflateCompression(false); pppPeer.setAllowMagic(false); pppPeer.setConnect_delay(1000); pppPeer.setLcp_echo_interval(0); // other config pppPeer.setLogfile(logFile); pppPeer.setProvider(deviceId); pppPeer.setPppUnitNumber(modemConfig.getPppNumber()); pppPeer.setConnectScript(connectScript); pppPeer.setDisconnectScript(disconnectScript); pppPeer.setApn(modemConfig.getApn()); pppPeer.setAuthType(modemConfig.getAuthType()); pppPeer.setUsername(modemConfig.getUsername()); pppPeer.setPassword(modemConfig.getPassword()); pppPeer.setDialString(modemConfig.getDialString()); pppPeer.setLcp_echo_interval(modemConfig.getLcpEchoInterval()); pppPeer.setLcp_echo_failure(modemConfig.getLcpEchoFailure()); return pppPeer; } @Override public ModemXchangeScript getConnectScript(ModemConfig modemConfig) { int pdpPid = 1; String apn = ""; String dialString = ""; if (modemConfig != null) { apn = modemConfig.getApn(); dialString = modemConfig.getDialString(); } ModemXchangeScript modemXchange = new ModemXchangeScript(); modemXchange.addmodemXchangePair(new ModemXchangePair("\"BUSY\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"VOICE\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"NO CARRIER\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"NO DIALTONE\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"NO DIAL TONE\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"ERROR\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"+++ath\"", "\"\"")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"AT\"", "OK")); modemXchange.addmodemXchangePair(new ModemXchangePair(formPDPcontext(pdpPid, PdpType.IP, apn), "OK")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"\\d\\d\\d\"", "OK")); modemXchange.addmodemXchangePair(new ModemXchangePair(formDialString(dialString), "\"\"")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"\\c\"", "CONNECT")); return modemXchange; } @Override public ModemXchangeScript getDisconnectScript(ModemConfig modemConfig) { ModemXchangeScript modemXchange = new ModemXchangeScript(); modemXchange.addmodemXchangePair(new ModemXchangePair("\"BUSY\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"VOICE\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"NO CARRIER\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"NO DIALTONE\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"NO DIAL TONE\"", "ABORT")); modemXchange.addmodemXchangePair(new ModemXchangePair("BREAK", "\"\"")); modemXchange.addmodemXchangePair(new ModemXchangePair("\"+++ATH\"", "\"\"")); return modemXchange; } /* * This method forms dial string */ private String formDialString(String dialString) { StringBuffer buf = new StringBuffer(); buf.append('"'); if (dialString != null) { buf.append(dialString); } buf.append('"'); return buf.toString(); } /* * This method forms PDP context * (e.g. AT+CGDCONT=<pid>,<pdp_type>,<apn>) */ private String formPDPcontext(int pdpPid, PdpType pdpType, String apn) { StringBuffer pdpcontext = new StringBuffer(TelitHe910AtCommands.pdpContext.getCommand()); pdpcontext.append('='); pdpcontext.append(pdpPid); pdpcontext.append(','); pdpcontext.append('"'); pdpcontext.append(pdpType.toString()); pdpcontext.append('"'); pdpcontext.append(','); pdpcontext.append('"'); if (apn != null) { pdpcontext.append(apn); } pdpcontext.append('"'); return pdpcontext.toString(); } }