Wednesday, December 17 2014

How to make MMA8451 working with raspberry pi over I2C

MMA88451 doesn't work with raspbterry pi out of the box. It needs I2C with repeated start. Test program in python:

import smbus
bus = smbus.SMBus(1)
ret = bus.read_byte_data(DEVICE_ADDRESS, MMA8451_REG_WHOAMI)
print ret

Shows zero instead of expected 26 (0x1A in hex)

pi@occberry ~/OpenCyclingComputer $ sudo python src/

Solution that I found here solves the problem:

sudo chmod 666 /sys/module/i2c_bcm2708/parameters/combined
sudo echo -n 1 > /sys/module/i2c_bcm2708/parameters/combined

and now the python test code shows, as expected:

pi@occberry ~/OpenCyclingComputer $ sudo python src/



Sunday, December 7 2014

Python library for Raspberry PI for Ultimate GPS based on MTK3339 with serial interface as sold by Adafruit

Python library for Raspberry PI for Ultimate GPS based on MTK3339 with serial interface as sold by Adafruit. The library helps to set different chip parameters in a sane way. Currently supports minimum functional set of commands:

CMD_HOT_START - hot_start()

CMD_WARM_START - warm_start()

CMD_COLD_START - cold_start()

CMD_FULL_COLD_START - cold_reset()

SET_NMEA_UPDATERATE - set_nmea_update_rate()

SET_NMEA_BAUDRATE - set_baudrate()

API_SET_FIX_CTL - set_fix_update_rate()

API_SET_NMEA_OUTPUT - set_nmea_output()

SET_NAV_SPEED_TRESHOLD - set_nav_speed_threshold()

All functions are preforming basic range check to make sure values areaccepted by MTK3339 as there is no check if a call was successfull or not.

Example usage:

import mkt3339

gps = mt3339("/dev/ttyAMA0")






gps.set_nmea_output(gll = 0, rmc = 1, vtg = 0, gga = 5, gsa = 5, gsv = 5)

That library is part of Open Cycling Computer project

Wednesday, November 12 2014

Battery backup for Adafruit Ultimate GPS Breakout - 66 channel w/10 Hz updates - Version 3

I was testing that [1] gps chip for a last few weeks - it was great, but it was preforming "cold start" every time it was turned on. Today I finally soldiered the battery holder and slided a CR1220 battery in. If you're using the same board without the battery get one immediately. Time to fix is now a few seconds (used to be up to 15 minutes) and it gets the fix fairly quickly indoor as well!!

I'm planning to use that board in the Open Cycling Computer project. More to come.


Wednesday, October 15 2014

PiTFT capacitive calibration for vertical layout

PiTFT capacitive doesn't require calibration according to Adafruit, but for some reason I couldn't make it work properly with vertical layout and the default values suggsted here [1].

The default values are:

320 65536 0 -65536 0 15728640 65536

I needed to use the screen with Adafruit logo at the bottom [fbtft_device.rotate=90] and with the default /etc/pointercal values I had x axis swapped with y axis.

Explanation how the pointercal values works is here [2]. Some matrix math:



x,y - the touchscreen coordinates returned by the kernel driver

a,b,c,d,e,f,s - pointercal values

u,v - the screen coordinates

The above equation converts to:

u = (x*a + y*b +1*c)/s

v = (x*d + y*e +1*f)/s

For the default values:

a = 320, b = 65536, c = 0 d = -65536, e = 0, f = 15728640, s = 65536

u = (x*320 + y*65536 + 0) / 65536

v = (x*(-65536) + y*0 + 15728640) / 65536

I wanted to flip x<->y, so

u = (x*(-65536) + y*0 + 15728640) / 65536

v = (x*320 + y*65536 + 0) / 65536

and now a = -65536, b = 0, c = 15728640 d = 320, e =65536 , f = 0,  s = 65536.

However when I tried to use those values in the pointercal file:

-65536 0 15728640 320 65536 0 65536

I found out that x axis is OK, but y axis is still flipped. To fix it we have to change sign of v and add a shift.

v = -(x*320 + y*65536 + 0) / 65536 +320

v = (x*(-320) + y*(-65536) +0)/65536 + 320

v= (x*(-320) + y*(-65536) +0)/65536 + 320*65536/65536

v= (x*(-320) + y*(-65536) +320*65536)/65536

