Tests on Bernafon Alpha 3 ITC

I tried this with my shiny new Bernafon Alpha 3 ITC and here some notes:
If you already connected them with your phone – remove this connection – go to Settings -> Bluetooth and remove pair, otherwise you won't be able to connect them with PC. After connecting with PC you can reconnect them with phone – so that's not big problem
This is my BT hardware and basic system info – output from inxi -ISEazy
System:
  Kernel: 6.9.3-3-MANJARO arch: x86_64 bits: 64 compiler: gcc v: 14.1.1
    clocksource: hpet avail: acpi_pm
    parameters: BOOT_IMAGE=/boot/vmlinuz-6.9-x86_64
    root=UUID=bfcac972-4fe8-4a7e-9249-9e94e6af2d4a rw udev.log_priority=3
  Desktop: KDE Plasma v: 6.0.5 tk: Qt v: N/A info: frameworks v: 6.2.0
    wm: kwin_x11 vt: 2 dm: SDDM Distro: Manjaro base: Arch Linux
Bluetooth:
  Device-1: Foxconn / Hon Hai MediaTek Bluetooth Adapter driver: btusb v: 0.8
    type: USB rev: 2.1 speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 4-4:3
    chip-ID: 0489:e0cd class-ID: e001 serial: <filter>
  Report: hciconfig ID: hci0 rfk-id: 1 state: up address: <filter> bt-v: 5.2
    lmp-v: 11 sub-v: 2402 hci-v: 11 rev: 1911 class-ID: 6c010c
  Info: acl-mtu: 1021:6 sco-mtu: 240:8 link-policy: rswitch sniff
    link-mode: peripheral accept service-classes: rendering, capturing, audio,
    telephony
Info:
  Memory: total: 16 GiB note: est. available: 14.99 GiB used: 6.95 GiB (46.3%)
  Processes: 338 Power: uptime: 1h 53m states: freeze,mem,disk suspend: deep
    avail: s2idle wakeups: 0 hibernate: platform avail: shutdown, reboot,
    suspend, test_resume image: 5.98 GiB services: org_kde_powerdevil,upowerd
    Init: systemd v: 255 default: graphical tool: systemctl
  Packages: pm: pacman pkgs: 1620 libs: 425 tools: pamac Compilers:
    clang: 17.0.6 gcc: 14.1.1 Shell: Zsh v: 5.9 running-in: konsole inxi: 3.3.34

Most important package versions:
bluez 5.76
cmake 3.29.3
pipewire 1:1.0.7
gcc 14.1.1

btmgmt phy output
Supported phys: BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX LECODEDTX LECODEDRX
Configurable phys: BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE2MTX LE2MRX LECODEDTX LECODEDRX
Selected phys: BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX LECODEDTX LECODEDRX

This is result for ./asha_connection_test, BT connection with it is rock solid stable, can keep it with at least several minutes
(process:4473): GLib-GIO-DEBUG: 11:34:31.276: Using cross-namespace EXTERNAL authentication (this will deadlock if server is GDBus < 2.73.3)
** INFO: 11:34:42.779: Adding bluetooth device TOMASZ
** INFO: 11:34:42.901: TOMASZ (Left)
** INFO: 11:34:42.901:     Name:      TOMASZ
** INFO: 11:34:42.901:     Mac:       00:19:8E:F5:54:98
** INFO: 11:34:42.901:     HiSyncId:<PHONE_NUMBER>414956807
** INFO: 11:34:42.901:     Side:      left (binaural)
** INFO: 11:34:42.901:     Delay:     89 ms
** INFO: 11:34:42.901:     Streaming: supported
** INFO: 11:34:42.901:     Codecs:    G.722@16kHz
** INFO: 11:34:43.018:     Connected: true
** INFO: 11:34:43.018:     L2CAP_CONNINFO:
** INFO: 11:34:43.018:        handle: 512
** INFO: 11:34:43.018:        class:  [0, 0, 0]
** INFO: 11:34:43.018:     MTU:       SND 248 RCV 672
** INFO: 11:34:43.018:     PHY:    0
** INFO: 11:34:43.018:         Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
** INFO: 11:34:43.018:         You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
** INFO: 11:34:43.018:            btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
** INFO: 11:34:43.018:         and then disconnecting and reconnecting your hearing devices.
** INFO: 11:34:43.018:         Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
** INFO: 11:34:43.018:     MODE: LE_FLOWCTL
** INFO: 11:34:43.018:     Hci Connection Info:
** INFO: 11:34:43.018:        type:   128 LE
** INFO: 11:34:43.018:        out:    1 true
** INFO: 11:34:43.018:        state:  1 CONNECTED
** INFO: 11:34:43.018:        mode:   7 MASTER AUTH ENCRYPT
** INFO: 11:34:44.882: Adding bluetooth device TOMASZ
** INFO: 11:34:44.998: TOMASZ (Right)
** INFO: 11:34:44.998:     Name:      TOMASZ
** INFO: 11:34:44.998:     Mac:       00:19:8E:C8:F5:2C
** INFO: 11:34:44.998:     HiSyncId:<PHONE_NUMBER>414956807
** INFO: 11:34:44.998:     Side:      right (binaural)
** INFO: 11:34:44.998:     Delay:     89 ms
** INFO: 11:34:44.998:     Streaming: supported
** INFO: 11:34:44.998:     Codecs:    G.722@16kHz
** INFO: 11:34:45.117:     Connected: true
** INFO: 11:34:45.117:     L2CAP_CONNINFO:
** INFO: 11:34:45.117:        handle: 513
** INFO: 11:34:45.117:        class:  [0, 0, 0]
** INFO: 11:34:45.117:     MTU:       SND 248 RCV 672
** INFO: 11:34:45.117:     PHY:    0
** INFO: 11:34:45.117:         Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
** INFO: 11:34:45.117:         You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
** INFO: 11:34:45.118:            btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
** INFO: 11:34:45.118:         and then disconnecting and reconnecting your hearing devices.
** INFO: 11:34:45.118:         Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
** INFO: 11:34:45.118:     MODE: LE_FLOWCTL
** INFO: 11:34:45.118:     Hci Connection Info:
** INFO: 11:34:45.118:        type:   128 LE
** INFO: 11:34:45.118:        out:    1 true
** INFO: 11:34:45.118:        state:  1 CONNECTED
** INFO: 11:34:45.118:        mode:   7 MASTER AUTH ENCRYPT

This is from ./asha_stream_test --left azu.mp3 --right azu.mp3 --algorithm poll --volume -100 – I don't know any g722 files so I tried with mp3 and received static noise :sweat_smile: – this setting seem to be most stable in meaning of streaming audio for both devices for me but still sometimes seem unstably and stable BT connection is hard to receive – in most cases I must restart bluetooth service before run this test – otherwise one or both devices keep disconnecting after several seconds, first one, several second later second but not always, only poll algorithm seem to keep both little longer (~1-2 min). Also this  is only method for me to keep sound on both aids not only one. Same issue with ./asha_pipewire_sink. I also tried other values in /etc/bluetooth/main.conf but that seem no difference so i keep these from README.
(process:10192): GLib-GIO-DEBUG: 12:02:25.129: Using cross-namespace EXTERNAL authentication (this will deadlock if server is GDBus < 2.73.3)
Running with socket output polling
Stream latency: 0.0634051
** INFO: 12:02:38.085: Adding bluetooth device TOMASZ
TOMASZ (Right)
    Name:      TOMASZ
    Mac:       00:19:8E:C8:F5:2C
    HiSyncId:<PHONE_NUMBER>414956807
    Side:      right (binaural)
    Delay:     89 ms
    Streaming: supported
    Codecs:    G.722@16kHz
    Connected: true
    PHY:    0
        Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
        You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
           btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
        and then disconnecting and reconnecting your hearing devices.
        Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
Running with socket output polling
** INFO: 12:02:38.739: Adding bluetooth device TOMASZ

** (process:10192): WARNING **: 12:02:38.787: 2M PHY not enabled
** INFO: 12:02:38.787:         Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
** INFO: 12:02:38.787:         You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
** INFO: 12:02:38.787:            btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
** INFO: 12:02:38.787:         and then disconnecting and reconnecting your hearing devices.
** INFO: 12:02:38.787:         Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
TOMASZ (Left)
    Name:      TOMASZ
    Mac:       00:19:8E:F5:54:98
    HiSyncId:<PHONE_NUMBER>414956807
    Side:      left (binaural)
    Delay:     89 ms
    Streaming: supported
    Codecs:    G.722@16kHz
    Connected: true
    PHY:    0
        Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
        You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
           btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
        and then disconnecting and reconnecting your hearing devices.
        Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
Running with socket output polling

** (process:10192): WARNING **: 12:02:39.576: 2M PHY not enabled
** INFO: 12:02:39.576:         Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
** INFO: 12:02:39.577:         You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
** INFO: 12:02:39.577:            btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
** INFO: 12:02:39.577:         and then disconnecting and reconnecting your hearing devices.
** INFO: 12:02:39.577:         Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise

** (process:10192): WARNING **: 12:02:42.957: Dropping frame for TOMASZ (Right)

** (process:10192): WARNING **: 12:02:46.717: Dropping frame for TOMASZ (Right)

** (process:10192): WARNING **: 12:02:49.271: Dropping frame for TOMASZ (Right)
Stream latency: -0.0229447

** (process:10192): WARNING **: 12:02:51.731: Dropping frame for TOMASZ (Right)
Stream latency: -0.0373053

** (process:10192): WARNING **: 12:03:07.769: Dropping frame for TOMASZ (Right)
Stream latency: -0.0450201

** (process:10192): WARNING **: 12:03:11.289: Dropping frame for TOMASZ (Right)

** (process:10192): WARNING **: 12:03:18.968: Dropping frame for TOMASZ (Right)
Stream latency: -0.0458684

** (process:10192): WARNING **: 12:03:19.788: Dropping frame for TOMASZ (Right)

** (process:10192): WARNING **: 12:03:20.708: Dropping frame for TOMASZ (Right)

** (process:10192): WARNING **: 12:03:21.534: Dropping frame for TOMASZ (Right)

** (process:10192): WARNING **: 12:03:29.213: Dropping frame for TOMASZ (Right)
Stream latency: -0.0471173
^CStopping...

