
*Published on August 5, 2025* by Ben Gilbert (Turns out this may be an Explorer Edition Glass after all, so you see some stuff about multiple Glass models.)
Introduction
Google Glass Enterprise Edition represents a fascinating intersection of wearable technology and enterprise applications. One of the most critical components for creating companion applications is establishing a reliable Bluetooth connection between Glass and other devices. Today, we’ll explore the `GlassConnection` class, a sophisticated implementation that handles the complex task of managing Bluetooth communications with Google Glass devices.
The Architecture Behind GlassConnection
The `GlassConnection` class is designed as a robust communication bridge that manages the entire lifecycle of a Bluetooth connection to Google Glass. Let’s break down its key components:
Core Components
“`java
public class GlassConnection {
public static final boolean DEBUG = false;
private String mConnectionURL;
private BluetoothSocket mSocket;
private OutputStream mOutStream;
private InputStream mInStream;
private List<GlassConnectionListener> mListeners = new ArrayList<>();
private GlassReaderThread mGlassReaderThread;
private final ExecutorService mWriteThread = Executors.newSingleThreadExecutor();
private final Object STREAM_WRITE_LOCK = new Object();
“`
The class employs several design patterns that make it both efficient and reliable:
1. Observer Pattern: The `mListeners` list implements the observer pattern, allowing multiple components to react to connection events.
2. Thread Safety: The `STREAM_WRITE_LOCK` object ensures thread-safe write operations, while the `ExecutorService` manages asynchronous write operations.
3. Resource Management: Proper handling of Bluetooth sockets, input/output streams, and thread lifecycle.
Device Discovery and Pairing
The first step in establishing a connection is discovering available Glass devices:
“`java
public Set<BluetoothDevice> getBondedDevices() {
return BluetoothAdapter.getDefaultAdapter().getBondedDevices();
}
“`
This method leverages Android’s Bluetooth API to retrieve already-paired devices. In practice, this means your Glass device needs to be paired with the host device before attempting a connection through this class.
The Connection Process
The heart of the `GlassConnection` class lies in its `connect` method:
“`java
public void connect(BluetoothDevice d) throws IOException {
mSocket = d.createRfcommSocketToServiceRecord(CompanionConstants.SECURE_UUID);
mSocket.connect();
mOutStream = mSocket.getOutputStream();
mInStream = mSocket.getInputStream();
mGlassReaderThread = new GlassReaderThread();
mGlassReaderThread.start();
handshake();
synchronized (mListeners) {
for (GlassConnectionListener listener : mListeners) {
listener.onConnectionOpened();
}
}
}
“`
This method demonstrates several important concepts:
1. RFCOMM Socket Creation
The method creates an RFCOMM (Radio Frequency Communication) socket using a predefined UUID. RFCOMM is a simple set of transport protocols that provides a serial port abstraction over Bluetooth.
2. Stream Management
Once the socket is connected, the class establishes input and output streams for bidirectional communication. This allows for both sending commands to Glass and receiving responses or status updates.
3. Background Thread for Reading
A dedicated `GlassReaderThread` is started to handle incoming data without blocking the main thread. This is crucial for maintaining responsive communication.
### 4. Protocol Handshake
The `handshake()` method initiates the Glass-specific communication protocol, establishing the session parameters and authentication.
5. Event Notification
Finally, all registered listeners are notified that the connection has been established, allowing the application to respond appropriately.
Thread Safety and Asynchronous Operations
One of the most impressive aspects of this implementation is its handling of concurrent operations:
“`java
private final ExecutorService mWriteThread = Executors.newSingleThreadExecutor();
private final Object STREAM_WRITE_LOCK = new Object();
“`
The class uses a single-threaded executor for write operations, ensuring that messages are sent in order while preventing race conditions. The `STREAM_WRITE_LOCK` provides additional synchronization for critical sections.
Real-World Applications
This `GlassConnection` class enables a wide range of applications:
– Enterprise Asset Management: Connecting warehouse scanners to Glass for real-time inventory updates
– Medical Applications: Streaming patient data or surgical instructions to Glass displays
– Industrial IoT: Connecting Glass to sensor networks for heads-up data visualization
– Augmented Reality Experiences: Real-time data overlay and interaction
Best Practices and Considerations
When implementing Glass connections in your own applications, consider these best practices:
1. Error Handling: Always implement robust error handling for connection failures, timeouts, and unexpected disconnections.
2. Battery Optimization: Glass devices have limited battery life. Minimize unnecessary communication and implement efficient data protocols.
3. Security: Ensure all communications are properly encrypted and authenticated, especially in enterprise environments.
4. **User Experience**: Provide clear feedback about connection status and any issues that arise.
## Future Developments
As Google Glass technology continues to evolve, we can expect improvements in:
– **Connection Speed**: Bluetooth 5.0+ implementations offering faster data transfer
– **Power Efficiency**: Better battery optimization for extended usage
– **Protocol Enhancements**: More sophisticated communication protocols for complex applications
## Conclusion
The `GlassConnection` class represents a well-architected solution for Bluetooth communication with Google Glass devices. Its careful attention to thread safety, resource management, and event-driven architecture makes it an excellent foundation for building robust Glass applications.
Whether you’re developing enterprise solutions or exploring the possibilities of augmented reality, understanding the fundamentals of Glass connectivity is essential. This implementation provides a solid starting point and demonstrates the key principles needed for successful Glass integration.
—
For more insights into wearable technology development and AR/VR applications, follow our blog for regular updates and technical deep-dives.*
Related Resources
– [Google Glass Enterprise Edition Documentation](https://developers.google.com/glass-enterprise)
– [Android Bluetooth Development Guide](https://developer.android.com/guide/topics/connectivity/bluetooth)
– [RFCOMM Protocol Specification](https://www.bluetooth.com/specifications/specs/)
python3 glass_xe_bridge.py
=== Glass Explorer Edition Bridge Tool ===
Using Pixel 7 Pro as Bluetooth bridge to Glass XE
🔍 Checking Glass Bluetooth connection...
✅ Glass 700C detected via Bluetooth
📱 Glass MAC: XX:XX:XX:XX:B9:CB
Bridge Options:
1. Simulate MyGlass handshake
2. Send bridge commands to Glass
3. Direct Bluetooth command
4. Full bridge sequence
Select option (1-4): 4
=== Simulating MyGlass Handshake ===
📱 Step: HANDSHAKE_INIT
📡 Sending to Glass: HANDSHAKE_INIT
⚠️ Command failed:
Exception occurred while executing 'broadcast':
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27404, uid=2000
at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)
at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)
at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)
at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)
at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)
at android.os.Binder.shellCommand(Binder.java:1151)
at android.os.Binder.onTransact(Binder.java:953)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)
at android.os.Binder.execTransactInternal(Binder.java:1426)
at android.os.Binder.execTransact(Binder.java:1365)
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Result: Parcel(
0x00000000: fffffffe 0000002f 00610050 00630072 '..../...P.a.r.c.'
0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'
0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'
0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'
0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'
0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'
0x00000060: 00310020 00000032 0000020c 00000101 ' .1.2...........'
0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'
0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'
0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'
0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'
0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'
0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'
0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'
0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'
0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'
0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'
0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'
0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'
0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'
0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'
0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'
0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'
0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'
0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'
0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'
0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'
0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'
0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'
0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'
0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'
0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'
0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'
0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'
0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'
0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'
0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'
0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'
0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'
0x00000270: 0000000a '.... ')
📱 Step: DEVICE_INFO_REQUEST
📡 Sending to Glass: DEVICE_INFO_REQUEST
⚠️ Command failed:
Exception occurred while executing 'broadcast':
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27422, uid=2000
at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)
at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)
at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)
at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)
at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)
at android.os.Binder.shellCommand(Binder.java:1151)
at android.os.Binder.onTransact(Binder.java:953)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)
at android.os.Binder.execTransactInternal(Binder.java:1426)
at android.os.Binder.execTransact(Binder.java:1365)
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Result: Parcel(
0x00000000: fffffffe 0000002f 00610050 00630072 '..../...P.a.r.c.'
0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'
0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'
0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'
0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'
0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'
0x00000060: 00320020 00000030 0000020c 00000101 ' .2.0...........'
0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'
0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'
0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'
0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'
0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'
0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'
0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'
0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'
0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'
0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'
0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'
0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'
0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'
0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'
0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'
0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'
0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'
0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'
0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'
0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'
0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'
0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'
0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'
0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'
0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'
0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'
0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'
0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'
0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'
0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'
0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'
0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'
0x00000270: 0000000a '.... ')
📱 Step: TIMEZONE_SYNC
📡 Sending to Glass: TIMEZONE_SYNC
⚠️ Command failed:
Exception occurred while executing 'broadcast':
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27447, uid=2000
at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)
at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)
at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)
at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)
at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)
at android.os.Binder.shellCommand(Binder.java:1151)
at android.os.Binder.onTransact(Binder.java:953)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)
at android.os.Binder.execTransactInternal(Binder.java:1426)
at android.os.Binder.execTransact(Binder.java:1365)
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Result: Parcel(
0x00000000: fffffffe 0000002e 00610050 00630072 '........P.a.r.c.'
0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'
0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'
0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'
0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'
0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'
0x00000060: 00380020 00000000 0000020c 00000101 ' .8.............'
0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'
0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'
0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'
0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'
0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'
0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'
0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'
0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'
0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'
0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'
0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'
0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'
0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'
0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'
0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'
0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'
0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'
0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'
0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'
0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'
0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'
0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'
0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'
0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'
0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'
0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'
0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'
0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'
0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'
0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'
0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'
0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'
0x00000270: 0000000a '.... ')
📱 Step: COMPANION_READY
📡 Sending to Glass: COMPANION_READY
⚠️ Command failed:
Exception occurred while executing 'broadcast':
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27464, uid=2000
at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)
at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)
at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)
at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)
at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)
at android.os.Binder.shellCommand(Binder.java:1151)
at android.os.Binder.onTransact(Binder.java:953)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)
at android.os.Binder.execTransactInternal(Binder.java:1426)
at android.os.Binder.execTransact(Binder.java:1365)
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Result: Parcel(
0x00000000: fffffffe 0000002f 00610050 00630072 '..../...P.a.r.c.'
0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'
0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'
0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'
0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'
0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'
0x00000060: 00310020 00000032 0000020c 00000101 ' .1.2...........'
0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'
0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'
0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'
0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'
0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'
0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'
0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'
0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'
0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'
0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'
0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'
0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'
0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'
0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'
0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'
0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'
0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'
0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'
0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'
0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'
0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'
0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'
0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'
0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'
0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'
0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'
0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'
0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'
0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'
0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'
0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'
0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'
0x00000270: 0000000a '.... ')
📱 Step: SETUP_COMPLETE
📡 Sending to Glass: SETUP_COMPLETE
⚠️ Command failed:
Exception occurred while executing 'broadcast':
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27483, uid=2000
at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)
at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)
at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)
at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)
at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)
at android.os.Binder.shellCommand(Binder.java:1151)
at android.os.Binder.onTransact(Binder.java:953)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)
at android.os.Binder.execTransactInternal(Binder.java:1426)
at android.os.Binder.execTransact(Binder.java:1365)
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Result: Parcel(
0x00000000: fffffffe 0000002f 00610050 00630072 '..../...P.a.r.c.'
0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'
0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'
0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'
0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'
0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'
0x00000060: 00310020 00000032 0000020c 00000101 ' .1.2...........'
0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'
0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'
0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'
0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'
0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'
0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'
0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'
0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'
0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'
0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'
0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'
0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'
0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'
0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'
0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'
0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'
0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'
0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'
0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'
0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'
0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'
0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'
0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'
0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'
0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'
0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'
0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'
0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'
0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'
0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'
0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'
0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'
0x00000270: 0000000a '.... ')
📱 Step: PAIRING_SUCCESS
📡 Sending to Glass: PAIRING_SUCCESS
⚠️ Command failed:
Exception occurred while executing 'broadcast':
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.adapter.action.STATE_CHANGED from pid=27504, uid=2000
at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)
at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)
at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)
at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)
at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)
at android.os.Binder.shellCommand(Binder.java:1151)
at android.os.Binder.onTransact(Binder.java:953)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)
at android.os.Binder.execTransactInternal(Binder.java:1426)
at android.os.Binder.execTransact(Binder.java:1365)
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.bluetooth.COMMAND flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Broadcasting: Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }
Broadcast completed: result=0
✅ Bluetooth command sent: Result: Parcel(
0x00000000: fffffffe 0000002f 00610050 00630072 '..../...P.a.r.c.'
0x00000010: 006c0065 00640020 00740061 00200061 'e.l. .d.a.t.a. .'
0x00000020: 006f006e 00200074 00750066 006c006c 'n.o.t. .f.u.l.l.'
0x00000030: 00200079 006f0063 0073006e 006d0075 'y. .c.o.n.s.u.m.'
0x00000040: 00640065 0020002c 006e0075 00650072 'e.d.,. .u.n.r.e.'
0x00000050: 00640061 00730020 007a0069 003a0065 'a.d. .s.i.z.e.:.'
0x00000060: 00310020 00000032 0000020c 00000101 ' .1.2...........'
0x00000070: 00610009 00200074 006e0061 00720064 '..a.t. .a.n.d.r.'
0x00000080: 0069006f 002e0064 0073006f 0050002e 'o.i.d...o.s...P.'
0x00000090: 00720061 00650063 002e006c 006e0065 'a.r.c.e.l...e.n.'
0x000000a0: 006f0066 00630072 004e0065 0044006f 'f.o.r.c.e.N.o.D.'
0x000000b0: 00740061 00410061 00610076 006c0069 'a.t.a.A.v.a.i.l.'
0x000000c0: 00500028 00720061 00650063 002e006c '(.P.a.r.c.e.l...'
0x000000d0: 0061006a 00610076 0031003a 00350031 'j.a.v.a.:.1.1.5.'
0x000000e0: 00290035 0009000a 00740061 00610020 '5.).....a.t. .a.'
0x000000f0: 0064006e 006f0072 00640069 0062002e 'n.d.r.o.i.d...b.'
0x00000100: 0075006c 00740065 006f006f 00680074 'l.u.e.t.o.o.t.h.'
0x00000110: 0049002e 006c0042 00650075 006f0074 '..I.B.l.u.e.t.o.'
0x00000120: 0074006f 004d0068 006e0061 00670061 'o.t.h.M.a.n.a.g.'
0x00000130: 00720065 00530024 00750074 002e0062 'e.r.$.S.t.u.b...'
0x00000140: 006e006f 00720054 006e0061 00610073 'o.n.T.r.a.n.s.a.'
0x00000150: 00740063 00490028 006c0042 00650075 'c.t.(.I.B.l.u.e.'
0x00000160: 006f0074 0074006f 004d0068 006e0061 't.o.o.t.h.M.a.n.'
0x00000170: 00670061 00720065 006a002e 00760061 'a.g.e.r...j.a.v.'
0x00000180: 003a0061 00320032 00290038 0009000a 'a.:.2.2.8.).....'
0x00000190: 00740061 00610020 0064006e 006f0072 'a.t. .a.n.d.r.o.'
0x000001a0: 00640069 006f002e 002e0073 00690042 'i.d...o.s...B.i.'
0x000001b0: 0064006e 00720065 0065002e 00650078 'n.d.e.r...e.x.e.'
0x000001c0: 00540063 00610072 0073006e 00630061 'c.T.r.a.n.s.a.c.'
0x000001d0: 00490074 0074006e 00720065 0061006e 't.I.n.t.e.r.n.a.'
0x000001e0: 0028006c 00690042 0064006e 00720065 'l.(.B.i.n.d.e.r.'
0x000001f0: 006a002e 00760061 003a0061 00340031 '..j.a.v.a.:.1.4.'
0x00000200: 00360032 000a0029 00610009 00200074 '2.6.).....a.t. .'
0x00000210: 006e0061 00720064 0069006f 002e0064 'a.n.d.r.o.i.d...'
0x00000220: 0073006f 0042002e 006e0069 00650064 'o.s...B.i.n.d.e.'
0x00000230: 002e0072 00780065 00630065 00720054 'r...e.x.e.c.T.r.'
0x00000240: 006e0061 00610073 00740063 00420028 'a.n.s.a.c.t.(.B.'
0x00000250: 006e0069 00650064 002e0072 0061006a 'i.n.d.e.r...j.a.'
0x00000260: 00610076 0031003a 00360033 00290035 'v.a.:.1.3.6.5.).'
0x00000270: 0000000a '.... ')
=== Glass XE Bridge Commands ===
🌉 Glass setup complete...
✅ Glass setup complete sent
📡 Broadcasting: Intent { act=com.google.glass.action.SETUP_COMPLETE flg=0x400000 }
Broadcast completed: result=0
🌉 Companion ready...
✅ Companion ready sent
📡 Broadcasting: Intent { act=com.google.glass.action.COMPANION_READY flg=0x400000 }
Broadcast completed: result=0
🌉 Timeline update...
✅ Timeline update sent
📡 Broadcasting: Intent { act=com.google.glass.action.TIMELINE_UPDATE flg=0x400000 }
Broadcast completed: result=0
🌉 Glass notification...
✅ Glass notification sent
📡 Broadcasting: Intent { act=android.intent.action.MAIN flg=0x400000 pkg=Glass! (has extras) }
Broadcast completed: result=0
🌉 Pairing success...
❌ Pairing success failed:
Exception occurred while executing 'broadcast':
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.bluetooth.device.action.PAIRING_REQUEST from pid=27545, uid=2000
at com.android.server.am.BroadcastController.broadcastIntentLockedTraced(BroadcastController.java:1067)
at com.android.server.am.BroadcastController.broadcastIntentLocked(BroadcastController.java:807)
at com.android.server.am.BroadcastController.broadcastIntentWithFeature(BroadcastController.java:740)
at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:14408)
at com.android.server.am.ActivityManagerShellCommand.runSendBroadcast(ActivityManagerShellCommand.java:1075)
at com.android.server.am.ActivityManagerShellCommand.onCommand(ActivityManagerShellCommand.java:280)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.am.ActivityManagerService.onShellCommand(ActivityManagerService.java:10418)
at android.os.Binder.shellCommand(Binder.java:1151)
at android.os.Binder.onTransact(Binder.java:953)
at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:5739)
at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2735)
at android.os.Binder.execTransactInternal(Binder.java:1426)
at android.os.Binder.execTransact(Binder.java:1365)
=== Checking for Glass Response ===
📝 Glass-related logs:
08-05 17:03:34.260 1445 3936 I ActivityManager: Enqueued broadcast Intent { act=com.google.glass.action.COMPANION_MESSAGE flg=0x400000 (has extras) }: 0
08-05 17:03:38.814 1445 3936 I ActivityManager: Broadcasting: Intent { act=com.google.glass.action.SETUP_COMPLETE flg=0x400000 }
08-05 17:03:38.814 1445 3936 I ActivityManager: Enqueued broadcast Intent { act=com.google.glass.action.SETUP_COMPLETE flg=0x400000 }: 0
08-05 17:03:40.033 1445 3936 I ActivityManager: Broadcasting: Intent { act=com.google.glass.action.COMPANION_READY flg=0x400000 }
08-05 17:03:40.034 1445 3936 I ActivityManager: Enqueued broadcast Intent { act=com.google.glass.action.COMPANION_READY flg=0x400000 }: 0
08-05 17:03:41.293 1445 3936 I ActivityManager: Broadcasting: Intent { act=com.google.glass.action.TIMELINE_UPDATE flg=0x400000 }
08-05 17:03:41.293 1445 3936 I ActivityManager: Enqueued broadcast Intent { act=com.google.glass.action.TIMELINE_UPDATE flg=0x400000 }: 0
08-05 17:03:42.500 1445 4599 I ActivityManager: Broadcasting: Intent { act=android.intent.action.MAIN flg=0x400000 pkg=Glass! (has extras) }
08-05 17:03:42.501 1445 4599 I ActivityManager: Enqueued broadcast Intent { act=android.intent.action.MAIN flg=0x400000 pkg=Glass! (has extras) }: 0
🔍 Checking Glass Bluetooth connection...
✅ Glass 700C detected via Bluetooth
📱 Glass MAC: XX:XX:XX:XX:B9:CB
=== Bridge Tool Complete ===
Check Glass display for any changes!
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/adb_explorer.sh'
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/adb_magic_commands.sh'
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/adb_explorer.sh'
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/adb_explorer.sh basic'
/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/adb_explorer.sh basic
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/rf_quantum_scythe_ar.py'
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/verify_mirrored_networking.sh'
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/setup_wireless_adb.sh'
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/setup_wireless_adb.sh'
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/setup_wireless_adb.sh'
adb shell am start -a android.intent.action.VIEW -d "http://192.168.1.185:8084/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/rf_quantum_scythe_interface.html"
com.android.chrome
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/setup_wireless_adb.sh'
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/setup_wireless_adb.sh'
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/glass_setup_trigger.sh'
cd /home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/ && python3 glass_bypass_tool.py
chmod +x /home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/glass_bypass_tool.py
python3 glass_bypass_tool.py
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/setup_wireless_adb.sh'
adb devices
adb install glass_companion_validated.apk
ls | grep glass_companion_validated.apk
find /home/github_bgilbert1984_NerfEngine -name "glass_companion_validated.apk"
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/glass_setup_trigger.sh'
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/generate_glass_qr.py'
sudo '/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/generate_glass_qr.py'
sudo python3 /home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/generate_glass_qr.py
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/pixel_compatible/setup_wireless_adb.sh'
adb devices
'/home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/glass_bypass_tool.py'
sudo bash /home/github_bgilbert1984_NerfEngine/NerfEngine/RF_QUANTUM_SCYTHE/GlassVisualization/glass_bypass_tool.py
adb devices