androvac/app/src/main/java/eu/worn/apps/androvac/EufyIRModulation.java

42 lines
1.2 KiB
Java

package eu.worn.apps.androvac;
import java.util.ArrayList;
public class EufyIRModulation implements IRModulation {
// Pulse widths in microseconds
private static final int PREAMBLE[] = {3000, 3000};
private static final int LOGIC[][] = {{400, 600}, {400, 1600}};
private static final int TRAILER[] = {400, 20000};
private static final int REPEATS = 2;
public int getCarrierFrequency() { return 38000; }
public int[] modulate(byte[] frame) {
int pulses = PREAMBLE.length + LOGIC[0].length*frame.length + TRAILER.length;
ArrayList<Integer> fragment = new ArrayList<>(pulses);
for (int p: PREAMBLE)
fragment.add(p);
for (byte f : frame)
for (int bit = 0; bit < 8; bit++) {
int bv = ((f & (0x80 >> bit)) != 0 ? 1 : 0);
for (int p: LOGIC[bv])
fragment.add(p);
}
for (int p: TRAILER)
fragment.add(p);
int fs = fragment.size();
int res[] = new int[fs*(REPEATS+1)];
int pos = 0;
for (int e: fragment) {
for (int r = 0; r <= REPEATS; r++)
res[pos + fs * r] = e;
pos++;
}
return res;
}
}