/*******************************************************************************
* 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.usb598;
import java.util.Hashtable;
import org.eclipse.kura.net.admin.NetworkConfigurationService;
import org.eclipse.kura.net.admin.modem.CellularModemFactory;
import org.eclipse.kura.net.modem.CellularModem;
import org.eclipse.kura.net.modem.ModemDevice;
import org.eclipse.kura.net.modem.ModemTechnologyType;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.service.io.ConnectionFactory;
import org.osgi.util.tracker.ServiceTracker;
public class SierraUsb598ModemFactory implements CellularModemFactory {
private static SierraUsb598ModemFactory s_factoryInstance = null;
private static ModemTechnologyType s_type = ModemTechnologyType.EVDO;
private BundleContext s_bundleContext = null;
private Hashtable<String, SierraUsb598> m_modemServices = null;
private ConnectionFactory m_connectionFactory = null;
private SierraUsb598ModemFactory() {
this.s_bundleContext = FrameworkUtil.getBundle(NetworkConfigurationService.class).getBundleContext();
ServiceTracker<ConnectionFactory, ConnectionFactory> serviceTracker = new ServiceTracker<ConnectionFactory, ConnectionFactory>(
this.s_bundleContext, ConnectionFactory.class, null);
serviceTracker.open(true);
this.m_connectionFactory = serviceTracker.getService();
this.m_modemServices = new Hashtable<String, SierraUsb598>();
}
public static SierraUsb598ModemFactory getInstance() {
if (s_factoryInstance == null) {
s_factoryInstance = new SierraUsb598ModemFactory();
}
return s_factoryInstance;
}
@Override
public CellularModem obtainCellularModemService(ModemDevice modemDevice, String platform) throws Exception {
String key = modemDevice.getProductName();
SierraUsb598 sierraUsb598 = this.m_modemServices.get(key);
if (sierraUsb598 == null) {
sierraUsb598 = new SierraUsb598(modemDevice, this.m_connectionFactory);
sierraUsb598.bind();
this.m_modemServices.put(key, sierraUsb598);
} else {
sierraUsb598.setModemDevice(modemDevice);
}
return sierraUsb598;
}
@Override
public Hashtable<String, ? extends CellularModem> getModemServices() {
return this.m_modemServices;
}
@Override
public void releaseModemService(String usbPortAddress) {
SierraUsb598 sierraUsb598 = this.m_modemServices.remove(usbPortAddress);
sierraUsb598.unbind();
}
@Override
@Deprecated
public ModemTechnologyType getType() {
return s_type;
}
}