2012年2月9日 星期四

農曆正月初九天公生

老婆的預產期是國曆2月7號 所以老婆的產假從1月30開始請

本以為過年期間兒子就會提早出來讓我們看看他的廬山真面目 就在年假結束 我們回台北上班才一天

星期二的半夜老婆就開始陣痛了 半夜4點半 忘記是被老婆叫醒還是被她吵醒

一從床上彈起就開始行動 也要感謝老婆平常的訓練 我得承認我是被人照顧的好好的白痴...

先是開始整理冰箱 把冷藏室的食材或已經烹煮過食物裝到樂扣裡 放到冷凍庫

因為緊張 還跑到廁所拉了一次肚子

整理行李 把老婆要帶的衣服 寶寶的東西 健保卡 媽媽手冊 全放進行李箱

訂最早班回台南的高鐵班次 早上6點半 最後則是打電話叫計程車準備直奔高鐵車站

出門之前 我又跑到廁所拉了一次肚子

半夜5點 車子來了 途中還順路到公司去 本來想把電腦一起帶回台南 XD

清晨的台北 很空 準時搭上高鐵列車 在車上聯絡台南的父母 一下車就直接趕往診所待產

早上9點15分 進醫院 做內診確定是陣痛 然後就回家準備休息 中午吃完飯再回去醫院

是的 你沒看錯 車開沒多久忽然接到一通醫院打來的電話 問我們怎麼沒去二樓半入院手續... XD

我想護理師應該是要我老婆辦入院手續 待在醫院 其他人可以先回去吃個中飯再過來...

我那可愛的老婆直接省略前面 跳到回家吃飯... 還好 我們剛離開不遠

入院後 護理師要老婆有辦法就起來走走 走上走下的 幫助產道打開 中間不時夾雜著陣痛發生

下午3點55分 開始打催生 晚上8點55分 兒子出生(老婆兒子我愛你們)

兒子出生的那一刻 我在產房像小孩一樣哭了 我才知道不只是生命的消逝會讓人掉淚

生命的開始也同樣會讓人哭



關於緊張就會拉肚子這件事 我記得考完大學聯考之後 似乎這種事就沒再發生過了

至於研究所考試那天 我緊張到整晚睡不著覺 起床後灌了兩罐蠻牛 下午考完直接回家躺平又是另一個故事了....

2012年1月3日 星期二

HAL for GPS on Android

透過 Google 提供的 geolocation 服務, 可以讓我們即便沒有 GPS device

也可以得到我們所在地的經緯度 既然沒有 GPS 裝置 當然也就不需要去實作 HAL

所有的一切都可以在 APP 層完成 只要我們將無線網路所得到的週邊 Access Point 的 mac address

或是將附近基地台的 cell id(ci) 包起來 送出 request 到 www.google.com/loc/json

順利的話 收到的 response 裡就包含了 latitude 及 longitude

只是單純為了嘗試實作 GPS HAL 的想法 所以我將上述的東西搬到底層的 HAL 函式庫

讓上層的 framework 真的以為有 GPS device 的存在 也真的可以得到定位座標

整個 GPS HAL 的架構 可以參考 include/hardware/gps.h 及 external/qemu/android/gps.c

簡單的建立四個 thread 第一個 thread 三不五時透過 wpa_supplicant 掃一下週邊的 AP mac address

第二個 thread 會去得到 main cell 的 ci 如果有成功註冊上基地台的話

第三個 thread 則是偶爾的把前兩個 thread 收集到的資料 透過 libcurl 送 http request 到 google

最後一個 thread 則是解析收到的 response 把得到的座標位置透過 callback func 作更新讓 framework 知道

這樣的作法可行 但是有些先天的限制 那就是一定要有網路 不管是現在普遍的 3G 上網或無線上網

而如果我們真的想要做到導航功能 利用周遭的 cell id 是目前的唯一作法而也是我現在遇到的瓶頸所在

3GPP 規範裡 我們可以得到的 ci 也就只有我們註冊上的 main cell 至於周遭的其他 towers 是各憑本事

有的是沒有提供相關的 at cmd 讓你查詢 有的則是功能上有所限制 也因此我們只能先從 main cell 下手

只是這樣的精準度會讓你想哭

至於在 Android 下除了 Phone 外的程式能不能和 rild 溝通又是另一個故事了

要注意的是 因為是 multi-thread 所以一些 function 的實作必須是 reentrant 的 同樣的去呼叫的 system call 也必須是 reentrant

例如 strtok_r() 是 strtok() 的 reentrant version