Tuesday, April 24, 2018

SSL connections with RTL8710

If you tried to compile any SSL example (e.g. WiFiSSLClient) that comes with Ameba Arduino, you will probably get an error saying "RTL8710 do not support SSL".

Some people say it is because RTL8710 is not powerful enough (!?) to handle SSL.  But in fact, you edit the gcc linker blacklist file to get around it.  On Linux, the file is probably at

~/.arduino15/packages/realtek/hardware/ameba/2.0.4/variants/rtl8710/linker_scripts/gcc/symbol_black_list.txt

The original file contains:

rom_ssl_ram_map RTL8710 do not support SSL
analogReadResolution RTL8710 do not support ADC
analogRead RTL8710 do not support ADC

You can see that the RAM table referenced by SSL ROM is being blacklisted.  Make a backup of the file and delete the first line.

Tried to compile WiFiSSLClient and it works properly on my RTL8710.

Sunday, April 22, 2018

Sony SRS-XB30 and WH-H800 supported codecs

For reference, here is the negotiation traffic captured when connecting to a Sony SRS-XB30 bluetooth speaker.


localhost:~> sudo hcidump avdtp
HCI sniffer - Bluetooth packet analyzer ver 5.49
device: hci0 snap_len: 1500 filter: 0x400
< AVDTP(s): Discover cmd: transaction 14 nsp 0x00
> AVDTP(s): Discover rsp: transaction 14 nsp 0x00
    ACP SEID 1 - Audio Sink
    ACP SEID 2 - Audio Sink
    ACP SEID 3 - Audio Sink
< AVDTP(s): All Capabilities cmd: transaction 15 nsp 0x00
    ACP SEID 1
> AVDTP(s): All Capabilities rsp: transaction 15 nsp 0x00
    Media Transport
    Media Codec - SBC
      16kHz 32kHz 44.1kHz 48kHz 
      Mono DualChannel Stereo JointStereo 
      4 8 12 16 Blocks
      4 8 Subbands
      SNR Loudness 
      Bitpool Range 2-53
    Content Protection
      02 00 
    Delay Reporting
< AVDTP(s): All Capabilities cmd: transaction 0 nsp 0x00
    ACP SEID 2
> AVDTP(s): All Capabilities rsp: transaction 0 nsp 0x00
    Media Transport
    Media Codec - MPEG-2,4 AAC
      MPEG-2 AAC LC 
      44.1kHz 48kHz 
      1 2 Channels
      0bps VBR
    Content Protection
      02 00 
    Delay Reporting
< AVDTP(s): All Capabilities cmd: transaction 1 nsp 0x00
    ACP SEID 3
> AVDTP(s): All Capabilities rsp: transaction 1 nsp 0x00
    Media Transport
    Media Codec - non-A2DP (LDAC)
      3C 07 
    Content Protection
      02 00 
    Delay Reporting
< AVDTP(s): Set config cmd: transaction 2 nsp 0x00
    ACP SEID 1 - INT SEID 1
    Media Transport
    Media Codec - SBC
      44.1kHz 
      JointStereo 
      16 Blocks
      8 Subbands
      Loudness 
      Bitpool Range 2-53
> AVDTP(s): Set config rsp: transaction 2 nsp 0x00
> AVDTP(s): Delay Report cmd: transaction 0 nsp 0x00
    ACP SEID 1 delay 240.0ms
< AVDTP(s): Open cmd: transaction 3 nsp 0x00
    ACP SEID 1
< AVDTP(s): Delay Report rsp: transaction 0 nsp 0x00
> AVDTP(s): Open rsp: transaction 3 nsp 0x00


By comparison, here is info when connecting a Sony WH-H800 Wireless Headphones:

localhost:~> sudo hcidump avdtp
HCI sniffer - Bluetooth packet analyzer ver 5.49
device: hci0 snap_len: 1500 filter: 0x400
< AVDTP(s): Discover cmd: transaction 8 nsp 0x00
> AVDTP(s): Discover rsp: transaction 8 nsp 0x00
    ACP SEID 1 - Audio Sink
    ACP SEID 5 - Audio Sink
    ACP SEID 6 - Audio Sink
    ACP SEID 3 - Audio Sink
    ACP SEID 2 - Audio Sink
