Last active
April 29, 2025 13:45
-
-
Save bakueikozo/7ffa24cab95850fba6d600025bc0aa25 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package jp.co.signal.pics.service; | |
import java.util.List; | |
import jp.co.signal.pics.model.Intersection; | |
import jp.co.signal.pics.model.PedestrianSignal; | |
/* loaded from: classes.dex */ | |
public interface PICSService { | |
/* loaded from: classes.dex */ | |
public enum ControlRequestResult { | |
None(0), | |
Received(1), | |
Receiving(2), | |
Failure(3), | |
RingNoReceived(4), | |
RingReceived(5); | |
private final int a; | |
ControlRequestResult(int i) { | |
this.a = i; | |
} | |
public static ControlRequestResult valueOf(int i) { | |
ControlRequestResult[] values; | |
for (ControlRequestResult controlRequestResult : values()) { | |
if (controlRequestResult.getValue() == i) { | |
return controlRequestResult; | |
} | |
} | |
return None; | |
} | |
public int getValue() { | |
return this.a; | |
} | |
} | |
/* loaded from: classes.dex */ | |
public enum SecurityWarningLevel { | |
None(0), | |
Low(1), | |
Middle(2), | |
High(3); | |
private final int a; | |
SecurityWarningLevel(int i) { | |
this.a = i; | |
} | |
public static SecurityWarningLevel valueOf(int i) { | |
SecurityWarningLevel[] values; | |
for (SecurityWarningLevel securityWarningLevel : values()) { | |
if (securityWarningLevel.getValue() == i) { | |
return securityWarningLevel; | |
} | |
} | |
return None; | |
} | |
public int getValue() { | |
return this.a; | |
} | |
} | |
/* loaded from: classes.dex */ | |
public enum SignalControlChannel { | |
Channel1(1), | |
Channel2(2), | |
Both(3); | |
private final int a; | |
SignalControlChannel(int i) { | |
this.a = i; | |
} | |
public static SignalControlChannel valueOf(int i) { | |
SignalControlChannel[] values; | |
for (SignalControlChannel signalControlChannel : values()) { | |
if (signalControlChannel.getValue() == i) { | |
return signalControlChannel; | |
} | |
} | |
return null; | |
} | |
public int getValue() { | |
return this.a; | |
} | |
} | |
/* loaded from: classes.dex */ | |
public enum SignalControlType { | |
None(0), | |
Recall(1), | |
Extension(2), | |
RecallAndExtension(3), | |
RingExtension(4); | |
private final int a; | |
SignalControlType(int i) { | |
this.a = i; | |
} | |
public static SignalControlType valueOf(int i) { | |
SignalControlType[] values; | |
for (SignalControlType signalControlType : values()) { | |
if (signalControlType.getValue() == i) { | |
return signalControlType; | |
} | |
} | |
return null; | |
} | |
public int getValue() { | |
return this.a; | |
} | |
} | |
/* loaded from: classes.dex */ | |
public enum SignalState { | |
NoSignal(0), | |
RedSignal(1), | |
BlinkGreenSignal(2), | |
GreenSignal(3), | |
None(4); | |
private final int a; | |
SignalState(int i) { | |
this.a = i; | |
} | |
public static SignalState valueOf(int i) { | |
SignalState[] values; | |
for (SignalState signalState : values()) { | |
if (signalState.getValue() == i) { | |
return signalState; | |
} | |
} | |
return null; | |
} | |
public int getValue() { | |
return this.a; | |
} | |
} | |
List<Intersection> getCurrentIntersections(); | |
PICSServiceListener getListener(); | |
SecurityWarningLevel getSecurityWarning(); | |
ServiceAreaMonitor getServiceAreaMonitor(); | |
boolean isSendingExtensionRequest(); | |
boolean isServiceArea(); | |
void sendExtensionRequest(Intersection intersection, PedestrianSignal pedestrianSignal, SignalControlChannel signalControlChannel, String str); | |
void setListener(PICSServiceListener pICSServiceListener); | |
void setServiceAreaMonitor(ServiceAreaMonitor serviceAreaMonitor); | |
void start(); | |
void stop(); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package jp.co.signal.pics.device; | |
import android.bluetooth.BluetoothDevice; | |
import android.util.Log; | |
import java.nio.ByteBuffer; | |
import java.nio.ByteOrder; | |
import java.util.Collections; | |
import java.util.Date; | |
import java.util.Queue; | |
import java.util.concurrent.ConcurrentLinkedQueue; | |
import jp.blead.beacon.utilities.HexStringUtil; | |
import jp.blead.device.AdvertiseData; | |
import jp.blead.device.BLEDevice; | |
import jp.co.signal.pics.model.Intersection; | |
import jp.co.signal.pics.model.PedestrianSignal; | |
import jp.co.signal.pics.service.PICSService; | |
/* loaded from: classes.dex */ | |
public class PICSBLEDevice extends BLEDevice { | |
private static final String x = "jp.co.signal.pics.device.PICSBLEDevice"; | |
private int h; | |
private Intersection i; | |
private String j; | |
private byte k; | |
private long l; | |
private boolean m; | |
private Date n; | |
private Date o; | |
private Date p; | |
private long q; | |
private boolean u; | |
private Queue<Integer> v; | |
private byte r = 0; | |
private int[] s = {206, 1}; | |
private int[] t = {88, 1}; | |
private boolean w = false; | |
public PICSBLEDevice(BluetoothDevice bluetoothDevice, int i, AdvertiseData advertiseData, Intersection intersection, long j) { | |
super(bluetoothDevice, i, null); | |
this.q = 10000L; | |
this.i = intersection; | |
this.q = j; | |
setAdvertiseData(advertiseData); | |
} | |
private void a() { | |
boolean z; | |
PICSService.ControlRequestResult controlRequestResult; | |
Intersection intersection; | |
Intersection intersection2; | |
PICSService.ControlRequestResult controlRequestResult2; | |
PICSService.SignalControlType signalControlType; | |
PedestrianSignal pedestrianSignal; | |
PICSService.SignalControlType signalControlType2; | |
PedestrianSignal pedestrianSignal2; | |
try { | |
boolean z2 = false; | |
char c = 0; | |
if (getAdvertiseData() == null) { | |
this.h = 0; | |
this.j = null; | |
this.k = (byte) 0; | |
return; | |
} | |
ByteBuffer wrap = ByteBuffer.wrap(getAdvertiseData().getBytes(), 5, 26); | |
wrap.order(ByteOrder.BIG_ENDIAN); | |
this.s[0] = wrap.get() & 255; | |
this.s[1] = wrap.get() & 255; | |
this.t[0] = wrap.get() & 255; | |
this.t[1] = wrap.get() & 255; | |
byte b = wrap.get(); | |
if (b == 0 || b == 1 || b == 2) { | |
int i = wrap.get() & 255; | |
byte b2 = 1; | |
while (true) { | |
if (b2 >= 64) { | |
z = false; | |
break; | |
} else if (i == ((this.h + b2) & 255)) { | |
z = true; | |
break; | |
} else { | |
b2 = (byte) (b2 + 1); | |
} | |
} | |
if (!z) { | |
this.w = true; | |
} else if (b == 0) { | |
this.w = false; | |
} | |
this.h = i; | |
if (this.w) { | |
String str = x; | |
Log.d(str, "メッセージID連番エラー msgId:" + this.h); | |
return; | |
} | |
wrap.get(new byte[2]); | |
byte[] bArr = new byte[4]; | |
wrap.get(bArr); | |
this.j = HexStringUtil.bytesToHexString(bArr); | |
if (this.i != null) { | |
if (isActive()) { | |
this.i.setRssi(getAveRssi()); | |
} | |
byte b3 = 8; | |
if (b == 0) { | |
byte[] bArr2 = {85, 84, 77, 83, 95, 80, 73, 67, 83, 48, 48, 48, 49, 0}; | |
byte[] bArr3 = new byte[14]; | |
wrap.get(bArr3); | |
int i2 = 0; | |
while (true) { | |
if (i2 >= 14) { | |
c = 1; | |
break; | |
} else if (bArr3[i2] != bArr2[i2]) { | |
break; | |
} else { | |
i2++; | |
} | |
} | |
if (c != 0) { | |
this.n = new Date(); | |
} | |
} else if (b == 1) { | |
this.o = new Date(); | |
if (isActive()) { | |
this.i.setLatitude((wrap.getInt() & (-1)) / 1000000.0d); | |
this.i.setLongitude((wrap.getInt() & (-1)) / 1000000.0d); | |
int i3 = wrap.get() & 255; | |
if (i3 == 255) { | |
this.i.setRadius(Integer.MAX_VALUE); | |
} else { | |
this.i.setRadius(i3); | |
} | |
int i4 = wrap.get() & 255; | |
PICSService.SignalControlType valueOf = PICSService.SignalControlType.valueOf((byte) (i4 >> 6)); | |
for (int i5 = 0; i5 < 6; i5++) { | |
if (!(valueOf == null || ((i4 >> i5) & 1) == 0)) { | |
if (valueOf.equals(PICSService.SignalControlType.None)) { | |
pedestrianSignal2 = this.i.getPedestrianSignals().get(i5); | |
signalControlType2 = PICSService.SignalControlType.RingExtension; | |
pedestrianSignal2.setSignalControlChannel1(signalControlType2); | |
} else { | |
this.i.getPedestrianSignals().get(i5).setSignalControlChannel1(valueOf); | |
} | |
} | |
pedestrianSignal2 = this.i.getPedestrianSignals().get(i5); | |
signalControlType2 = PICSService.SignalControlType.None; | |
pedestrianSignal2.setSignalControlChannel1(signalControlType2); | |
} | |
int i6 = wrap.get() & 255; | |
PICSService.SignalControlType valueOf2 = PICSService.SignalControlType.valueOf((byte) (i6 >> 6)); | |
for (int i7 = 0; i7 < 6; i7++) { | |
if (!(valueOf2 == null || ((i6 >> i7) & 1) == 0)) { | |
if (valueOf2.equals(PICSService.SignalControlType.None)) { | |
pedestrianSignal = this.i.getPedestrianSignals().get(i7); | |
signalControlType = PICSService.SignalControlType.RingExtension; | |
pedestrianSignal.setSignalControlChannel2(signalControlType); | |
} else { | |
this.i.getPedestrianSignals().get(i7).setSignalControlChannel2(valueOf2); | |
} | |
} | |
pedestrianSignal = this.i.getPedestrianSignals().get(i7); | |
signalControlType = PICSService.SignalControlType.None; | |
pedestrianSignal.setSignalControlChannel2(signalControlType); | |
} | |
wrap.get(); | |
wrap.get(); | |
byte b4 = wrap.get(); | |
this.r = b4; | |
this.i.setGenerationNumber(b4); | |
} | |
} else if (b == 2) { | |
this.p = new Date(); | |
this.m = getAdvertiseData().getBytes()[24] == 1; | |
if (isActive()) { | |
int i8 = 0; | |
boolean z3 = false; | |
boolean z4 = false; | |
while (i8 < 6) { | |
byte b5 = wrap.get(); | |
byte b6 = (byte) ((b5 >> 4) & 15); | |
if (b6 >= b3) { | |
this.i.getPedestrianSignals().get(i8).setSignalRemainingTime(-1); | |
} else { | |
this.i.getPedestrianSignals().get(i8).setSignalRemainingTime(b6 + 1); | |
} | |
PICSService.SignalState valueOf3 = PICSService.SignalState.valueOf(b5 & 15); | |
PedestrianSignal pedestrianSignal3 = this.i.getPedestrianSignals().get(i8); | |
if (valueOf3 == null) { | |
valueOf3 = PICSService.SignalState.None; | |
} | |
pedestrianSignal3.setSignalState(valueOf3); | |
this.i.getPedestrianSignals().get(i8).setSpeakerEnable(false); | |
if (b5 == -1 && (this.i.getPedestrianSignals().get(i8).getSignalControlChannel1() == PICSService.SignalControlType.RingExtension || this.i.getPedestrianSignals().get(i8).getSignalControlChannel2() == PICSService.SignalControlType.RingExtension)) { | |
this.i.getPedestrianSignals().get(i8).setSpeakerEnable(true); | |
} else { | |
this.i.getPedestrianSignals().get(i8).setSpeakerEnable(false); | |
} | |
if (this.i.getPedestrianSignals().get(i8).getSignalControlChannel1() == PICSService.SignalControlType.RingExtension) { | |
z3 = true; | |
} | |
if (this.i.getPedestrianSignals().get(i8).getSignalControlChannel2() == PICSService.SignalControlType.RingExtension) { | |
z4 = true; | |
} | |
i8++; | |
b3 = 8; | |
} | |
byte b7 = wrap.get(); | |
if (!z3) { | |
intersection = this.i; | |
controlRequestResult = PICSService.ControlRequestResult.valueOf(b7 & 3); | |
} else if (((b7 & 16) >> 4) == 0) { | |
intersection = this.i; | |
controlRequestResult = PICSService.ControlRequestResult.RingNoReceived; | |
} else { | |
intersection = this.i; | |
controlRequestResult = PICSService.ControlRequestResult.RingReceived; | |
} | |
intersection.setExtensionResult1(controlRequestResult); | |
if (!z4) { | |
intersection2 = this.i; | |
controlRequestResult2 = PICSService.ControlRequestResult.valueOf((b7 & 12) >> 2); | |
} else if (((b7 & 32) >> 5) == 0) { | |
intersection2 = this.i; | |
controlRequestResult2 = PICSService.ControlRequestResult.RingNoReceived; | |
} else { | |
intersection2 = this.i; | |
controlRequestResult2 = PICSService.ControlRequestResult.RingReceived; | |
} | |
intersection2.setExtensionResult2(controlRequestResult2); | |
if (wrap.get() == 1) { | |
z2 = true; | |
} | |
this.m = z2; | |
wrap.get(); | |
wrap.get(); | |
wrap.get(); | |
wrap.get(); | |
wrap.get(); | |
wrap.get(); | |
} | |
} | |
} | |
} | |
} catch (Exception e) { | |
Log.e(x, "advertising data 更新時のエラー", e); | |
} | |
} | |
public int getAveRssi() { | |
Queue<Integer> queue = this.v; | |
if (queue == null || queue.size() == 0) { | |
return -99; | |
} | |
return ((Integer) Collections.max(this.v)).intValue(); | |
} | |
public int[] getCompanyId() { | |
return this.s; | |
} | |
public byte getExtensibleRequest() { | |
return this.k; | |
} | |
public byte getGenerationManagementNumber() { | |
return this.r; | |
} | |
public Intersection getIntersection() { | |
return this.i; | |
} | |
public String getIntersectionId() { | |
return this.j; | |
} | |
public long getInterval() { | |
return this.l; | |
} | |
public int getMessageId() { | |
return this.h; | |
} | |
public int[] getProductId() { | |
return this.t; | |
} | |
@Override // jp.blead.device.BLEDevice | |
public int getRssi() { | |
return super.getRssi(); | |
} | |
public boolean isActive() { | |
return this.u; | |
} | |
public boolean isSecurityWarning() { | |
return this.m; | |
} | |
public boolean isValid() { | |
Date date; | |
return (this.o == null || this.p == null || (date = this.n) == null || Math.abs(date.getTime() - this.p.getTime()) >= this.q || Math.abs(this.o.getTime() - this.p.getTime()) >= this.q) ? false : true; | |
} | |
public void setActive(boolean z) { | |
this.u = z; | |
} | |
@Override // jp.blead.device.BLEDevice | |
public void setAdvertiseData(AdvertiseData advertiseData) { | |
if (getAdvertiseData() == null || !getAdvertiseData().equals(advertiseData)) { | |
super.setAdvertiseData(advertiseData); | |
a(); | |
} | |
} | |
@Override // jp.blead.device.BLEDevice | |
public void setLastScanDate(Date date) { | |
this.l = (getLastScanDate() == null || date == null) ? -1L : date.getTime() - getLastScanDate().getTime(); | |
if (this.i != null && isActive()) { | |
this.i.setLastUpdate(date); | |
} | |
super.setLastScanDate(date); | |
} | |
@Override // jp.blead.device.BLEDevice | |
public void setRssi(int i) { | |
if (i >= 127) { | |
i = -100; | |
} | |
if (this.v == null) { | |
this.v = new ConcurrentLinkedQueue(); | |
} | |
if (this.v.size() >= 5) { | |
this.v.poll(); | |
} | |
this.v.offer(Integer.valueOf(i)); | |
super.setRssi(i); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment