Holy crap - just made a tiny change in qt-ble.cpp:

         ble->preferredService()->writeDescriptor(d, 
QByteArray::fromHex("0100"));
//       WAITFOR(ble->descriptorWritten(), 1000); */
         WAITFOR(ble->descriptorWritten(), 5000);
         if (!ble->descriptorWritten()) {

Built and ran on the M2 and got this:

NFO: INFO: dev_info: Event: systime=1714477121, devtime=1535584412
INFO: INFO: dev_info: model=G2 firmware=20 serial=70019135
INFO: INFO: dev_info: ... found fingerprint in dive table
INFO: 12:38:41 packet SEND 09c6da8f125b10270000
INFO: 12:38:41 packet WAIT
INFO: BLEObject::characteristicWritten
INFO: 12:38:43 packet RECV 0400000000
INFO: 12:38:43 packet READ 0400000000
INFO: INFO: dev_info: Import complete
INFO: INFO: dev_info: No new dives downloaded from dive computer

When I get a chance I’ll try to download all dives, but there are a 100 stored 
on the G2 so it may take a while.

Still not sure what to make of all this given that:
1. changing QBluetoothDeviceDiscoveryAgent::start() to 
start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod) can’t be made without 
setting up some conditional mechanism.
2. making this change and building on my intel box works for scanning but not 
downloading.   It only gets to downloading if I build on the M2 and the 
Subsurface release dmg is built for intel.

jim


> On Apr 30, 2024, at 12:24, Jim E <[email protected]> wrote:
> 
> Hi,
> 
>       About a month ago I posted on the Subsurface group 
> (https://groups.google.com/g/subsurface-divelog/c/35cwOUrPxw4) about problems 
> connecting to my Scubapro G2 from an Apple Silicon (M2) MacBook Pro running 
> Sonoma.   It works perfectly on my old Intel Macbook Pro running Catalina.    
> Several people said they had similar problems, but no one said anything about 
> a working connection.    I also contacted ScubaPro and asked if they had it 
> working with LogTraks and they weren’t much help.
> 
>       Both BT dev and QT are new to me, and I’m not a Mac developer, but I 
> was very curious as to why Subsurface sees my G2 on my old Intel Mac and not 
> my new M2. (yes, I know about curiosity and the cat...)   I found the QT 
> lowenergyscanner example and sure enough, it shows the G2 when I run it on 
> the M2.   I compared it to  btdeviceselectiondialog.cpp and the difference 
> seems to be the call to QBluetoothDeviceDiscoveryAgent::start().   Subsurface 
> uses start() while lowenergyscanner uses 
> start(QBluetoothDeviceDiscoveryAgent::LowEnergyMethod) and after changing it 
> in Subsurface, my G2 shows up when scanning.   I'm really not sure of the 
> implications of this find,  but I'm pretty sure something bad would happen if 
> this change was simply made.   Maybe it could be tied to the "force LE' 
> checkbox?
> 
>       Continuing down this path, I made the same change in btdiscovery.cpp.   
>  Again, this is not a suggested code change, but simply data gathering at 
> this point.    With that change, I get as far as the point where INFO: 
> qt_ble_open({...}) is logged and then it crashes.   I should mention that the 
> binary was built on my old Intel Mac and then copied over to the M2 (more 
> about that later).    Oddly enough (to me at least), the crash reporter was 
> not invoked.   I ran it using lldb and the output is:
> 
> INFO: connected to the controller for device 
> {a8f5364d-eabf-b24a-2f6c-79ccb49b7424}
> Process 19648 stopped
> * thread #23, queue = 'com.apple.bluetooth.iobluetooth.coordinatorQueue', 
> stop reason = EXC_BAD_ACCESS (code=1, address=0x400000000000012)
>     frame #0: 0x000000010aa1bf51 QtBluetooth`-[OSXBTConnectionMonitor 
> connectionNotification:withDevice:] + 161
> QtBluetooth`-[OSXBTConnectionMonitor connectionNotification:withDevice:]:
> ->  0x10aa1bf51 <+161>: callq  *0x10(%rax)
>     0x10aa1bf54 <+164>: leaq   -0x20(%rbp), %rdi
>     0x10aa1bf58 <+168>: callq  0x10a9fbab0               ; 
> QBluetoothAddress::~QBluetoothAddress()
>     0x10aa1bf5d <+173>: leaq   -0x28(%rbp), %rdi
> 
> It’s probably worth mentioning at this point that it was built using a brew 
> installed QT 5.15.7.    Hoping to get more, useful, information I tried 
> building Subsurface on the M2.   First I tried using an offline installer 
> version of QT Qt5.12.12 (I couldn’t find a installer for 5.15).   This 
> wouldn’t build so I installed brew QT 5.15.13_1 and was able to build.    
> When I tried running it I get:
> 
>       Exception Type:        EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))
>       Exception Codes:       UNKNOWN_0x32 at 0x0000000102f2c000
>       Exception Codes:       0x0000000000000032, 0x0000000102f2c000
> 
> but, I found that it does run under lldb.   With lldb it actually connected 
> to the G2, but it fails with:
> 
> INFO: Found service {fdcdeaaa-295d-470e-bf15-04217b7aa0a0} Unknown Service
> INFO:    c: {a188b7dd-debb-449a-852d-c243d46b4b1a}
> INFO:    c: {aa0c68f0-ea9c-493d-8112-62879e72af68}
> INFO:         d: {00002902-0000-1000-8000-00805f9b34fb}
> INFO: Using service {fdcdeaaa-295d-470e-bf15-04217b7aa0a0} as preferred 
> service
> INFO:  .. enabling notifications
> INFO: Using read characteristic {aa0c68f0-ea9c-493d-8112-62879e72af68}
> INFO: now writing "0x0100" to the descriptor 
> {00002902-0000-1000-8000-00805f9b34fb}
> INFO: Bluetooth: Failed to enable notifications for characteristic 
> {aa0c68f0-ea9c-493d-8112-62879e72af68}
> ERROR: Bluetooth: Failed to enable notifications.
> 
> At this point I’m well and truly in over my head...
> 
>       Questions:
> 
>       1. Is a can of worms that should be opened?
>       2. Is there anything obviouly wrong with using a brew installed version 
> of QT?
>       3. Is trying to build and debug on the M2 a waste of time given that 
> the distribution version of Subsurface is for the Intel architecture?
> 
> thanks for any suggestions,
> jim

_______________________________________________
subsurface mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to