Also ./asha_pipewire_sink is not very stable it often crash, this is dump from one:
cze 15 12:38:20 ws094 systemd-coredump[12207]: [🡕] Process 12171 (asha_pipewire_s) of user 1000 dumped core.

                                               Stack trace of thread 12171:
                                               #0  0x000071362a9e6ad8 g_log_structured_array (libglib-2.0.so.0 + 0x61ad8)
                                               #1  0x000071362a9e6dd7 g_log_default_handler (libglib-2.0.so.0 + 0x61dd7)
                                               #2  0x000071362a9e705c g_logv (libglib-2.0.so.0 + 0x6205c)
                                               #3  0x000071362a9e73d4 g_log (libglib-2.0.so.0 + 0x623d4)
                                               #4  0x000061905a3e6ce4 n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x18ce4)
                                               #5  0x000061905a3d3ff6 n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x5ff6)
                                               #6  0x000061905a3d627c n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x827c)
                                               #7  0x000061905a3d5b0a n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x7b0a)
                                               #8  0x000061905a3d5435 n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x7435)
                                               #9  0x000061905a3d7e34 n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x9e34)
                                               #10 0x000061905a3d4ce3 n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x6ce3)
                                               #11 0x000061905a3d4b82 n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x6b82)
                                               #12 0x000061905a3d4ba1 n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x6ba1)
                                               #13 0x000071362a9e2eda n/a (libglib-2.0.so.0 + 0x5deda)
                                               #14 0x000071362a9e1a89 n/a (libglib-2.0.so.0 + 0x5ca89)
                                               #15 0x000071362aa439b7 n/a (libglib-2.0.so.0 + 0xbe9b7)
                                               #16 0x000071362a9e2787 g_main_loop_run (libglib-2.0.so.0 + 0x5d787)
                                               #17 0x000061905a3f7560 n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x29560)
                                               #18 0x000071362a34ec88 n/a (libc.so.6 + 0x25c88)
                                               #19 0x000071362a34ed4c __libc_start_main (libc.so.6 + 0x25d4c)
                                               #20 0x000061905a3d3965 n/a (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink + 0x5965)
                                               ELF object binary architecture: AMD x86-64

On tuesday evening I will be able to test this on my PC where I have Intel AX200 if I remember correctly and see if that make any difference ;)

Also ./asha_pipewire_sink is not very stable it often crash, this is dump from one:

Can you re-run cmake with cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_ASAN=1 and rebuild? That should give me some symbols to work with.

After connecting with PC you can reconnect them with phone – so that's not big problem

This might be a problem, in most cases the phone will keep stealing the hearing devices.

I know that issue from my old SoundGate, phone keep stealing it unless I disable BT. With Alpha I observed similar issue – when phone BT enabled no sound from test though both hearing aids are connected to laptop. For me that's acceptable – when work on PC disable phone BT and enable KDE Connect, when finish just reenable BT. I don't use my phone very much so probably that's why this isn't big issue for me :wink:

There are test audio files in the sounds folder.

Indeed, I didn't saw them earlier. Here another test for poll algorithm. One device disconnected in the middle :disappointed: As previous this keep lognest connection for both devices. Other algorithms disconnect one device faster but this time keep one. So I assume that maybe my issue isn't in this code but in poor BT connection.
(process:1916): GLib-GIO-DEBUG: 14:04:14.030: Using cross-namespace EXTERNAL authentication (this will deadlock if server is GDBus < 2.73.3)
Running with socket output polling
** INFO: 14:04:20.463: Adding bluetooth device TOMASZ
TOMASZ (Right)
    Name:      TOMASZ
    Mac:       00:19:8E:C8:F5:2C
    HiSyncId:<PHONE_NUMBER>414956807
    Side:      right (binaural)
    Delay:     89 ms
    Streaming: supported
    Codecs:    G.722@16kHz
    Connected: true
    PHY:    0
        Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
        You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
           btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
        and then disconnecting and reconnecting your hearing devices.
        Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
Running with socket output polling

** (process:1916): WARNING **: 14:04:21.110: 2M PHY not enabled
** INFO: 14:04:21.110:         Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
** INFO: 14:04:21.110:         You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
** INFO: 14:04:21.110:            btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
** INFO: 14:04:21.110:         and then disconnecting and reconnecting your hearing devices.
** INFO: 14:04:21.110:         Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
** INFO: 14:04:21.428: Adding bluetooth device TOMASZ
TOMASZ (Left)
    Name:      TOMASZ
    Mac:       00:19:8E:F5:54:98
    HiSyncId:<PHONE_NUMBER>414956807
    Side:      left (binaural)
    Delay:     89 ms
    Streaming: supported
    Codecs:    G.722@16kHz
    Connected: true
    PHY:    0
        Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
        You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
           btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
        and then disconnecting and reconnecting your hearing devices.
        Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
Running with socket output polling

** (process:1916): WARNING **: 14:04:22.306: 2M PHY not enabled
** INFO: 14:04:22.306:         Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
** INFO: 14:04:22.306:         You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
** INFO: 14:04:22.306:            btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
** INFO: 14:04:22.306:         and then disconnecting and reconnecting your hearing devices.
** INFO: 14:04:22.306:         Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise

** (process:1916): WARNING **: 14:04:24.842: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:04:26.575: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:04:30.775: Dropping frame for TOMASZ (Right)
Stream latency: -0.0248352
Stream latency: -0.0203421

** (process:1916): WARNING **: 14:04:43.674: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:04:50.134: Dropping frame for TOMASZ (Right)
Stream latency: -0.0463894

** (process:1916): WARNING **: 14:04:56.754: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:04:57.293: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:04:57.734: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:04:57.839: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:04:57.914: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:04:58.694: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:04:59.353: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:05:01.694: Dropping frame for TOMASZ (Right)
Stream latency: -0.00591096

** (process:1916): WARNING **: 14:05:10.133: Dropping frame for TOMASZ (Right)
Stream latency: -0.0260835

** (process:1916): WARNING **: 14:05:13.799: Dropping frame for TOMASZ (Right)

** (process:1916): WARNING **: 14:05:13.813: Dropping frame for TOMASZ (Right)
** INFO: 14:05:13.835: Removing bluetooth device TOMASZ
Removing TOMASZ (Right)

** (process:1916): WARNING **: 14:05:13.854: Error calling WriteValue: GDBus.Error:org.bluez.Error.Failed: Not connected

** (process:1916): WARNING **: 14:05:13.854: Null result when calling WriteValue
Running with socket output polling
Stream latency: -0.146286
Stream latency: -0.126422
Stream latency: -0.146503
Stream latency: -0.146135
Stream latency: -0.145862
Stream latency: -0.124951
Stream latency: -0.137574
Stream latency: -0.120777
Stream latency: -0.119517
Stream latency: -0.13807
Stream latency: -0.136686
Stream latency: -0.135208
Stream latency: -0.114038
^CStopping...

It also seems to have a hard time negotiating 2M PHY, (At least before the code gives up and stops checking for it).
Can you use btmon -w file_name.snoop to capture the bluetooth traffic when you run asha_connection_test?

This time ./asha_stream_test --left ../sounds/left.g722 --right ../sounds/right.g722 --algorithm fixed --volume -64 gave me best sound results but still one keep disconnecting
(process:4206): GLib-GIO-DEBUG: 14:41:53.849: Using cross-namespace EXTERNAL authentication (this will deadlock if server is GDBus < 2.73.3)
Running with fixed rate frames
** INFO: 14:42:00.049: Adding bluetooth device TOMASZ
TOMASZ (Right)
    Name:      TOMASZ
    Mac:       00:19:8E:C8:F5:2C
    HiSyncId:<PHONE_NUMBER>414956807
    Side:      right (binaural)
    Delay:     89 ms
    Streaming: supported
    Codecs:    G.722@16kHz
    Connected: true
    PHY:    0
        Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
        You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
           btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
        and then disconnecting and reconnecting your hearing devices.
        Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
Running with fixed rate frames

** (process:4206): WARNING **: 14:42:00.724: 2M PHY not enabled
** INFO: 14:42:00.724:         Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
** INFO: 14:42:00.724:         You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
** INFO: 14:42:00.724:            btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
** INFO: 14:42:00.724:         and then disconnecting and reconnecting your hearing devices.
** INFO: 14:42:00.725:         Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise

** (process:4206): WARNING **: 14:42:01.005: Dropping frame for TOMASZ (Right)

** (process:4206): WARNING **: 14:42:01.065: Dropping frame for TOMASZ (Right)

** (process:4206): WARNING **: 14:42:01.084: Dropping frame for TOMASZ (Right)

** (process:4206): WARNING **: 14:42:01.105: Dropping frame for TOMASZ (Right)

** (process:4206): WARNING **: 14:42:01.145: Dropping frame for TOMASZ (Right)
** INFO: 14:42:01.452: Adding bluetooth device TOMASZ
TOMASZ (Left)
    Name:      TOMASZ
    Mac:       00:19:8E:F5:54:98
    HiSyncId:<PHONE_NUMBER>414956807
    Side:      left (binaural)
    Delay:     89 ms
    Streaming: supported
    Codecs:    G.722@16kHz
    Connected: true
    PHY:    0
        Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
        You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
           btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
        and then disconnecting and reconnecting your hearing devices.
        Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
Running with fixed rate frames

** (process:4206): WARNING **: 14:42:02.373: 2M PHY not enabled
** INFO: 14:42:02.373:         Unless you enable LE_2M_TX, don't expect to be able to stream to more than one device.
** INFO: 14:42:02.373:         You can use `btmgmt phy` to check the supported phy's, and enable additional phy's by running a command like
** INFO: 14:42:02.373:            btmgmt phy BR1M1SLOT BR1M3SLOT BR1M5SLOT EDR2M1SLOT EDR2M3SLOT EDR2M5SLOT EDR3M1SLOT EDR3M3SLOT EDR3M5SLOT LE1MTX LE1MRX LE2MTX LE2MRX
** INFO: 14:42:02.373:         and then disconnecting and reconnecting your hearing devices.
** INFO: 14:42:02.373:         Note that some devices and adapters don't support 2M PHY's, despite advertising otherwise
Stream latency: 0.0201621
Stream latency: 0.0218879

** (process:4206): WARNING **: 14:42:25.248: Dropping frame for TOMASZ (Right)

** (process:4206): WARNING **: 14:42:25.368: Dropping frame for TOMASZ (Right)

** (process:4206): WARNING **: 14:42:25.388: Dropping frame for TOMASZ (Right)
** INFO: 14:42:25.400: Removing bluetooth device TOMASZ
Removing TOMASZ (Right)

** (process:4206): WARNING **: 14:42:25.403: Error calling WriteValue: GDBus.Error:org.bluez.Error.Failed: Not connected

** (process:4206): WARNING **: 14:42:25.403: Null result when calling WriteValue
Running with fixed rate frames
Stream latency: 0.0215726
Stream latency: 0.0219095
^CStopping...

It also seems to have a hard time negotiating 2M PHY, (At least before the code gives up and stops checking for it).
Can you use btmon -w file_name.snoop to capture the bluetooth traffic when you run asha_connection_test?

Done, here logs
file_name.snoop.txt
Also after enabling debug flags pipewire sing sometimes crash without generating coredump just with this output
** (process:5700): WARNING **: 14:59:31.249: Dropping frame for TOMASZ (Left)

** (process:5700): WARNING **: 14:59:31.255: Dropping frame for TOMASZ (Left)

