2011/06/10

[Linux] Linux 上的 GPIO / I2C 實作筆記之一

什麼是 GPIO ?
全稱是 "General Purpose I/O"。General Purpose ,就是用途不限。 Input / Output 指的是拉電位高低,Hardware 上的電位高低是以電壓值的範圍來規範,下面 DataSheet 中提供的電位表:

依循這個規則,我們可以指揮 SoC 的暫存器作工在 PIN 腳上,讓這些 PIN 腳電位 [輸出|輸入] + [拉高|拉低] 來達成我們的要求。

既然是要 SoC 的暫存器工作,就可以看 SoC 的範本怎麼工作,我們依樣畫葫蘆就可以。
例如:
我們可以在 ./arch/mips/ar7240/gpio.c 裡面找到 ar7240 的 wpa, wps led, factory reset button 的 gpio ,就照抄這些 function call 去工作。

ar7240_gpio_out_val (WPS_LED_GPIO, WPS_LED_ON);
ar7240_gpio_out_val (WPS_LED_GPIO, WPS_LED_OFF);


呼叫時代入的參數,因為 gpio 是代入 PIN 腳的號碼,所以一次動作只有一個 bit(0|1) ,要特別小心注意自已代入的值是什麼。

--
參考資料:
* 維基百科上的說明 http://zh.wikipedia.org/wiki/GPIO
* 我所知道的 GPIO http://kezeodsnx.pixnet.net/blog/post/30257192
* http://www.microchipc.com/sourcecode/#PIC18LF4550_LCD_temp_sensor
* I2C 介紹 http://www.youtube.com/watch?list=PLB1BE22BA36431CFD&feature=player_embedded&v=BcWixZcZ6JY

2011/05/19

[Google] Google Map API v3 範例

其實應該看過 Google 官方網頁說明 就好了,就不用再寫什麼筆記來說明怎麼寫一個 Google Map API 了。

不過,因為 Google Map API v2 跟 V3 的差別不小,所以還是寫一個筆記來說明一下。

0. 不用申請 api key 了。
1. 要 Detect User Location ,就要用 v3。 (就是抓瀏覽網頁的這個使用者的位置)
2. 要用滑鼠滾輪,請用 v3 。(v2 我不知道用什麼方法可以,不過預設就不行,所以我就改 v3 了)
3. div 的位置有改變,所以 v3 比較好用。 v2 的 division 要放在 body 這個標籤之中,會有 js 載入的先後之類的問題, v3 變作一個 function 去呼叫,這樣使用比較方便。


好,廢話說完了,開始說明,怎麼使用:

1. 需要 load 兩隻 js 進來:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
<script type="text/javascript" src="http://code.google.com/apis/gears/gears_init.js"></script>

2. 使用時呼叫 function init 就可以 (範例是在 body onload 時呼叫)
function init()
{
var map;
var infowindow = new google.maps.InfoWindow();
var myOptions = {
zoom: 14,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("mymap"), myOptions);
var pos = new google.maps.LatLng(40.69847032728747, -73.9514422416687);

map.setCenter(pos);
infowindow.setContent("my comment");
infowindow.setPosition(pos);
infowindow.open(map);
}


3. 你想秀地圖的地方,就是用一個 div 包起來, id 我這邊取叫 "mymap"。
4. 參數說明:
zoom 的部份可以微調。數字愈小就看得東西愈多,愈大就愈精細。
經緯度的部份是在這一行:
pos = new google.maps.LatLng(40.69847032728747, -73.9514422416687);
要再自已去 google map 找一下地點,然後看一下 ll 等於多少,再自已加進來。

步驟就是這樣而已,其實很簡單吧?

--
Google 官方網頁說明
Google Map API v 2 的範例 這篇寫的很棒很簡單,也感謝主人一下。

2011/05/16

[Linux][軟體] 使用 Logwatch 檢查系統日誌的重點 (懶人請用範例檔)

說到 logwatch ,雖然我已經用了很久,但是還從來沒有寫過一篇關於它的文章,所以這篇將會提到以下的煩惱:


  • 每天看 system log,是人也會瘋掉。
  • syetem log 很多,很煩,很討厭,所以很多人都不想看。
  • system log 不能連線看就只能寄 email ,寄 email 還要裝 postfix 或 sendmail 這個服務正是最容易被入侵的服務之一,為了防杜入侵結果反而造成入侵,這是本末倒置的事情。


所以這篇記錄有 3 個重點:

  1. 找出系統日誌(system log)的重點
  2. 決定多久送一次系統日誌摘要就好
  3. 改用 gmail 來送 email
logwatch 預設的 config 檔放在:/etc/logwatch/logwatch.conf
預設的 config option 很多很煩,所以簡短一點就變成下面的樣子:
LogDir = /var/log
TmpDir = /var/cache/logwatch
MailTo = your_email
MailFrom = Lunar
Print = No
Range = yesterday
Detail = Low
Service = All
Service = "-zz-network"
mailer = "mail.php your_email -s LogWatch"


設定 Logwatch 的 config 檔
  • Service 可以填入不要檢查的 service 名稱,這樣就不會一堆落落長的 log 內容每天去煩你。
  • MailTo 改成你的信箱地址
  • Range 改成你想要檢查的時間範圍
  • mailer 這邊改成我們用 phpmailer 偽裝的送信指令
用 PHPMailer 幫你透過 Gmail 送信
這個方法需要先安裝 phpmailer ,在 debian/ubuntu 底下都可以使用 apt-get install 來安裝這個套件,接著就是下載我參考資料有列出來的 範例檔 逕自修改就可以不用特地為了看 log 來跑一個 sendmail 服務。


重點就紅線框起來的地方而已,請換成你的 gmail 帳號﹑密碼就好,logwatch 會走 stdin 塞資料進來,所以範例程式後面有處理一下 stdin 的部份。

最後,不要忘記在 crontab 裡面加入 logwatch 的服務,通常會在 /etc/cron.daily/ 底下加入一個 00logwatch 的 script (有執行權 x),內容會像是:
#!/bin/bash
#Check if removed-but-not-purged
test -x /usr/share/logwatch/scripts/logwatch.pl || exit 0
#execute
/usr/sbin/logwatch --output mail
#Note: It's possible to force the recipient in above command
#Just pass --mailto address@a.com instead of --output mail

--
參考資料:

2011/05/05

[軟體] Betaradio 在 Ubuntu 11.04 上不能顯示

Betaradio 是 Linux 上面FourDollars 為播放 hichannel 廣播所做的一套軟體,還蠻好用的,不過在 Ubuntu 11.04 上面,因為政策的改變,所以預設只允許某些應用程式占用 system tray 。

不過這是可以手動修改的問題,所以我們只要做下面的動作就可以免除掉這個麻煩:
gsettings set com.canonical.Unity.Panel systray-whitelist "['JavaEmbeddedFrame', 'Mumble', 'Wine', 'Skype', 'hp-systray', 'scp-dbus-service', 'betaradio']"

理論上要
gsettings get com.canonical.Unity.Panel systray-whitelist
再追加到白名單後面才對,不過我想這樣的說明又太冗長了 ~

2011/05/01

[微軟] Windows XP 重灌錯誤 0x00000078

記錄一下,最近重灌 Windows XP 時遇到的藍底白字,原來是 sata 硬碟的關係,只要再進 Bios 的設定,把硬碟工作模式設成 IDE 就可以了。

參考來源:
安裝不了 XP

2011/04/30

[Linux] ubuntu 11.04 上的 oxim 輸入法

老實說,我在 11.04 上面 build oxim 失敗了,錯誤訊息如下:

