這禮拜的實在很~!@#$%^&*()_+
莫名奇妙的就在公司渡過兩個夜晚.
假日也莫名奇妙的出現在公司.
還被嫌做不好...真無言.
雖然也和上級反應過, 但, 為了種種的理由...我想我也只能對主管發發牢騷...然後還是承受下來吧.
但, 在開會的過程中, 情緒和情緒化的字眼發洩過後, 自己坐下冷靜反省, 自己也確實有做錯的地方.
可是, 最近的工作模式好像在幾個月前也曾出現過, 當時的狀況實在很糟糕. 現在又有同樣的感覺.
不過, 還是把自己的心情收拾整理一下, 把自己的事做好.
其他的事就交給該負起責任的人吧.
星期二, 8月 19, 2008
最近在工作上遇到了...
最近在工作上接觸到了許多新東西,像是MAC controller & PHY chip, NC-SI, SPI Flash.
Media Independent Interface(MII)是一種標準的介面用來將MAC controller和PHY chip連接在一起. [1]和[2]介紹了幾個MII的變種. 即然是標準的介面, 當然就有一些規範, 但最近遇到的PHY chips好像並沒有完全遵守規範在做. 使得driver在透過MII取得PHY chip status時, 必需針對使用的PHY chip做些調整, 真麻煩.
NC-SI[3]則沒有摸哪麼多, 只是知道在搞什麼鬼而已. 從功能面來講, 它可以用來設定MAC controller將特定MAC address的frame forward到特定的目的地, 當然也要MAC controller支援這種功能才行. 而這功能稱之為Sideband.
至於SPI Flash則是老掉牙了, 一句話帶過, 就是透過SPI存取Flash.
這些東西雖然簡單, 但是, 要讓driver能徹底發揮硬體特性的同時source code又俱有延展性和可讀性, 可真是需要一番功夫啊.
[1] Media Independent Interface
[2] MII (Media Independent Interface 介质无关接口)
[3] Network Controller Sideband Interface (NC-SI) Specification
Media Independent Interface(MII)是一種標準的介面用來將MAC controller和PHY chip連接在一起. [1]和[2]介紹了幾個MII的變種. 即然是標準的介面, 當然就有一些規範, 但最近遇到的PHY chips好像並沒有完全遵守規範在做. 使得driver在透過MII取得PHY chip status時, 必需針對使用的PHY chip做些調整, 真麻煩.
NC-SI[3]則沒有摸哪麼多, 只是知道在搞什麼鬼而已. 從功能面來講, 它可以用來設定MAC controller將特定MAC address的frame forward到特定的目的地, 當然也要MAC controller支援這種功能才行. 而這功能稱之為Sideband.
至於SPI Flash則是老掉牙了, 一句話帶過, 就是透過SPI存取Flash.
這些東西雖然簡單, 但是, 要讓driver能徹底發揮硬體特性的同時source code又俱有延展性和可讀性, 可真是需要一番功夫啊.
[1] Media Independent Interface
[2] MII (Media Independent Interface 介质无关接口)
[3] Network Controller Sideband Interface (NC-SI) Specification
星期日, 8月 17, 2008
Free Accounting Software | GnuCash
GnuCash是一個記帳軟體,用來記記帳,分析自己平常都把錢花在什麼地方我想是很足夠的.
不過,事實上,也是因為我的需要也就是記記帳,所以對GnuCash的認識也僅止於此.
GnuCash, http://www.gnucash.org/
不過,事實上,也是因為我的需要也就是記記帳,所以對GnuCash的認識也僅止於此.
GnuCash, http://www.gnucash.org/
星期五, 8月 01, 2008
java.awt.Toolkit.getLockingKeyState on Linux
最近終於突破一個SUN JVM在Linux下的限制. 雖然只是一件小事. 就是在Linux X Window的環境下取得鍵盤Caps Lock, Num Lock, Scroll Lock目前的狀態. 看起來很簡單的小事, 可是卻花了我很久的時間才知道要怎麼做.
首先講在MS Windows下的做法, 很簡單, 利用java.awt.Toolkit就可以簡單的做到.
public class KeyLockDemo {
public static void main(String[] args) {
java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit();
System.out.println("Caps Lock is " + (tk.getLockingKeyState(java.awt.event.KeyEvent.VK_CAPS_LOCK) ? "on" : "off"));
System.out.println("Num Lock is " + (tk.getLockingKeyState(java.awt.event.KeyEvent.VK_NUM_LOCK) ? "on" : "off"));
System.out.println("Scroll Lock is " + (tk.getLockingKeyState(java.awt.event.KeyEvent.VK_SCROLL_LOCK) ? "on" : "off"));
}
}
非常簡單...
但同樣的code在Linux下卻不行用, 因為SUN JVM在Linux下的java.awt.Toolkit沒有實作getLockingKeyState這個method, 因此會丟出UnsupportedOperationException.
哪怎麼辦呢? 其中一條路是利用JNI (我也只知道這條路).
首先引用我在網路上找到的資料, 在[1]中提到三個方法可以"控制小鍵盤及鍵盤燈狀態".
第一個方法是利用ioctl的方式存取stdin以獲得狀態, 最理想的方法, 但僅能在console的模式下使用, 即進入X Window後就不能用了.
第二個方法我個人沒試過, 但它是利用X11的函式庫實作.
第三個方法則是利用ioperm的方式直接操作鍵盤燈, 但仍無法取得locks目前的狀態. 附帶一提, 這個方法其實是下Keyboard Command達成控制LED的, 可以參考[2].
咦? 這樣不就又沒解了嗎? 是的, 所以, 我現在要講的是怎麼修改第一個方法使得在X Window下也能取得locks的狀態.
首先, 第一種方法是利用stdin這個file descriptor[3]來實作. 但在X Window下, stdin似乎被別的input device取代了, 所以對stdin做ioctl也無法取得狀態. 所以, 我們要自己open在console mode下的stdin (i.e., /dev/tty0 or /dev/tty1). Source code如下:
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/kd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#define NUMLOCK 0x02
#define CAPS 0X04
#define SCROLL 0X01
int main(int argc,char **argv) {
int fd = 0;
unsigned char leds = 0;
fd = open("/dev/tty1", O_RDONLY);
ioctl(fd, KDGETLED, &leds);
printf("Caps Lock is %s\n", (leds & CAPS ? "on" : "off"));
printf("Num Lock is %s\n", (leds & NUMLOCK ? "on" : "off"));
printf("Scroll Lock is %s\n", (leds & SCROLL ? "on" : "off"));
}
方法有了, 剩下就是自己在Java裡面寫個JNI method呼叫C的function把狀態取回來吧!!!
[1] 控制小鍵盤及鍵盤燈狀態, http://blog.csdn.net/cceczjxy/archive/2008/06/25/2584796.aspx
[2] Keyboard scancodes, http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html
[3] File descriptor, http://en.wikipedia.org/wiki/File_descriptor
首先講在MS Windows下的做法, 很簡單, 利用java.awt.Toolkit就可以簡單的做到.
public class KeyLockDemo {
public static void main(String[] args) {
java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit();
System.out.println("Caps Lock is " + (tk.getLockingKeyState(java.awt.event.KeyEvent.VK_CAPS_LOCK) ? "on" : "off"));
System.out.println("Num Lock is " + (tk.getLockingKeyState(java.awt.event.KeyEvent.VK_NUM_LOCK) ? "on" : "off"));
System.out.println("Scroll Lock is " + (tk.getLockingKeyState(java.awt.event.KeyEvent.VK_SCROLL_LOCK) ? "on" : "off"));
}
}
非常簡單...
但同樣的code在Linux下卻不行用, 因為SUN JVM在Linux下的java.awt.Toolkit沒有實作getLockingKeyState這個method, 因此會丟出UnsupportedOperationException.
哪怎麼辦呢? 其中一條路是利用JNI (我也只知道這條路).
首先引用我在網路上找到的資料, 在[1]中提到三個方法可以"控制小鍵盤及鍵盤燈狀態".
第一個方法是利用ioctl的方式存取stdin以獲得狀態, 最理想的方法, 但僅能在console的模式下使用, 即進入X Window後就不能用了.
第二個方法我個人沒試過, 但它是利用X11的函式庫實作.
第三個方法則是利用ioperm的方式直接操作鍵盤燈, 但仍無法取得locks目前的狀態. 附帶一提, 這個方法其實是下Keyboard Command達成控制LED的, 可以參考[2].
咦? 這樣不就又沒解了嗎? 是的, 所以, 我現在要講的是怎麼修改第一個方法使得在X Window下也能取得locks的狀態.
首先, 第一種方法是利用stdin這個file descriptor[3]來實作. 但在X Window下, stdin似乎被別的input device取代了, 所以對stdin做ioctl也無法取得狀態. 所以, 我們要自己open在console mode下的stdin (i.e., /dev/tty0 or /dev/tty1). Source code如下:
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/kd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#define NUMLOCK 0x02
#define CAPS 0X04
#define SCROLL 0X01
int main(int argc,char **argv) {
int fd = 0;
unsigned char leds = 0;
fd = open("/dev/tty1", O_RDONLY);
ioctl(fd, KDGETLED, &leds);
printf("Caps Lock is %s\n", (leds & CAPS ? "on" : "off"));
printf("Num Lock is %s\n", (leds & NUMLOCK ? "on" : "off"));
printf("Scroll Lock is %s\n", (leds & SCROLL ? "on" : "off"));
}
方法有了, 剩下就是自己在Java裡面寫個JNI method呼叫C的function把狀態取回來吧!!!
[1] 控制小鍵盤及鍵盤燈狀態, http://blog.csdn.net/cceczjxy/archive/2008/06/25/2584796.aspx
[2] Keyboard scancodes, http://www.win.tue.nl/~aeb/linux/kbd/scancodes.html
[3] File descriptor, http://en.wikipedia.org/wiki/File_descriptor
訂閱:
文章 (Atom)