** (process:5700): WARNING **: 14:59:31.255: Disconnected from TOMASZ (Left): (Connection reset by peer)

** (process:5700): WARNING **: 14:59:31.306: Error calling WriteValue: GDBus.Error:org.bluez.Error.Failed: Not connected

** (process:5700): WARNING **: 14:59:31.306: Null result when calling WriteValue

** (process:5700): WARNING **: 14:59:32.080: 2M PHY not enabled
on_change_state old: UNCONNECTED  new: CONNECTING
on_change_state old: CONNECTING  new: PAUSED
control_info(Volume, 1)
control_info(Mute, 1)
control_info(Channel Volumes, 0)
control_info(Soft Mute, 1)
control_info(Soft Volumes, 0)
control_info(Monitor Mute, 1)
control_info(Monitor Volumes, 0)
control_info(Channel Volumes, 2)
control_info(Soft Volumes, 2)
control_info(Monitor Volumes, 2)
on_change_state old: PAUSED  new: STREAMING

** (process:5700): WARNING **: 14:59:32.382: Failed to connect l2cap channel: Connection refused

** (process:5700): ERROR **: 14:59:32.420: Failed to connect to TOMASZ (Left)
zsh: trace trap (core dumped)  ./asha_pipewire_sink

But once I received this, maybe this is more useful:
** (process:6104): WARNING **: 15:05:38.862: Dropping frame for TOMASZ (Right)
AddressSanitizer:DEADLYSIGNAL
=================================================================
==6104==ERROR: AddressSanitizer: SEGV on unknown address 0x0000000002b9 (pc 0x5b7e02ef874c bp 0x7bdc1e5ff6e0 sp 0x7bdc1e5ff6d0 T10)
==6104==The signal is caused by a READ memory access.
==6104==Hint: address points to the zero page.
    #0 0x5b7e02ef874c in asha::Side::Right() const /home/tomek/asha/asha_pipewire_sink/asha/Side.hh:52
    #1 0x5b7e02ef8777 in asha::Side::Left() const /home/tomek/asha/asha_pipewire_sink/asha/Side.hh:53
    #2 0x5b7e02ef30f7 in asha::Device::SendAudio(RawS16 const&, bool&, bool&) /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:169
    #3 0x5b7e02ef1197 in operator() /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:15
    #4 0x5b7e02ef595e in __invoke_impl<bool, asha::Device::Device(uint64_t, const std::string&, const std::string&, ReconnectCallback)::<lambda(const RawS16&, bool&, bool&)>&, const RawS16&, bool&, bool&> /usr/include/c++/14.1.1/bits/invoke.h:61
    #5 0x5b7e02ef550d in __invoke_r<bool, asha::Device::Device(uint64_t, const std::string&, const std::string&, ReconnectCallback)::<lambda(const RawS16&, bool&, bool&)>&, const RawS16&, bool&, bool&> /usr/include/c++/14.1.1/bits/invoke.h:138
    #6 0x5b7e02ef50c9 in _M_invoke /usr/include/c++/14.1.1/bits/std_function.h:290
    #7 0x5b7e02efcc9b in std::function<bool (RawS16 const&, bool&, bool&)>::operator()(RawS16 const&, bool&, bool&) const /usr/include/c++/14.1.1/bits/std_function.h:591
    #8 0x5b7e02efadf3 in asha::Buffer<8ul>::DeliveryThread() /home/tomek/asha/asha_pipewire_sink/asha/Buffer.hh:119
    #9 0x5b7e02efffca in void std::__invoke_impl<void, void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*>(std::__invoke_memfun_deref, void (asha::Buffer<8ul>::*&&)(), asha::Buffer<8ul>*&&) /usr/include/c++/14.1.1/bits/invoke.h:74
    #10 0x5b7e02effef2 in std::__invoke_result<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*>::type std::__invoke<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*>(void (asha::Buffer<8ul>::*&&)(), asha::Buffer<8ul>*&&) /usr/include/c++/14.1.1/bits/invoke.h:96
    #11 0x5b7e02effe62 in void std::thread::_Invoker<std::tuple<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/include/c++/14.1.1/bits/std_thread.h:292
    #12 0x5b7e02effe01 in std::thread::_Invoker<std::tuple<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*> >::operator()() /usr/include/c++/14.1.1/bits/std_thread.h:299
    #13 0x5b7e02effdcb in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*> > >::_M_run() /usr/include/c++/14.1.1/bits/std_thread.h:244
    #14 0x7bdc288e0c83 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    #15 0x7bdc2905cc79 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    #16 0x7bdc286a6dec  (/usr/lib/libc.so.6+0x92dec) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #17 0x7bdc2872a0db  (/usr/lib/libc.so.6+0x1160db) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/tomek/asha/asha_pipewire_sink/asha/Side.hh:52 in asha::Side::Right() const
Thread T10 created by T0 here:
    #0 0x7bdc290f38fb in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7bdc288e0d81 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    #2 0x7bdc288e0d81 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    #3 0x5b7e02efb3c2 in std::thread::thread<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*, void>(void (asha::Buffer<8ul>::*&&)(), asha::Buffer<8ul>*&&) /usr/include/c++/14.1.1/bits/std_thread.h:164
    #4 0x5b7e02ef9ae1 in asha::Buffer<8ul>::Start() /home/tomek/asha/asha_pipewire_sink/asha/Buffer.hh:48
    #5 0x5b7e02ef281a in asha::Device::Start() /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:120
    #6 0x5b7e02ef3d69 in asha::Device::AddSide(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<asha::Side> const&) /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:266
    #7 0x5b7e02ecb8e5 in operator() /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:108
    #8 0x5b7e02ecfb8d in __invoke_impl<void, asha::Asha::OnAddDevice(const asha::Bluetooth::BluezDevice&)::<lambda()>&> /usr/include/c++/14.1.1/bits/invoke.h:61
    #9 0x5b7e02ecf0af in __invoke_r<void, asha::Asha::OnAddDevice(const asha::Bluetooth::BluezDevice&)::<lambda()>&> /usr/include/c++/14.1.1/bits/invoke.h:150
    #10 0x5b7e02ece656 in _M_invoke /usr/include/c++/14.1.1/bits/std_function.h:290
    #11 0x5b7e02ed2c8b in std::function<void ()>::operator()() const /usr/include/c++/14.1.1/bits/std_function.h:591
    #12 0x5b7e02ecd817 in asha::Asha::ProcessDeferred() /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:176
    #13 0x5b7e02ecd527 in operator() /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:167
    #14 0x5b7e02ecd546 in _FUN /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:168
    #15 0x7bdc28d42ed9  (/usr/lib/libglib-2.0.so.0+0x5ded9) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #16 0x7bdc28d41a88  (/usr/lib/libglib-2.0.so.0+0x5ca88) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #17 0x7bdc28da39b6  (/usr/lib/libglib-2.0.so.0+0xbe9b6) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #18 0x7bdc28d42786 in g_main_loop_run (/usr/lib/libglib-2.0.so.0+0x5d786) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #19 0x5b7e02f1719d in main /home/tomek/asha/asha_pipewire_sink/pipewire_sink.cxx:58
    #20 0x7bdc28639c87  (/usr/lib/libc.so.6+0x25c87) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #21 0x7bdc28639d4b in __libc_start_main (/usr/lib/libc.so.6+0x25d4b) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #22 0x5b7e02ecab04 in _start (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink+0xdb04) (BuildId: 61a5b18938885a32cb8a12b491da87c392720dd6)

==6104==ABORTING

That is exactly what I needed.
Also, you can ignore the 2M Phy warnings. The packet trace shows that it takes almost a second to negotiate, which is longer than I'm scanning for it. I guess I'll have to increase that some more.

The line numbers in your packet trace don't match up. What git hash are you running?

The line numbers in your packet trace don't match up. What git hash are you running?

That should be latest, all results posted here should be from ad1f2079790462b9c4d3c2476e8084c89df12c22. Although I did some tests yesterday probably from this commit d5af312c8f9f26251d835c73e2aec36d7c86b2cb. Maybe before recompiling I should remove old builds? If you need more tests I can run more tomorrow 😉

I've pushed an update to asha_pipewire_sink to try and make the connection more stable. Give it a try when you get a chance.
You are the first person that has submitted results from a mediatek bluetooth adapter. I would love to see a packet trace with asha_stream_test running.

I'm back and here new tests :smile:

test with fixed algorithm – the best results as far, one aid disconnected fast but after reconnecting it keeps playing wiht small audio drops on right side.
test_fixed.snoop.txt

test with deadline algorithm  – audio drops frequently, right aid disconnected fast as usual but after manual reconnecting ears switched and disconnected left aid and keep playing on right side – that happen first time
test_deadline.snoop.txt

test with poll algorihtm – at the begining audio (with huge drops and small quirks) on both sides but fastly one side disconnect and reconnecting don't change much.
test_poll.snoop.txt

another test with poll algorithm but with some play with aid and phone – also very good and stable results similar to first. I added some spicy  to this – change volume, programs and mute in my hearing aids. At the end I enabled BT in phone and at this moment one aid disconnected (but I'm not sure it's caused by phone). I tried to connect them to phone but without success.
test_poll_with_fun.snoop.txt

And another (partially intentional) crash from asha_pipewire_sink still keeps disconnecting one side but in general program seems more stable and crashed after 3 mins and several aid reconnections.
Ring Occupancy: 5 High: 8 Ring Dropped: 0 Total: 16 Adapter Dropped: 0 Total: 11 Silence: 0 Total: 2
** INFO: 10:56:19.798: Dropping frame for TOMASZ (Left)
** INFO: 10:56:19.804: Removing bluetooth device TOMASZ

