Friday, June 28, 2019

How to Make Mini PCI-E Wireless and Bluetooth Card Working in Desktop

I have a couple of mini PCI-E wireless and bluetooth cards from old laptops such as Intel Centrino Advanced-N 6230

and Intel Centrino Advanced-N 2230.

So why not put them into my desktop to add wireless network and bluetooth features? Such an easy-peasy job! Went to EBay and bought a mini PCI-E to PCIE adapter like this

Put on the mini PCI-E card and inserted it to my desktop, everything was working fine... until... I noticed there was no bluetooth on my desktop! Took it for granted I blamed hardware driver, searched Intel's website and downloaded the latest driver, installed it, no bluetooth! Searched Dell's website and downloaded the driver (since the old cards are from Dell laptops), installed it, still NO bluetooth!!

This easy job became interesting! I searched online about why bluetooth not working and people suggested to tape pin 51 on the mini PCI-E card to unlock the bluetooth feature, I tried, still failed. Then I noticed EBay recommended me another adapter according to my purchase record

This one came with a USB port and cable but unfortunately it did not support my card

To make it worse there is no additional internal USB port in my desktop! What can I do now? Luckily Google gave me a circuit schema of Mini PCI-E to PCIE adapter

According to the schema Mini PCI-E card can connect to USB and no surprise my adapter is using the same reference design and I can find the reserved PINs at the bottom right of it with clear labels!

OK, let's connect a USB cable to these PINs and see what will happen.

Step 1: Sacrifice a USB mouse to get a USB cable


Step 2: Find out the D- and D+ leads by multimeter

Step 3: Tie a knot to anchor the USB cable, solder on D- and D+ leads and insulate GND and +5V leads


Step 4: Tape it up
And the final product looks like this

Insert the card and plug in the USB cable to test it
Yippee! Finally my bluetooth worked!

If your computer still cannot see the bluetooth device, double check your are connecting the correct USB leads to the board; If you received the error message about unrecognised USB device, you need to swap the D+ and D- leads on your card.

Happy hacking :D!


SIZEOFINFINITY[∞]


Friday, September 28, 2018

How to remove Dell Latitude E6420 BIOS password

During laptop booting, press F2 enter BIOS setup interface. Click the "Unlock" button and write down the serial number on the screen (it is case sensitive number), type the string to http://www.bios-pw.com/ and "Get password". Use the one generated by serial number and type it in on the laptop, NOTICE AFTER TYPE IN, PRESS "CTRL+ENTER" and this super password will clear current password. The idea is most of modern hardware has a builtin backdoor to allow a pre-define super password to overwritten existing one, Err... Sounds very interesting :D. Hopefully this is for users' convenience. By any means it is way better than Apple's total lock-down philosophy.

Learn something new everyday!

Monday, August 13, 2018

Super cheap Xbox 360 wireless adapter built on Raspberry Pi Zero and ENC28J60 ethernet module

I have two Xbox 360 consoles and today I want to connect them together but I only got one wireless adapter looks like this
and it is super hard to reach the back of the console after you stuck it to the TV cabinet XD.

OK, let's look this at EBGames and Ebay, WHAT! AU$48 for a second hand one! I bought my second Xbox 360 for AU$75 only. There must be a cheaper way.

Internet tells me that the easiest alternative is to use a wireless router as wireless repeater to provide ethernet connection to Xbox. But the cheapest wireless router support repeater mode is about AU$50 already and don't even think about the additional power supply and bulky router box. I remember that I used to share my wireless connection to ethernet from my Mac Mini to Xbox, so if I can do the same with a super cheap computer, then I can build my own wireless adapter.

Talking about super cheap computer, who can beat our old friend Raspberry Pi Zero! Order one from Core-electronics directly for AU$10.48 incl. shipping. Now I need an Ethernet module and PC USB wireless dongle. According to Raspi.TV, ENC28J60 chip is supported by Raspbian out of the box, so search the key word in Ebay and find the cheapest one. I bought my one for about AU$4.00. According to my reading, EDUP wireless adapter is well supported by Raspberry Pi and it is super cheap as AU$2.99 on Ebay. Adding other pieces the total cost is:

