Author Archives: Marcin “hrw” Juszkiewicz

Palm Sunday

Today is Palm Sunday. The day which reminds me how I got to where I am.

I used Amiga in 90s. Met lot of people, got new friends etc. Years passed and when I met some of them again they (+Mirosław Baran, +Monika Szczygieł) introduced me to local community of Palm users. It took me one more year to became Palm user (m105, sj30) but then I knew that I want to go that way.

Another year and I had Sharp Zaurus. And pile of devices started to grow… Interesting job offers went few years later.

I still have my first Palm M105. Maybe it is good day to check is it still operational. 

USB Sucks Badly

I bought new hub to use on my desk: 7 port USB 3.0 one with switchable ports. Connected to USB 3.0 port and problems started…

Base of my desktop is P67X-UD3-B3 mainboard from Gigabyte which I have chosen due to amount of USB ports on back (alternative was one of Z68 based mainboard which would give me HDMI/VGA/DVI ports for integrated graphics). But now it looks like it was not good choice.

I have those devices connected:

  • Microsoft Optical Mouse with Tilt Wheel
  • Microsoft Natural Ergonomic Keyboard 4000
  • Future Technology Devices International, Ltd FT232 USB-Serial
  • Logitech Webcam Pro 9000
  • NEC HighSpeed Hub integrated in my second monitor
  • Genesys Logic based 7-port USB 3.0 hub on my desk
  • Samsung ML-2160 Laser printer

But when I plug any of those USB 1.1 devices all I have is “Not enough bandwidth for new device state.” message from kernel. Faster devices are fine so I can connect pen drives, hard drives, phones or tablets. But forget about USB-Serial dongles or Yubikeys or BlueTooth…

Why’s that? Take a look at “lsusb -t” output:

/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
    |__ Port 1: Dev 6, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 1: Dev 7, If 0, Class=Hub, Driver=hub/4p, 5000M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
    |__ Port 1: Dev 28, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 29, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 3: Dev 62, If 0, Class=Mass Storage, Driver=usb-storage, 480M
    |__ Port 2: Dev 54, If 0, Class=Printer, Driver=usblp, 480M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M
        |__ Port 3: Dev 10, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 2: Dev 11, If 0, Class=Video, Driver=uvcvideo, 480M
            |__ Port 2: Dev 11, If 1, Class=Video, Driver=uvcvideo, 480M
            |__ Port 2: Dev 11, If 2, Class=Audio, Driver=snd-usb-audio, 480M
            |__ Port 2: Dev 11, If 3, Class=Audio, Driver=snd-usb-audio, 480M
            |__ Port 3: Dev 12, If 0, Class=Vendor Specific Class, Driver=ftdi_sio, 12M
        |__ Port 5: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 5: Dev 5, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 6: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

How many EHCI buses do you see? You may say two (as there are two ehci-pci entries) or you may say four (as there are four 480M buses). I would say that “not enough” is best answer.

I played with cables to move devices from 2nd bus to 1st one, moved printer from 3rd bus to 5th (which is two USB 3.0 connectors on top of computer’s case) and still not enough bandwidth for Yubikey or other USB 1.1 device. Note that all devices plugged into on-desk USB 3.0 hub lands on 3rd (1.1/2.0) or 4th (3.0) bus.

During next few days I will plug extra USB 2.0 controller to check will it improve situation after keyboard, mouse, monitor, webcam, ftdi move there.

Time to plan vacations

This year I want to take my family for long trip. But not just a trip but Moomins influenced one because my daughter likes to listen when we read books about them.

So from Szczecin to Olecko (where my mother lives) for few days. Lakes, few old friends, family. Then go north.

Through Lithuania to Latvia to Tallinn, Estonia. Sight seeing here and there to not just drive through all those countries. But probably skip Vilnius as it is on a side.

Then ferry to Helsinki, walk around for a day. And the next step would be Moomin World in Naantali, Finland. No idea how much time it requires. From there to Tempere to visit Tampere Art Museums Moominvalley.