** (process:5568): WARNING **: 10:56:19.814: Disconnected from TOMASZ (Left): (Connection reset by peer)
** INFO: 10:56:19.815: Dropping frame for TOMASZ (Right)
** INFO: 10:56:19.835: Dropping frame for TOMASZ (Right)
** INFO: 10:56:19.856: Dropping frame for TOMASZ (Right)
AddressSanitizer:DEADLYSIGNAL
=================================================================
==5568==ERROR: AddressSanitizer: SEGV on unknown address 0x0000000002d5 (pc 0x55e4fcccd926 bp 0x7dff1a1ff7b0 sp 0x7dff1a1ff7a0 T24)
==5568==The signal is caused by a READ memory access.
==5568==Hint: address points to the zero page.
Ring Occupancy: 3 High: 8 Ring Dropped: 2 Total: 18 Adapter Dropped: 2 Total: 13 Silence: 0 Total: 2
    #0 0x55e4fcccd926 in asha::Side::Ready() const /home/tomek/asha/asha_pipewire_sink/asha/Side.hh:69
    #1 0x55e4fccc84f4 in asha::Device::SendAudio(RawS16 const&) /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:182
    #2 0x55e4fccc6386 in operator() /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:15
    #3 0x55e4fcccaac0 in __invoke_impl<bool, asha::Device::Device(uint64_t, const std::string&, const std::string&, ReconnectCallback)::<lambda(const RawS16&)>&, const RawS16&> /usr/include/c++/14.1.1/bits/invoke.h:61
    #4 0x55e4fccca6a5 in __invoke_r<bool, asha::Device::Device(uint64_t, const std::string&, const std::string&, ReconnectCallback)::<lambda(const RawS16&)>&, const RawS16&> /usr/include/c++/14.1.1/bits/invoke.h:138
    #5 0x55e4fccca295 in _M_invoke /usr/include/c++/14.1.1/bits/std_function.h:290
    #6 0x55e4fccd1562 in std::function<bool (RawS16 const&)>::operator()(RawS16 const&) const (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink+0x3f562) (BuildId: e55a0ee0d74cee5982d29ae57cd999884b64191a)
    #7 0x55e4fcccfa61 in asha::Buffer<8ul>::DeliveryThread() /home/tomek/asha/asha_pipewire_sink/asha/Buffer.hh:118
    #8 0x55e4fccd47de in void std::__invoke_impl<void, void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*>(std::__invoke_memfun_deref, void (asha::Buffer<8ul>::*&&)(), asha::Buffer<8ul>*&&) /usr/include/c++/14.1.1/bits/invoke.h:74
    #9 0x55e4fccd4706 in std::__invoke_result<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*>::type std::__invoke<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*>(void (asha::Buffer<8ul>::*&&)(), asha::Buffer<8ul>*&&) /usr/include/c++/14.1.1/bits/invoke.h:96
    #10 0x55e4fccd4676 in void std::thread::_Invoker<std::tuple<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/include/c++/14.1.1/bits/std_thread.h:292
    #11 0x55e4fccd4615 in std::thread::_Invoker<std::tuple<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*> >::operator()() /usr/include/c++/14.1.1/bits/std_thread.h:299
    #12 0x55e4fccd45df in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*> > >::_M_run() /usr/include/c++/14.1.1/bits/std_thread.h:244
    #13 0x7dff218e0c83 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    #14 0x7dff2205cc79 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    #15 0x7dff216a6dec  (/usr/lib/libc.so.6+0x92dec) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #16 0x7dff2172a0db  (/usr/lib/libc.so.6+0x1160db) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/tomek/asha/asha_pipewire_sink/asha/Side.hh:69 in asha::Side::Ready() const
Thread T24 created by T0 here:
    #0 0x7dff220f38fb in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7dff218e0d81 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    #2 0x7dff218e0d81 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    #3 0x55e4fcccfde2 in std::thread::thread<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*, void>(void (asha::Buffer<8ul>::*&&)(), asha::Buffer<8ul>*&&) /usr/include/c++/14.1.1/bits/std_thread.h:164
    #4 0x55e4fcccea2d in asha::Buffer<8ul>::Start() /home/tomek/asha/asha_pipewire_sink/asha/Buffer.hh:48
    #5 0x55e4fccc7a30 in asha::Device::Start() /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:126
    #6 0x55e4fccc8f65 in asha::Device::AddSide(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<asha::Side> const&) /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:256
    #7 0x55e4fcca0ae1 in operator() /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:118
    #8 0x55e4fcca4d89 in __invoke_impl<void, asha::Asha::OnAddDevice(const asha::Bluetooth::BluezDevice&)::<lambda()>&> /usr/include/c++/14.1.1/bits/invoke.h:61
    #9 0x55e4fcca42ab in __invoke_r<void, asha::Asha::OnAddDevice(const asha::Bluetooth::BluezDevice&)::<lambda()>&> /usr/include/c++/14.1.1/bits/invoke.h:150
    #10 0x55e4fcca3852 in _M_invoke /usr/include/c++/14.1.1/bits/std_function.h:290
    #11 0x55e4fcca7e87 in std::function<void ()>::operator()() const /usr/include/c++/14.1.1/bits/std_function.h:591
    #12 0x55e4fcca2a13 in asha::Asha::ProcessDeferred() /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:186
    #13 0x55e4fcca2723 in operator() /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:177
    #14 0x55e4fcca2742 in _FUN /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:178
    #15 0x7dff21d42ed9  (/usr/lib/libglib-2.0.so.0+0x5ded9) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #16 0x7dff21d41a88  (/usr/lib/libglib-2.0.so.0+0x5ca88) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #17 0x7dff21da39b6  (/usr/lib/libglib-2.0.so.0+0xbe9b6) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #18 0x7dff21d42786 in g_main_loop_run (/usr/lib/libglib-2.0.so.0+0x5d786) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #19 0x55e4fcceb703 in main /home/tomek/asha/asha_pipewire_sink/pipewire_sink.cxx:57
    #20 0x7dff21639c87  (/usr/lib/libc.so.6+0x25c87) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #21 0x7dff21639d4b in __libc_start_main (/usr/lib/libc.so.6+0x25d4b) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #22 0x55e4fcc9fb04 in _start (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink+0xdb04) (BuildId: e55a0ee0d74cee5982d29ae57cd999884b64191a)

==5568==ABORTING

Yes, that's from latest commit

Also try connecting your devices before starting asha_stream or asha_pipewire. Connecting after can lead to instability and it's a known issue.

In this situation no crash but still one device always disconnect after several seconds... In my case connecting after start asha_* is only way to play on both aids for more than first 2-3 seconds.

And another (partially intentional) crash from asha_pipewire_sink still keeps disconnecting one side but in general program seems more stable and crashed after 3 mins and several aid reconnections.

When you say "disconnect" here, do you mean that you only see a Disconnected from %s: (%s) message, but the device stays attached via bluetooth? Or that that the bluetooth connection drops entirely and you have to re-attach it via the an O/S bluetooth menu?
This may be hitting a logic path that I can't reproduce locally, where the bluetooth stays attached, but the audio stream gets disconnected. That recovery logic is older than the buffer thread implementation, and needs updated.

When you say "disconnect" here, do you mean that you only see a Disconnected from %s: (%s) message, but the device stays attached via bluetooth? Or that that the bluetooth connection drops entirely and you have to re-attach it via the an O/S bluetooth menu?

The second option. BT connection drops entirely. The scenario is usually that first drop audio on one side and 1-2 seconds later drops BT connection entirely on this side.

I think I've fixed the crash you have been seeing.
I've also added an additional pre-buffer step during startup which may improve the stability. Please test and let me know how it goes. Remember to double-check that 2M PHY is enabled.

I think I've fixed the crash you have been seeing.

Nope asha_pipewire_sink still crashing
** INFO: 18:53:55.583: Dropping frame for TOMASZ (Left)
AddressSanitizer:DEADLYSIGNAL
=================================================================
==3776==ERROR: AddressSanitizer: SEGV on unknown address 0x0000000002d5 (pc 0x5c042eb4a942 bp 0x76a5a55ff790 sp 0x76a5a55ff780 T30)
==3776==The signal is caused by a READ memory access.
==3776==Hint: address points to the zero page.
    #0 0x5c042eb4a942 in asha::Side::Ready() const /home/tomek/asha/asha_pipewire_sink/asha/Side.hh:69
    #1 0x5c042eb45510 in asha::Device::SendAudio(RawS16 const&) /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:183
    #2 0x5c042eb43386 in operator() /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:15
    #3 0x5c042eb47adc in __invoke_impl<bool, asha::Device::Device(uint64_t, const std::string&, const std::string&, ReconnectCallback)::<lambda(const RawS16&)>&, const RawS16&> /usr/include/c++/14.1.1/bits/invoke.h:61
    #4 0x5c042eb476c1 in __invoke_r<bool, asha::Device::Device(uint64_t, const std::string&, const std::string&, ReconnectCallback)::<lambda(const RawS16&)>&, const RawS16&> /usr/include/c++/14.1.1/bits/invoke.h:138
    #5 0x5c042eb472b1 in _M_invoke /usr/include/c++/14.1.1/bits/std_function.h:290
    #6 0x5c042eb4e828 in std::function<bool (RawS16 const&)>::operator()(RawS16 const&) const (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink+0x3f828) (BuildId: 495e00eef5b6e4639ff6577e362c95b0b665542c)
    #7 0x5c042eb4cd23 in asha::Buffer<8ul>::DeliveryThread() /home/tomek/asha/asha_pipewire_sink/asha/Buffer.hh:144
    #8 0x5c042eb51b52 in void std::__invoke_impl<void, void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*>(std::__invoke_memfun_deref, void (asha::Buffer<8ul>::*&&)(), asha::Buffer<8ul>*&&) /usr/include/c++/14.1.1/bits/invoke.h:74
    #9 0x5c042eb51a7a in std::__invoke_result<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*>::type std::__invoke<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*>(void (asha::Buffer<8ul>::*&&)(), asha::Buffer<8ul>*&&) /usr/include/c++/14.1.1/bits/invoke.h:96
    #10 0x5c042eb519ea in void std::thread::_Invoker<std::tuple<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/include/c++/14.1.1/bits/std_thread.h:292
    #11 0x5c042eb51989 in std::thread::_Invoker<std::tuple<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*> >::operator()() /usr/include/c++/14.1.1/bits/std_thread.h:299
    #12 0x5c042eb51953 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*> > >::_M_run() /usr/include/c++/14.1.1/bits/std_thread.h:244
    #13 0x76a5afae0c83 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    #14 0x76a5b025cc79 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    #15 0x76a5af8a6dec  (/usr/lib/libc.so.6+0x92dec) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #16 0x76a5af92a0db  (/usr/lib/libc.so.6+0x1160db) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/tomek/asha/asha_pipewire_sink/asha/Side.hh:69 in asha::Side::Ready() const
Thread T30 created by T0 here:
    #0 0x76a5b02f38fb in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x76a5afae0d81 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    #2 0x76a5afae0d81 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    #3 0x5c042eb4d0a8 in std::thread::thread<void (asha::Buffer<8ul>::*)(), asha::Buffer<8ul>*, void>(void (asha::Buffer<8ul>::*&&)(), asha::Buffer<8ul>*&&) /usr/include/c++/14.1.1/bits/std_thread.h:164
    #4 0x5c042eb4bb43 in asha::Buffer<8ul>::Start() /home/tomek/asha/asha_pipewire_sink/asha/Buffer.hh:49
    #5 0x5c042eb44a4c in asha::Device::Start() /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:127
    #6 0x5c042eb45f81 in asha::Device::AddSide(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<asha::Side> const&) /home/tomek/asha/asha_pipewire_sink/asha/Device.cxx:257
    #7 0x5c042eb1dae1 in operator() /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:118
    #8 0x5c042eb21d89 in __invoke_impl<void, asha::Asha::OnAddDevice(const asha::Bluetooth::BluezDevice&)::<lambda()>&> /usr/include/c++/14.1.1/bits/invoke.h:61
    #9 0x5c042eb212ab in __invoke_r<void, asha::Asha::OnAddDevice(const asha::Bluetooth::BluezDevice&)::<lambda()>&> /usr/include/c++/14.1.1/bits/invoke.h:150
    #10 0x5c042eb20852 in _M_invoke /usr/include/c++/14.1.1/bits/std_function.h:290
    #11 0x5c042eb24e87 in std::function<void ()>::operator()() const /usr/include/c++/14.1.1/bits/std_function.h:591
    #12 0x5c042eb1fa13 in asha::Asha::ProcessDeferred() /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:186
    #13 0x5c042eb1f723 in operator() /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:177
    #14 0x5c042eb1f742 in _FUN /home/tomek/asha/asha_pipewire_sink/asha/Asha.cxx:178
    #15 0x76a5afee3ed9  (/usr/lib/libglib-2.0.so.0+0x5ded9) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #16 0x76a5afee2a88  (/usr/lib/libglib-2.0.so.0+0x5ca88) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #17 0x76a5aff449b6  (/usr/lib/libglib-2.0.so.0+0xbe9b6) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #18 0x76a5afee3786 in g_main_loop_run (/usr/lib/libglib-2.0.so.0+0x5d786) (BuildId: 8880230af7e37f2edbd90b79170aead80dde617a)
    #19 0x5c042eb68a77 in main /home/tomek/asha/asha_pipewire_sink/pipewire_sink.cxx:57
    #20 0x76a5af839c87  (/usr/lib/libc.so.6+0x25c87) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #21 0x76a5af839d4b in __libc_start_main (/usr/lib/libc.so.6+0x25d4b) (BuildId: 32a656aa5562eece8c59a585f5eacd6cf5e2307b)
    #22 0x5c042eb1cb04 in _start (/home/tomek/asha/asha_pipewire_sink/build/asha_pipewire_sink+0xdb04) (BuildId: 495e00eef5b6e4639ff6577e362c95b0b665542c)

==3776==ABORTING

I've also added an additional pre-buffer step during startup which may improve the stability. Please test and let me know how it goes. Remember to double-check that 2M PHY is enabled.

That didn't help, still no sound on one side and bluetooth connection drops after short moment, here results from btmon
test_fixed.snoop.txt

Also, did you ever get a chance to test this on your desktop with the Intel bluetooth adapter?

Gimme a moment, I just returned to home :smile:

Same system (Manjaro) but ohther hardware is much better. With asha_pipewire_sink I was able to listen YT for around 15 min, still some audio drops but no BT disconnections and it's usable. That's amazing :smile:
Bluetooth:
  Device-1: Intel AX200 Bluetooth driver: btusb v: 0.8 type: USB rev: 2.0
    speed: 12 Mb/s lanes: 1 mode: 1.1 bus-ID: 1-5:3 chip-ID: 8087:0029
    class-ID: e001
  Report: hciconfig ID: hci0 rfk-id: 0 state: up address: <filter> bt-v: 5.2
    lmp-v: 11 sub-v: 2184 hci-v: 11 rev: 2184 class-ID: 6c0104
  Info: acl-mtu: 1021:4 sco-mtu: 96:6 link-policy: rswitch sniff
    link-mode: peripheral accept service-classes: rendering, capturing, audio,
    telephony

Here test results, no BT disconnections just some adio drops (and these drops were slightly bigger than with asha_pipewire_sink)
test_fixed.snoop.txt
I forgot to mention earlier but on both devices I had 2M PHY enabled by default :wink:

I forgot to mention earlier but on both devices I had 2M PHY enabled by default 😉

Yeah, the 2M PHY thing just seems to be me. I'm on debian stable, which uses 6.1 kernel. If you have 6.8 or newer, then 2M PHY is enabled by default.

That didn't help, still no sound on one side and bluetooth connection drops after short moment,

I managed to reproduce that crash (I think), and I made another attempt at fixing it.

I looked again into it just now and ran test on Foxconn / Hon Hai MediaTek. You are amazing :clap:
sudo ./asha_stream_test --left ../sounds/left.g722 --right ../sounds/right.g722 --algorithm fixed --volume -64 --celength 10

That solved everything – no BT disconnections, no audio drops, that's even better than on Intel AX200 (I will try here soon too). Also works with celength 20 and 15 – didn't tried other values but I suppose any will work. --phy1m and --phy2m didn't have any effect for me. Perfect test results included below
test_fixed_10.snoop.txt

Yep on Intel AX200 it also slightly improves stability. Value doesn't matter (also tried 10, 15 and 20). phy also changes nothing.
test_fixed_10_intel.snoop.txt

That solved everything – no BT disconnections, no audio drops

I apologize, but this is fickle software using a fickle bluetooth stack with fickle hardware and fickle hearing devices. Please double-check that running without the --celength causes problems, and running with --celength solves them. Power cycle your hearing devices between each test to make sure that setup state doesn't linger from one test to the next.

test_fixed_10_intel.snoop.txt

Also, no need for the .txt file extension. Leaving them as .snoop works just fine.

test_fixed_10_intel.snoop.txt

Also, no need for the .txt file extension. Leaving them as .snoop works just fine.

I know, but Github don't allow for files with .snoop extension.

That solved everything – no BT disconnections, no audio drops

I apologize, but this is fickle software using a fickle bluetooth stack with fickle hardware and fickle hearing devices. Please double-check that running without the --celength causes problems, and running with --celength solves them. Power cycle your hearing devices between each test to make sure that setup state doesn't linger from one test to the next.

I ran tetsts again with different celength values and now I can say that (probably) everything between celength 3 and 32 is perfectly stable. I zipped all my tests. Naming  convention c<celength-value>.snoop and normal_x.snoop for tests without --celength flag. I didn't use --phy* flag anywhere and restart hearing aids and bluetooth service before every test.
tests.zip

I ran tetsts again with different celength values and now I can say that (probably) everything between celength 3 and 32 is perfectly stable.

And to confirm, it is unstable when you don't use the --celength argument?
Believe it or not, this is a bad sign. Bluez and the linux kernel don't provide a way to set the celength. I've had to implement it by crafting the request myself and sending it to the hci controller using raw sockets. It also requires root access, and I haven't yet figured out how to access a user pipewire session as the root user.

And to confirm, it is unstable when you don't use the --celength argument?

Yep, It's always unstable without --celenght

Believe it or not, this is a bad sign. Bluez and the linux kernel don't provide a way to set the celength. I've had to implement it by crafting the request myself and sending it to the hci controller using raw sockets. It also requires root access, and I haven't yet figured out how to access a user pipewire session as the root user.

setcap isn't enoguh? I think end user (or package maintainer if some distributions adapt this for their repositories) should be responsible for this.  You should only provide valid instructions if something like that is required :wink:
sudo setcap cap_net_raw+eip asha_stream_test

setcap isn't enoguh?

It is enough. I was just hoping for a solution that worked without it.

I'm wondering if it's hardware related since it only seems to help with MediaTek's card.

Possibly. The "low energy" part of bluetooth LE is accomplished by scheduling specific time intervals when communication is done. The transmission hardware is shut off in between these times, thus saving power. The ce length is a suggestion to the peripheral how long it should listen for traffic during those intervals. If the transmitter has a poor clock signal or something, it may not be scheduling the transmits very accurately, which means a longer ce length gives the peripheral more time to actually get the traffic.

Yes, now it definitely works better and is usable in general. Based on one ~30min YT listening – no audio drops (so with this is better than on Intel AX200 – didn't tested latest version here) but one ear keeps disconnecting BT after 5-10mins (probably some random environment issues) – but after reconnect it  keep working – i saw similar issue earlier on Intel but with both ears at same time and with loger time period.
I will do more tests evening ;)

I used newest asha_pipewire_sink on both PCs for some more time and on both I have almost same stability – small audio drops if any, but you should expect one or both hearing aids will disconnect in ~5-30min period. So it's ok to use when you can easily reconnect BT – YT, music, podcasts etc. – but may not be stable enough for gaming or meetings with some important business clients.
I also tried to use qpwgraph to redirect audio also to other speakers (that would be nice and useful in some situations – eg. share meeting with other persons in room) – but then asha_pipewire_sink got completely unstable – probably as you mentioned in #13 I need to compile latest pipewire. I'll just wait when it arrive to my system. I'm interested how it will play – probably I expect too much ;)

Or that Pico dongle project

I'm having similar issues at the moment, although at least I can automatically reconnect. My HA's seem to love disconnecting completely if there's something about the L2CAP connection it doesn't like.

I've updated the wiki with this device. Please post a new issue if you have any further problems.


Number changed to date format

Hello,
I am currently using xlsx-js to export an HTML table and works well with one exception; One number is changed to date format.
Please find below the code example:
https://jsfiddle.net/samighawi/L2x5zm5x/2/
At cell G1, the number 12.11% is converted to "11/12/2001 01:00:00" in Excel. Any ideas how to solve this problem? Please note that the table is dynamic and I don't know whether it is a number or date format. I'd rather turn off formatting if it causes problems and keep it as General.
Thanks

Duplicate of https://github.com/SheetJS/js-xlsx/issues/673.  It looks like a fix is in the works


HDDS-5934. Add OM NodeID to VERSION file.

What changes were proposed in this pull request?
OM uses its NodeID to generate the RaftPeerId. As such, the OM NodeId should be immutable. This Jira proposes to add the OM NodeId to its VERSION file. On restarts, the OM NodeID should be compared with the nodeId in the VERSION file to verify that it has not been updated.
What is the link to the Apache JIRA
https://issues.apache.org/jira/browse/HDDS-5934
How was this patch tested?
Added unit test

This is the same as #2800 with resolved conflicts.

@errose28, @kerneltime, first of all thank you for the reviews, all these comments were pretty much useful, I first just copied what was present in #2800, and fixed the conflict with master.
Based on your comments, I realized a few things about what we try to achieve with different parts of the patch, and also about how this should be tested.
At the end of the day, I removed the test that was added by the original patch, and added some additional tests as well to cover the OMStorage class more.
I also have changed the API, so now there is one method that provides a way to set the OM Node ID at init, when the VERSION file is being initialized first, and added a convenience method for already existing installations where the VERSION file is already present without this value, along with the initial verification logic that checks if the node id is set in the VERSION file, then that is matching what we have got from the configuration.
This way we do not need the boolean parameter, and we can defined clearly the difference between the two case.
Please check the updated solution, and let me know what do you think!
Thank you!

Hi @errose28 thank you for the review, I have made some adjustments to the doc and removed the comment, I think it will be good this way, let me know if you agree, and if you are ok with the patch, I going to commit it sometime tomorrow. @kerneltime if you want to take a second look, let me know, and I will wait for that ;)


Add avax scan & Add unit testings

Support  asc-20 protocol and smart contract, enable list and exchange  op code.


Brunner EAS3 Ofensteuerung Werte auslesen

Hello can someone help me. I would like to have the values from the error log in individual states in iobroker. After that I would name the states by name. It would then be possible to implement the Brunner EAS3 oven control completely in iobroker.
`
multicast.0 | 2022-09-01 10:13:24.561 | error | unknown message received - please read the documentation !!!! - this was received: 0;1;1;80;2;0;0;319;1;16384;0;0;30;
-- | -- | --
multicast.0 | 2022-09-01 10:13:24.560 | error | SyntaxError: Unexpected token < in JSON at position 0
multicast.0 | 2022-09-01 10:13:23.562 | error | unknown message received - please read the documentation !!!! - this was received: ((()(((((((((((f)((((((((((((f(((()(((f((((((((((((((((((((((
multicast.0 | 2022-09-01 10:13:23.562 | error | SyntaxError: Unexpected token < in JSON at position 0
multicast.0 | 2022-09-01 10:13:22.562 | error | unknown message received - please read the documentation !!!! - this was received: ((()(((((((((((f)((((((((((((f(((()(((f((((((((((((((((((((((
multicast.0 | 2022-09-01 10:13:22.562 | error | SyntaxError: Unexpected token < in JSON at position 0
multicast.0 | 2022-09-01 10:13:21.570 | error | unknown message received - please read the documentation !!!! - this was received: ((()(((((((((((f)((((((((((((f(((()(((f((((((((((((((((((((((
multicast.0 | 2022-09-01 10:13:21.570 | error | SyntaxError: Unexpected token < in JSON at position 0
multicast.0 | 2022-09-01 10:13:20.563 | error | unknown message received - please read the documentation !!!! - this was received: ((()(((((((((((f)((((((((((((f(((()(((f((((((((((((((((((((((
`

I think the adapter "logparser' is what you are looking for

OK. A good idea, but multicast overwrites the log with error. Is there a way to get only the values in the log without error?

thank you, it works now


modelzoo bucket reorganization

Pull Request Test Coverage Report for Build 303

38 of 38 (100.0%)  changed or added relevant lines in 10 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.5%) to 72.555%

Totals

Change from base Build 301:
0.5%

Covered Lines:
1380

Relevant Lines:
1902

💛  - Coveralls

Pull Request Test Coverage Report for Build 303

38 of 38 (100.0%)  changed or added relevant lines in 10 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.5%) to 72.555%

Totals

Change from base Build 301:
0.5%

Covered Lines:
1380

Relevant Lines:
1902

💛  - Coveralls


Added dorothea/progeny

Added links to dorothea/progeny in the ecosystem documentation

Thanks for the PR! I think "functional tools" may be a little generic/ ambiguous with the programming concept. Is there another term that could be used here?

I changed the name to "Footprint-based enrichment analysis", does it fit better?

Would "Annotation/ Enrichment Analysis" fit?

It is an enrichment analysis but foot-print based: we don't just look at the elements of a pathway/TF but also the biological downstream effects that occur when said biological process is active.
"Annotation/ Enrichment Analysis" fits but it would be good to also mention somewhere that they are foot-print based. Would this be okay?

Would it be sufficient to put the "footprint-based" in the function description? I guess it would be helpful to have a category of methods that will be easily recognizable to people if they're looking for a tool. That would also mean having a category that tools from multiple labs could fall under.

Yes that would work too :+1:


fix build v0.3

see https://github.com/hhatto/nude.py/pull/17#pullrequestreview-1479529

Looks good to me. The cost is having to keep the generated C file versioned.

@Tatsh Thank you very much!!
version 0.3.1 has been released.
https://pypi.python.org/pypi/nudepy/0.3.1


Provisioning fails with error 429 on serverfarms

Expected behavior
A provisioned resource of the type Microsoft.Web/serverfarms
Actual behavior
Stops with error 429 with the message
{
"Code": "Conflict",
"Message": "Cannot modify this web hosting plan because another operation is in progress. Details: Id: 1f63d9ad-0d65-4f79-a864-0267d1be064b, OperationName: Create, CreatedTime: 4/5/2018 10:26:59 AM, RequestId: 619814e7-785f-468a-9848-8e9080813651, EntityType: 9",
"Target": null,
"Details": [
{
"Message": "Cannot modify this web hosting plan because another operation is in progress. Details: Id: 1f63d9ad-0d65-4f79-a864-0267d1be064b, OperationName: Create, CreatedTime: 4/5/2018 10:26:59 AM, RequestId: 619814e7-785f-468a-9848-8e9080813651, EntityType: 9"
},
{
"Code": "Conflict"
},
{
"ErrorEntity": {
"ExtendedCode": "59205",
"MessageTemplate": "Cannot modify this web hosting plan because another operation is in progress. Details: {0}",
"Parameters": [
"Id: 1f63d9ad-0d65-4f79-a864-0267d1be064b, OperationName: Create, CreatedTime: 4/5/2018 10:26:59 AM, RequestId: 619814e7-785f-468a-9848-8e9080813651, EntityType: 9"
],
"Code": "Conflict",
"Message": "Cannot modify this web hosting plan because another operation is in progress. Details: Id: 1f63d9ad-0d65-4f79-a864-0267d1be064b, OperationName: Create, CreatedTime: 4/5/2018 10:26:59 AM, RequestId: 619814e7-785f-468a-9848-8e9080813651, EntityType: 9"
}
}
],
"Innererror": null
}
Steps to reproduce the problem
I tried to provision a new deployment in a new resource group
Also the variable cosmosDb needs to cosmosdb or fails on name validation

Hi @FrodeOA, can you try the deployment again? I have corrected the template with #2 and perform test deployment.

@isaiahwilliams it fails with the same error:
{
"Code": "Conflict",
"Message": "Cannot modify this web hosting plan because another operation is in progress. Details: Id: b18813bb-71d4-4c5a-a614-3b2176990cbd, OperationName: Create, CreatedTime: 4/6/2018 5:40:41 AM, RequestId: d5ee5d79-9e61-4fd1-b9d4-1fa16f790d93, EntityType: 9",
"Target": null,
"Details": [
{
"Message": "Cannot modify this web hosting plan because another operation is in progress. Details: Id: b18813bb-71d4-4c5a-a614-3b2176990cbd, OperationName: Create, CreatedTime: 4/6/2018 5:40:41 AM, RequestId: d5ee5d79-9e61-4fd1-b9d4-1fa16f790d93, EntityType: 9"
},
{
"Code": "Conflict"
},
{
"ErrorEntity": {
"ExtendedCode": "59205",
"MessageTemplate": "Cannot modify this web hosting plan because another operation is in progress. Details: {0}",
"Parameters": [
"Id: b18813bb-71d4-4c5a-a614-3b2176990cbd, OperationName: Create, CreatedTime: 4/6/2018 5:40:41 AM, RequestId: d5ee5d79-9e61-4fd1-b9d4-1fa16f790d93, EntityType: 9"
],
"Code": "Conflict",
"Message": "Cannot modify this web hosting plan because another operation is in progress. Details: Id: b18813bb-71d4-4c5a-a614-3b2176990cbd, OperationName: Create, CreatedTime: 4/6/2018 5:40:41 AM, RequestId: d5ee5d79-9e61-4fd1-b9d4-1fa16f790d93, EntityType: 9"
}
}
],
"Innererror": null
}

I am glad to hear that this issue has been resolved. Thank you for helping with this.


Running the documentation site.

To put the documentation online on Github you have to install NVM and install version 16.15.0 .
https://github.com/coreybutler/nvm-windows
Once nvm is installed you can run
(You might have to use the nvm command in administrator mode)
nvm install 16.15.0
nvm use 16.15.0
After that you run deploy.sh and it should handle the rest automatically.

Problems running the deploy.sh, moved to 1.0.5

Solved the authentication issue that was given 'permission denied' errors when pushing the pages.


[sil-cast-optimizer] Fix a silly bug related to canonical types

This bug occurs in real projects, when type aliases are involved.
The test-case is a bit hard to provide. I’ll try to provide it later, if I managed to reduce the original project to a small test-case.
But the fix is very obvious.
Fixes rdar://31768258

@swift-ci please smoke test

LGTM!


How to implement object oriented programming Matlab

Article checklist
ATTENTION: In your PR - add the ISSUE (topic form) # that this PR corresponds to. You can do this by also adding a comment that states "This fixes #(enter your Idea Content Form #)" to link and close your Idea Content (issue) when the PR is merged.
NOTE: (Please ensure that you have only one open issue + linked pull request at a time. This will ensure that we complete the article in a timely manner from inception to publishing.)
If you have not already please go over our Resources Page for more tips and tricks on how to improve our overall technical writing.
Preliminary Checks - Formatting and Structure

