Mainnav 的單車碼表,還有 Mac

我買了一組 Mainnav 的 MG600 這款 GPS 單車碼表,可是 Mainnav 並沒有提供 Mac OS X 版本的軟體,可以透過 USB 讀取 GPS 碼表裡頭的資料,Mac 使用者在台灣難免要自力救濟,所以趁著過年這段不必被專案追殺的時間,寫了一套軟體自己用。

MNX

剛好學弟問到這個東西,在這邊簡單寫一下。

一開始覺得,現在手機也都有 GPS 功能,而且許多分享 GPS 運動軌跡記錄的網站,像是 RunKeeperEndomondoEveryTrail,都有手機軟體,而且都還可以在跑完一段路之後直接透過 3G 或是 Wifi 上傳到網站上的功能,如果只是想要記錄一下跑去哪裡閒晃,或是在哪裡迷路,似乎用手機就夠了。但問題出在電池,以 iPhone 來說,這些軟體一邊記錄 GPS,一邊透過網路下載地圖,告訴你現在人在哪裡,就算沒有順便放個音樂,或是拿起來拍兩張照片,大概走個二十公里左右,電話就快沒電了,還是得另外弄個 GPS 碼表。

目前這類型的產品最完善的大概還是 Garmin,不過,我的需求就是一款最陽春的 GPS 碼表,不需要導航,也不需要計算心跳、顯示氣溫這些功能,又不是騎多好的車,而且只是簡單騎,Garmin 的產品有些超過預算。

在購物網站上,最陽春的 GPS 碼表,大概就是長天還有 Mainnav 的產品,而這兩家的在電腦端的資料讀取軟體,都沒有 Mac 的版本;雖然可以用 VMWare 或是 BootCampe 執行 Windows,不過,為了讀取碼表裡頭的資料,就要切到另一套作業系統,實在不怎麼想做這種事情。

不過,搜尋引擎倒是告訴我一個叫做 mainnav-reader 的專案,原來已經有人對 Mainnav 的 GPS 裝置做了逆向工程,解讀了資料格式與傳輸協定,並且用 python 寫了讀取資料的工具程式,在 Linux 與 Mac OS X 上面都可以用,看來不錯。另外,Mainnav 的辦公室就在從住處走路就可以到的地方,我就直接晃了過去帶一組沒有藍芽的版本回家-我最偏好的購物方式還是用現金。

這個產品說來有些缺點:

1. 如果你不是正對著這台裝置的螢幕,而是稍微有點角度,螢幕上的字就會變得幾乎看不到;像我的車子的龍頭稍微低了一些,剛裝上去的時候,騎車時根本看不到上面的字,於是拆了下來裝在把手上。

2. 在傳輸資料的時候,如果 USB 線的電力不太夠,像是先把電腦的 USB 線連到螢幕,再從螢幕上再接一條線,再分接到 USB Hub 上,才連到 GPS 裝置上,可能會造成裝置突然死當;而一開始的時候,還真不知道問題出在哪裡。

3. 操作介面有時候會讓人想殺人。

由於裝置上面只有兩個按鈕,分別是向下、以及確認,所以,在進入設定畫面後,想要退出、回到主畫面,必須要一路按向下按鈕到最後一個選項「Exit」,由於裡頭有十項設定,所以就要按十次向下按鈕。而且,按的時候要非常小心,多按一下,就會回到第一個設定選項,想要退出就要再按十次向下;在「Exit」上面按確認,也要十分小心,因為多按一下,又會變成從主畫面進入到設定,又必須要按十下向下才能離開。想要從設定畫面回到主畫面,最快的方法,是關機重開。

有些功能的用字也有問題,例如在運動記錄列表中,有一個功能叫做「Memory」,點下去之後,畫面中顯示一個像是「95%」之類的數字-95% 的 Memory 是什麼意思呢?是還有 95% 的空間可用的意思,那,把「Memory」換成「Free Space」,會不會好一些?

4. 網站與手冊,有改進的空間。在網站上有 Windows 版本的軟體可以下載,不過,下載速度實在頂慢的。而中文版手冊的 PDF 檔案,用了中文檔名,主機大概是用 Big5 FS,而這年頭瀏覽器在處理 URL 的時候,多是當做 Unicode 處理,所以,在網站中點選中文手冊的連結,沒辦法下載手冊,只會看到 404 錯誤。

至於英文手冊嘛,裡頭的錯誤實在有些多。看起來裝置的韌體改版過,但是手冊沒有完全更新,例如主畫面第一個選項叫做「Sport」,但是手冊裡頭寫的還是「Bike Mode」。而且,就算像我這種英文程度也不怎麼樣的人,也都可以看出裡頭文法錯誤不少,像手冊第一頁:

This compact cycle meter delivery the essential functions plus data logging and light sensor.

delivery 是名詞,這邊應該要用 delivers,而且似乎該用 not only…but also 句型。然後:

While riding, MG-600 showing exactly your speed, distance, trip time and altitude.

應該是 shows,不是 showing 吧?不過說實在,好像也沒什麼影響,至少 Mainnav 做出來的產品,在國外,至少是會讓 hacker 想要做逆向工程的對象。