< AVDTP(s): All Capabilities cmd: transaction 9 nsp 0x00
    ACP SEID 1
> AVDTP(s): All Capabilities rsp: transaction 9 nsp 0x00
    Media Transport
    Media Codec - SBC
      44.1kHz 48kHz 
      Mono DualChannel Stereo JointStereo 
      4 8 12 16 Blocks
      4 8 Subbands
      SNR Loudness 
      Bitpool Range 2-53
    Content Protection
      02 00 
    Delay Reporting
< AVDTP(s): All Capabilities cmd: transaction 10 nsp 0x00
    ACP SEID 5
> AVDTP(s): All Capabilities rsp: transaction 10 nsp 0x00
    Media Transport
    Media Codec - non-A2DP (LDAC)
      3C 07 
    Content Protection
      02 00 
    Delay Reporting
< AVDTP(s): All Capabilities cmd: transaction 11 nsp 0x00
    ACP SEID 6
> AVDTP(s): All Capabilities rsp: transaction 11 nsp 0x00
    Media Transport
    Media Codec - non-A2DP (Unknown)
      32 00 00 00 00 
    Content Protection
      02 00 
    Delay Reporting
< AVDTP(s): All Capabilities cmd: transaction 12 nsp 0x00
    ACP SEID 3
> AVDTP(s): All Capabilities rsp: transaction 12 nsp 0x00
    Media Transport
    Media Codec - non-A2DP (aptX)
      44.1kHz 48kHz 
      Stereo 
    Content Protection
      02 00 
    Delay Reporting
< AVDTP(s): All Capabilities cmd: transaction 13 nsp 0x00
    ACP SEID 2
> AVDTP(s): All Capabilities rsp: transaction 13 nsp 0x00
    Media Transport
    Media Codec - MPEG-2,4 AAC
      MPEG-2 AAC LC MPEG-4 AAC LC 
      44.1kHz 48kHz 
      1 2 Channels
      320000bps VBR
    Content Protection
      02 00 
    Delay Reporting
< AVDTP(s): Set config cmd: transaction 14 nsp 0x00
    ACP SEID 1 - INT SEID 1
    Media Transport
    Media Codec - SBC
      44.1kHz 
      JointStereo 
      16 Blocks
      8 Subbands
      Loudness 
      Bitpool Range 2-53
> AVDTP(s): Set config rsp: transaction 14 nsp 0x00
< AVDTP(s): Open cmd: transaction 15 nsp 0x00
    ACP SEID 1
> AVDTP(s): Open rsp: transaction 15 nsp 0x00

Monday, April 16, 2018

glibc broken on openSUSE Tumbleweed aarch64 201803

The glibc on Tumbleweed was broken since the March 2018 release.  Any call to resolve IPv4 will cause core dump.  Seems to be hitting an ARM erratum.  Details discussion can be found here.

The glibc RPMs released on 2018-04-10 seems resolved the issue.  Since DNS won't work on the affected machine, will need to manually specify IP addresses in the hosts file or copy the files to the machine and run zypper to install updates.

Here are the steps for the second approach:

- Download the RPMs from repository to another machine
glibc-2.27-4.2.aarch64.rpm
glibc-devel-2.27-4.2.aarch64.rpm
glibc-extra-2.27-4.2.aarch64.rpm
glibc-locale-2.27-4.2.aarch64.rpm

- Copy the files to the affected machine via scp.  Then remote to the affected machine and execute the followings.

- Temporarily disable remote repositories to avoid auto refresh that will cause core dump when running zypper install.
sudo zypper lr  # list repositories
sudo zypper mr -d 1  # disable the first repository
sudo zypper mr -d 2  # disable the rest
......

- Install the RPMs
sudo zypper in glibc-2.27-4.2.aarch64.rpm glibc-devel-2.27-4.2.aarch64.rpm glibc-extra-2.27-4.2.aarch64.rpm glibc-locale-2.27-4.2.aarch64.rpm

- Re-enable remote repositories

sudo zypper mr -e 1  # re-enable the first repository
sudo zypper mr -e 2  # re-enable the rest
......
- Reboot and check.  Run "sudo zypper dup" to update other packages