[x] Is the article you are submitting an in-depth and unique article? Does it go beyond what is in the official docs and what is covered in other blog sites. See these articles as examples.
[x] Does your article follow any of the suggested structure formats? - see example formats
[x] Is your article properly formatted in Markdown? - see Github Markdown guide
[x] Have you used the correct folder and file structure? - see Contribution Guidelines
[x] Is your article over 750 words? - Tool: Wordcounter.net
[x] Have you used our preferred heading structure? - H3 (###) and up
[x] Does your article provide enough value and detail about your topic? - Articles should be clear, accurate, and fully explained.
[x] Can your article be understood by beginners? - Assume the audience is smart but has no prior exposure to the common terminology in your article.
[x] Have you included a hero image that is 600x400 pixels and have the copyright to use it? - Tools: Pixlr Image Editor for resizing and Unsplash for Creative Commons images
[x] In your PR - add a comment that states "This fixes #(enter your Idea Content Form #)" to link and close your Idea Content (issue) when the PR is merged.

Grammar & plagiarism checks

[x] Have you spellchecked and grammar checked your article? - Tools: Write&Improve - ProWritingAid -  Grammarly
[x] Please place your article through a 3rd party plagiarism checker? We suggest using Quetext, this tool is free and has a daily limit. We typically accept articles with 10% or less.
[x] Have you checked your article for readability? - Tool: Hemmingway
[x] Have you added sources for quotes and images that aren't yours?

Technical checks

[x] Are your code snippets properly formatted for syntax highlighting - see Syntax guide

Contribution guidelines
For first-time contributors and for more details, see Contributing Guidelines

@hectorkambow, if this article is not a duplicate then I'm willing to review it.

Hello @collince777
I will take you through the review beginning with preliminary revision where I will check your article for grammar accuracy and more.

Please add hero image. Also, it seems like this is your first contribution and therefore, you need to add author details @collince777.

plagiarism check done

@collince777 ping me when done so that I can proceed with the tech review. I've checked through the article twice to ensure that everything is well. :rocket:

@marienjus requested changes made

Great! I will now proceed to a tech review.
cc: @ahmadmardeni1 @hectorkambow

@marienjus what is the progress of this article?

I like to do tech review twice. Today I'm checking for code best practices and it will be ready for final review. Kindly be patient. I've done massive progress. I actually had communicated with @hectorkambow that I'm having this stuff as part of my units this semester. 🔥

I love the way you walk the reader through the concepts. Checked that everything is okay and this is a great one!
Ready to ping content moderators for a final review :+1:

@srishilesh I am doing a final review. No need for commits on this PR. Thanks

Overall nice job.  @collince777
Please be sure to go my final edits (and the article again) to improve future articles and reviews. The tutorial was a bit difficult and rough to follow along in certain parts.
cc @marienjus


analyzer windows bot test failures

The analyzer windows bot is failing on some tests:
https://build.chromium.org/p/client.dart/builders/analyzer-win7-release-be/builds/511/steps/analysis server unit tests/logs/stdio
https://build.chromium.org/p/client.dart/builders/analyzer-win7-release-be/builds/511/steps/analyzer unit tests/logs/stdio

assumed stale


[Enhancement] user witch can merge pulls should be able to dismiss review requests

current state: only admins?
Gitea Version: 1.12.0+dev-142-g9b7737df2

It was specifically requested to work this way to match GH. It can be changed, though.

I thin to make it an opt-in option would be nice


ngAnimate leave animation takes too long

This is a bug report.
When removing elements from ng-repeat using ngAnimate the elements are not removed immediately after the animation is finished.
The expected behavior would be to remove them as soon as the transition ends.
In the example you can see that the filtered out elements reach target opacity but are removed after a couple of seconds.
Example: http://plnkr.co/edit/sKRc2Gm1uuOPDSxnoH5N?p=preview

I can't reproduce that. Could you make the example more clear maybe. AFAICT, the elements are removd after the animation finishes.

It is very very weird indeed. I tried different browser - worked fine. I also tried the same browser but a fresh instance (Chrome) and it also works fine. There might be a bug but it is inreproducable so I'm just gonna close this issue.


Added Footer Section to the About Page #8

As per issue #8 , I have added the Footer Section to the About Page. Kindly check the details and let me know if there are any more changes required. :)

Hey @realrohitgurav thanks for the contribution. It looks perfect!

Thank you! :)


Does not load on PowerShell Core

Renamed file to psm1 in an attempt at a start for #12 when trying to import into PowerShell Core, get errors regarding the Get-WmiObject calls as these cmdlets are not available in PowerShell Core. An alternative would be the cim cmdlets, but IIRC that's not cross platform as the cim cmdlets don't exist on -not $IsWindows. A more robust alternative may be to use Get-Process as IIRC it exists across the board.

I believe this has been solved when converted into a module.

Looks like it.


Fixed typo in docs

misspelled "Physics"

Thanks for the PR but we only merge PRs against the dev branch.


CM default indent/dedent of Cmd + Square Brackets is not suppressed when vim is the chosen flavor

Good day! The behavior I'm seeing here is that the default indent/dedent shortcut is left as a fallback to the vim binding of ^d/^t. I've verified this behavior in https://raw.githack.com/replit/codemirror-vim/master/dev/web-demo.html, with a video demo below to go along with my repro steps:

Observe that in normal mode, Command+[ or Command+] incorrectly dedent or indent
Switch to insert mode
Observe that ^d and ^t

I think allowing fallback to default codemirror behavior for all shortcuts that are not handled by vim was intentional design choice of the original cm5 vim mode. In which usage scenarios does this create any problems?

The problem is one of usability -- Cmd+[/Cmd+] are the system bindings for Navigate Back/Navigate Forward, so by having the fallback from vim to the standard bindings, I not only have have two ways to do the same thing, but I also can't use the standard OS bindings for navigating forwards and backwards.
What would be ideal, though it may not be easy to do, is to only fall back to the standard keybindings for operations that do not have a vim-mode binding.

I think allowing fallback to default codemirror behavior for all shortcuts

I think this makes sense from the library's perspective. Will close the issue out.
I think this is about how we configure our editor, on replit.com, we can probably remove the default keybindings when we use the vim keybindings. I remember we added the defaults for some reason, we can investigate.


create_datatoken() fails on simplest README. Can likely fix via a new release.

Describe the bug
I went through data-nfts-and-datatokens-flow.md, including installing the lib (pip3 install --pre ocean-lib).
It failed with:
TypeError: create_datatoken() missing 1 required positional argument: 'cap'

To Reproduce
Steps to reproduce the behavior:

Go through the data-nfts-and-datatokens-flow.md.
It will fail on create_datatoken().

Note: it does not fail if running from a git clone of ocean.py, in v4main branch. This means that we likely just need to
Expected behavior
Don't fail.
Likely problem, how to fix
My guess is that we haven't released a library since #811 "Vesting & cap not fully removed yet".
How to fix: release a new library.
Traceback
>>> erc20_token = erc721_nft.create_datatoken(
...     template_index=1, # default value
...     name="ERC20DT1",  # name for ERC20 token
...     symbol="ERC20DT1Symbol",  # symbol for ERC20 token
...     minter=alice_wallet.address,  # minter address
...     fee_manager=alice_wallet.address,  # fee manager for this ERC20 token
...     publish_market_order_fee_address=alice_wallet.address,  # publishing Market Address
...     publish_market_order_fee_token=ZERO_ADDRESS,  # publishing Market Fee Token
...     publish_market_order_fee_amount=0,
...     bytess=[b""],
...     from_wallet=alice_wallet
... )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/trentmc/code/play/venv/lib/python3.8/site-packages/enforce_typing/decorator.py", line 29, in wrapper
    return func(*args, **kwargs)
TypeError: create_datatoken() missing 1 required positional argument: 'cap'

Please do a new release ASAP, since this is a showstopper for anyone using even the most simple ocean.py README


Cannot sideload an Office document without an existing webextension xml part

Expected behavior
The --document parameter can be used to specify an existing document to sideload. For sideload to web, this is the url of the document. For sideload to desktop, this is the file path to an existing document.
For sideload to desktop, if the specific document doesn't contain a webextension xml part, one should be added so it contains a reference to the add-in, thereby causing the add-in to be loaded when the document is opened.
NOTE: When sideload to web was implemented and the --document parameter added, we intentionally did work to support sideload to desktop for an existing document with a webextension part, but did not do the work to support it for arbitrary documents. I'm creating this issue to track this as some customers have asked and we haven't been clear about this.
Current behavior
Sideload to desktop for an existing document without a webextension part will give an error.
Steps to Reproduce
Please provide detailed steps for reproducing the issue.

"npm start manifest.xml --document "

This feature request should be fixed when https://github.com/OfficeDev/Office-Addin-Scripts/pull/564 goes live.


at-mixin-named-arguments: Ignore mixins

[at-mixin-named-arguments] has two options with always | never with an additonal second option to ignore single-argument.
The similar rule at-function-named-arguments has an additional option to ignore functions. Such an option for mixins would be great.
A concrete example: When using arbitrary-keyword-arguments (args...) you can't name it. There could be also mixins where naming the arguments is not desired.

I am not entirely sure if it is the same issue, but we would love to keep the recommended style, but the following is firing:
@include border-with-radius(color.adjust($color-punch, $alpha: -0.8));

yields into:
 145:9  ✖  Unexpected a named parameter in at-include call  scss/at-mixin-named-arguments

but color.adjust requires the param name, so any suggestion? So far we solved it with variable assignment as follows:
$adjusted-color: color.adjust($color-punch, $alpha: -0.8);

@include border-with-radius($adjusted-color);


Allow resources to ask for resource dependency list

For example, a Kubernetes role binding can ask for a list of Kubernetes user resources (currently it only permits one).
This is probably useful in many contexts:

Role bindings requesting a list of subjects
Others?

Irrelevant since v18.


Remove support for BLS12-377 signing & bump library version

Rationale

while we do use the BLS12-377 curve for proving (for good reason), we do not use it for signing, and are unlikely to do so in the near to medium term (due to strict performance requirements),
@benr-ml is about to introduce a completely distinct instance & implementation of this curve as a dependency, in the context of threshold signing (see repo)
The implementations of BLS12-377 as a signing scheme are not as mature as other instances, notably in the area of hashing to the curve. Indeed, BLS12-377 does not yet have a suite in the hash-to-curve RFC.

Deep-dive into item 3
Celo-BLS-snark-rs (upstream of this implementation)
https://github.com/celo-org/celo-bls-snark-rs

lightly-maintained,
minSig: PK in G2
uses try-and-increment as hash to G1,

W3f/BLS
https://github.com/w3f/bls

lightly-maintained,
optionally, minSig or minPK,
customizable hash-to-curve,
allows an override to Wahby-Boneh / SSWU, but in a PR,
includes a PoP scheme, which has an issue.

Consensys/gnark
https://github.com/ConsenSys/gnark-crypto

in Go,
maintained,
implements an SSWU map (see RFC section 6.6.2)
the parameters are undocumented
but the parameters may come from this script

Conclusion
It seems best to spend a little bit of time thinking about BLS12-377, a scheme we don't really use, before adopting & maintaining a version of it. Once we sort out the map_to_curve part, it may be suitable to improve & build on the
implementation we're set to receive from (2.) above (or to an upstream impl) rather than continuing with this specific variant of the code.
Fixes #242.

Correction re #2 - I am not planning to use BLS12-377, it is already removed from the repo I'm working on.
Still, I agree with the suggestion here.

@kchalkias I want to make super clear that this PR only removes the use of BLS12-377 as a signing scheme. To spell out what this means across your topics, nothing is lost through this PR concerning the ability to do benchmarking for curve operations or the use of the BLS12-377 curve in proofs, and nothing is lost concerning the ability to 1-layer recursion in proofs. Those abilities simply happen to not be supported by the code present in this PR.

