### Install Galaxy Buds Client via winget Source: https://github.com/timschneeb/galaxybudsclient/blob/master/docs/README_cht.md Use the Windows Package Manager to install the application. ```shell winget install ThePBone.GalaxyBudsClient ``` -------------------------------- ### Install Galaxy Buds Client via winget Source: https://github.com/timschneeb/galaxybudsclient/blob/master/README.md Install the Galaxy Buds Client on Windows using the Windows Package Manager (winget). This command downloads and installs the application from the winget repository. ```bash winget install timschneeb.GalaxyBudsClient ``` -------------------------------- ### Install Galaxy Buds Client via AUR Source: https://github.com/timschneeb/galaxybudsclient/blob/master/docs/README_cht.md Use the yay package manager to install the binary package on Arch Linux. ```shell yay -S galaxybudsclient-bin ``` -------------------------------- ### Install Galaxy Buds Client via Flatpak Source: https://github.com/timschneeb/galaxybudsclient/blob/master/README.md Use this command to install the Galaxy Buds Client on Linux distributions that support Flatpak. Ensure FlatHub is configured as a remote. ```bash flatpak install me.timschneeberger.GalaxyBudsClient ``` -------------------------------- ### Manage Firmware Updates with FirmwareTransferManager Source: https://context7.com/timschneeb/galaxybudsclient/llms.txt Handles over-the-air firmware updates, managing session initialization, MTU negotiation, data transfer, and verification. Subscribe to state, progress, MTU, block, completion, and error events. Load firmware binaries and initiate the installation process. Can also check transfer status and cancel ongoing transfers. ```csharp using GalaxyBudsClient.Message; using GalaxyBudsClient.Model.Firmware; var firmwareManager = FirmwareTransferManager.Instance; // Subscribe to transfer events firmwareManager.StateChanged += (sender, state) => { Console.WriteLine($"State: {state}"); // Ready, InitializingSession, Uploading }; firmwareManager.ProgressChanged += (sender, progress) => { Console.WriteLine($"Progress: {progress.Percent}% ({progress.CurrentByteCount}/{progress.TotalByteCount} bytes)"); }; firmwareManager.MtuChanged += (sender, mtu) => { Console.WriteLine($"MTU size negotiated: {mtu} bytes"); }; firmwareManager.CurrentBlockChanged += (sender, block) => { Console.WriteLine($"Transferring segment {block.SegmentId}: {block.Offset}-{block.EndOffset} bytes"); }; firmwareManager.Finished += (sender, e) => { Console.WriteLine("Firmware transfer complete! Device will now flash the update."); }; firmwareManager.Error += (sender, error) => { Console.WriteLine($"Transfer failed: {error.ErrorCode} - {error.Message}"); }; // Load and install firmware binary var firmwarePath = "/path/to/firmware.bin"; var binary = new FirmwareBinary(File.ReadAllBytes(firmwarePath)); Console.WriteLine($"Firmware size: {binary.TotalSize} bytes, Segments: {binary.SegmentCount}"); // Start the transfer (requires active Bluetooth connection) await firmwareManager.Install(binary); // Check if transfer is in progress if (firmwareManager.IsInProgress()) { Console.WriteLine("Transfer in progress..."); } // Cancel transfer if needed (will disconnect and reconnect) firmwareManager.Cancel(); ``` -------------------------------- ### Generated R Class Structure Source: https://github.com/timschneeb/galaxybudsclient/blob/master/GalaxyBudsClient.Android/Resources/AboutResources.txt This is an example of the R class generated by the build system, which contains tokens for all included resources. Use these tokens to reference resources in your application. ```csharp public class R { public class drawable { public const int icon = 0x123; } public class layout { public const int main = 0x456; } public class strings { public const int first_string = 0xabc; public const int second_string = 0xbcd; } } ``` -------------------------------- ### Get Debug Information (0xCE) Source: https://github.com/timschneeb/galaxybudsclient/blob/master/GalaxyBudsPlus_HiddenDebugFeatures.md Retrieves unknown debug data, with the first 8 bytes for the left earbud and the last 8 for the right. ```APIDOC ## GET /api/debug/info/0xCE ### Description Retrieves unknown debug data. The first 8 bytes contain data for the left earbud, and the last 8 bytes contain data for the right earbud. ### Method GET ### Endpoint /api/debug/info/0xCE ### Parameters #### Query Parameters - **message_id** (int) - Required - The message ID for the request (0xCE). ### Request Example ```json { "message_id": "0xCE" } ``` ### Response #### Success Response (200) - **left_earbud_data** (string) - 8 bytes of unknown data for the left earbud. - **right_earbud_data** (string) - 8 bytes of unknown data for the right earbud. #### Response Example ```json { "left_earbud_data": "00000000000E5641", "right_earbud_data": "00000000001240F6" } ``` ``` -------------------------------- ### Get Debug Information (0xA9) Source: https://github.com/timschneeb/galaxybudsclient/blob/master/GalaxyBudsPlus_HiddenDebugFeatures.md Retrieves debug information including MAC addresses, firmware version, and other device details. ```APIDOC ## GET /api/debug/info/0xA9 ### Description Retrieves debug information including the MAC addresses for both earbuds, the firmware version, and other related data. ### Method GET ### Endpoint /api/debug/info/0xA9 ### Parameters #### Query Parameters - **message_id** (int) - Required - The message ID for the request (0xA9). ### Request Example ```json { "message_id": "0xA9" } ``` ### Response #### Success Response (200) - **firmware_version** (string) - The software firmware version. - **left_mac_address** (string) - The MAC address of the left earbud. - **right_mac_address** (string) - The MAC address of the right earbud. - **main_connection** (int) - Indicates the main connection (0x01 = Left, 0x00 = Right). - **is_paired** (boolean) - Indicates if the device is paired. - **unknown_data_ear_type** (int) - Unknown data, possibly related to ear type. #### Response Example ```json { "firmware_version": "R175XXU0ATH7", "left_mac_address": "807b3e2179ec", "right_mac_address": "807b3e2153ac", "main_connection": 1, "is_paired": true, "unknown_data_ear_type": 0 } ``` ``` -------------------------------- ### Get Debug Information (0xB6) Source: https://github.com/timschneeb/galaxybudsclient/blob/master/GalaxyBudsPlus_HiddenDebugFeatures.md Retrieves unknown debug data for both earbuds, potentially mirroring outgoing payloads. ```APIDOC ## GET /api/debug/info/0xB6 ### Description Retrieves unknown debug data for both earbuds. This message may also mirror outgoing payloads. ### Method GET ### Endpoint /api/debug/info/0xB6 ### Parameters #### Query Parameters - **message_id** (int) - Required - The message ID for the request (0xB6). ### Request Example ```json { "message_id": "0xB6" } ``` ### Response #### Success Response (200) - **left_earbud_data** (object) - Unknown data for the left earbud. - **device** (string) - Device identifier ('L'). - **unknown_data_1** (string) - Unknown data. - **unknown_data_2** (string) - Unknown data. - **right_earbud_data** (object) - Unknown data for the right earbud. - **device** (string) - Device identifier ('R'). - **unknown_data_1** (string) - Unknown data. - **unknown_data_2** (string) - Unknown data. #### Response Example ```json { "left_earbud_data": { "device": "L", "unknown_data_1": "82", "unknown_data_2": "00000000" }, "right_earbud_data": { "device": "R", "unknown_data_1": "82", "unknown_data_2": "00000000" } } ``` ``` -------------------------------- ### Manage Bluetooth Connections Source: https://context7.com/timschneeb/galaxybudsclient/llms.txt Use the BluetoothImpl singleton to discover devices, manage connection states, and send requests. Ensure the device is paired before attempting a connection. ```csharp using GalaxyBudsClient.Platform; using GalaxyBudsClient.Message; using GalaxyBudsClient.Model.Constants; // Get the Bluetooth implementation singleton var bluetooth = BluetoothImpl.Instance; // Subscribe to connection events bluetooth.Connected += (sender, e) => Console.WriteLine("Connected to Galaxy Buds!"); bluetooth.Disconnected += (sender, reason) => Console.WriteLine($"Disconnected: {reason}"); bluetooth.MessageReceived += (sender, message) => Console.WriteLine($"Received: {message.Id}"); bluetooth.BluetoothError += (sender, ex) => Console.WriteLine($"Error: {ex.ErrorMessage}"); // Discover available Bluetooth devices var devices = await bluetooth.GetDevicesAsync(); foreach (var device in devices) { Console.WriteLine($"Found: {device.Name} ({device.Address}) - Paired: {device.IsPaired}"); } // Connect to the currently configured device bool success = await bluetooth.ConnectAsync(); if (success) { Console.WriteLine($"Connected to {bluetooth.DeviceName}, Model: {bluetooth.CurrentModel}"); } // Send a simple request message await bluetooth.SendRequestAsync(MsgIds.EXTENDED_STATUS_UPDATED); // Disconnect when done await bluetooth.DisconnectAsync(); ``` -------------------------------- ### Manage Devices and Capabilities Source: https://context7.com/timschneeb/galaxybudsclient/llms.txt Access current device information, monitor device changes, and query hardware capabilities using DeviceManager and BluetoothImpl. ```csharp using GalaxyBudsClient.Platform; using GalaxyBudsClient.Model.Config; using GalaxyBudsClient.Model.Constants; // Access current device var device = BluetoothImpl.Instance.Device.Current; if (device != null) { Console.WriteLine($"Current device: {device.Name}"); Console.WriteLine($"MAC: {device.MacAddress}"); Console.WriteLine($"Model: {device.Model}"); Console.WriteLine($"Color: {device.DeviceColor}"); } // Subscribe to device changes BluetoothImpl.Instance.Device.DeviceChanged += (sender, newDevice) => { Console.WriteLine($"Device changed to: {newDevice?.Name ?? "None"}"); }; // Access all registered devices foreach (var registeredDevice in Settings.Data.Devices) { Console.WriteLine($"Registered: {registeredDevice.Name} ({registeredDevice.MacAddress})"); } // Check device capabilities via DeviceSpec var spec = BluetoothImpl.Instance.DeviceSpec; Console.WriteLine($"Supports ANC: {spec.Supports(Features.Anc)}"); Console.WriteLine($"Supports Ambient Sound: {spec.Supports(Features.AmbientSound)}"); Console.WriteLine($"Supports Spatial Audio: {spec.Supports(Features.SpatialSensor)}"); Console.WriteLine($"Service UUID: {spec.ServiceUuid}"); // Unregister a device BluetoothImpl.Instance.UnregisterDevice(device); ``` -------------------------------- ### Bluetooth Device Discovery and Management Source: https://github.com/timschneeb/galaxybudsclient/blob/master/InTheHand.Net.Personal.Core/Net.Bluetooth.BlueZ/32feet BlueZ Test.html APIs for discovering, remembering, and managing Bluetooth devices. ```APIDOC ## Device Discovery and Management ### Description APIs related to discovering and managing Bluetooth devices, including handling different states like 'Remembered', 'Authenticated', and 'Unknown'. ### To Do / Scenarios 1. **Device Discovery**: Remembered devices, Authenticated devices, DiscoOnly devices, Unknown devices, All devices (by discovery and live discovery). 2. **Device by Address**: Get a Remembered device, Authenticated device, Non-existent device, Unknown but in-range device. 3. **Device Name**: Read, change name on remote device, and verify update after Refresh. 4. **LastSeen**: Track the last seen timestamp. ### Test Notes - Monitor the Remembered list from Discovery to observe when devices are added. - Analyze timings for 'by Address' scenarios. ``` -------------------------------- ### Launch Regedit with SYSTEM Privileges (Windows) Source: https://github.com/timschneeb/galaxybudsclient/wiki/5.-Tips-and-tricks Use PsExec to launch the registry editor with SYSTEM account privileges. This is necessary to modify system service registry settings. ```powershell PsExec.exe -s -i regedit ``` -------------------------------- ### Navigate to Bluetooth Service Parameters (Windows Registry) Source: https://github.com/timschneeb/galaxybudsclient/wiki/5.-Tips-and-tricks Navigate to the BTHPORT service parameters in the Windows Registry. This path contains device-specific settings for Bluetooth devices. ```plaintext HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHPORT\Parameters\Devices ``` -------------------------------- ### BluetoothClient API - Device Discovery Source: https://github.com/timschneeb/galaxybudsclient/blob/master/InTheHand.Net.Personal.Core/Net.Bluetooth.BlueSoleil/32feet BlueSoleil Test.html Provides methods for discovering Bluetooth devices and managing discovery parameters. ```APIDOC ## BluetoothClient API - Discovery ### Description This section details the methods and properties related to discovering Bluetooth devices using the BluetoothClient library. ### Methods #### `BluetoothDeviceInfo[] DiscoverDevices(DiscoveryType type)` Initiates device discovery. `DiscoveryType` can be 'All', 'Rmbd', 'DiscoOnly', etc. #### `BluetoothDeviceInfo[] Begin/EndDiscoverDevices()` Asynchronous methods for device discovery. ### Properties #### `TimeSpan InquiryLength` Gets or sets the length of the inquiry for device discovery. #### `int InquiryAccessCode` Gets or sets the access code for inquiry. ### To Do - Run discovery in BlueSoleil UI -- any errors in library? ### Test Results - **Connect**: See details below. - **Error code on MSFT+Win32**: Not specified. ``` -------------------------------- ### Configure Web App Manifest Icons Source: https://github.com/timschneeb/galaxybudsclient/blob/master/GalaxyBudsClient/Resources/Android/Orange/web/README.txt Define the icon array within the manifest.json file to support various sizes and maskable icon types. ```json { "icons": [ { "src": "/favicon.ico", "type": "image/x-icon", "sizes": "16x16 32x32" }, { "src": "/icon-192.png", "type": "image/png", "sizes": "192x192" }, { "src": "/icon-512.png", "type": "image/png", "sizes": "512x512" }, { "src": "/icon-192-maskable.png", "type": "image/png", "sizes": "192x192", "purpose": "maskable" }, { "src": "/icon-512-maskable.png", "type": "image/png", "sizes": "512x512", "purpose": "maskable" } ] } ``` -------------------------------- ### SdpQuery/AllRecords Source: https://github.com/timschneeb/galaxybudsclient/blob/master/InTheHand.Net.Personal.Core/Net.Bluetooth.BlueSoleil/32feet BlueSoleil Test.html Retrieves all service records for a Bluetooth device. This is useful for understanding the services offered by a device. ```APIDOC ## GET /sdp/all_records ### Description Retrieves all service records for a Bluetooth device, including service name, class ID, and channel number. ### Method GET ### Endpoint /sdp/all_records ### Parameters None ### Request Example None ### Response #### Success Response (200) - **records** (array) - A list of service records. - **ServiceName** (string) - The name of the service. - **ServiceClasses** (string) - The class ID(s) of the service. - **ChannelNum** (integer or string) - The channel number assigned to the service, or ''. #### Response Example { "records": [ { "ServiceName": "Bluetooth Serial Port", "ServiceClasses": "0x1101 SerialPort", "ChannelNum": 1 }, { "ServiceName": "Network Access", "ServiceClasses": "0x1117 GN", "ChannelNum": "" } ] } ``` -------------------------------- ### Dump Bluetooth Bonded List and Link-Keys Source: https://github.com/timschneeb/galaxybudsclient/blob/master/GalaxyBudsPlus_HiddenDebugFeatures.md Retrieves the Bluetooth BR/EDR and LE bonded list, known devices, link-keys, and peer MAC addresses. Information is sent line by line using message ID 0xD6. Build date/time, developer name, and firmware version are sent using message ID 0xD4. ```APIDOC ## GET /api/bluetooth/bonded-list ### Description Dumps the Bluetooth BR/EDR and LE bonded list and known devices as ASCII strings, including all Bluetooth link-keys and peer mac-addresses. Applies to local and remote Bluetooth devices. ### Method GET ### Endpoint /api/bluetooth/bonded-list ### Parameters #### Query Parameters - **message_id** (int) - Required - The message ID for the request (e.g., 0xD6 for bonded list, 0xD4 for build info). ### Request Example ```json { "message_id": "0xD6" } ``` ### Response #### Success Response (200) - **message_id** (int) - The ID of the message received. - **payload** (string) - The ASCII payload containing device information. #### Response Example ```json { "message_id": "0xD4", "payload": "Aug 25 2020, 08:40:32, SWDD6019, R175XXU0ATH7" } ``` ```json { "message_id": "0xD6", "payload": "bonded bd.addr:a0afbd7e4a40, brkey:0e54a1c22d93dd7169xxxx" } ``` ### Error Handling - **Wrong bonded bd.addr**: Indicates an invalid address was provided. ```json { "message_id": "0xD6", "payload": "Wrong bonded bd.addr:000000000000, size: 0" } ``` ``` -------------------------------- ### Manage Events with EventDispatcher Source: https://context7.com/timschneeb/galaxybudsclient/llms.txt Use the EventDispatcher to subscribe to application events, dispatch commands, and verify device support for specific features. ```csharp using GalaxyBudsClient.Model; var dispatcher = EventDispatcher.Instance; // Subscribe to events dispatcher.EventReceived += (eventType, extra) => { Console.WriteLine($"Event received: {eventType}"); switch (eventType) { case Event.AmbientToggle: Console.WriteLine("Ambient sound toggled"); break; case Event.AncToggle: Console.WriteLine("ANC toggled"); break; case Event.ShowBatteryPopup: Console.WriteLine("Battery popup requested"); break; } }; // Dispatch events programmatically dispatcher.Dispatch(Event.AmbientToggle); dispatcher.Dispatch(Event.AncToggle); dispatcher.Dispatch(Event.StartFind); // Start Find My Earbuds dispatcher.Dispatch(Event.StopFind); // Stop Find My Earbuds dispatcher.Dispatch(Event.TogglePlayPause); // Media control dispatcher.Dispatch(Event.ShowBatteryPopup); // Show battery popup dispatcher.Dispatch(Event.LockTouchpadToggle); // Toggle touchpad lock dispatcher.Dispatch(Event.PairingMode); // Enter pairing mode // Check if an event is supported by the connected device bool supported = EventDispatcher.CheckDeviceSupport(Event.AncToggle); Console.WriteLine($"ANC toggle supported: {supported}"); // Check if an event can be assigned to a touch option bool eligibleForTouch = EventDispatcher.CheckTouchOptionEligibility(Event.TogglePlayPause); Console.WriteLine($"Can assign to touch: {eligibleForTouch}"); ``` -------------------------------- ### BluetoothClient API - Connection Source: https://github.com/timschneeb/galaxybudsclient/blob/master/InTheHand.Net.Personal.Core/Net.Bluetooth.BlueSoleil/32feet BlueSoleil Test.html Details on establishing connections to Bluetooth devices, including handling different connection scenarios and service types. ```APIDOC ## BluetoothClient API - Connection ### Description This section covers the process of establishing connections to Bluetooth devices, including nuances with different Bluetooth stacks (Widcomm, Microsoft) and service types (RFCOMM, OBEX). ### Methods #### `void Connect(...)` Establishes a connection to a Bluetooth device. #### `void Begin/EndConnect(...)` Asynchronous methods for establishing a connection. #### `NetworkStream GetStream()` Retrieves the network stream for communication after a successful connection. #### `void Dispose()` Disposes of the Bluetooth client resources. Note: ToDo disallow/abort device discovery upon disposal. ### Properties #### `bool Connected` Indicates whether the client is currently connected. #### `Socket Client` Gets or sets the underlying socket client. NotSupported. #### `int Available` Gets the number of bytes available for reading. #### `LingerOption LingerState` Gets or sets the linger state for socket connections. NotImplemented. #### `bool Authenticate` Gets or sets the authentication state. Returns false. #### `bool Encrypt` Gets or sets the encryption state. Returns false. ### Connection Handling Notes - BlueSoleil's connection handling involves COM ports for RFCOMM services and direct profile activation for others (e.g., OPP). - Three connection paths are handled: 'com_index' field set, `Btsdk_GetClientPort` works, or connection failure. ### To Do 1. Connect to a specific port. 2. Service with non-SIG Class Id! 3. Radio disconnected 4. Radio/stack turned-off 5. (Service doesn't have RFCOMM pdl) 6. (No listener on port/channel specified in the Service Record) ``` -------------------------------- ### Configure HTML Head Icons Source: https://github.com/timschneeb/galaxybudsclient/blob/master/GalaxyBudsClient/Resources/Android/Orange/web/README.txt Include these link tags in the HTML head section to define the favicon and apple touch icon. ```html ``` -------------------------------- ### BluetoothClient API - Other Properties/Methods Source: https://github.com/timschneeb/galaxybudsclient/blob/master/InTheHand.Net.Personal.Core/Net.Bluetooth.BlueSoleil/32feet BlueSoleil Test.html Details on other miscellaneous properties and methods available in the BluetoothClient API. ```APIDOC ## BluetoothClient API - Other Properties/Methods ### Description This section covers miscellaneous properties and methods of the BluetoothClient API that are not directly related to discovery or connection establishment. ### Properties #### `Guid LinkKey` Gets the link key for the Bluetooth device. NotImplemented. #### `LinkPolicy LinkPolicy` Gets the link policy for the Bluetooth device. NotImplemented. #### `string GetRemoteMachineName(BluetoothAddress)` Gets the machine name of the remote Bluetooth device. #### `string RemoteMachineName` Gets the machine name of the remote Bluetooth device. #### `BluetoothEndPoint RemoteEndPoint` Gets the endpoint of the remote Bluetooth device. ### Methods #### `void SetPin(string pin)` Sets the PIN for pairing. NotImplemented. #### `void SetPin(BluetoothAddress device, string pin)` Sets the PIN for a specific device. NotImplemented. ``` -------------------------------- ### Hardware Status Source: https://github.com/timschneeb/galaxybudsclient/blob/master/InTheHand.Net.Personal.Core/Net.Bluetooth.BlueZ/32feet BlueZ Test.html Information regarding the hardware status of the Bluetooth adapter. ```APIDOC ## Hardware Status ### Description Provides the current status of the Bluetooth hardware. ### Hardware Status: _Shutdown_ - **HardwareStatus**: _Shutdown_ - **Mode**: PowerOff - **Name**: empty (String.Empty) - **Address**: empty (BluetoothAddress.None) - **Status of other properties**: Undefined ### Hardware Status: _NotPresent_ - **HardwareStatus**: _NotPresent_ - **Mode**: PowerOff - **Name**: empty (String.Empty) - **Address**: empty (BluetoothAddress.None) - **Status of other properties**: Undefined ``` -------------------------------- ### Interact with CLI Interface Source: https://context7.com/timschneeb/galaxybudsclient/llms.txt Execute commands via the Linux CLI or process arguments programmatically using the CliHandler. ```bash # List available actions galaxybudsclient action --list # Execute a specific action galaxybudsclient action --execute "toggle_anc" # Get all device properties galaxybudsclient device --get-all # Get a specific property as JSON galaxybudsclient device --get "BatteryLeft" --json # Show the battery popup galaxybudsclient app --show-battery-popup # Bring the app window to front galaxybudsclient app --activate-window ``` ```csharp // Programmatic CLI processing (for integration) using GalaxyBudsClient.Cli; // Process command-line arguments string[] args = { "device", "--get-all", "--json" }; CliHandler.ProcessArguments(args); // Available verbs: // - action: List and execute app actions // - app: Application control (popup, window activation) // - device: Query device properties ``` -------------------------------- ### MSG_ID_MAIN_CHANGE Source: https://github.com/timschneeb/galaxybudsclient/blob/master/GalaxyBudsRFCommProtocol.md Hands over the main connection between earbuds. ```APIDOC ## MSG_ID_MAIN_CHANGE ### Description Hands over the main connection between earbuds. ### Request Body - **Device** (byte) - Hand-over main connection (1 = left, 0 = right) ``` -------------------------------- ### BluetoothDeviceInfo Properties Source: https://github.com/timschneeb/galaxybudsclient/blob/master/InTheHand.Net.Personal.Core/Net.Bluetooth.BlueZ/32feet BlueZ Test.html Provides information about a Bluetooth device, including its name, address, and connection status. ```APIDOC ## BluetoothDeviceInfo ### Description Represents detailed information about a Bluetooth device. ### Properties - **DeviceName** (string) - The name of the Bluetooth device. Can be read and set. - **Authenticated** (bool) - Indicates if the device is authenticated. - **ClassOfDevice** (ClassOfDevice) - The class of the device. - **Connected** (bool) - Indicates if the device is currently connected. - **DeviceAddress** (BluetoothAddress) - The unique Bluetooth address of the device. - **Remembered** (bool) - Indicates if the device is remembered by the system. - **Rssi** (int) - The Received Signal Strength Indicator. - **LastSeen** (DateTime) - The last time the device was seen. - **LastUsed** (DateTime) - The last time the device was used. ### Methods - **Refresh()**: Resets and updates the device information, specifically the DeviceName. - **GetServiceRecords(Guid service)**: Retrieves unparsed service records for a given service GUID. - **GetServiceRecordsUnparsed(Guid service)**: Retrieves parsed service records for a given service GUID. - **SetServiceState(Guid service, bool state)**: Sets the state of a service for the device. - **SetServiceState(Guid service, bool state, bool throwOnError)**: Sets the state of a service with an option to throw errors. - **ShowDialog()**: Displays a dialog related to the device. - **Update()**: Updates the device information. ``` -------------------------------- ### MSG_ID_SET_TOUCHPAD_OPTION Source: https://github.com/timschneeb/galaxybudsclient/blob/master/GalaxyBudsRFCommProtocol.md Configures the touchpad actions for the left and right earbuds. ```APIDOC ## MSG_ID_SET_TOUCHPAD_OPTION ### Description Configures the touchpad actions for the left and right earbuds. ### Request Body - **LeftOption** (byte) - ID of Action to be set on the left device - **RightOption** (byte) - ID of Action to be set on the right device ### Available Actions - 0: Voice assistant - 1: Quick ambient sound - 2: Volume (if set on left: volume down, else volume up) - 3: Ambient sound - 4: Spotify SpotOn (requires client compatibility) - 5: Other... (left only) - 6: Other... (right only) ``` -------------------------------- ### BluetoothDeviceInfo API Source: https://github.com/timschneeb/galaxybudsclient/blob/master/InTheHand.Net.Personal.Core/Net.Bluetooth.BlueSoleil/32feet BlueSoleil Test.html Interface for interacting with remote Bluetooth devices, including connection status and service management. ```APIDOC ## BluetoothDeviceInfo Methods and Properties ### Description Provides information and control mechanisms for remote Bluetooth devices. ### Properties - **Authenticated** (bool) - Read-only - Indicates if the device is authenticated. - **Connected** (bool) - Read-only - Indicates if the device is currently connected. - **DeviceAddress** (BluetoothAddress) - Read-only - The address of the remote device. - **DeviceName** (string) - Read/Write - The name of the remote device. - **LastSeen** (DateTime) - Read-only - Timestamp of when the device was last seen. - **Remembered** (bool) - Read-only - Indicates if the device is in the remembered list. - **Rssi** (int) - Read-only - Signal strength (requires active connection). ### Methods - **GetServiceRecords(Guid service)** - Returns service records for a specific service. - **Refresh()** - Resets the device name. - **SetServiceState(Guid service, bool state, bool throwOnError)** - Enables or disables a specific service on the remote device. ```