Pandora + Pebble = Music Control (and hopefully more)


edgex004

Advanced Member
Joined
Jan 5, 2008
Messages
1,219
So I'll probably put something on the repo sooner or later, but for now I guess I'm just wondering if anyone else cares about this. Are there any Pandora owners who are also vaguely interested in smartwatches?

I just completed a long time goal of mine, which was getting the Pandora to communicate with the Pebble watch. I'm going to spend some time playing around with libpebble2 in order to see how well I can integrate the two.

For now, my goal was music control. This makes listening to music and podcasts on Pandora much, much better when I am bicycling. I spend 10-20 hours a week commuting by bike and occasionally messenger as well. I am almost always using my Pandora to play audio on a bluetooth speaker or headphones while I ride.

I just recently succeeded with deadbeef and pebble-linux-remote communicating through BT serial. No phone required!

Unfortunately the Pandora doesn't seem to be able to pair to the Pebble using PIN selection of "auto", which seems to be the required method for firmware v3 and above (used by Pebble Time) so from what I can tell, my method is currently limited to Pebble Classic and Pebble Steel running firmware v2.9.1 and below. PIN selection of "9999" allows pairing to these firmware versions. After this, serial connection can be bound using rfcomm, and then libpebble2 will work fine so long as you have write access to the device binding.

These watches can be found on Ebay for <50USD, which is a lot cheaper than most other smartwatches.

EDIT: Another minor downside is that bluetooth audio seems to be disrupted by the serial connection to the Pebble. Wired headphones and speakers sound better anyway, but it would be nice to have the option...

EDIT: Turns out BT audio is working fine now. Here's an update of my current status:

libpebble - while I'm playing around with what I can/can't get working in Pebble OS v2.0, I switched to libpebble 1 in order to have a slightly more user friendly interface. I plan to migrate these back to libpebble 2 after I have time to learn more about the protocol changes made in 2.

music control - I have a modified version of libpebble 1 that controls deadbeef from the pebble watch. Current song info is grabbed from Deabeef and displayed on the watch. BT audio now works fine with this setup.

notifications - I have a simple script set up at the moment that grabs all system notifications and forwards the title/body to the watch.

email - I set up claws mail to run a python script on receipt of new mail. The python script parses the sender, subject, and body of the email and invokes another script that sends them to the watch. I'm not exactly sure about security concerns that are being introduced and whether emails sent to the watch over the serial BT connection might be able to be intercepted.
 
Last edited:
The fix is at the end of this post.

Let me know if you still have trouble. Make sure to turn bluetooth off and on again if it is running while you make the fix.
 
Okay brief update added to the top post. I now have song info, music control, system notifications, and email all working with the watch.

Next goals are:
1. Try and figure out bluetooth pairing issues with Pebble OS 3.0 so that the watch can be updgraded. Will try to collect some information on the failed pairing and will probably need some help diagnosing the issue.

2. Upgrade my cobbled together scripts in order to support libpebble2 rather than libpebble.

3. Look into porting Sailfish's unofficial Pebble Client. They have already implemented some very mature watch support, and it may make more sense to port what they have done in C++/Qt rather than write a bunch more python scripts myself. @ptitSeb or any other devs who know Qt, is there any chance you could take a look at repo and point out anything you notice that might be troublesome to compile in CobeBlocks? I'd assume they have some integration with Sailfish OS that I will need to rip out or modify for everything to play nice. I already plan to use an older version of the CodeBlocks PND that has QtCreator working.

4. Depending on how the porting effort goes, I want to investigate getting PebbleJSKit working on the Pandora. This is the functionality that will let the pebble apps download information (weather, sports scores, etc) from the web using Pandora's internet connection. The Sailfish Pebble client already has this support, so I plan to use what they've done as a starting point.
 
