【Mouse】USB Mouse Packet


【原理】

  • usb mouse/hid device透過 packet 回傳給 os,告訴OS它的動作。

【封包】

  1. 範例一: Logitech/M-UV83(046D:C016)
    按鍵按下去彈起來除了下面的封包還會有一個 00xN(個,N同收到的封包長度) 的封包,以下省略。
    非 HID 的作法,基本上封包長度為 4 個。
    * 左鍵 01 00 00 00
    * 右鍵 02 00 00 00
    * 中鍵 04 00 00 00
    * 上移 00 00 FF 00
    * 下移 00 00 01 00
    * 左移 00 FF 00 00
    * 右移 00 01 00 00
  2. 範例二: Razer/RZ01-005 Gaming Mouse(1532:0101)
    由於像上面這樣去解析封包太麻煩了(每一款滑鼠的封包可能都不一樣)。所以就不寫了,改採hid方式。
  3. HID方式: (TBD)

【參考】

  1. Linux上面的作法,透過input_report_key(還要再研究)
    http://lxr.linux.no/#linux+v2.6.32/drivers/hid/usbhid/usbmouse.c
    static void usb_mouse_irq(struct urb *urb)
    {
            struct usb_mouse *mouse = urb->context;
            signed char *data = mouse->data;
            struct input_dev *dev = mouse->dev;
            int status;
    
            switch (urb->status) {
            case 0:                 /* success */
                    break;
            case -ECONNRESET:       /* unlink */
            case -ENOENT:
            case -ESHUTDOWN:
                    return;
            /* -EPIPE:  should clear the halt */
            default:                /* error */
                    goto resubmit;
            }
    
            input_report_key(dev, BTN_LEFT,   data[0] & 0x01);
            input_report_key(dev, BTN_RIGHT,  data[0] & 0x02);
            input_report_key(dev, BTN_MIDDLE, data[0] & 0x04);
            input_report_key(dev, BTN_SIDE,   data[0] & 0x08);
            input_report_key(dev, BTN_EXTRA,  data[0] & 0x10);
    
            input_report_rel(dev, REL_X,     data[1]);
            input_report_rel(dev, REL_Y,     data[2]);
            input_report_rel(dev, REL_WHEEL, data[3]);
    
            input_sync(dev);
    resubmit:
            status = usb_submit_urb (urb, GFP_ATOMIC);
            if (status)
                    err ("can't resubmit intr, %s-%s/input0, status %d",
                                    mouse->usbdev->bus->bus_name,
                                    mouse->usbdev->devpath, status);
    }
  2. USB Monitor/Win7底下可用
    http://www.hhdsoftware.com/Products/home/usb-monitor.html 
  3. USB分析工具1 - SnoopyPro 和 usbmon(另一套usb 封包擷取軟體)
    http://top.ampbb.net/search/label/開發工具
     

【Enhanced CTorrent】Console Mode BT


【基本】

  • 有時候想抓bt 的東西,又不想灌有gui界面的 bt 軟體。
  • 這軟體用c++寫的,可以在Console底下跑。
  • CTorrent Control Server (CTCS)是這軟體的前端界面,是用Perl寫的。

【安裝】

  1. 直接用 apt-get 安裝
    $apt-get install ctorrent

【使用】

  1. 假設要抓Debian
    $wget http://cdimage.debian.org/debian-cd/5.0.4/i386/bt-cd/debian-504-i386-CD-1.iso.torrent
    $wget http://cdimage.debian.org/debian-cd/5.0.4/i386/bt-cd/debian-504-i386-CD-2.iso.torrent
    $ctorrent debian-504-i386-CD-1.iso.torrent &
    $ctorrent debian-504-i386-CD-2.iso.torrent &

【其他】

  1. BitTorrent C Library by ksmathers http://freshmeat.net/projects/libbt/
  2. qbittorrent 用 c++/qt/libtorrent-rasterbar 寫的。 http://qbittorrent.sourceforge.net/

【Debug】四位並口診斷卡


M05279603_sma 【目的】

嘗試當成Debug card(Port 80)來用。

【型號】

並口四位 ST-8669

【原理】

基本上就是往 378 丟資料。

【設備】

  • 主機板: ASUS P5KPL-C/1600。

【操作】

  1. 用DOS開機,打開debug/debug32。
  2. 範例,接連丟 11, 22, 33 到 Debug Card。
    C:\>debug32
    Debug32 – Version 1.0
    
    CPU = 686, Real Mode, Id/Step = 06FD, A20 disabled
    -o 378 11[Enter]
    -o 378 22[Enter]
    -o 378 33[Enter]
    -q [Enter]
    C:\>

【問題】

  • IBM X61 上面無法使用,是不是還要設定甚麼。
  • 硬體上面兩顆按鍵不知是要做甚麼的。

【參考】

【CMOS】RTC


【目的】

  • 顯示目前CMOS的時間。

【原理】

  • 此範例是跑Vista下用debug.exe。
  • debug.exe是跑在模擬模式,就是讀的只是一塊Vista模擬出來的區域,所以是只能讀不能寫。
  • 基本上是由 port 70下命令,port 71去收。

