2012/01/31

擷取螢幕方便小軟體 PicPick

有時候鍵盤上的prtSrn會失效
這時候可以試看看 alt + prtSrn

如果還會失效
有可能有些檔案有防擷取功能

可以試看看PicPick

PicPick一個免費又好用的螢幕擷取軟體,它可以抓取全螢幕或是局部的畫面,而且操作也很簡單,還具備了一般最常用到的基本圖像處理功能。
軟體名稱:PicPick 3.0.7 免安裝版
軟體版本: 3.0.7
語言界面: 繁體中文
官方網頁:http://picpick.wiziple.net/
檔案下載:Download

2012/01/17

windows 8 : 兼具方塊磚與傳統介面

看到這台 lenovo未來概念機
結合平板與筆電的windows8系統
滿接近我會買的程度了

首先雖然 android已經有平板+鍵盤的概念
但是android本來就是設計給touch 手指滑動的介面
如果透過滑鼠或是實體鍵盤, 還是怪怪的
這是我個人觀感啦, 畢竟asus 變形平板還是賣得不錯, 但是我很少看到有人操作它的鍵盤呀….

轉頭看 windows 8
雖然只是介面多了metro的平板touch
也保留原本傳統介面
不知道是技術問題, 還是包袱太大無法甩開
但也是windows的價值- 使用者熟悉的操作介面

如果我買了這樣一台windows8 平板+鍵盤
最好是可拆式的
這樣我就可以外出的時候,
只需要帶著window8平板, 透過touch螢幕去控制
一回到家,
只需要把平板裝上實體鍵盤和滑鼠, 就變成一般筆電

當然CPU效能雖不用太好, 但是也不能太差
為什麼說不用太好, 因為之後就是雲端運算了
大多數的儲存裝置與運算都是上網就可以操作
為什麼說也不能太差,
因為雖然我不玩重度3D影像遊戲
但我也是會看影片, 玩玩基本的遊戲
所以CPU不可以太慢…

期待未來這樣的產品上市

http://chinese.engadget.com/2012/01/09/lenovos-ideapad-yoga-convertible-tablet-runs-windows-8-is-set/

2012/01/10

android 使用 linux LED driver 來控制GPIO 的LED行為

Linux Kernel’s LED driver
一般embedded system廠商控制LED都是透過GPIO的high/low操作
所以不會使用linux kernel內的預設LED功能, 而是自己寫獨立的driver
但是因為正統方式應該要配合Linux Kernel會比較有系統
kernel/drivers/leds


先到kernel作make menuconfig
將LED功能打開

+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO_PLATFORM=y
+CONFIG_LEDS_TRIGGERS=y


去kernel/driver/led底下
作出客製化的修改

Makefile

# LED Platform Drivers
+#++
+obj-y += leds-xxxx.o
+#–

從led-gpio.c 改寫成另一份檔案 led-xxxx.c

1: 可以改寫 led_dat->platform_gpio_blink_set = blink_set;
2: 改寫 gpio_led_work()
反正就是接到led的driver的API, 如led_on(), led_off()

Access介面node:

ledtrig-timer.c:78: static DEVICE_ATTR(delay_on, 0644, led_delay_on_show, led_delay_on_store);

順便提到, led-class: always implement blinking

在2010年時候, kernel/driver/leds
Johannes Berg 新增一個功能 led-class: always implement blinking
led-class: always implement blinking


Currently, blinking LEDs can be awkward because it is not guaranteed that
all LEDs implement blinking. The trigger that wants it to blink then
needs to implement its own timer solution.

Rather than require that, add led_blink_set() API that triggers can use.
This function will attempt to use hw blinking, but if that fails
implements a timer for it. To stop blinking again, brightness_set() also
needs to be wrapped into API that will stop the software blink.

As a result of this, the timer trigger becomes a very trivial one, and
hopefully we can finally see triggers using blinking as well because it’s
always easy to use.

Signed-off-by: Johannes Berg
Acked-by: Richard Purdie
Signed-off-by: Andrew Morton
Signed-off-by: Linus Torvalds

這是近年來 kernel/driver/leds 比較大的修改


如何注册gpio-led平台设备:
(如果是android系統, 應該是寫在 kernel/arch/arm/mach-tegra/board-xxxxx.c)

例子如下:
#define GPIO_LED3 138
#define GPIO_LED4 139

static struct gpio_led gpio_leds[] = {
{
.name = “led3”,
.default_trigger = “heartbeat”,
.gpio = GPIO_LED3,
.active_low = 1,
.default_state = LEDS_GPIO_DEFSTATE_OFF,
},
{
.name = “led4”,
.gpio = GPIO_LED4,
.active_low = 1,
.default_state = LEDS_GPIO_DEFSTATE_OFF,
},
};

static struct gpio_led_platform_data gpio_led_info = {
.leds = gpio_leds,
.num_leds = ARRAY_SIZE(gpio_leds),
};

static struct platform_device leds_gpio = {
.name = “leds-gpio”,
.id = -1,
.dev = {
.platform_data = &gpio_led_info,
},
};
最后调用platform_device_register(&leds_gpio)将LED设备注册到内核中。注册之前一定要保证编号为138和139的两个端口是可用的。
成功注册之后,系统中便会出现名为led3和led4的两个led_classdev了。由于是用gpio模拟led,所以对gpio-led设置的亮度,只要不是0就是全亮(gpio只有两个状态)。
对于可能睡眠的gpio,gpio-led会借助于工作队列去设置亮度,所以不用担心会被阻塞。


做完了以上的kernel部分
想要往上讓android系統可以控制光的話, 要使用android光系統

修改:
device/nvidia/common/liblights/lights.c 裡面的
open_lights() 和改寫 set_light_backlight()變成控制LED