Raspberry Pi Zero: $10.48

ENC28J60 Ethernet Module: $4.00

EDUP wireless adapter: $2.99

USB OTG cable: $1.00
USB charging cable: $1.00
0.5M Cat5 Ethernet cable: $1.00
Male to Female jump leads: $1.00
2GB Micro SD card: $4.00
Total: $25.47

Hooray! Just half of the official second hand adapter price!


Now let's do it!

Step 1: Download the Raspbian image from https://www.raspberrypi.org/downloads/raspbian/, since we only need the wireless bridge feature, just download the smallest RASPBIAN STRETCH LITE image (The image size is 1.8GB and after burning, there is still 700MB free space on my 2GB SD card). Then burn it to the Micro SD card. I am using the official Mac guide https://www.raspberrypi.org/documentation/installation/installing-images/mac.md and you can find all the guides from https://www.raspberrypi.org/documentation/installation/installing-images/README.md.

Step 2: Change the keyboard layout to US, otherwise, you won't be able to type double quotation from your US layout keyboard.

Log in to the console via default username and password:
raspberrypi login: pi
Password: raspberry
pi@raspberrypi:~$ sudo vi /etc/default/keyboard
Change the line

XKBLAYOUT="gb"

To

XKBLAYOUT="us"

Save the file and reboot your Pi.

Step 3: Connect the Edup wireless dongle to Raspberry Pi Zero and enable it. I use the static IP address just for easy debug and safety.

pi@raspberrypi:~$ sudo vi /etc/network/interfaces
allow-hotplug wlan0
auto wlan0
iface wlan0 inet static wpa-ssid "<My SSID>" wpa-psk "<My Password>" address 192.168.1.254 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1

wpa-ssid is your wireless name, wpa-psk is your wireless password, other settings are set according to your wireless router requirements.

Save and reboot your Pi, your wireless adapter should work by now.

Step 4: Prepare the SPI configuration for ENC28J60 module

pi@raspberrypi:~$ sudo vi /boot/config.txt
Uncomment the line by removing the start # symbol

dtparam=spi=on

Add following line

dtoverlay=enc28j60

Shutdown your Pi and let's getting to the hardware part.

Step 5: Connect the cables between Pi and ENC28J60. According to Raspi.TV (the photo on their website actually misconnect the 3.3v lead :D), we only need connect 7 leads:

ENC28J60      Pi
INT/LNT       Pin 22 (BCM 25)
SO            Pin 21 (BCM 9/MISO)
SCK           Pin 23 (BCM 11/SCLK)
Q3/3.3        Pin 17 (3.3v)
GND           Pin 20 (GND)
CS            Pin 24 (BCM 8/CE0)
ST            Pin 19 (BCM 10/MOSI)


Step 6: Set up the bridge between the wireless adapter and ENC28J60 ethernet module according to pathead's instruction. I add the installing dnsmasq package and auto open iptables steps.

pi@raspberrypi:~$ sudo apt-get install dnsmasq
pi@raspberrypi:~$ sudo vi /etc/network/interfaces
allow-hotplug eth0 iface eth0 inet static address 172.24.1.1 netmask 255.255.255.0 network 172.24.1.0 broadcast 172.24.1.255
pi@raspberrypi:~$ sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
pi@raspberrypi:~$ sudo vi /etc/dnsmasq.conf
interface=eth0 # Use interface eth0 listen-address=172.24.1.1 # Explicitly specify the address to listen on bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere server=8.8.8.8 # Forward DNS requests to Google DNS domain-needed # Don't forward short names bogus-priv # Never forward addresses in the non-routed address spaces. dhcp-range=172.24.1.50,172.24.1.150,12h # Assign IP addresses between 172.24.1.50 and 172.24.1.150 with a 12 hour lease time
pi@raspberrypi:~$ sudo vi /etc/sysctl.conf
Uncomment the following line