The whole trip needs to be in July when Mira has vacations. And it is also the only time when Finland has summer (but have to check which days :)

Have to check where to stay, who to meet (Riku? Thomas? probably few more), which way to go, what to see. And also I need to get new ID for Mira.

Hope that it will be a great adventure ;D

How to get Zoom slider on Microsoft keyboard recognized by X11

If you are using Microsoft Natural Ergonomic Keyboard 4000 as I do you may wondered how to get that zoom slider in a middle to be useful. Thanks to Hans de Goede there is a solution.

There is one new file and changes to other needed. First we need to instruct udev to remap some keys for us. Create /lib/udev/hwdb.d50-msoffice-keyboard-xorg.hwdb file with this content:

# classic msoffice keyboard
keyboard:usb:v045Ep0048d*dc*dsc*dp*ic*isc*ip*in01*
 KEYBOARD_KEY_0c0184=documents          # KEY_WORDPROCESSOR to KEY_DOCUMENTS
 KEYBOARD_KEY_0c0186=finance            # KEY_SPREADSHEET   to KEY_FINANCE
 KEYBOARD_KEY_0c018e=chat               # KEY_CALENDAR      to KEY_CHAT
 KEYBOARD_KEY_0c01a3=nextsong           # KEY_NEXT          to KEY_NEXTSONG
 KEYBOARD_KEY_0c01a4=previoussong       # KEY_PREVIOUS      to KEY_PREVIOUSSONG
 KEYBOARD_KEY_0c01ab=search             # KEY_SPELLCHECK    to KEY_SEARCH

# Microsoft Natural Ergonomic Keyboard 4000
keyboard:usb:v045Ep00DB*
 KEYBOARD_KEY_0c01ab=search             # KEY_SPELLCHECK    to KEY_SEARCH
 KEYBOARD_KEY_0c022d=scrollup           # KEY_ZOOMIN        to KEY_SCROLLUP
 KEYBOARD_KEY_0c022e=scrolldown         # KEY_ZOOMOUT       to KEY_SCROLLDOWN

In Fedora rawhide I also needed to edit 60-keyboard.hwdb file (same directory) to disable some definitions:

# Microsoft Natural Ergonomic Keyboard 4000
#keyboard:usb:v045Ep00DB*
# KEYBOARD_KEY_c022d=zoomin
# KEYBOARD_KEY_c022e=zoomout

Now update of hwdb is needed:

sudo udevadm hwdb --update
sudo udevadm control --reload

And the only thing left is replugging the keyboard (or system reboot). As a bonus you get XF86Search button instead of non-working Spell (F10). Those who use Microsoft Office Keyboard (old one with scroller on left side) will get all keys working as well but they also need 3.14 kernel to get all recent fixes.

And why all that is needed at all? Simple — Xorg is still sitting in 80s when it comes to handling keyboard and ignores all keycodes with >8bit values. I hope that Wayland does not follow that way and does/will just take whatever system under is telling about input devices.

ARM7 != ARMv7

ARM architecture is fun when it comes to names and numbers. And it is around 30 years old as well. So from time to time I have a discussion where I say something like in title…

There are few sources of mistakes when it comes to ARM. Family names, instruction sets, core names and marketing. Hard to tell which makes biggest mess…

Anything below ARMv7a is history — there is ARMology about it so please read it. But it does not mean that we have clear situation now :D

