擴充套件乙個硬體(比如led、藍芽、感測器等),至少需要硬體、驅動、驅動互動模組。至於系統的層面如何把系統庫加入自己的體系裡面去,就是作業系統自己的事了。這裡分析一下以背光調整為例android。
原始碼在這裡:
要調整背光,第一步是搜尋並載入驅動互動模組(乙個.so庫),然後開啟裝置。看一下這個函式:
view plain
void
opendevice()
方法中的hw_get_module函式來自libhardware庫,它會根據要載入的模組名字(這裡是乙個巨集定義lights_hardware_module_id,巨集定義的值是"backlight"),去搜尋lights.***.so,找到之後把這個.so載入到記憶體中,並把其中包含的模組資訊填充進hw_module_t結構體。
android中與感測器、led、gps、alsa、gralloc等硬體互動的.so庫都在/system/lib/hw目錄下面,搜尋是在這個目錄下面進行的。lights.***.so中的***一般代表板子的型號,依次取"ro.hardware","ro.product.board","ro.board.platform","ro.arch"這幾個系統屬性中的乙個。比如,在msm7k平台就是lights.msm7k.so。如果搜尋不到,最後就會嘗試載入lights.default.so。
模組載入完畢後,再知道乙個裝置名字,就可以開啟這個裝置了。具體開啟裝置的**是:
module->methods->open(module, light_id_backlight, &device);
這樣,得到device控制代碼之後,我們就可以操作這個裝置了。
android在應用層中調整背光時只需要乙個值,就是brightness,系統會把這個值轉化成乙個r、g、b值相同的顏色值。看下面的**:
view plain
void
setlight(
intbrightness)
最後,把這個顏色值寫入驅動:
view plain
void
setlight(
intcolorargb,
intflashmode,
intonms,
intoffms,
intbrightnessmode)
至於set_light方法,可以看一下/hardware/msm7k/liblights/lights.c中的set_light_backlight方法,這個方法就是把乙個顏色值寫進了檔案/sys/class/leds/lcd-backlight/brightness。乙個簡單的字元裝置。
背光和對比度調整
背光和對比度調整都可通過pwm調整,以1602為例 引腳說明 1602字元型lcd通常有14條引腳線或16條引腳線的lcd,多出來的2條線是背光電源線 vcc 15腳 和地線gnd 16腳 其控制原理與14腳的lcd完全一樣,其中 引腳符號 功能說明 vss一般接地 vdd接電源 5v v0液晶顯示...
Oracle的hints調整機制介紹
oracle使用的hints調整機制一直很複雜,oracle technical network對使用hints調整oracle sql的過程有很好的全面評述。根據對10g資料庫的介紹,可使用更多新的optimizer hints來控制優化行為。現在讓我們迅速了解一下這些強大的新hints spre...
Oracle使用的hints調整機制
10g資料庫介紹 可以使用更多新的optimizer hints來控制優化行為。現在讓我們快速解析一下這些強大的新hints spread min analysis 使用這一hint,你可以忽略一些關於如詳細的關係依賴圖分析等電子 的編譯時間優化規則。其他的一些優化,如建立過濾以有選擇性的定位電子 ...