Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • briar/briar
  • goapunk/briar
  • johndoe4221/briar
  • thomas/briar
4 results
Show changes
package org.briarproject.bramble.plugin.lora;
import org.briarproject.bramble.api.battery.BatteryManager;
import org.briarproject.bramble.api.crypto.CryptoComponent;
import org.briarproject.bramble.api.event.EventBus;
import org.briarproject.bramble.api.lifecycle.IoExecutor;
import org.briarproject.bramble.api.network.NetworkManager;
import org.briarproject.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.Backoff;
import org.briarproject.bramble.api.plugin.BackoffFactory;
import org.briarproject.bramble.api.plugin.PluginCallback;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.api.system.LocationUtils;
import org.briarproject.bramble.api.system.ResourceProvider;
import org.briarproject.bramble.api.system.WakefulIoExecutor;
import org.briarproject.bramble.plugin.lora.AbstractLoRaPluginFactory;
import org.briarproject.bramble.plugin.lora.AbstractLoRaPlugin;
import org.briarproject.bramble.api.plugin.LoRaConstants;
import java.io.File;
import java.util.concurrent.Executor;
import javax.annotation.Nullable;
import javax.annotation.concurrent.Immutable;
import javax.inject.Inject;
import javax.net.SocketFactory;
import static java.util.logging.Level.INFO;
@Immutable
@NotNullByDefault
public class UnixLoRaPluginFactory extends AbstractLoRaPluginFactory {
@Inject
UnixLoRaPluginFactory(@IoExecutor Executor ioExecutor, @WakefulIoExecutor Executor wakefulIoExecutor,BackoffFactory backoffFactory, Clock clock, CryptoComponent crypto) {
super(ioExecutor, wakefulIoExecutor, backoffFactory, clock, crypto);
}
@Override
AbstractLoRaPlugin createPluginInstance(Backoff backoff, PluginCallback callback) {
return new UnixLoRaPlugin(ioExecutor, wakefulIoExecutor, clock, backoff, callback, LoRaConstants.MAX_LATENCY, LoRaConstants.MAX_IDLE_TIME);
}
}
package org.briarproject.bramble.plugin.lora.adapter;
import org.briarproject.bramble.plugin.lora.LoRaAdapter;
import org.briarproject.bramble.plugin.lora.L2PReaderFactory;
import java.lang.System;
import java.security.SecureRandom;
import java.util.Arrays;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
import com.sun.jna.Callback;
import com.sun.jna.Pointer;
import org.briarproject.bramble.util.ByteUtils;
import javax.inject.Inject;
import java.util.logging.Logger;
public class Pinedio implements LoRaAdapter {
private final SecureRandom secureRandom;
private L2PReaderFactory rf;
private static final Logger LOG =
Logger.getLogger(Pinedio.class.getName());
private CLibrary.appRxCallback_ RxCallback = new CLibrary.appRxCallback_() {
public void invoke(Pointer payload, byte RssiPkt, byte SnrPkt, byte SignalRssiPkt) {
byte[] b = payload.getByteArray(0,255);
LOG.info("Rx "+ByteUtils.bytesToHex(b));
rf.parse(b);
}
};
private interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary)Native.loadLibrary("pinedio-lora-driver", CLibrary.class);
interface appRxCallback_ extends Callback {
void invoke(Pointer payload, byte RssiPkt, byte SnrPkt, byte SignalRssiPkt);
}
void PinedioLoraRadioInitialize(appRxCallback_ RxCallback);
void PinedioLoraRadioSend(byte payload[]); //make sure we have exactly 255 elements!!
void PinedioLoraRadioStart();
void PinedioLoraRadioStop();
}
// @Inject
public Pinedio(L2PReaderFactory rf) {
this.rf = rf;
this.secureRandom = new SecureRandom(); //TODO: Dependency Inection
System.setProperty("jna.debug_load", "true");
System.setProperty("jna.library.path", "/root/Bakk2/briar/");
CLibrary.INSTANCE.PinedioLoraRadioInitialize(RxCallback);
//TODO: Stop
}
public void start() {
CLibrary.INSTANCE.PinedioLoraRadioStart();
}
public void stop() {
CLibrary.INSTANCE.PinedioLoraRadioStop();
}
public void send(byte payload[]) {
//padding - the end of Stream is already known at a higher level so we can just add random chars
int length = payload.length;
if(length < 255) {
byte[] padding = new byte[255-length];
secureRandom.nextBytes(padding);
payload = Arrays.copyOf(payload, 255);
System.arraycopy(padding, 0, payload, length, 255-length);
}
LOG.info("Tx " + ByteUtils.bytesToHex(payload));
CLibrary.INSTANCE.PinedioLoraRadioSend(payload);
}
//TODO: Destructor
}
\ No newline at end of file
......@@ -20,6 +20,7 @@ import org.briarproject.bramble.battery.DefaultBatteryManagerModule
import org.briarproject.bramble.event.DefaultEventExecutorModule
import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory
import org.briarproject.bramble.plugin.tor.WindowsTorPluginFactory
import org.briarproject.bramble.plugin.lora.UnixLoRaPluginFactory
import org.briarproject.bramble.system.ClockModule
import org.briarproject.bramble.system.DefaultTaskSchedulerModule
import org.briarproject.bramble.system.DefaultThreadFactoryModule
......@@ -92,16 +93,21 @@ internal class HeadlessModule(private val appDir: File) {
@Singleton
internal fun providePluginConfig(
unixTor: UnixTorPluginFactory,
winTor: WindowsTorPluginFactory
winTor: WindowsTorPluginFactory,
unixLoRa: UnixLoRaPluginFactory
): PluginConfig {
val duplex: List<DuplexPluginFactory> = when {
isLinux() || isMac() -> listOf(unixTor)
isWindows() -> listOf(winTor)
else -> emptyList()
}
var simplex: List<SimplexPluginFactory> = when {
isLinux() || isMac() -> listOf(unixLoRa)
else -> emptyList()
}
return object : PluginConfig {
override fun getDuplexFactories(): Collection<DuplexPluginFactory> = duplex
override fun getSimplexFactories(): Collection<SimplexPluginFactory> = emptyList()
override fun getSimplexFactories(): Collection<SimplexPluginFactory> = simplex
override fun shouldPoll(): Boolean = true
override fun getTransportPreferences(): Map<TransportId, List<TransportId>> = emptyMap()
}
......