What I mentioned is putting this as a singing scheme in experimental (which lives in the same repo but it's a different crate), does this affect publishing as well?

An experimental crate that would contain the BLS12-377 signature scheme as currently implemented would only prevent publication of that experimental crate. However, note benchmarks involving that scheme would also have to be run from that crate (since benchmarks require the dependency to be present in dev-dependencies).

@huitseeker off course I get the point that whatever experimental crate we pick, it won't be published to crates.io, but this is fine, it's literally more important for benchmarks (we need to publish the BLS 377 to 381 sig current Rust comparison, as we found some very interesting results and it also justifies the use of 381 for Sui (people from various research groups also asked for these bench, and we need a place to maintain it).


Single controller, multiple fans

First a big thank you for creating this HA integration, it's a very welcome addition and I can't wait to see this stabilized!
Unfortunately, I'm running into a problem with multiple fans connected to a single controller: only one fan is exposed in the integration.  Based on the HA Community thread it seems like I need to add a second device to access the additional fans, but it isn't clear how to do that (the "Add Entry" button fails), and based on other user reports that seems buggy as well.
If you need additional information or help testing new versions please let me know, I'm happy to do whatever I can to help develop this integration.
Additional information and versions:

Home Assistant v2023.8.1
ac-infinity-hacs v1.0.2 (via custom HACS)
Controller 69 PRO v7 (firmware reported by integration)

Hello @hunterjm
is there still a development of the integration?
I have connected a PWM-LED and the standard-Fan.
The integration only let me control all channels at once, so when i change fanspeed it also changes brightness of the led.
Is there any possibilty to change each channel as itself?
Thx!


test: add testing for missing coverage

Description: this PR adds tests based on local coverage runs to raise coverage. This PR adds all non-silly coverage, but still hits misses on some accessors and because NOT_IMPLEMENTED_GCOVR_EXCL_LINE is being included (known problem in Envoy upstream since we stopped using gcovr).
Risk Level: lowest! we are increasing our code coverage :)
Testing: local coverage runs to see missing spots, and then CI
Signed-off-by: Jose Nino<EMAIL_ADDRESS>

Yeah open to more suggestions @buildbreaker. I opened https://github.com/lyft/envoy-mobile/issues/794 yesterday to track. We can chat, or you can drop an example in the issue


Grammar corrections to doc "Update non-root-user.mdx"

Description

Made corrections to misspelled words.
"reocmmended" is corrected to "recommended."
"restict" is corrected to "restrict."
Capitalized "Docker" since it's a proper noun.
How Has This Been Tested?

[x] Googled the correct spelling and grammar
[ ] Test

Checklist

[ ] The PR is tagged with proper labels (bug, enhancement, feature, documentation)
[x] I have performed a self-review of my own code
[ ] I have added unit tests that prove my fix is effective or that my feature works
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation

cc:

@thomaschung408  I don't know anyone else to CC :)

Sorry first commit, I probably missed all the rules.


Implementation assumes tranpsorts inclue a discover

As per https://github.com/libp2p/js-libp2p/pull/802/files#diff-bfe9874d239014961b1ae4e89875a6155667db834a410aaaa2ebe3cf89820556R648 implementation makes assumption that Transport includes a discovery but that assumption is not supported by the interface definition.
We should either iterate on an interface or an implementation so that assumptions made by the implementation are supported by the defined interface.

Regarding this, this will probably get into libp2p configuration improvements effort. This is not really interface related issue as the Transport Interface should not need to know about any discovery.
This is currently a hack that enables us to do:
const WebrtcStar = require('libp2p-webrtc-star')

const libp2p = await Libp2p.create({
  modules: {
    transport: [WebrtcStar]
  }
})

Enabling its built in discovery. This is the only usage of this transport.discovery.
It should really go into discovery
const WebrtcStar = require('libp2p-webrtc-star')

const libp2p = await Libp2p.create({
  modules: {
    transport: [WebrtcStar],
    peerDiscovery: [WebrtcStar]
  }
})

But this currently is not possible, as we would need to construct WebrtcStar before, which requires libp2p's upgrader.


merge package from arlac77/npm-package-template

.travis.yml

chore(travis): remove node versions 10.11
chore(travis): add node versions 10.12

:tada: This PR is included in version 7.8.19 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Make it installable

In order to enable the pip install [something something], I must package it as installable.
First it must be installable from the Git repo.
Then from Pypi.

Let's follow this tutorial: https://python-packaging.readthedocs.io/en/latest/minimal.html


"Valea Sării","Colacu","Mătăcina","Poduri","Prisaca" are listed in the drop-down menu

Description:
"Valea Sării","Colacu","Mătăcina","Poduri","Prisaca" are listed in the drop-down menu alongside its corresponding county and commune, according to the law
Preconditions : the website (https://peviitor-ro.github.io/ui.orase/) is up and running. After every step delete the text you typed from the search bar.

Step 1
Write in the search bar "Valea Sării"

Expected results
The location appears in the drop-down menu as "Sat Valea Sării, VRANCEA (Valea Sării)"

Step 2
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 3
Write in the search bar "Colacu"

Expected results
The location appears in the drop-down menu as "Sat Colacu, VRANCEA (Valea Sării)"

Step 4
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 5
Write in the search bar "Mătăcina"

Expected results
The location appears in the drop-down menu as "Sat Mătăcina, VRANCEA (Valea Sării)"

Step 6
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 7
Write in the search bar "Poduri"

Expected results
The location appears in the drop-down menu as "Sat Poduri, VRANCEA (Valea Sării)"

Step 8
Press "x" button.

Expected results
The location was deleted from the search bar.

Step 9
Write in the search bar "Prisaca"

Expected results
The location appears in the drop-down menu as "Sat Prisaca, VRANCEA (Valea Sării)"


cassandra-kubernates, cxf-blueprint, hazelcast-kubernates: Fixed typo…

… in readme
servlet-tomcat-no-spring: added finalName so the contextPath would match with the URL described in readme

oops, sorry opened too early, I'll reopen after I add a few more

@oscerd looks good to me, do you mind merging?

@davsclaus yes, no problem

@igarashitm thanks, the PR has been merged. Can you close this?

Thanks! closing


Moblin support for portrait mode streaming

The stream via Moblin seems possible only in landscape mode. Any idea how to stream in portrait mode
from within the app?
My hack for now is to send it to a middle component that is going to do a rotate for something that should be native I believe.
This is extremely beneficial for portrait live streams (IRL/Outdoor) that target smartphones so that viewers can see a bigger and sharper image and not simply a 16:9 image in a 9:16 canvas (a big part of the frame is black) (check added photo to see how the stream looks on smartphones screens without doing the hack

)

Settings -> Streams -> My stream -> Portrait not sufficient, and rotate 90 degrees in OBS?

As I stream outdoor for 1-5 hours, my goal is to skip OBS part (that I am doing currently), my goal is to send stream following the first approach as there is less dependency/requirements/things to manage at home and when things fail when I am outside I don't have to stop livestreaming and go back at home and fix things:

Moblin(SRTLA) -> Belabox(SRTLA) <- RTMP Relay -> (Youtube, Tiktok and Instagram simultaneously)

Moblin(SRTLA) -> Belabox(SRTLA) <- OBS On my PC to rotate -> RTMP Relay -> (Youtube, Tiktok and Instagram simultaneously)

I see. Real portrait is not someone is working on, so likely not supported anytime soon

Ok, thank you for the information 👍

Implemented it. It's in Test Flight soon.

That was extremly fast 😅 you know that portrait streaming is the only reason I keep using Larix Broadcaster (I bet a lof people need this for IRL)

It's in test flight now in case you wanna give it a try. Just enable it in Settings -> Streams -> My stream and go live. Let me know if it works

I have just checked (on iPad), one question, how to enable it in Settings -> Streams -> My stream, I can't find a button to rotate stream or proper 9:16 resolution, i only find rotate in display.

it's only supported on iphone

can probably be added to ipad

was easy to make it work on ipad. will be in test flight in 15 minutes

Stream is working fine, some minor issues I sent via testFlight

I need more details on the problem that parts of the video is outside the screen. It's not like that for me on iPhone or iPad. What is you setup? What camera are you using as video source?

fixed the resolution names

looks good on iphone x as well. not sure why the video is partly outside the screen. you got any widgets or anything else you think could affect it?

Update to latest testflight again. should have resolution fix

Yes, all of the issues mentioned are now fixed on both ipad and iPhone SE (even the camera that was out of the screen in portrait mode).
One minor issue still left is that icons in portrait mode are slightly cut/out of the screen in iPHone SE (I sent photo using test flight)

ok! yeah, the buttons are slightly cut on Mac as well. not sure how to fix it, as I don't want to add padding on phones where it already looks good.

Yes, for me everything is perfect :) that would be good also to share it in discord once accessible directly in app store (multiple people were asking also for it)

fixed the buttons as well. was easy.

You can read the release notes in moblin discord server, the releases channel.

it's in test flight now

I will check that tomorrow

Buttons are working fine now, portrait mode seems not working when using external camera (DJI Action 4) in iPad, i didn't check the resolution received by the stream, for now I am speaking only about the UI, i believe it should rotate.

Added rotation setting in Settings -> Scenes -> My scene just now. It's in test flight.

Now it rotates properly, but when in portrait mode it does not fill enough space in the screen, it would perfect if it is a little bit bigger

Everything works fine now 🤩

Goood!

One question, when using external camera, does moblin decodes the received stream from the camera to show it on screen, than re-encodes the decoded one to send it to the destination, or does it send as it is from the source?

Everything leaving Moblin is encoded by Moblin.


[terra-list] Correct flex styles introduced to list.

Bug Report
Correct usage of flex on list.
Description
Flex styles were introduced on #923 to correct highlight of list item rows with content that used marigns. However flex styles were not applied to list items, so with more complication list item content, errors in sizing occurs.
Possible Solution
This can be fixed in one of two ways:
1: Add flex: 0 0 auto; to list items.
2: Remove flex from list, add overflow: hidden; to list items.
I believe option 2 to be the correct application of the fix.

My concern with overflow: hidden on list item is around it clipping focus outlines on items within it. e.g. buttons next to the edge of the list item, and clipping the focus outline on the list item. I think this can be mitigated with having the list item focus outline be an inset box-shadow and then encouraging side padding on list items.
Curious, what are the concerns you see with flex: 0 0 auto; ? I haven't thought through that solution much.

In the correction within #2044 there is an inner div that provides the overflow hidden. So if the list item requires an outset box shadox, it'll still function. The only scenario that you mentioned would be the button near an edge, but some padding could address that. We still have problems with margins that need to be addressed with overflow hidden in with the current case unfortunately. So I think the flex 0 0 auto will only partially address this issue.

Ok, that's good to know the background on it. I'm fine with the overflow: hidden;  approach. I think it would be good to add a screenshot test to highlight what problems it solves so if we ever change the implementation, we can catch any regressions.


User entered options (not in options list) not posted when form is submitted

How can I fix this?
Selected options didn't post either, but I fixed that by adding
this._trigger( "blur", event, {
item: ui.item.option
});
To this event
"autocompleteselect input": function( event, ui ) {
        ui.item.option.selected = true;
        this._trigger( "select", event, {
              item: ui.item.option
           });

},

Don't worry I found a solution..


MINIFI-431 Resolving dependency issues from Jersey 2.26 upgrade.

MINIFI-431 Resolving dependency issues from Jersey 2.26 upgrade.

@pvillard31 That's very peculiar that it behaves like that, but I think, I have independently verified it works with the following Docker setup that does a clean environment and starts off the two services.  Let me know if it corresponds to your expectations.
https://github.com/apiri/nifi-review-collateral/tree/master/MINIFI-431

OK, I really don't know what's going on here... I removed the repository and still have the same issue when building on my side. But I also confirmed that I don't have the issue when using your docker image. Really weird!
I'm a +1 on the changes and I'm going to merge. Thanks @apiri !