ARMv7a (and higher) means Cortex-A family. But due to companies like AllWinner and Apple we have it more complicated:

  • A4 is Apple cpu with Cortex-A8 core
  • A5 is low-end Cortex-A5 core but also Apple cpu with Cortex-A9 cores (there was also A5X)
  • A6 is Apple cpu with their own core (also A6X)
  • A7 is Cortex-A7 core but also Apple cpu with 64-bit ARMv8 cores
  • A8 is Cortex-A8 core (the only single core Cortex-A)
  • A9 is Cortex-A9 core
  • A10 is AllWinner cpu with Cortex-A8 core (there was also A10s)
  • A12 is Cortex-A12 core
  • A13 is AllWinner cpu with Cortex-A8 core (stripped down A10)
  • A15 is Cortex-A15 core
  • A17 is Cortex-A17 core
  • A20 is AllWinner cpu with Cortex-A7 cores
  • A23 is AllWinner cpu with Cortex-A7 cores
  • A31 is AllWinner cpu with Cortex-A7 cores (also A31s)
  • A53 is Cortex-A53 core (64-bit ARMv8)
  • A57 is Cortex-A57 core (64-bit ARMv8)
  • A80 is AllWinner cpu with eight cores (4xA7 + 4xA15)

There are also other Cortex cores but their name do not start with “A” :) But the good thing is that all ARMv7a cpus can run same code. ARMv8 ones can run own code — 32-bit support is optional. All all major distros like Debian, Fedora, OpenSUSE or Ubuntu work on support for both families.

UPDATE: Arnd Bergmann wrote in comment (switch to Blog below article) there is also A2, which is the PowerPC core used in BlueGene. Further, AMD has x86 CPUs called A4, A6, A8 and A10, which are also not ARM. Fun, isn’t it?

New project: Pandaboard based media player

I need an offline media player to play movies from hard drive. And I did not managed to find something interesting on a market. So decided to take a look into my electronics trashcan and dig some parts from it.

What did I found?

  • PandaBoard EA1
  • USB 3.0 to SATA adapter
  • 750GB 2.5″ SATA hard drive
  • 2xUSB PC bracket
  • 3.5A 5V power supply
  • u.FL to RP-SMA cable

Looks just fine for my needs. OMAP4430 ES2.0 cpu should be enough and with some libraries should decode everything I have. Just 1GB ram but hope to be enough, there is WiFi and Bluetooth on board with u.FL connector so I can get external RP-SMA antenna. HDMI with audio but no idea about CEC for remote control. And there are 4 USB ports (two at rear and two on pins) so internal hard drive is possible without any extra cables sticking outside.

OK, hard disk will be over USB 2.0 which is quite slow compared to SATA. But that’s all what is available on board. Otherwise I would have to buy new one.

Will have to find big enough plastic case to fit both boards and hard disk, cut some holes for power, HDMI and maybe also USB and RP-SMA antenna connector. Then solder J3 and J6 pins to get extra 2 USB ports, power and reset buttons and maybe even will do power LED.

Then connect USB3 -> SATA adapter into internal USB port, wire power cables to charge it directly from Pandaboard power plug (for when USB would not be enough) and get it running.

Have to check is there any good Android build for a board as this may give me more options than GNU/Linux distros with XBMC like apps. And have to solve remote control as well.

UPDATE: I booted Android 4.3.1 Jellybean (Linaro 13.10) on the board. It is so slow (with HW acceleration) that I am unable to use it. So project gets postponed to unknown date.

AArch64 can build OpenEmbedded

In 2012 I was porting OpenEmbedded to target AArch64 so I can say that I did first OE builds for that architecture.

But today I did kind of reverse thing:

Build Configuration:
BB_VERSION        = "1.21.1"
BUILD_SYS         = "aarch64-linux"
NATIVELSBSTRING   = "Fedora-21"
TARGET_SYS        = "arm-oe-linux-gnueabi"
MACHINE           = "genericarmv7a"
DISTRO            = "nodistro"
DISTRO_VERSION    = "nodistro.0"
TUNE_FEATURES     = "armv7a vfp thumb neon callconvention-hard"
TARGET_FPU        = "vfp-neon"

Yes — I did build on AArch64 machine targeting ARMv7a system. Had to edit one patch (pseudo-native was set to use very old glibc symbols which are not available on 64-bit ARM) but after that build was running just fine.

I did not tested resulting binaries.