.ui/../oxim-setup.ui.h: In member function ‘void OXIM_Setup::IMListInit()’:
.ui/../oxim-setup.ui.h:296:85: error: cannot call constructor ‘QIconSet::QIconSet’ directly
.ui/../oxim-setup.ui.h:296:85: error:   for a function-style cast, remove the redundant ‘::QIconSet’
.ui/../oxim-setup.ui.h:297:81: error: cannot call constructor ‘QIconSet::QIconSet’ directly
.ui/../oxim-setup.ui.h:297:81: error:   for a function-style cast, remove the redundant ‘::QIconSet’
.ui/../oxim-setup.ui.h:298:87: error: cannot call constructor ‘QIconSet::QIconSet’ directly
.ui/../oxim-setup.ui.h:298:87: error:   for a function-style cast, remove the redundant ‘::QIconSet’
make[4]: *** [.obj/oxim-setup.o] Error 1
make[4]: Leaving directory `/home/anton/code/oxim/oxim-setup-1.4.4/src/oxim-setup-qt3'
make[3]: *** [oxim-setup-qt3] Error 2
make[3]: Leaving directory `/home/anton/code/oxim/oxim-setup-1.4.4/src/oxim-setup-qt3'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/anton/code/oxim/oxim-setup-1.4.4'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/anton/code/oxim/oxim-setup-1.4.4'
make: *** [build-stamp] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
anton@anton-nb:~/code/oxim/oxim-setup-1.4.4$
anton@anton-nb:~/code/oxim/oxim-setup-1.4.4$
不過還好的是,以前 build 給 ubuntu 10.10 的 oxim deb 包裝 還可以使用,所以就下載下來安裝就先用著了。

對了,不要忘記,安裝完後要
im-switch -a all_ALL oxim

指定現在使用的輸入法給 oxim ,讓下次開機登入時 oxim 就可以正常使用了。

更新:
問題已解決,新的 11.04 oxim deb 包裝參照舊文的連結

[Linux] Ubuntu 11.04 第一印象 - 精簡風

話說 Ubuntu 11.04 出來了,所以我也更新我家裡的 ubuntu desktop 到 11.04 的版本上去。不過因為這版的 ubuntu 其實改得蠻大的,所以不是很建議一般使用者冒然就更新到這個版本上去,應該會有很多不適應的地方。

像是面版(gnome-panel)不見了,選單不見了,取而代之的 unity 這個使用者介面。
工具列上的狀態列(notification/system tray)預設狀態也是走精簡風,很多訊息都不秀出來,所以剛開始很不習慣。
圖左紅框是我所說的 unity 使用者介面最基本的表現。圖上紅框是狀態指示列(system tray),這邊的圖示比以前要少了很多,也沒有右鍵提示選單可以設定。

預設沒有舊式功能表「應用程式」﹑「功能選單」這種東西,所以一切都在右上角的 start 按下去之後開始,也可以選擇按 alt + f2 來開啟一項應用程式,在邊打字的同時就會提示你可能要的應用程式是哪些。

另外,在 start > 更多程式 > 的選單也可以看到如下圖的分類項目:


第一個想法是 ubuntu 想開始走平板電腦的路線,所以很多功能要精簡化,不想要一堆選擇,就是可以很簡單的 click, click, click 然後 就達成自已想要的功能。當然不是替 ubuntu 護航,覺得以前那樣不好,以前功能一列展開也可以很快的找到自已想要的東西,但是在 touch panel 上面就顯得很不方便,很容易不小心就按到別的去了。

2011-04-30 更新:
剛剛發現其實在右上角的登出按扭最底下就有跑一個「系統設定」裡頭就可以呼叫「控制中心」出來使用。

2011-05-01 更新:
剛發現一個快速鍵(super + tab, number) 可以用鍵盤很快叫出 toolbar 上面的應用程式如下圖 ~

2011-0502 更新:
gsettings set com.canonical.Unity.Panel systray-whitelist "['all']" 可以讓我的 oxim 顯示 在 system tray 沒錯,不過整個布景主題就出問題了,還不知道為什麼,所以暫時不能用這招,再來看看這個 array 存的是 x class name 還是什麼。

2011-05-04 更新:
讓 libreoffice 支援 Global Menu 的方法:
sudo apt-get install lo-menubar

2011-05-06 更新
Unity 的快速鍵列表
--
參考來源:
如何讓 Ubuntu 11.04 上的 LibreOffice 支援 Global Menu
Unity 的快速鍵列表

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...