v= (x*(-320) + y*(-65536) + 20971520)/65536

so d = -320, e = -65536 and f = 20971520

Proper pointercal values for vertical layout [fbtft_device.rotate=90] are:

-65536 0 15728640 -320 -65536 20971520 65536

Friday, August 22 2014

Bosch BMP183 with SPI by Adafruit in python on Raspberry PI

How to measure temperature and pressure with raspberry pi and BMP183


- raspberry Pi
- BMP183 with SPI by Adafruit
- 6 wire female-to-female cable or any other to connect 6 pins between RPI and BMP183


Temperature: 18.9 deg C

Pressure: 1013.39 hPa

RPI + BMP183: rpi_a_and_bmp183.jpg

Schematic (png): rasperry_pi_and_bmp183_sensor.png

That entry is the first part of Open Cycling Computer project

Schematic (QElectroTech): rasperry_pi_and_bmp183_sensor.qet

BMP183 at Adafruit

All files on github

BMP183 datasheet

Thursday, April 17 2014

i4oled-gui is ready!

Now there is a way of setting OLED icons on Wacom Intuos4 tablets using simple GUI:

The source code can be downloaded from GitHub.

It requires gnome & dconf, but it doesn't require root access rights as it works by writing to dconf. I hope that some of the ideas tested in i4oled-gui will be used in gnome.

Installing on Fedora 20:

1. Install required packages: sudo yum install git autoconf automake gcc gtk3-devel dconf-devel

2. Clone the repository

git clone

3. Enter & build

cd i4oled-gui




sudo make install

If there is a message about missing gtk+-3.0 during configure stage it means that there is no gtk3-devel package. Same for dconf - it means that there is no dconf-devel package. Ubuntu uses different names: gtk3-dev and dconf-dev.

i4oled-gui looks for icons in 3 locations:




The first two are shown when "System" button is pressed, The last path is linked with "User" button.

Icons have to be PNG files, 64 x 32, 8-bit/color RGBA, non-interlaced There is a script in data/pixmaps/svg/ that converts SVG to the desired format. Also all icons generated by i4oled can be used. Text entry fields also accepts base64 strings generated by i4oled, but it's not yet a fully finished feature (stop & start of i4oled-gui is required to see the icon)

Known limitations: i4oled-gui works on first usb tablet found in dconf user file, so if you have more than one tablet .. tough luck (at least untill i4oled-gui lands in gnome). There is no bluetooth support yet. Also there is no live preview of rendered text in the icon field.

If you read this entry this far (well done!!) it means that you're interested in using i4oled-gui, so if you want to send me a feedback use GitHub or przemo (at) firszt (dot) eu

Tuesday, March 11 2014

OLEDs-over-bluetooth are on the way to gnome

Hopefully soon gnome users will be able to fully utilise OLED displays on wacom Intuos4 wireless tables. More (technical) details here:

Friday, February 28 2014

i4oled v1.2 is out

Version 1.2 of OLED handling tool for Wacom Intuos4 Wireless is out! Most important changes are that now i4oled allows to use base64 encoded strings as input or output and it allows multiple outputs at the same time. The base64 strings can be used with gnome dconf-editor to show an icon instead of text. The base64: string should be pasteed into oled-label field instead of normal description. Gnome-settings-daemon will do the rest and convert it back into nice icon on the tablet. The version 1.2 can be downloaded here.

Thursday, February 27 2014

Using Wacom Intuos4 Wireless in unusual way

How to make clock out of your wacom tablet (with OLEDs obviously)?


There is one thing required - it's i4oled

The "clock" can be set up over usb or bluetooth link. The example below uses bluetooth

1. Connect tablet. 2. Change permissions for OLEDs as we want to use i4oled without root access.

sudo chmod a+w /sys/bus/hid/drivers/wacom/0005\:056A\:00BD.0001/oled?_img

3. Change permissions for LED selector - it's brightness is linked to OLEDs

sudo chmod a+w /sys/bus/hid/drivers/wacom/0005\:056A\:00BD.0001/leds/0005\:056A\:00BD.0001\:selector\:0/brightness

4. Change the brightness

echo 200 > /sys/bus/hid/drivers/wacom/0005\:056A\:00BD.0001/leds/0005\:056A\:00BD.0001\:selector\:0/brightness