net.ipv4.ip_forward=1

pi@raspberrypi:~$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
pi@raspberrypi:~$ sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
pi@raspberrypi:~$ sudo vi /lib/dhcpd/dhcpd-hooks/70-ipv4-nat
iptables-restore < /etc/iptables.ipv4.nat

pi@raspberrypi:~$ sudo vi /etc/rc.local
Add following line before "exit 0"
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

exit 0

Shutdown your Pi and ready to use it!

Before I plug in my home-made adapter, there is no Available Networks

Plug in the ethernet and USB cable

Pi Zero starts working...

Yes! We have an available Wired Network

Run the network connection test, looks good

Check the IP address which is allocated by our Pi Zero dnsmsq

Since we are only using 3.3v and the whole thing can run by normal USB port! Of course if the power is not sufficient, I have a plan B because I have replaced my broken factory power supply by a normal computer ATX 350W power supply with additional external chassis cooling fan :D

My ATX-box power supply

And external chassis cooling fan

Enjoy hacking!

SIZEOFINFINITY[∞]


References:
Ethernet On Pi Zero - How To Put An Ethernet Port On Your Pi - Raspi.TV
https://raspi.tv/2015/ethernet-on-pi-zero-how-to-put-an-ethernet-port-on-your-pi

How To: Wifi to Ethernet Bridge(Updated for RPi 3) - Raspberry Pi Forums
https://www.raspberrypi.org/forums/viewtopic.php?t=132674

Tuesday, November 7, 2017

Fix Matlab VideoReader plugin libmwgstreamerplugin failed to load properly issue

When I run the following command on Matlab R2017a from CentOS 6.9
v = VideoReader('test.avi');
I get the following error:
Error using VideoReader/init (line 619)
The VideoReader plugin libmwgstreamerplugin failed to load properly.
Error in VideoReader (line 172)
            obj.init(fileName);
The reason is that old versions of Matlab used to rely on gstreamer-0.10 to process video but from at lease R2014a the dependency of gstreamer library has changed to gstreamer-1.0 if you want to use VideoReader('video.avi') command. So upgrade your OS will be the easiest way to solve this issue but if this is not possible as I am facing, then upgrade the gstreamer library is the only solution.

To check which gstreamer you need check the dependencies of Matlab libmwgstreamerplugin.so by readelf command:
# cd /usr/local/MATLAB/R2017a/toolbox/shared/multimedia/bin/glnxa64/reader
# readelf -d libmwgstreamerplugin.so