mainnav-reader 用了一陣子,又遇到了一些問題。mainnav-reader 在讀完資料之後,就會把所有讀到的資料存成 GPX 格式,接著就可以上傳到前面提到的那些網站,不巧的,mainnav-reader 轉出來的 GPX 檔案裡頭,在 XML Name Space 的定義部分有些問題,我主要在用的網站 RunKeeper 認定是格式錯誤,看來要改一下程式。而既然都要動到程式了,人嘛,難免一時衝動,就覺得自己要用的東西,少說要讓自己看得順眼一點,那不如用 Cocoa 重寫一個 GUI 工具。

MNX

MNX,版本,專案網頁與程式碼放在 https://github.com/zonble/MNX,下載網頁則是在 https://github.com/zonble/MNX/downloads,軟體介紹網頁呢,還沒做。使用 New BSD License 授權,目前這套軟體:

  • 只支援 Mac OS X 10.6 以上作業系統,以及使用 Intel CPU 的 Mac 電腦。
  • 只使用 Mainnav MG600 測試過,而且只有測試過 USB,沒有試過藍芽版本。
  • 主要功能就只有:讀取資料,用我覺得高興的介面顯示資料內容,還有轉存成 GPX、KML、TCX 三種格式。這套軟體不管你的體重、你的心跳速度,以及燃燒了多少卡路里。
  • 下載資料

    在 Mac 連接到我手上這台 MG600 的時候,Mac 會把這台裝置當做是一台數據機(Modem,我好像在進入二十一世紀之後,就沒有聽說過這個詞了)。由於數據機以前是拿來接上電話線撥號上網用的,所以 Mac OS X 也就會問你,既然有台新的數據機,要不要設定一下電話號碼,好方便以後直接撥號上網。

    MNX

    在這邊請直接按 Cancel 跳過,一方面因為單車碼表怎麼能讓你撥號上網,再來,就算你弄到一台數據機,我還真不曉得現在台灣還有什麼撥號上網的號碼可以用。我的 Mac 可以直接抓到這台碼表,不過,在 mainnav-reader 的討論區中有人提到,他需要另外安裝 driver(下載網頁

    偵測到裝置後,在 /dev 底下會出現像是 tty.usbmodem20100111 與 cu.usbmodem20100111,這台就是我的 MG600。我們現在來看一下 MNX 的主畫面,在視窗工具列的最左上角,有一個下拉選單,裡頭是目前所有偵測到的數據機列表,從裡頭選到正確的裝置,按一下旁邊的「下載」就好了。

    MNX

    我不知道 Mainnav 怎麼判斷,在同一台電腦接上很多數據機介面裝置的時候,哪一台是他們生產的裝置,想來應該是送出某個特別的指令,看看能不能收到正確回應之類的,不過,為了方便,目前就先把所有看起來是數據機的東西都列出來。

    顯示資料

    我目前沒有顯示高度資料,速度也不是用碼表裡頭的資料,而是另外透過經緯度位置套公式另外算的。也不知道是碼表本身的問題,還是 mainnav-reader 沒有正確解讀出 binary 資料的格式,照著網站上的說明去讀資料,結果卻是在台北市河濱自行車道上,出現海拔 -200 這種數字,簡直都可以騎車去打撈沉船了。速度資料也看起來很奇怪。

    與其顯示有問題的資料,不如不顯示,反正經緯度資料是看來是對的,Google 本身就有經緯度對應到高度的資料,把 GPX 檔案傳到 RunKeeper,也會透過 Google 的資料,把高度算出來。由於 Mainnav 的裝置也是透過 GPS 偵測高度,不是用氣壓,用 Google 的資料應該還比較精確一些。

    MNX 會在資料下載完畢之後,先儲存在硬碟裡頭,不過,強烈建議不要放太多資料。我在儲存、讀取資料這部份寫得很隨便,真的要做一個產品等級的軟體的話,應該要用個資料庫存資料,而目前沒有用到的歷史紀錄,也應該要從記憶體是放掉。而我現在卻是有什麼資料都往記憶體倒,存檔的時候也一次亂存起來,基本上等於沒有 Data Model 的規劃。所以,合理的使用方法是,出去玩個兩圈,把資料讀出來,用個稍微好一點的介面確定哪些是想要匯出、上傳的資料,匯出,然後就把資料刪了。

    同場加映:怎樣使用 mainnav-reader

    順便講一下 mainnav-reader。

    mainnav-reader 是用 python 開發的 command line 工具。首先要安裝 pySerial,去下載網頁下載 pyserial-2.5.tar.gz,解壓縮,在終端機底下輸入 sudo python setup.py 安裝。

    接著,下載 mainnav-reader-0.5.tar.gz,解壓縮之後,一樣,輸入 sudo python setup.py 安裝。安裝完畢。

    接著,在想要下載資料的時候,就在終端機底下輸入 mainnav-reader -d /dev/tty.usbmodem20100111。下載完的資料,會存放在個人目錄下的 mainnav-tracklogs 目錄中。

    Das ist alles. 恭喜發財。

    3 thoughts on “Mainnav 的單車碼表,還有 Mac

    1. 大俠,您好,我是一個iPhone開發的初學者中的菜鳥,菜鳥中的極品。。
      無意中得到了您的邊錄音邊播放的source code。崇拜的五體投地。
      初學有好多好多不明白的地方
      希望您能有時間指點下小女子。。萬分感激!!

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.