Now we're ready to test i4oled:

i4oled -b -t TEST -d /sys/bus/hid/drivers/wacom/0005\:056A\:00BD.0001/oled7_img

If text TEST shows up next to the bottom button it means that everything works fine and we can set up the clock:

while [ 1 ]; do i4oled -d /sys/bus/hid/drivers/wacom/0005\:056A\:00BD.0001/oled7_img -b -t $(date +%D+%T); sleep 1; done

The above command converts current date & time into image and sends it to the OLED screen:

Monday, February 17 2014

How to change OLED label on Intuos4 tablets on gnome

If you have that tablet you probably want to have full control of what is being displayed on those little OLED screens on the tablet. Currently gnome doesn't give option to change it - you just have to accept whatever was generated for you. Or, do you?

This is a workaround and I hope in long run we wont need it.

Hit Alt-F2 and type "dconf-editor" Go to org -> gnome -> settings-daemon -> peripherials -> wacom

You should see there a ID string that look very user unfriendly, like here:


Open the item and find buttons section and edit OLED label:


That's it! You should see this on your tablet:


Tuesday, June 25 2013

i4oled - bluetooth support

i4oled just got bluetooth support. Wacom Intuos4 WL supports 4-bit images over USB connection, but only 1-bit when connected over bluetooth. i4oled now supports both with --bluetooth switch. Example usage:

i4oled -d /sys/class/hidraw/hidraw0/device/oled5_img -t "Alt+Ctrl" --bluetooth
i4oled -d /sys/class/hidraw/hidraw0/device/oled7_img -i help.png -b

And that's how it looks on the device:

Wacom OLEDs ovet bluetooth

Sunday, June 23 2013

Galaxy S4 3D printed car holder

S4 holder

S4 holder closeupS4 holder with phoneS4 holder in car

The cradle for S4 is based on an old S2 car holder:S2 holder

S2 holder part 2

All designed using FreeCAD and Blender 3D.

S4 holder.blend

The model _will_ require some cutting after printing otherwise it won't fit the phone. Additional cutting might be required if battery cover has been replaced.

Friday, May 31 2013

OpenSCAD - first battle

My first attempts to use OpenSCAD:

module hc_hexagon(size, height) {
box_width = size/1.75;
for (r = [-60, 0, 60]) rotate([0,0,r]) cube([box_width, size, height],
module hc_column(length, height, cell_size, wall_thickness) {
no_of_cells = floor(1 + length / (cell_size + wall_thickness)) ;
for (i = [0 : no_of_cells]) {
translate([0,(i * (cell_size + wall_thickness)),0])
hc_hexagon(cell_size, height + 1);
module honeycomb (length, width, height, cell_size, wall_thickness) {
no_of_rows = floor(1.75 * length / (cell_size + wall_thickness)) ;
tr_mod = cell_size + wall_thickness;
tr_x = sqrt(3)/2 * tr_mod;
tr_y = tr_mod / 2;
off_x = -1 * wall_thickness / 2;
off_y = wall_thickness / 2;
cube([length, width, height]);
for (i = [0 : no_of_rows]) {
translate([i * tr_x + off_x, (i % 2) * tr_y + off_y, (height) / 2])
hc_column(width, height, cell_size, wall_thickness);
//honeycomb(length, width, height, cell_size, wall_thickness);
honeycomb(140, 80, 20, 5, 1);

Formatting doesn't look very good in narrow blog, it looks better here: honeycomb.scad

Honeycomb - blender render

And more files: honeycomb.csg , honeycomb.stl and blender model honeycomb.blend

P.S. Thanks to help from OpenSCAD forum I have a new, improved & much faster honeycomb script:

module hc_column(length, cell_size, wall_thickness) {
        no_of_cells = floor(length / (cell_size + wall_thickness)) ;

        for (i = [0 : no_of_cells]) {
                translate([0,(i * (cell_size + wall_thickness)),0])
                         circle($fn = 6, r = cell_size * (sqrt(3)/3));

module honeycomb (length, width, height, cell_size, wall_thickness) {
        no_of_rows = floor(1.2 * length / (cell_size + wall_thickness)) ;

        tr_mod = cell_size + wall_thickness;
        tr_x = sqrt(3)/2 * tr_mod;
        tr_y = tr_mod / 2;
        off_x = -1 * wall_thickness / 2;
        off_y = wall_thickness / 2;
        linear_extrude(height = height, center = true, convexity = 10, twist = 0, slices = 1)
                        square([length, width]);
                        for (i = [0 : no_of_rows]) {
                                translate([i * tr_x + off_x, (i % 2) * tr_y + off_y,0])
                                        hc_column(width, cell_size, wall_thickness);

//honeycomb(length, width, height, cell_size, wall_thickness);
honeycomb(140, 80, 20, 5, 1);

Friday, April 26 2013

Gnome and Intuos4 OLEDs

Another day, another patch. Gnome will be getting wacom intuos4 OLEDs support. It's going to look like this: Wacom OLEDs in action in gnome

More details here: Light up the OLEDs

Hopefully those patches will land in gnome 3.10. Things that are waiting to be implemented:
  • bluetooth support for status led and OLEDs (kernel side ready, user side non existing)
  • multi keystroke sequences
  • editable labels i.e. mapping to Ctrl-S, but OLED label showing "Save"
  • icons instead of labels

Update: Basic handling of wacom OLEDs has been included in gnome-settings-daemon and gnome-control-center

Monday, November 12 2012

Rooting Sanei N10 Deluxe on linux command line

The Sanei N10 Deluxe tablet is _potentially_ a good tablet. Unfortunately the original firmware is absolutely useless. To get rid of it the device has to be rooted and re-flashed with something more SANE(I) ;-)


1. the device itself - Sanei N10 Deluxe

2. usb cable

3. linux box with installed Android SDK

4. internet connection - for downloading AndroidRoot

The procedure below is based on bat file from AndroidRoot:

1. Download and unzip AndroidRoot

It contains some windows executables, a .bat file and 2 files that are important for linux users: "su" and "superuser.apk"

Copy those 2 files to your home directory (or any other, I assume they are in the home dir)

3. Switch on "USB Debugging" on the tablet. It's in Settings -> Developer Options

4. Connect the device and make sure it's detected by the system:

Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 003 Device 002: ID 8087:07da Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 010: ID 18d1:0003 Google Inc.

The last line show that the tablet is connected.

5. Make sure you have rights to access the device (adb command is part of Android SDK):

przemo@localhost:$~/android-sdk-linux/platform-tools/adb devices
List of devices attached
20080411    device

If there is no device check here

6. Go to Android SDK directory -> platform-tools. On my linux box it's:

cd ~/android-sdk-linux/platform-tools/

7. Now time to start rooting

./adb shell mv /data/local/tmp /data/local/tmp.bak
./adb shell ln -s /data /data/local/tmp
./adb reboot

8. Wait for the tablet to complete reboot and type:

./adb shell rm /data/local.prop > nul
./adb shell "echo \"ro.kernel.qemu=1\" > /data/local.prop"
./adb reboot

9. Again, wait for the tablet to complete reboot and confirm that we have root access:

./adb shell id

The result should be:

uid=0(root) gid=0(root)

10. Now we can install "su" (make sure correct location of "su" is used - that's the file from AndroidRoot):

./adb remount
./adb push ~/su /system/xbin/su
./adb shell chown 0.0 /system/xbin/su
./adb shell chmod 06755 /system/xbin/su

11. Revert the changes that gave us root access:

./adb shell rm /data/local.prop
./adb shell rm /data/local/tmp
./adb shell mv /data/local/tmp.bak /data/local/tmp

12. Install superuser.apk (same comment about location of apk file as for point 10)

./adb push ~/superuser.apk /system/app/superuser.apk

13. Reboot and enjoy rooted tablet:

./adb reboot

That's it - now the Sanei N10 Deluxe is ROOTED.

Monday, September 10 2012

3 steps to have live tracking in JOSM

What you have to have: - JOSM + LiveGPS plugin - android SDK - TetherGPS on you android phone.

1: Start TetherGPS and connect the phone using USB cable (turn on "Debugging" - it's in settings) 2: Type: adb tcp:2947 tcp:2947 - this forwards port 2947 from your phone to your computer. "adb" is part of Android SDK 3: Open JOSM (with LiveGPS pugin) and Click in the main menu LiveGPS->Autocenter

That's all. As soon as you mobile phone gets GPS fix JOSM will start updating your location on the map! You can save the track and help improving OpenStreetMap

That's how it looks: JOSM live tracking

Sunday, September 9 2012

OLED icons on Intuos4 tablets [v0.1]

I made a simple helper for setting OLED icons on Intuos4 tablets. It can be cloned from here:

git clone git://

The helper accepts PNG images (64 x 32, 8-bit/color RGBA, non-interlaced) and it uses only red channel from the PNG file. There are some example icons in icons/ directory. The kernel patch mentioned in 'usage' option is not yet ready for release, but '-s' (scramble) option should allow to use i4oled with any kernel with wacom OLED support.

Please test and report back - I have only Intuos4 Wireless tablet, so i4oled hasn't been tested on any other model.

I'm waiting for reports if it works with the whole Intuos4 family - I'm going to implement an option for setting OLED icons as part of the button mapping in the wacom panel in gnome system settings.

UPDATE [11 Sep 2012]: now the helper renders text using pango/cairo. It's still rough on edges, so be careful! That's how it looks on Intuos4 Wireless:

OLED text rendered by pango on Intuos4

UPDATE [4 Oct 2012] v1.0 is out, scrambling is now default

OLEDs on Intuos4 Wireless are 4-bit!!

I found out that OLEDs on my Intuos4 Wireless are actually 4-bit colour instead of 1-bit. I don't know (yet) a method of setting 4-bit icons over bluetooth, but I have a proof that it can be done over USB. The proof:

Intuos4 Wireless 4-bit OLEDs

It's close up of one of the OLED displays on Intuos4 Wireless connected with USB cable.

Monday, August 6 2012

How to use an android phone as a GPS receiver with GPS-less tablet using only GPL software....

... or how to use GPS-less tablet as big screen GPS car navigation. The setup that I tested:

- tablet Sanei N10 Deluxe with Android 4.0.3

- Samsung Galaxy S2 with CyanogenMod9

The tablet has no GPS receiver, so my favourite navigation/tracking OSMAnd cannot be used directly. To solve that problem I downloaded BlueGPS for the tablet and BlueNMEA for the phone. BlueNMEA works as GPS data server, the location is transmitter over bluetooth to BlueGPS on the tablet. BlueGPS uses "mock location" function to provire real GPS location for all the software runnng on the tablet.

How to set it up?

1. Allow use "mock locations" in

Settings -> Developer Options -> Allow mock locations on the tablet.

2. Pair tablet and phone using normal bluetooth functions in

Settings -> Bluetooth

3. Start BlueGPS on tablet

4. Start BlueNMEA on the phone

BlueNMEA before connection 5. Wait for the tablet to appear on devices list

BlueNMEA connected

6. As soon as the phone GPS get fix the info is passed to the tablet, so it can be used by i.e. OSMAnd or any other navigation software.

Thursday, August 2 2012

OLED icons on Wacom Intuos4 Wireless PTK-540WL - part 2

Full workflow how to get a custom icon on Wacom Intuos4 WL (this doesn't work for other Intuos4 family members!)

Make a 1-bit 64x32 pixels image. Let's say it's the recycling symbol:

recycle icon 64x32 1-bit png

Save it to PBM format, raw version. GIMP is perfect for that. Open the newly created file in a text editor. The header should look similar to this:

# CREATOR: GIMP PNM Filter Version 1.1
64 32

It means that we created "portable bitmap/binary" using GIMP and the dimensions are 64 by 32 pixels. The rest of the file contains actual image, saved in 256 bytes, 8 pixels per byte. Some PBM icons here or here (full pack).

Now strip the header and save the "raw" icon. The file should hve exactly 256 bytes. If it has more or less it might mean that your text editor cannot handle binary files (try vim!) And again you can download "raw" icons - link above (same as PBM icons). Save the file to "recycle.i4wl" or download ready "recycle" icon from the pack.

Now connect the tablet using bluetooth connection. If you have applied the patches from this entry (I'll update the info here if the patches are accepted to the mainline kernel) you should see some oled_*img files in /sys/class/hidraw/hidraw(dev_number)/device directory. Each of those 8 files represents one icon on wacom Intuos4 wireless tablet. See this entry for information how to set the icon on your tablet using "dd" command. Hopefully setting the icons will be included into wacom gnome-control-center panel (any volunteers? ;-) )

Come back later to see how to batch create icons!

- page 1 of 2