【操作】

  • 請直接參考下面參考連結。

【參考】

【Port 80】Port80 card


【目的】

  1. 使用除錯卡顯示數字。

【使用】

  1. 接好Port 80。
  2. 打開 debug32.exe,直接往Debug card丟 11。
  3. 範例1
    C:\>debug32
    - o 80 11
  4. 範例2
    C:\>debug32
    - a 100
    317D:0100 MOV DX,80
    317D:0103 MOV AL,11
    317D:0105 OUT DX,AL
    317D:0105 [Enter]
    
    -p (大概跑個3次)

【參考】

【Debug32】E820 memory probing


【原理】

  • 透過INT15/E820,讀取 Memory Map,一次讀 20 bytes。

【平台】

  • 主機板: ASUS P5KPL-C/1600。

【工具】

【使用】

  1. 範例一: 用Debug嘗試拿到 e820 的資料。
    C:\>debug32
    Debug32 - Version 1.0
    
    CPU = 686, Real Mode. Id/Step = 0FF2, A20 disable
    -a 100
    317D:0100 mov eax, 0000e820 ; eax = E820
    317D:0106 mov ecx, 14       ; ecx = 20, size of memory 
    317D:010C mov edx, 534d4150 ; edx = ASCII 'SMAP'
    317D:0112 mov di,  200
    317D:0115 int 15 [Enter]
    317D:0117 [Enter] 
    -p [Enter] (-p下個約5次)
    
    AX=4150 BX=0001 CX=0014 DX=4150 SP=0000 BP=0000 SI=0000 DI=0200
    DS=313C ES=313C SS=313C CS=313C IP=0117 NV UP DI PL NZ NA PO NC
    317D:0115 CD15          INT     15h
    Instruction Breakpoint
    
    -d 200 [Enter]
    317D:0200 00 00 00 00 00 00 00 00-00 FC 09 00 00 00 00 00
    317D:0210 01 00 00 00 93 01 83 C4-08 8D 46 F6 89 46 F0 8C
    上面結果為
    Offset Name Value
    00~03 BaseAddrLow 00000000
    04~07 BaseAddrHigh 00000000
    08~0B LengthLow 0009FC00
    0C~0F LengthHigh 00000000
    10~13 Type 00000001

    像上面的探測要一直跑到C Flag或其他條件成立,基本上Sanos那邊code照抄就好。

  2. 範例二: 用E820.EXE嘗試拿到 e820 的資料。
    C:\>e820 >> m
    C:\>type m
    BassLow  BaseHigh  SizeLow  SizeHigh  Type
    ------------------------------------------------------
    00000000 0000      0009FC00 0000    1 AddressRangeMemory(EfiLoaderCode)
    0009FC00 0000      00000400 0000    2 AddressRangeMemory(EfiLoaderData)
    000E4000 0000      0001C000 0000    2 AddressRangeMemory(EfiLoaderData)
    00100000 0000      3FE90000 0000    1 AddressRangeMemory(EfiLoaderCode)
    3FF90000 0000      0000E000 0000    3 AddressRangeMemory(EfiBootServiceCode)
    3FF9E000 0000      00032000 0000    4 AddressRangeMemory(EfiBootServiceData)
    3FFD0000 0000      0000E000 0000    2 AddressRangeMemory(EfiLoaderData)
    3FFE0000 0000      00020000 0000    2 AddressRangeMemory(EfiLoaderData)
    FEE00000 0000      00001000 0000    2 AddressRangeMemory(EfiLoaderData)
    FFF00000 0000      00100000 0000    2 AddressRangeMemory(EfiLoaderData)
    Dump Memory map v1.0.0 by Harrison Hsieh

【參考】

【備註】

  1. 好用的DOS下測試記憶體工具Memtest86+ http://www.memtest.org/

【問題】

  • 如何查看 Status Register?

【Opera】好用的Opera


【安裝】
【滑鼠手勢】
【發音】
  • 英語發音
【快速撥號】
  • 設定成加寬加大(5x4)為宜
【widgets】
  • BBC Radio Real
  • Google Translator
【參考】
  • http://jedi.org/blog/archives/005897.html 

【Shell】grep


grep如果要作recursive尋找還要下一堆參數太麻煩了,可以寫一個script,假設命名為 /usr/bin/grab

#!/bin/bash
{
 grep "$@" -rsi *
}

$@代表用所有的輸入的參數當條件,例如

$ grab “Any string you wanna grab”

就會跑出要查詢字串的結果。

【參考】

【Keyboard】Key Mapping


  1. KbcProcessKeyCode
  2. KbcPowerOffSystem
  3. WrapShowVersionHotKeyHandler

【參考】

【CrystalCPUID】查詢CPUID


【環境】

  1. Windows Vista。

【目的】

  1. 查詢 CPUID 資訊。

【步驟】

  1. 下載 CrystalCPUID http://crystalmark.info/software/index-e.html
  2. 執行 CrystalCPUID.exe
    image
  3. 其他資料請自行參考。

【Eclipse】Eclipse相關文章(tbd)


