package de.uniluebeck.itm.wsn.drivers.pacemate; import com.google.common.collect.Maps; import com.google.inject.AbstractModule; import com.google.inject.TypeLiteral; import com.google.inject.assistedinject.FactoryModuleBuilder; import com.google.inject.matcher.Matchers; import com.google.inject.name.Names; import de.uniluebeck.itm.wsn.drivers.core.Connection; import de.uniluebeck.itm.wsn.drivers.core.Device; import de.uniluebeck.itm.wsn.drivers.core.SerialPortDevice; import de.uniluebeck.itm.wsn.drivers.core.operation.*; import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortConnection; import de.uniluebeck.itm.wsn.drivers.core.serialport.SerialPortProgrammingMode; import de.uniluebeck.itm.wsn.drivers.isense.iSenseResetOperation; import de.uniluebeck.itm.wsn.drivers.isense.iSenseSerialPortConnection; import javax.annotation.Nullable; import java.util.Map; public class PacemateModule extends AbstractModule { private final Map<String, String> configuration; public PacemateModule() { this(null); } public PacemateModule(@Nullable final Map<String, String> configuration) { this.configuration = configuration; } @Override protected void configure() { bind(new TypeLiteral<Map<String, String>>() { } ) .annotatedWith(Names.named("configuration")) .toInstance(configuration != null ? configuration : Maps.<String, String>newHashMap()); SerialPortConnection connection = new iSenseSerialPortConnection(); PacemateProgrammingModeInterceptor interceptor = new PacemateProgrammingModeInterceptor(); requestInjection(interceptor); bindInterceptor(Matchers.any(), Matchers.annotatedWith(SerialPortProgrammingMode.class), interceptor); bind(Device.class).to(SerialPortDevice.class); bind(SerialPortConnection.class).toInstance(connection); bind(Connection.class).toInstance(connection); install(new FactoryModuleBuilder() .implement(EraseFlashOperation.class, PacemateEraseFlashOperation.class) .implement(GetChipTypeOperation.class, PacemateGetChipTypeOperation.class) .implement(IsNodeAliveOperation.class, DefaultIsNodeAliveOperation.class) .implement(ProgramOperation.class, PacemateProgramOperation.class) .implement(ReadFlashOperation.class, PacemateReadFlashOperation.class) .implement(ReadMacAddressOperation.class, PacemateReadMacAddressOperation.class) .implement(ResetOperation.class, iSenseResetOperation.class) .implement(WriteFlashOperation.class, PacemateWriteFlashOperation.class) .implement(WriteMacAddressOperation.class, PacemateWriteMacAddressOperation.class) .build(OperationFactory.class) ); } }