Dynamic section at offset 0xd780 contains 43 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libmwmultimediacommonexceptions.so]
 0x0000000000000001 (NEEDED)             Shared library: [libmwtamimframe.so]
 0x0000000000000001 (NEEDED)             Shared library: [libmwi18n.so]
 0x0000000000000001 (NEEDED)             Shared library: [libboost_system.so.1.56.0]
 0x0000000000000001 (NEEDED)             Shared library: [libmwcpp11compat.so]
 0x0000000000000001 (NEEDED)             Shared library: [libtbb.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libtbbmalloc.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libgstvideo-1.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgstbase-1.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgstreamer-1.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgobject-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgmodule-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgthread-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [librt.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libxml2.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libgstapp-1.0.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN:$ORIGIN/../../../../../../bin/glnxa64:$ORIGIN/../../../../../../sys/os/glnxa64]
 0x000000000000000c (INIT)               0x43e8
 0x000000000000000d (FINI)               0xacf8
 0x0000000000000004 (HASH)               0x1b8
 0x000000006ffffef5 (GNU_HASH)           0x5e8
 0x0000000000000005 (STRTAB)             0x1368
 0x0000000000000006 (SYMTAB)             0x6d8
 0x000000000000000a (STRSZ)              4804 (bytes)
 0x000000000000000b (SYMENT)             24 (bytes)
 0x0000000000000003 (PLTGOT)             0x20db48
 0x0000000000000002 (PLTRELSZ)           1896 (bytes)
 0x0000000000000014 (PLTREL)             RELA
 0x0000000000000017 (JMPREL)             0x3c80
 0x0000000000000007 (RELA)               0x27c8
 0x0000000000000008 (RELASZ)             5304 (bytes)
 0x0000000000000009 (RELAENT)            24 (bytes)
 0x000000006ffffffe (VERNEED)            0x2738
 0x000000006fffffff (VERNEEDNUM)         4
 0x000000006ffffff0 (VERSYM)             0x262c
 0x000000006ffffff9 (RELACOUNT)          114
 0x0000000000000000 (NULL)               0x0
Above is R2017a library dependencies and libgstreamer-1.0.so.0 is required. But on CentOS 6.x there is no existing gstreamer-1.0 package AFAIK, build it from the source code is my only option and here are the steps.

Step 1: Check your OS version

# cat /etc/centos-release
CentOS release 6.9 (Final)

If your CentOS is under version 7, then you need do following steps, otherwise these steps will not fit.

Step 2:  Upgrade GCC

To compile gstreamer-1.0 requires gcc 4.5 or above but CentOS 6.x only ships gcc 4.4.7 which need be upgraded first.

# gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

# yum install centos-release-scl
# yum install devtoolset-3-toolchain
After install devtoolset, you need enable it

# scl enable devtoolset-3 bash
Now to check the gcc version

# gcc --version
gcc (GCC) 4.9.2 20150212 (Red Hat 4.9.2-6)
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Step 3: Upgrade Python

Python 2.7 or above is required to compile gstreamer-1.0 but CentOS 6.x only provides Python 2.6.x and the operating system is heavily depends on it which should NOT be replaced by Python 2.7 or newer version. So make sure when you install Python 2.7, choose "make altinstall"!

# yum install -y centos-release-SCL
# yum install -y python27
# cd ~
# wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz
# tar xzf Python-2.7.14.tgz
# cd Python-2.7.14
# ./configure
# make altinstall
# echo "alias python='/usr/local/bin/python2.7'" >> ~/.bashrc
# . ~/.bashrc

Optional install pip:
# curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
# python2.7 get-pip.py

 Step 4: Install yasm 1.3.0

The performance of gstreamer-1.0 openh264 and x264 plugins can be dramatically improved by hardware acceleration which requires yasm optimization. But again the CentOS 6.x default yasm is too old which is not supported by gstreamer-1.0.

# cd ~
# curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
# tar xzvf yasm-1.3.0.tar.gz
# cd yasm-1.3.0
# ./configure
# make
# make install

Step 5: Prepare cerbero

Cerbero is the tool recommended by gstreamer team and it need some prerequisites to work properly. First is to create the default profile and target folder:

# mkdir -p ~/.cerbero/
# vi ~/.cerbero/cerbero.cbc
Paste following content to the file
----------------------------------------------------------
import os
from cerbero.config import Platform, Architecture, Distro

packages_prefix = 'gstreamer-sdk'
packager = 'GStreamer SDK packagers <packages@gstreamer.com>'
prefix = "/opt/gstreamer-sdk"

git_root = "git://anongit.freedesktop.org/gstreamer-sdk"

# Uncomment to allow parallel builds
# allow_parallel_build = True

# Uncomment this to allow cross-building for another architecture
# target_arch = Architecture.X86_64
----------------------------------------------------------

# mkdir -p /opt/gstreamer-sdk
 I am using /opt/gstreamer-sdk/ as the target folder. Then you need download the cerbero framework and set it up:

# cd ~
# git clone git://anongit.freedesktop.org/gstreamer/cerbero
# echo "alias cerbero='~/cerbero/cerbero-uninstalled'" >> ~/.bashrc
# . ~/.bashrc
# cd ~/cerbero
# cerbero bootstrap

Step 6: Build gstreamer-1.0

Finally we can start building gstreamer-1.0 but there are couple of catches in the recipes need be fixed first.

cdparanoia: post install step will fail because the global environment FilesProvider.LIBS_CAT is empty and I don't know how to change it. So my simple solution is to hard coded it!

# vi ~/cerbero/recipes/cdparanoia.recipe
----------------------------------------------------------
            #libs = self.files_list_by_category(FilesProvider.LIBS_CAT)
            #for lib in libs:
            for lib in self.files_libs:
                f = os.path.join(self.config.prefix + '/lib', lib + '.so.0.' + self.version)
                print(f)
----------------------------------------------------------
The post install steps are just to change the permissions on the generated .so files, so find the files in target folder first and work out the hard code values. Be aware of the indents of your code and print(f) is just for fun to show you the changes worked :D.

# cd /opt/gstreamer-sdk/lib
# ls | grep cdda
libcdda_interface.a
libcdda_interface.so
libcdda_interface.so.0
libcdda_interface.so.0.10.2
libcdda_paranoia.a
libcdda_paranoia.so
libcdda_paranoia.so.0
libcdda_paranoia.so.0.10.2
 nettle: has the exact issue as cdparanoia but a bit more complex with two different libraries with two different versions XD.

# vi ~/cerbero/recipes/nettle/nettle.recipe
----------------------------------------------------------
            #libs = self.files_list_by_category(FilesProvider.LIBS_CAT)
            #for lib in libs:
            for lib in self.files_libs:
                f = os.path.join(self.config.prefix + '/lib', lib)
                print(f)
                if fnmatch(f, '*libnettle*'):
                   f = f + '.so.6.3'
                if fnmatch(f, '*libhogweed*'):
                   f = f + '.so.4.3'
                print(f)
----------------------------------------------------------

# cd /opt/gstreamer-sdk/lib
# ls | grep nettle
libnettle.a
libnettle.la
libnettle.so
libnettle.so.6
libnettle.so.6.3
# ls | grep hogweed
libhogweed.a
libhogweed.la
libhogweed.so
libhogweed.so.4
libhogweed.so.4.3
 flac: you need specify -lrt to enable real-time functions, otherwise the linker will complain undefined reference to 'clock_gettime'.

# vi ~/cerbero/recipes/flac.recipe
----------------------------------------------------------
    def prepare(self):
        if self.config.target_platform in [Platform.DARWIN, Platform.IOS]:
            if self.config.target_arch == Architecture.X86:
                self.configure_options += ' --disable-asm-optimizations'
        if self.config.target_platform in [Platform.ANDROID, Platform.IOS]:
            self.autoreconf = True
        if self.config.target_platform == Platform.LINUX:
            self.new_env['LIBS'] = '-lrt'
----------------------------------------------------------
 OK, we have everything ready, pull the trigger:

# cerbero package gstreamer-1.0
 Unfortunately the above command cannot generate the proper RPM package and since I only need solve the issue for Matlab, this is not a big problem to me, I only need the compiled run-time libraries.

Step 7: Let Matlab using the new gstreamer-1.0

The quick way is to change LD_LIBRARY_PATH

# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/gstreamer-sdk/lib
# ldconfig

And the permanent way is to update ld.so.conf.d

# vi /etc/ld.so.conf.d/gstreamer.conf
----------------------------------------------------------
/opt/gstreamer-sdk/lib
----------------------------------------------------------
# reboot
Now Matlab R2017a is able to load video files:

>> obj=VideoReader('test.avi');
0:00:00.138478543  7933 0x7f339c007b70 ERROR                  libav :0:: Context scratch buffers could not be allocated due to unknown size.
0:00:00.138711800  7933 0x7f339c007b70 ERROR                  libav :0:: Context scratch buffers could not be allocated due to unknown size.
>>
The ERROR is caused by the leading black frames in the video file, not the gstreamer-1.0 package issue.

Just uploaded the compiled folder to Google Drive https://drive.google.com/open?id=1jUL2q9LvpTcNtEbVtpaugJUPVBHoYsJ8. After you download the gstreamer-sdk.tgz file, just do following

# cd /opt/
# mv ~/Downloads/gstreamer-sdk.tgz .
# tar zxf gstreamer-sdk.tgz
Then add gstreamer.conf as Step 7 described. I have tested it on CentOS 6.9, CentOS 7.5, Ubuntu 18.04 lts along with Matlab R2017a, R2017b and R2018b.

WARNING about Ubuntu 18.04 lts with NVidia video card, the gstreamer libraries will cause you desktop failed to start, in this case, please boot into recovery mode and delete the file /etc/ld.so.conf.d/gstreamer.conf and run ldconfig. Use the official packages instead:

# apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools

SIZEOFINFINITY[∞]

Thursday, June 29, 2017

Modify Dell multimedia keyboard from USB bus powered to self-powered

As a hobby I really enjoy thinking and tinkering electronic components and circuit board. That's why I rushed into online shop Core Electronics and fetched my Raspberry Pi Zero Wireless when it was released. Soon I discovered RP Zero is not like RP 3 as a self-contained computer, it requires quite a few attachments to make it work especially the USB hub. RP Zero only provides one USB port and you have to use a powered USB hub in order to connect multiple devices.

So I took out my Dell multimedia keyboard model number KB522 which looks like this
The keyboard comes with two USB ports which is very useful when you connect it to RP Zero, I have no problem to connect the keyboard with a mouse hook to one of the keyboard USB ports. Now the fun part comes, I need copy some files from my thumb drive to RP Zero and of course I just plug my thumb drive to another port and think it will work but the answer is NO. I cannot access my thumb drive from RP Zero at all! What happened?

As a sanity test, I plugged the keyboard to my desktop which is running Windows 7 and as soon as I inserted the thumb drive, Windows complained USB Hub Power Exceeded. What does this error mean? Microsoft's answer is as useless as usual with suggestions that you should change to another port or you have connected too many devices to your hub. OK, I'll find the real answer by myself. By checking the Generic USB Hub properties from Device Manager I discovered the USB keyboard is bus powered and the maximum current for each port is 100mA but my thumb drive need 200mA to run. Alright the answer is my keyboard USB hub need more power from external.

I started my searching of adding external power to USB hub and Google gives me these two very useful article Adding an External Power Supply to a Cheap USB Hub and How to add an external power supply to a USB hub. The first article implies we can simply connect an external power supply to the input USB positive and ground pin to provide additional current to the hub. The later article is more elegant to allow both bus powered and self powered modes. So I tried the first solution by soldering an additional USB cable to the input USB pins but no success, no matter I plug the external power supply or not, Windows still recognise the USB hub as bus powered.

Then I have to go deeper to check the chip

(This picture already contains my external power supply cable.)

The chip is FE1.1 and soon I found the datasheet and demo board picture of this chip.
Apparently the chip supports powered Hub feature but how can I make the Dell keyboard USB hub to powered hub? So I started searching the USB hub schematic design and found following very useful information


Pin 36 BUS_B is used to control the working mode of FE1.1 to be bus powered or self powered. Then I used my multi-meter to find out that the blank R21 point is connected to pin 36.
(The red rectangle contains the two connected points.)
I have tried to short the resistor R24 to see whether the hub will be self powered or not but failed. According to above schematic designs the BUS_B has to connect to 5V to enable self powered mode. So here we go

(Left cut the computer 5v line and insert a 2A diode, right connect the R21 point with the external 5v)
Finally put everything together, I do need enlarge the cable hole on the back cover to run the additional power cable

I use a 5v 1A power supply and bingo everything is working happily now :D.
Happy hacking and enjoy!
BTW, this is my Tictac RetroPi and my son is playing Pokémon on it :)




SIZEOFINFINITY[∞]


Wednesday, March 12, 2014

How to change your password when you are in RDP session

Press Ctrl-Alt-End to change your password.

[∞]

How to fast login to a domain Windows 7 machine with local user account

When a Windows 7 machine has joined a domain, try to login as a local user account becomes a pain since you have to type the full machine name with your local username in order to use your local account. You can type .\<local username> in the username input field. This will save you the time to type the computer name.

[∞]