整理Eclipse相關文章

【Java】

【C/C++】

【其他】

  • 用Wine帶Editplus/SourceInsight(tbd)

【FastStone】FastStone Photo Resizer


這款軟體可以按照需求批次縮圖,有提供綠色版本。

【官網】

Faststone Photo Resizer http://www.faststone.org/

【使用】

以下為縮圖使用方式,只摘錄其中重要片段。

  1. 要設定圖片大小請先選取視窗右下方的 Use Advanced Options(Resize…) | Advanced Options
    image
  2. 選擇 In Percentage,再更改要縮放的大小。後選 OK ,返回主視窗。
    image
  3. 回到主視窗後,如果有需要指定輸出資料夾,請設定#1圖的 Output Folder
  4. 接下來按 Convert,就會輸出要轉檔的圖片到輸出資料夾。

【其它】

【雜記】一月份就像坐雲霄飛車


突然覺得日子過得好快,2010年已經過了一個月了。
覺得還是盡可能寫一下生活札記,以後才知道到底在忙甚麼。

P1040417 P1040418 image 
▲上禮拜老婆買的水仙今天開花了,放在客廳和房間,香氣濃厚且非常雅緻。

P1040414 【20100122 】看看九個月大的小Baby

早上起來先從我家這邊到板橋去載老婆她的朋友到好事多,他的朋友買了麵包和一些東西。中午先在老婆的朋友的朋友家開的麵店解決。是韓國人開的麵店,泡菜非常入味。傍晚載她朋友到五分埔換之前買的衣服。由於後來他朋友買的東西太多了,後來又幫他跑了一趟板橋載東西回去。而她到又到太原街換東西。

老婆的朋友是淡江中文班的同學,也是之前我們搬到新家第一個周末都會來住的客人。會去年十個月都由台南到台北上中文班,結果也順便在五分埔和太原街買到變成批客(就是買東西有批貨價)。真是灰熊厲害。

晚上回家順便去看老婆板橋三姑姑家看她兒子(我老婆要叫表哥)九個月大的小朋友。也在三姑姑家看完豬哥會社才回家。

由台北市民大道要上華江橋那段,陸橋上面路上的標示有點怪,開車要小心一點。

【20100123】之後幾天忘了在忙什了

【20100128】 幫老婆的同事整理MacBook

這天請假在家,老婆的同事帶了新買的macbook到我家整理,陸陸續續幫他灌了幾個軟體

  1. winebottler,用來搭配格式工廠作轉檔
  2. opera,好用的browser
  3. vlc,不過這部分字幕沒設定好,因為忘記怎麼設定了
  4. realplayer 看rm/rmvb的軟體

我覺得如果沒有很特別的需求,如果只是打報告上上網,一般用途的話,很建議買Mac,可以避免一堆煩人的病毒…的問題。如果還有需要用到Windows環境的軟體(ex.Office),用BootCamp/VMware再把Windows裝上去就好。尤其很多實用的工具Mac買機器都有送(剪輯軟體…),不用再特別去找了。家裡老婆那台iMac雖然等級不高,但剛好買在出清價,Ram加到4G,那時買33900。還算划得來。

【20100129】處理 Edid 的事

禮拜五晚上在公司忙到快11點才回家。原來多加外接螢幕讀的port要改變。

【20100130】禮拜六好像睡了一天

早上睡了一天,晚上又爬起來摸東摸西的,半夜才睡。

【20100131】老家寄了帝王柑上來

拿一些帝王柑去給老婆的三姑姑。原來堤頂大道一直開就可以上市民大道,不用從快到成美橋那邊的南京東路那邊轉上去。

回程去玉成公園那邊還同學電鑽,很幸運的找到一個停車位。離開成美橋又順路到好市多補貨。買了一瓶醬汁,用來配麵非常好吃。

【Shell】fdisk


【目的】

了解 Partition type

【方式】

使用 fdisk 自帶的 l 參數。

$ fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0002c4f9

所用裝置 Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        1494    12000523+  83  Linux
/dev/sda2            1495        1566      578340    5  延伸的
/dev/sda3            1567        2610     8385930   83  Linux
/dev/sda5            1495        1566      578308+  82  Linux swap / Solaris

【TurboC】Turbo C 2.0 安裝與使用


【下載】

  1. http://www.csie.ntu.edu.tw/~cprog2002/Reference/TC/tc.html
  2. or http://www.uv.tietgen.dk/staff/mlha/Download/dos/#Borland

【安裝】

  1. 打算在一個做好用 DOS 開機的拇指碟上使用。
  2. 所以解開下載的安裝檔,放到拇指碟。

【使用】

  1. 用拇指碟開機,進入 tc201 這目錄,打 tc
  2. 下載 http://my.execpc.com/~geezer/code/edid.c 程式編譯看看。
  3. 關於如何編譯,請參考網路其他資源。

【參考】

  1. Turbo C 3,0(need >win95) http://www.brothersoft.com/turbo-c-download-182798.html
  2. edid.c 可以抓取外接monitor,再研究看看如何作的。
 

Ed32. Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com