修改:
frameworks/base/services/java/com/android/server/BatteryService.java 裡面的
updateLightsLocked()


參考:
led子系统
http://blog.csdn.net/yuanlulu/article/details/6438841

内核中led触发器实例
http://blog.csdn.net/yuanlulu/article/details/6438847

2012/01/04

Linux程式設計教學手冊 Beginning Linux Programming (第四版)


這本書的英文原文版在網路上可以下載 (自己google一下吧)

看了書本內容後
覺得這一本可以推薦給初學linux或是想更扎實linux基本功的人使用
不像一般的作業系統(OS)書本那樣理論, 這本書Linux程式設計教學手冊以linux作業系統的實例方式
讓讀者可以更快更精準的進入linux為平台的開發世界

據說原文版已經到第五版了 …

英文簡介:
introduce you to developing programs for Linux and other UIX-style operating systems. It discusses thoroughly all you need to be a good Linux programmer. The book. written by N Matthew and R Stones. encompasses a gamut of topics including both the basics of compiling programs. linking to libraries. terminal input and output. to more advanced topics like writing applications for the GNOME and KDE. data storing using MySQL, debugging etc. It tells you how to make the most of the standard Linux development tools and how to build graphical user interfaces for the X Windows system. The authors introduce appropriate programming theories for each topic with many practical examples and illustrations.
This is a good book for programmers and developers who want to enhance their skills in Linux to be able to create custom applications.

目錄:

第 一 章 Linux介紹
第 二 章 Shell程式設計
第 三 章 檔案處理
第 四 章 Linux的環境
第 五 章 終端機(terminal)
第 六 章 使用curses管理文字視窗
第 七 章 資料管理
第 八 章 MySQL
第 九 章 開發工具
第 十 章 除錯
第十一章 處理程序(process)和信號(signal)
第十二章 POSIX執行緒(thread)
第十三章 處理程序間的通訊:管線(pipe)
第十四章 號誌(semaphore)、共享記憶體(shared memory)、
第十五章 訊息佇列(message queue)
第十六章 網路程式設計:socket
第十七章 使用GTK+設計GNOME視窗程式
第十八章 使用QT設計KDE視窗程式
第十九章 標準化的Linux

博客來的書本介紹:

 基於前三版的成功經驗,第四版仍然延續教學的方式,一步步地引領讀者,讓讀者可以迅速在Linux和Unix相關的作業系統下開發程式。作者本身是相當有經驗的Linux程式設計員,所以讓此書可以涵蓋廣泛的主題,讓讀者暸解Linux的資源,讓讀者可以迅速開發程式。

  讀者將從基本的主題(編譯程式、聯結函式庫、處理終端機的輸出輸入),最後近入進階主題(設計GNOME和KDE的應用程式、使用MySQL儲存資料和除錯等)。在每個主題中,作者都會先介紹理論,隨即利用真實的程式範例,一步步的說明,引導讀者如何應用和實際開發程式。相信Linux的新鮮人也可以快速地開發出Linux的程式。

從本書您將學到什麼:

*使用標準的Linux C函式庫和其它工具。
*編譯標準的Linux開發工具。
*基本的系統呼叫(system calls)、檔案輸出與輸入、處理程序間通訊(interprocess communication)和shell設計。
*使用GTK+或Qt工具,設計圖形化的使用者介面。
*利用sockets,設計TCP/IP網路程式。
*設計相容於不同Linux發行版本的程式。

2012/01/03

nvidia 針對 I2C arbitration lost 提出作法 (android / tegra)

一種I2C會發生的issue, arbitration lost的中文可以稱作”仲裁損失”

若是發生這種狀態的話, 有一種workaround的方式處理, 就是將此I2C切換為GPIO 啟用/關閉後, I2C就變正常了

nvidia 也針對這個issue提出作法, 且以GPL授權發布在網路上

 

/* * arch/arm/mach-tegra/i2c_error_recovery.c * * Copyright (c) 2011, NVIDIA Corporation. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. */

 

arm: tegra: cardhu: Added I2C arbitration lost recovery mechanism

連結

Added the code for arbitration lost recovery mechanism for i2c
driver and Initialize gpio number for i2c clock and data as
part of platform data.

用 git cherry-pick 處理專案 push/pull request

A-B-C-D-E-F              (master)
………………….\
……………………G          (topic)

1: 先切出一個另外的branch (ex: topic)
2: 在這個branch (ex: topic)上做修改與撰寫程式碼
3: 在這個branch (ex: topic)上作: git add / git commit
4: 切回master 作: git cherry-pick xxxxxxxxxx / git push

 

 

 

git cherry-pick 321d76f # 只合併特定其中一個 commit。如果要合併多個,可以加上 -n 指令就不會先幫你 commit,這樣可以多 pick幾個要合併的 commit,最後再 git commit 即可。

2012/01/02

電子電路: VCC, VDD, VSS 定義與區分

在電子電路中,常可以看到VCC、VDD和VSS三種不同的符號,它們有什麼區別呢?

一、解釋

VCC:C=circuit 表示電路的意思, 即接入電路的電壓;

VDD:D=device 表示器件的意思, 即器件內部的工作電壓;

VSS:S=series 表示公共連接的意思,通常指電路公共接地端電壓。

二、說明

1、對於數字電路來說,VCC是電路的供電電壓,VDD是芯片的工作電壓(通常Vcc>Vdd),VSS是接地點。

2、有些IC既有VDD引腳又有VCC引腳,說明這種器件自身帶有電壓轉換功能。

3、在場效應管(或COMS器件)中,VDD為漏極,VSS為源極,VDD和VSS指的是元件引腳,而不表示供電電壓。