{"id":913,"date":"2009-01-12T17:00:01","date_gmt":"2009-01-12T06:00:01","guid":{"rendered":"http:\/\/www.somethinkodd.com\/oddthinking\/?p=913"},"modified":"2009-01-12T19:24:06","modified_gmt":"2009-01-12T08:24:06","slug":"synching-my-samsung-d600","status":"publish","type":"post","link":"https:\/\/www.somethinkodd.com\/oddthinking\/2009\/01\/12\/synching-my-samsung-d600\/","title":{"rendered":"Synching my Samsung D600"},"content":{"rendered":"<p>Almost three years ago, I bought a Samsung D600 mobile phone.<\/p>\n<p>I gave it a <a href=\"http:\/\/somethinkodd.com\/oddthinking\/2006\/03\/30\/a-new-owners-review-of-the-samsung-d600-mobile-phone\/\">mixed review<\/a>, but I reserved my <a href=\"http:\/\/somethinkodd.com\/oddthinking\/2006\/05\/29\/samsung-pc-studio-3-versus-microsoft-outlook\/\">hostility for the Samsung PC Studio 3<\/a> software that (allegedly) synchronised with the phone. (Those pages became some of the most popular of this blog &#8211; mainly from the long tail from search engines.)<\/p>\n<p>Samsung have released several patches to PC Studio 3, which means some of the bugs may well have been fixed &#8211; I don&#8217;t dare test some of the more horrific issues &#8211; but even the basic stuff is still broken.<\/p>\n<p>I tried replacing it with <a href=\"http:\/\/www.en.mobile-master.de\/\">Mobile Master<\/a>. That software was fairly feature-rich &#8211; some of the things it could do were really nice! &#8211; but the English translation from the German was woefully bad. I couldn&#8217;t recommend it to others for that reason. I wrote to the author, and volunteered to help out a little with the polish of the English translations &#8211; I provided him with some where the real meaning was clear, but there were many more I couldn&#8217;t understand enough to help with (and I speak virtually no German, so I couldn&#8217;t translate.) Then <a href=\"http:\/\/www.somethinkodd.com\/oddthinking\/2007\/06\/14\/vale-joe\/\">events overtook me<\/a>, and by the time I came back to it, he had released a new version (with a new fee), I had version control issues with my changes, and I wasn&#8217;t willing to fork out the money. None of these are insurmountable hurdles, but I let it slide.<\/p>\n<p>There seem to be many other half-arsed solutions out there. <\/p>\n<p>I played around with <a href=\"http:\/\/www.bitpim.org\">BitPim<\/a> (open-source, so no price rise issues) for a while, seeing how hard it would be to add D600 support. I found out three things: (a) having generalised support for old Samsung models doesn&#8217;t mean it is even close to supporting &#8220;modern&#8221; Samsungs, (b) it isn&#8217;t evident how bad the UI is for BitPIM until you have a phone that works with it, and (c) it doesn&#8217;t look like it is going to get better, with no contributions to the code-base for a few years.<\/p>\n<p><a href=\"http:\/\/opensync.org\/\">OpenSync<\/a> sounds promising except that it relies on a Bluetooth and Linux. Also, reports about the level of D600 compatibility are contradictory. It is going through an architectural revamp, so now is not the time to contribute new plugins.<\/p>\n<p>I have been making do with Samsung PC Studio, a second Outlook contact folder, and some <em>ad hoc<\/em> Python scripts. I read all the contacts from the phone into a separate Outlook contact folder. I run scripts to compare the differences to the master copy, and <em>manually<\/em> mark up the master copy. Then I delete all the contacts in the second Outlook folder, and replace them with a copy of the master folder. Then I delete all the contacts on the phone, and do a one-way sync to the phone. The goal here is to prevent Samsung PC Studio from ever touching my master copy of the contacts, so it can&#8217;t ruin them.<\/p>\n<p>My phone&#8217;s appointment book has been empty and stale for a long time, making a key feature of the phone worthless. My phone&#8217;s contact book is generally stale because of the effort required to update it &#8211; generally I was only updating it once ever 3 months.<\/p>\n<p>This month, after another frustrating synching experience with Samsung PC Studio, I decided to write my own D600 phone interfacing software.<\/p>\n<h3>This Is Not The D600 Support You Are Looking For.<\/h3>\n<p>Let me explain why my code is not what you are looking for, and is instead just another piece of half-arsed piece of almost useful code. <\/p>\n<ul>\n<li><strong>It doesn&#8217;t work on any other model of phone except the Samsung SGH D600.<\/strong> It is filled to the brim with hard-coding of parameters and protocols for it to work on any other phone (even similar Samsung models). It turns out that the phone protocols do have some ways of interrogating for which features are present and the possible ranges for some types. However, (a) the protocols don&#8217;t seem to be quite standardised enough, so you need to already know the phones capabilities to interrogate it (in which case, why not hard-code that info?), (b) the protocols don&#8217;t give enough information (i.e. is the range for this record 0-based, or 1-based?) and (c) that would mean you couldn&#8217;t get started with your synching operations until the phone is connected.<\/li>\n<li><strong>It doesn&#8217;t support two-directional synching.<\/strong> At this stage, it supports changing the phone to make it match Outlook, but never vice versa. I expect I will eventually write a comparison tool to tell me to <em>manually<\/em> update Outlook when there is a change recognised on the phone, but in my world the phone is not the master copy. Yes, this is limiting, but it comes from a deep mistrust of synching software that I have gained from PC Studio (oh, and trying to synch ACT with a PalmPilot many years ago).<\/li>\n<li><strong>It has limited SMS message support.<\/strong> I haven&#8217;t bothered. I have no interest in writing SMS messages on my phone and uploading them (or triggering their transmission, for that matter) even though I believe I have the knowledge of how to do it. There are traces of support at the lower layers, but I haven&#8217;t carried them to the top.\n<\/li>\n<li><strong>It can read directories, it can&#8217;t read files.<\/strong> I haven&#8217;t bothered: I don&#8217;t have much use for it, and I haven&#8217;t understood the protocol; it looks relatively complex. (Is it based on OBEX?) Maybe I&#8217;ll add this one day; it would be nice for backup purposes.<\/li>\n<li><strong>No Bluetooth support. <\/strong> I don&#8217;t have a Bluetooth dongle on my PC. One has been ordered and will be delivered in a few weeks, so I can see then how hard it would be. (I am hoping it is just a substition at the serial port layer.)<\/li>\n<li><strong>Too many mystery fields.<\/strong> When I read in some records, there are many fields that I simply do not understand. I have (generally) learnt what defaults will get the phone to work, but there could well be a feature I haven&#8217;t tested that will trigger a failure.<\/li>\n<li><strong>It doesn&#8217;t have a GUI.<\/strong> It&#8217;s just a Python script.<\/li>\n<li><strong>It doesn&#8217;t check for the existence of a PIN number.<\/strong> I haven&#8217;t bothered: my phone is not PIN-protected.<\/li>\n<li><strong>It <em>probably<\/em> doesn&#8217;t work for all the languages the D600 supports.<\/strong> I do try to handle UTF-8, but I am not sure how much of the character set that the D600 supports. It works for the occasional umlaut in my friend&#8217;s names, but I haven&#8217;t pushed it. My D600 only supports English and a number of Asian languages (Indonesian, Thai, etc.) so I suspect it is the Asia-Pacific model, and is limited to some parts of the character set. I have no other models to test it on.<\/li>\n<li><strong>It doesn&#8217;t synch To Do lists.<\/strong> In fact, it <em>deletes<\/em> any To Do items it finds on the phone. This isn&#8217;t a bug, or a missing feature; I dislike the way that To Do lists on the D600 are given priority over daily appointments in the UI. They get in the way too much.<\/li>\n<li><strong>It doesn&#8217;t synch email or bookmarks.<\/strong> I haven&#8217;t bothered. I don&#8217;t use WAP\/Internet on my phone; I find I am either within eye-sight of a real computer, or I am <em>away from my computer<\/em>, and don&#8217;t need the Internet. I don&#8217;t have a philosophical aversion, I just don&#8217;t feel the need, especially given the price.\n<\/li>\n<li><strong>It doesn&#8217;t synch email addresses or Event\/Contact notes.<\/strong> This is a trade-off. I would now-and-then find it useful to share someone&#8217;s email address, and maybe the first 100 characters of the notes (all the D600 supports) would be occasionally useful, so i would like to synch this information with the phone. However, Outlook has a security feature which requires the user to confirm that the synch software has temporary permission to access the Outlook object model; until permission is granted, the synch freezes up.  It is only triggered on some sensitive fields (like email address), so avoiding these fields means that the synch can run without disturbing me.<\/li>\n<li><strong>It doesn&#8217;t check the phone plugged in is a Samsung D600.<\/strong> I know how, I haven&#8217;t bothered, because I never plug in any other device into that COM port.<\/li>\n<li><strong>It doesn&#8217;t handle multiple phones\/SIMs.<\/strong> I know how to detect the IMEI number, but I haven&#8217;t bothered, because I never plug in any other D600.<\/li>\n<li><strong>It doesn&#8217;t handle multiple Outlook profiles.<\/strong> It is hardcoded to my profile name.<\/li>\n<li><strong>It doesn&#8217;t synch SIM contacts.<\/strong> SIM contacts are barely functional (name and phone number). I don&#8217;t need them. Some people swap SIMs around on their phone, and find it useful to store numbers on the SIM but I don&#8217;t.\n<\/li>\n<li><strong>It synchs contacts my way!<\/strong> If I don&#8217;t know your phone number, I don&#8217;t want your name cluttering up my phone&#8217;s directory. Duh, PC Studio, duh!\n<\/li>\n<li><strong>It synchs birthdays my way!<\/strong> It doesn&#8217;t synch birthdays found in the Calendar. Instead it synchs birthdays found in the contact details. Furthermore, it puts the person&#8217;s age in the subject text of the event (where it is known). Sometimes I only know the day and month, and not the year. Historically, in that situation, I have always set the year to be the current year. Thus, if the year is less than about 1998, that is their DOB. If it is greater than 1998, then either I don&#8217;t know the person&#8217;s age or they are a small kid. I&#8217;ve hardcoded that distinction in the (top layer of the) synching software. If you don&#8217;t follow this tradition, or have been doing for a different length of time to me, too bad!<\/li>\n<li><strong>It doesn&#8217;t handle time-zones.<\/strong> There are three parts to this. (a) I assume that the phone&#8217;s clock and the computer&#8217;s clock are in the same timezone. If they aren&#8217;t, there will be confusion trouble. (b) Although I know the codes to set the phone&#8217;s timezone when I synch the clock, it appears to make absolutely no difference (e.g. to the timezone reported by the phone&#8217;s UI). When I first played with it, it seemed to think I was in GMT-7.25, rather than GMT+11 (which is how it was set in the GUI), so the wrong timezone doesn&#8217;t seem to phase it. (c) I haven&#8217;t bothered coding it neatly, due to (b).<\/li>\n<li><strong>Doesn&#8217;t handle intermittent connection issues.<\/strong> Every now and again, the phone or the COM port seem to get stroppy, only to work again a few seconds later without change. I haven&#8217;t automated retries for this situation.<\/li>\n<\/ul>\n<h3>This <em>Is<\/em> The D600 Support <em>I<\/em> Am Looking For.<\/h3>\n<p>This long list of missing features may make this software sound half-arsed and barely functional.<\/p>\n<p>That&#8217;s all true, but it just the half-arsed, barely functional code I wanted.<\/p>\n<p>My contacts are synched. (I have many hundreds of contacts; this is a big thing.) Yay! I won&#8217;t call you on your old number after that you emailed me a new one.<\/p>\n<p>My events are synched (for the next two year&#8217;s worth). Even the weirdly recurring ones. Also, if I ever knew how old you were, I can now remember on your birthday.<\/p>\n<p>Of course, the irony is, I needed to leave my work to have the time to make my phone remind me of my work meetings. I don&#8217;t divide my days into one-hour slots any more. But it still makes me geek-happy that if I do have a meeting, I will be reminded!<\/p>\n<p>Talking of geek-happy, I am also happy that the clock on my phone is now synched to the clock on my PC (which itself is eventually synched to some atomic clock somewhere). I know this is anal and geeky, but I am still pleased to be carrying an accurate watch again.<\/p>\n<p>Of course, the other irony is that, while I have no desire to replace my phone, this software clearly doesn&#8217;t have an extended lifetime. When this phone dies, I will not be buying another D-600 to replace it. If I had written it 3 years ago, it may even have been worthwhile.<\/p>\n<p>Still, it was fun to get my hand in with device driver code again (nothing in at the kernel layer, I hasten to add). Maybe I will extend it further (how about integration to Facebook, so when someone rings me their latest profile picture appears as their avatar on the screen?)<\/p>\n<p>I originally planned in this post to describe the architecture and development, but it became quite long enough as it is. If there is interest, I can delve deeper.<\/p>\n<p>At least you have one inkling of why the <a href=\"http:\/\/www.somethinkodd.com\/oddthinking\/2008\/12\/03\/online-photo-database-project-status\/\">Online Photodatabase Project<\/a> has stalled.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This month, after another frustrating synching experience with Samsung PC Studio, I decided to write my own D600 phone interfacing software.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_s2mail":"","footnotes":""},"categories":[25,47,34,1],"tags":[],"class_list":["post-913","post","type-post","status-publish","format-standard","hentry","category-insufficiently-advanced-technology","category-review","category-software-development","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts\/913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/comments?post=913"}],"version-history":[{"count":6,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts\/913\/revisions"}],"predecessor-version":[{"id":919,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts\/913\/revisions\/919"}],"wp:attachment":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/media?parent=913"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/categories?post=913"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/tags?post=913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}