Text rescued from old wiki page:
Source for as far as we got with this stuff, which isn't very far at all, is at http://svn.kryogenix.org/svn/gnome-bluetooth-phones/trunk/ for perusal.
== Feature List ==
- Monitor phone signal (<b>Done</b> on phones that support it)
- Monitor Battery (<b>Done</b> on phones that support it)
- Run under "reduced power" mode (i.e. less bluetooth activity, might save the battery? Automatically enter this state after n mins)
- Export all phone book entries as v.cards (and import) (<b>Done</b>)
- Export all calendar entries as v.cal (and import) (<b>Done</b>)
- WAP front end for accessing from a mobile (why? I havent worked that out yet)
- Send/Receive SMS (<b>Done</b>)
- File transfer (being able to initiate this from the computer i.e. pull would be better than push. (Would be nice to use standard 'file browser', drag'n'drop) (Steal code from gnome-obex stuff)
- Initiate a call? (why? why not?. If you've got your BT headset paired to the phone, then you don't need to touch the phone. Headset's dont work very well as audio devices at the moment)
- Display contacts as a table, delete, edit, export selected (<b>Done</b> in theory, just need to make it pretty)
- Display calendar as a calendar, delete etc etc (integrate with Evolution?)
- Allow users to easily add new phones to the database (via a HTTP upload?)
- Allows users to add new functions to the menus by simply adding a new command to the XML file (make our master server notice any new functions added to other peoples files and if good, roll them in to default)
- Cool beeps when stuff happens
- Control the computer from the phone
- [[Connect to the internet using this phone as a modem]].
1. Have a "connect to the internet using this phone" button or context-menu or something. This would mean that our program would have to have a basic dialer in it (because you need to ask for a phone number and username/password).
2. Have a "connect to the internet using this phone" button which does the following:
- Creates the phone as a modem * Starts up an existing dialer program (modem-lights, kppp, whatever) * Ideally tells modem-lights/kppp that the newly created modem is the one to use
3. Automatically create the phone as a modem as soon as you see it. The user then just does a dialup however they would normally do it, selecting the newly created modem. This isn't very seamless, though, and how do we stop it creating modems for a phone in the pocket of a guy on the other side of the train carriage? Only create them for paired phones, if the paired phone is in range?
Other thought: perhaps we say, fuck a bunch of analogue dialup, this only works with GPRS. Is there a standard way to tell a phone "connect via GPRS to the internet and be a modem"? It's normally doing something like dialling **99*#2* or something. If that *is* standard, then you've got the following, rather neat option:
4. Have a "connect to the internet using this phone" button which just connects to the internet. No other user interface needed. (Under the covers we'd be creating a modem object, using it to call the magic GPRS number, doing PPP, all that shit, but the user doesn't see any of that).
== Useful Things ==
- Automatically set up required rfcomm (checking for the presence of another/same one first)
- Support for when the phone goes out of range. Don't complain, just go to sleep
- Alert if another bluetooth device comes in to range
- Rob the code from the obex file receiver and sender and roll in to our code. (hehehe) (Open Source, you gotta love it)
- A thing that will test all AT+xxxx (where x is a letter a-z) commands to see if it does anything
- It might be possible to send key-presses to the phone via the serial. If so you could script any phone functions. e.g. If the battery is running low, turn the bluetooth off on the phone!
- Cool Idea Of The Day (TM) - Get it to interface with GAIM
== How it will work ==
- XML Phone definition files
- Detect phone type and model automatically
- Look for a file for this phone
- Fail back to defaults
== Order of work ==
1. Mock up a prototype in Glade 2. Turn mock up in to running prototype 3. Research AT commands and document for both Samsung and Sony Ericson 4. Design and build XML file for commands 5. Build a working prototype with very basic functionality 6.
== Skills Needed ==
1. Python Expert for writing the actual program (SIL) 2. Getting info on & off the phone via serial (WHEC) 3. Artist (for icons) 4. Beta Testers 5. Fresh Brains
== Software Needed ==
- glade-2
- pygtk (see [http://primates.ximian.com/~sandino/python-glade/ Writing PyGTK applications in a visual way])
== User Interface Ideas ==
Put a phone icon in the notification area whenever a paired phone is in range. If there are two paired phones in range there should be two icons! If there is one or more non-paired items in range, display another, visually distinct, icon: clicking this should display, roughly, the current Gnome Phone Manager window with all phones in range (both paired and unpaired) listed. For each phone in that window, have a "pair" option (might need rewording) which makes it one of your paired phones (and therefore puts an icon in the notification area). Paired phones in the window should have the different icon, so there is a "paired phone" icon and an "unpaired phone" icon.
Each phone in the phone-manager window, and each individual paired-phone icon in the panel, should have a right-click menu with lots of options listed (see Glade menu).
== Actual Implementation ==
This is the current situation:
- configuration tools are only command-line, sometimes require root privileges and often their complexity makes them useless
- if you want to write a nifty gui application, you have to use the low-level [http://www.bluez.org Bluez] libraries (or its bindings for the language you're using) which are difficult to program, and which, as of the time I'm writing, lack any official documentation
For these reasons, I decided to take a completely different path:
'''The Unified Bluetooth Daemon'''
- it uses the HAL (Hardware Abstraction Layer) to know when the user turns his bt transceiver on/off ( so no need to do `sudo hciconfig hci0 up`, it's all done automagically)
- it is a fully DBUS-ified and object-oriented application, so it supports asynchronous operations (and GUI apps need them unless you want your gui to freeze for 10+ seconds while waiting for an inquiry scan to finish) and exposes all bluetooth functionality with an abstract interface which makes it very easy for other programs (written in any language for which dbus bindings exists, and there are many) to interact with it
- it incorporates all the functionality of the old-style command-line utilities (hciconfig, hcitool, sdptool, rfcomm etc) and exposes them as DBus objects ("/org/bluetool/hci/manager","/org/bluetool/hci/devices/<device-id>","/org/bluetool/sdp/server","/org/bluetool/sdp/services/<handle-id>") which can be used through well-documented interfaces ("org.bluetool.hci.manager","org.bluetool.hci.device","org.bluetool.sdp.server","org.bluetool.sdp.service" and so on)
== Conversation Threads ==
Add idle chit-chat in here so we can keep track of things
- Thread: What about a MEncoder frontend? Or more generally, Mobile related shell scripts. They assume that you have all the necessary installed, perhaps with some documentation on each script. Basically, a little script-launcher for stuff do with your phones, that we can tie in and keep in one place (i.e. the phone manager). One example for a phone-related-script would be to take a filename of an mpeg movie and convert it to mobile phone format so you can watch it on your phone. Or an RSS thingy that creates text files?
- Thread: What about client-server type operations? Could be handy to send an SMS from any machine on the (inter)network?
== Links ==
- http://www.ericsson.com/mobilityworld/developerszonedown/downloads/docs/r320/R320s_WP_R1A.pdf
- http://unixbeard.net/~richardc/cgi/blog.cgi/dea.pod/
- http://www.hackdiary.com/archives/000037.html
Links to useful places
- http://blogs.gnome.org/view/jamesh/2006/10/19/0
- http://bluez.cvs.sourceforge.net/bluez/utils/hcid/dbus-api.txt?view=markup