@edgex004 : deamon use a "mlite5" that I don't know. other things looks ok...
About QtCreator, you can probably run it from the command line (but anyway, it's not mandatory, you can simply use "qmake5 peeble.pro" to generate the Makefiles, than use make from command line without needing any gui).
 
I love my pebble, would love to try this.

But, I'd just like to be able to listen to music on my BT headphones, is that even feasible? I tried it once and never got it to work.
 
@edgex004 : deamon use a "mlite5" that I don't know. other things looks ok...
About QtCreator, you can probably run it from the command line (but anyway, it's not mandatory, you can simply use "qmake5 peeble.pro" to generate the Makefiles, than use make from command line without needing any gui).

Awesome. Thank you for the insight, ptitSeb. Looks like mlight5 has something to do with the notifications system on Sailfish: https://git.merproject.org/mer-core/mlite/tree/master

It has an Arch Linux package, so hopefully it is somewhat platform independent.

Thanks, sorry to clog up this awesome post.

Can't wait to give it a shot with my pebble!

No worries! I am just glad there is someone else interested in this. I will try to package up what I have into a somewhat user friendly PND and then let you try it.

Any idea what version of the watch/OS you are using?

I have been using it with my bluetooth headphones and am perfectly happy with it. One thing that I've noticed when using bluetooth headphones with the Pandora over the last few years (independent of Pebble connection): deadbeef will stop playback randomly at the end of a song and you cannot get any more music to play until deadbeef is restarted. This is only an issue with bluetooth headphones/speakers. I have looked into the .out file in order to try and find something useful for a bug report to ptitSeb/notaz, but haven't found anything yet.

Due to this, I replace the "previous" button on the Pebble with a script that restarts deadbeef, which then allows me to fix playback from the watch rather than pulling out the Pandora as I had been doing up until this point. It's dirty, but I'm glad to have the feature for now.
 
You might be able to fix deadbeef by going into the options and switching the output plugin to Null in the Sound tab of preferences, then back to whatever you use for bluetooth. I had problems in the past with Alsa not responding, and switching to null then back to Alsa always fixed that.

Probably your solution is better for you though, since I wouldn't know how to script the above.
 
@ptitSeb:I tried compiling mlite (just "qmake5 mlite.pro" and "make") but I'm getting a library error. Seems that it can't find libQt5DBus.so.5, but this is in /mnt/utmp/codeblocks/qt5/lib and is in the library path. Any clue what is going on?

Code:
/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6$ make
cd src/ && ( test -e Makefile || /mnt/utmp/codeblocks/qt5/bin/qmake5 /home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src/src.pro -o Makefile ) && make -f Makefile
fatal: Not a git repository (or any of the parent directories): .git
Project WARNING: Can't find a valid git tag version, got:
Project WARNING: dconf not found; MGConfItem will not be built
make[1]: Entering directory '/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src'
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o mnotificationmanagerproxy.o mnotificationmanagerproxy.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o mnotification.o mnotification.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o mnotificationgroup.o mnotificationgroup.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o mremoteaction.o mremoteaction.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o mdesktopentry.o mdesktopentry.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o mfiledatastore.o mfiledatastore.cpp
/mnt/utmp/codeblocks/qt5/bin/moc -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src -I/mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3 -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/armv7l-unknown-linux-gnueabi -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/backward -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include -I/mnt/utmp/codeblocks/usr/include -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include-fixed -I/usr/include mnotificationmanagerproxy.h -o moc_mnotificationmanagerproxy.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o moc_mnotificationmanagerproxy.o moc_mnotificationmanagerproxy.cpp
/mnt/utmp/codeblocks/qt5/bin/moc -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src -I/mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3 -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/armv7l-unknown-linux-gnueabi -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/backward -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include -I/mnt/utmp/codeblocks/usr/include -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include-fixed -I/usr/include mnotification.h -o moc_mnotification.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o moc_mnotification.o moc_mnotification.cpp
/mnt/utmp/codeblocks/qt5/bin/moc -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src -I/mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3 -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/armv7l-unknown-linux-gnueabi -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/backward -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include -I/mnt/utmp/codeblocks/usr/include -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include-fixed -I/usr/include mnotification_p.h -o moc_mnotification_p.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o moc_mnotification_p.o moc_mnotification_p.cpp
/mnt/utmp/codeblocks/qt5/bin/moc -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src -I/mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3 -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/armv7l-unknown-linux-gnueabi -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/backward -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include -I/mnt/utmp/codeblocks/usr/include -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include-fixed -I/usr/include mremoteaction.h -o moc_mremoteaction.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o moc_mremoteaction.o moc_mremoteaction.cpp
/mnt/utmp/codeblocks/qt5/bin/moc -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src -I/mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3 -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/armv7l-unknown-linux-gnueabi -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/backward -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include -I/mnt/utmp/codeblocks/usr/include -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include-fixed -I/usr/include mdataaccess.h -o moc_mdataaccess.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o moc_mdataaccess.o moc_mdataaccess.cpp
/mnt/utmp/codeblocks/qt5/bin/moc -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src -I/mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3 -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/armv7l-unknown-linux-gnueabi -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/backward -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include -I/mnt/utmp/codeblocks/usr/include -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include-fixed -I/usr/include mdatastore.h -o moc_mdatastore.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o moc_mdatastore.o moc_mdatastore.cpp
/mnt/utmp/codeblocks/qt5/bin/moc -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src -I/mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3 -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/armv7l-unknown-linux-gnueabi -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/backward -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include -I/mnt/utmp/codeblocks/usr/include -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include-fixed -I/usr/include mfiledatastore.h -o moc_mfiledatastore.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DMLITE_LIBRARY -DQT_NO_DEBUG -DQT_DBUS_LIB -DQT_CORE_LIB -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -isystem /mnt/utmp/codeblocks/usr/include/glib-2.0 -I/mnt/utmp/codeblocks/usr/lib/glib-2.0/include -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtDBus -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o moc_mfiledatastore.o moc_mfiledatastore.cpp
rm -f libmlite5.so.0.0.0 libmlite5.so libmlite5.so.0 libmlite5.so.0.0
g++ -Wl,-O1 -shared -Wl,-soname,libmlite5.so.0 -o libmlite5.so.0.0.0 mnotificationmanagerproxy.o mnotification.o mnotificationgroup.o mremoteaction.o mdesktopentry.o mfiledatastore.o moc_mnotificationmanagerproxy.o moc_mnotification.o moc_mnotification_p.o moc_mremoteaction.o moc_mdataaccess.o moc_mdatastore.o moc_mfiledatastore.o  -L/mnt/utmp/codeblocks/usr/lib -lglib-2.0 -L/mnt/utmp/codeblocks/qt5/lib -lQt5DBus -lQt5Core -lpthread 
ln -s libmlite5.so.0.0.0 libmlite5.so
ln -s libmlite5.so.0.0.0 libmlite5.so.0
ln -s libmlite5.so.0.0.0 libmlite5.so.0.0
sed -e "s!@DASH_QT_VERSION@!-qt5!g" -e "s!@NODASH_QT_VERSION@!5!g" -e "s!@VERSION@!0.0.0!g" </home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src/mlite5.pc.in >mlite5.pc || { rm -f mlite5.pc; exit 1; }
make[1]: Leaving directory '/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src'
cd tests/ && ( test -e Makefile || /mnt/utmp/codeblocks/qt5/bin/qmake5 /home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/tests/tests.pro -o Makefile ) && make -f Makefile
make[1]: Entering directory '/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/tests'
( test -e Makefile.ut_mdesktopentry || /mnt/utmp/codeblocks/qt5/bin/qmake5 /home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/tests/ut_mdesktopentry.pro -o Makefile.ut_mdesktopentry ) && make -f Makefile.ut_mdesktopentry
make[2]: Entering directory '/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/tests'
lrelease -idbased ut_mdesktopentry.ts -qm ut_mdesktopentry.qm
Updating 'ut_mdesktopentry.qm'...
    Generated 1 translation(s) (1 finished and 0 unfinished)
lrelease -idbased ut_mdesktopentry2.ts -qm ut_mdesktopentry2.qm
Updating 'ut_mdesktopentry2.qm'...
    Generated 1 translation(s) (1 finished and 0 unfinished)
/mnt/utmp/codeblocks/qt5/bin/moc -DQT_NO_DEBUG -DQT_TESTLIB_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR=\"/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/tests\" -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/tests -I/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/src -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtTest -I/mnt/utmp/codeblocks/qt5/include/QtCore -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3 -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/armv7l-unknown-linux-gnueabi -I/mnt/utmp/codeblocks/usr/include/c++/4.9.3/backward -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include -I/mnt/utmp/codeblocks/usr/include -I/mnt/utmp/codeblocks/usr/lib/gcc/armv7l-unknown-linux-gnueabi/4.9.3/include-fixed -I/usr/include ut_mdesktopentry.cpp -o ut_mdesktopentry.moc
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -fPIE -DQT_NO_DEBUG -DQT_TESTLIB_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR=\"/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/tests\" -I/mnt/utmp/codeblocks/qt5/mkspecs/linux-pandora-g++ -I. -I../src -I/mnt/utmp/codeblocks/qt5/include -I/mnt/utmp/codeblocks/qt5/include/QtTest -I/mnt/utmp/codeblocks/qt5/include/QtCore -I. -o ut_mdesktopentry.o ut_mdesktopentry.cpp
g++ -Wl,-O1 -o ut_mdesktopentry.bin ut_mdesktopentry.o   -L../src -lmlite5 -L/mnt/utmp/codeblocks/qt5/lib -lQt5Test -lQt5Core -lpthread
/mnt/utmp/codeblocks/usr/armv7l-unknown-linux-gnueabi/bin/ld.new: warning: libQt5DBus.so.5, needed by ../src/libmlite5.so, not found (try using -rpath or -rpath-link)
../src/libmlite5.so: undefined reference to `operator>>(QDBusArgument const&, QVariant&)'
../src/libmlite5.so: undefined reference to `QDBusArgument::operator<<(QDBusVariant const&)'
../src/libmlite5.so: undefined reference to `QDBusMetaType::registerMarshallOperators(int, void (*)(QDBusArgument&, void const*), void (*)(QDBusArgument const&, void*))'
../src/libmlite5.so: undefined reference to `QDBusArgument::QDBusArgument(QDBusArgument const&)'
../src/libmlite5.so: undefined reference to `QDBusArgument::endMapEntry()'
../src/libmlite5.so: undefined reference to `QDBusArgument::operator>>(unsigned int&) const'
../src/libmlite5.so: undefined reference to `QDBusArgument::endStructure()'
../src/libmlite5.so: undefined reference to `QDBusArgument::atEnd() const'
../src/libmlite5.so: undefined reference to `QDBusAbstractInterface::staticMetaObject'
../src/libmlite5.so: undefined reference to `QDBusAbstractInterface::QDBusAbstractInterface(QString const&, QString const&, char const*, QDBusConnection const&, QObject*)'
../src/libmlite5.so: undefined reference to `QDBusConnection::asyncCall(QDBusMessage const&, int) const'
../src/libmlite5.so: undefined reference to `QDBusMessage::arguments() const'
../src/libmlite5.so: undefined reference to `QDBusConnection::~QDBusConnection()'
../src/libmlite5.so: undefined reference to `QDBusArgument::operator>>(int&) const'
../src/libmlite5.so: undefined reference to `QDBusPendingCall::~QDBusPendingCall()'
../src/libmlite5.so: undefined reference to `QDBusArgument::endMap()'
../src/libmlite5.so: undefined reference to `QDBusAbstractInterface::~QDBusAbstractInterface()'
../src/libmlite5.so: undefined reference to `QDBusPendingReplyData::QDBusPendingReplyData()'
../src/libmlite5.so: undefined reference to `QDBusArgument::endArray() const'
../src/libmlite5.so: undefined reference to `QDBusAbstractInterface::qt_metacast(char const*)'
../src/libmlite5.so: undefined reference to `QDBusAbstractInterface::callWithArgumentList(QDBus::CallMode, QString const&, QList<QVariant> const&)'
../src/libmlite5.so: undefined reference to `QDBusMessage::~QDBusMessage()'
../src/libmlite5.so: undefined reference to `QDBusAbstractInterface::qt_metacall(QMetaObject::Call, int, void**)'
../src/libmlite5.so: undefined reference to `QDBusArgument::beginStructure()'
../src/libmlite5.so: undefined reference to `QDBusArgument::operator<<(unsigned int)'
../src/libmlite5.so: undefined reference to `QDBusArgument::~QDBusArgument()'
../src/libmlite5.so: undefined reference to `QDBusPendingReplyData::setMetaTypes(int, int const*)'
../src/libmlite5.so: undefined reference to `QDBusAbstractInterface::connectNotify(QMetaMethod const&)'
../src/libmlite5.so: undefined reference to `QDBusPendingReplyData::argumentAt(int) const'
../src/libmlite5.so: undefined reference to `QDBusArgument::beginArray(int)'
../src/libmlite5.so: undefined reference to `QDBusArgument::endStructure() const'
../src/libmlite5.so: undefined reference to `QDBusMessage::createMethodCall(QString const&, QString const&, QString const&, QString const&)'
../src/libmlite5.so: undefined reference to `typeinfo for QDBusAbstractInterface'
../src/libmlite5.so: undefined reference to `QDBusError::operator=(QDBusError const&)'
../src/libmlite5.so: undefined reference to `QDBusPendingReplyData::assign(QDBusPendingCall const&)'
../src/libmlite5.so: undefined reference to `QDBusArgument::beginStructure() const'
../src/libmlite5.so: undefined reference to `QDBusPendingReplyData::~QDBusPendingReplyData()'
../src/libmlite5.so: undefined reference to `QDBusArgument::operator<<(QStringList const&)'
../src/libmlite5.so: undefined reference to `QDBusArgument::beginMap() const'
../src/libmlite5.so: undefined reference to `QDBusArgument::operator<<(QString const&)'
../src/libmlite5.so: undefined reference to `qDBusReplyFill(QDBusMessage const&, QDBusError&, QVariant&)'
../src/libmlite5.so: undefined reference to `QDBusArgument::beginMapEntry()'
../src/libmlite5.so: undefined reference to `QDBusConnection::sessionBus()'
../src/libmlite5.so: undefined reference to `QDBusArgument::QDBusArgument()'
../src/libmlite5.so: undefined reference to `QDBusArgument::endMap() const'
../src/libmlite5.so: undefined reference to `QDBusArgument::beginArray() const'
../src/libmlite5.so: undefined reference to `QDBusArgument::endMapEntry() const'
../src/libmlite5.so: undefined reference to `QDBusArgument::beginMapEntry() const'
../src/libmlite5.so: undefined reference to `QDBusArgument::operator<<(int)'
../src/libmlite5.so: undefined reference to `QDBusArgument::endArray()'
../src/libmlite5.so: undefined reference to `QDBusError::QDBusError()'
../src/libmlite5.so: undefined reference to `QDBusArgument::operator>>(QStringList&) const'
../src/libmlite5.so: undefined reference to `QDBusAbstractInterface::disconnectNotify(QMetaMethod const&)'
../src/libmlite5.so: undefined reference to `QDBusMessage::type() const'
../src/libmlite5.so: undefined reference to `QDBusArgument::operator>>(QString&) const'
../src/libmlite5.so: undefined reference to `QDBusArgument::beginMap(int, int)'
../src/libmlite5.so: undefined reference to `QDBusAbstractInterface::asyncCallWithArgumentList(QString const&, QList<QVariant> const&)'
../src/libmlite5.so: undefined reference to `QDBusMessage::setArguments(QList<QVariant> const&)'
collect2: error: ld returned 1 exit status
Makefile.ut_mdesktopentry:195: recipe for target 'ut_mdesktopentry.bin' failed
make[2]: *** [ut_mdesktopentry.bin] Error 1
make[2]: Leaving directory '/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/tests'
Makefile:43: recipe for target 'sub-ut_mdesktopentry-pro-make_first' failed
make[1]: *** [sub-ut_mdesktopentry-pro-make_first] Error 2
make[1]: Leaving directory '/home/edgex004/Downloads/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/mlite-master-ed59ce429cf5f8f0c9963a76a4dc0465879c51e6/tests'
Makefile:86: recipe for target 'sub-tests-make_first-ordered' failed
make: *** [sub-tests-make_first-ordered] Error 2
 
Just hack the generated Makefile to add -lQt5DBus to the list of linked libs (it's needed but missing in the list).

Or in the .pro file, make sure you see something like
Code:
QT += dbus
to be sure that libs is linked in.
 
@directive0 : It is possible to downgrade if that is what you prefer. It is easy to do from an Android phone if you have it. I will look into installing firmwares from the Pandora too. I think it should be possible...

I still want to try to figure out how to pair with the new firmware anyway though. Any chance you could help me test that? Mainly just do the following and tell me what happens:

1. Turn off bluetooth on any devices your Pebble is already paired with.
2. Make Pebble discoverable.
3. Turn on bluetooth on Pandora and use the bluetooth applet to "Add new device".
4. Select Pebble and try to pair using default settings.

What I have experienced is that no pairing notification actually gets displayed on the Pebble, and the Pandora simply says "Pairing Failed". I'd like to know if this is the case for you as well.

@ptitSeb: Thanks again. That is what I was thinking needed to happen, but I couldn't find any advice on how to go about pointing to the lib. I'll let you know how it goes.
 
@ptitSeb: I'm hoping this is the last question I have for you... With my luck/experience it won't be.

I think I was able to compile mlite5 and I installed all the files using the following structure:

  • usr/
  • usr/include/
  • usr/include/mlite5/
  • usr/include/mlite5/MDConfGroup
  • usr/include/mlite5/MDesktopEntry
  • usr/include/mlite5/MGConfItem
  • usr/include/mlite5/MNotification
  • usr/include/mlite5/MNotificationGroup
  • usr/include/mlite5/MRemoteAction
  • usr/include/mlite5/mdconfgroup.h
  • usr/include/mlite5/mdesktopentry.h
  • usr/include/mlite5/mfiledatastore.h
  • usr/include/mlite5/mgconfitem.h
  • usr/include/mlite5/mlite-global.h
  • usr/include/mlite5/mnotification.h
  • usr/include/mlite5/mnotificationgroup.h
  • usr/include/mlite5/mremoteaction.h
  • usr/lib/
  • usr/lib/libmlite5.so
  • usr/lib/libmlite5.so.0
  • usr/lib/libmlite5.so.0.0
  • usr/lib/libmlite5.so.0.0.0
  • usr/lib/pkgconfig/
  • usr/lib/pkgconfig/mlite5.pc

However, when I try to compile the pebble client, I get:

Code:
Project ERROR: mlite5 development package not found

I then copied this same file structure into the mounted codeblocks PND folder, but am still getting the same error.

Running "pkg-config mlite5 --modversion" returns 0.0.0 which agrees with my mlite.pc file.

Is this error simply because pkg-config can't find my mlite5.pc file when it is called in the makefile? Or did my compile of mlite perhaps fail without me realizing?
 
@edgex004 : I'm not sure, I have to check how qmake works with external package. The error is durring the "qmake5" phase or "make "?
[doublepost=1458209049,1458196281][/doublepost]@edgex004 : strange as it should work.
Only thing I can see is a mix betwenn sh and bash. try to export SHELL=/bin/bash before calling qmake5 or hack the generated Makefile to make sure bash is called and not sh, that may help.
 
@ptitSeb: The error comes up after "make". I'll try you suggestions and get back to you. Good to hear I'm not the only one a bit confused.
[doublepost=1458216136,1458213147][/doublepost]I didn't notice this before, but it is in fact failing at the point when the top level makefile invokes "qmake5 && make" for the daemon.pro subproject. No makefile is produced in that folder, so it must be failing at qmake for the daemon. Setting shell to /bin/bash in the top level makefile doesn't help, and neither does exporting in command line. However, if it is switching from bash to sh somewhere in between the top level make and the subproject, then there must be some way to force it to switch back.

I also noticed this just now at the bottom of daemon.pro:

Code:
# unnecesary includes, just so QtCreator could find headers... :-(
INCLUDEPATH += $$[QT_HOST_PREFIX]/include/mlite5

QT_HOST_PREFIX is undefined on the Pandora at the moment. Maybe if I set QT_HOST_PREFIX to the codeblocks folder, or perhaps to the qt5 folder, and put a copy of the lib in the qt5 folders....
 
you can try the easy-hacly way.
remove mlite5 from the pkgconfig line and add
"LIBS += -lmlite5" or whatevever pkg-config mlite5 --libs gives.
(and also an INCLUDEPATH =+ ...if pkg-config mlite5 --cfakgs gives something different the just -I/mnt/utmp/codeblocks/usr/include)
 
pkg-config mlite5 --cflags solved that mystery. mlite5 was trying to pull in Qt5Dbus.pc, but /mnt/utmp/codeblocks/qt5/lib/pkconfig was not on the PKG_CONFIG_PATH.

So pkg-config was indeed finding mlite5, but couldn't find Qt5Dbus. I added to the path and that error is gone now.

However, now it is complaining about unknown module in QT: contacts.

I looked and there is no libQt5contacts.so in .../qt5/libs/, so I'm assuming that is the problem. It looks like this is maybe a lib from Qt mobility rather than base Qt.
[doublepost=1458221130,1458220667][/doublepost]Looks like this package will maybe get me the contacts lib: qtpim
 
Back
Top