วันพุธที่ 28 มกราคม พ.ศ. 2552
เจ็บใจ Gimbal lock
นึกว่าจะสำเร็จเสร็จแล้วเชียว สวรรค์ล่มเพราะเจ้า Gimbal lock นี่เอง ต้องมานั่งรื้อใหม่หมด ถ้าทำแค่ Tilt Sensor ก็ไม่มีปัญหา แต่พอคิดถึงว่ามันจะกลายเป็นก้างชิ้นใหญ่ในอนาคต สู้ลงมือเปลี่ยนซะตอนนี้เลยดีกว่า เหนื่อยจริงๆกลับไปอ่านเลขอีกมากมาย...
วันจันทร์ที่ 12 มกราคม พ.ศ. 2552
พายเรือวนอยู่ในอ่าง kalman
หายไปนาน เอาเวลาไปทุ่มกับ imu ทั้งวันทั้งคืนมาร่วมสองเดือน ยังไปไม่ถึงไหนเท่าไรเลย เนื่องด้วยความยากและการต้องเคาะสนิมเลขออกมาใช้
ความยาก มันมาจากไหนเหรอ อย่างแรก จากความผิดพลาดของค่าที่อ่านได้จาก sensor แต่ละตัว อันนี้ก็ขึ้นอยู่กับความถูกแพงของ sensor ที่เราใช้ด้วย
1. accelerator ชื่อมันบอกว่าเป็นการวัดความเร่ง (dynamics) ก็ดีพอใช้ได้สำหรับค่าความเร่ง ในแนว xy ซึ่งสมมติว่าไม่มีแรง g เข้ามาเกี่ยวนะ แต่ที่เราอยากได้มันคือค่า position (ทำไมต้องเขียนเป็นภาษาอังกฤษด้วยนะ) ลองดุว่า ค่า a ที่เราได้จาก sensor จริงๆมันคือ
a_sensor = a_real + a_bias + a_noise
พอ integrate สองครั้งเพื่อให้ได้ค่า position ค่า bias และ noise จึงเข้ามามีผลอย่างมากมาย ถ้าเราไม่มีการวัดค่า position จริงๆ เข้ามาเป็น input ป้อนกลับ เพื่อไว้แก้ค่า error เพื่อใช้ในการทำนายค่าล่วงหน้าใน kalman filter มันก็ช่วยอะไรไม่ได้มาก ใช้วิธีการเขียนโปรแกรมธรรมดา ทำ low pass filter เอาก็พอแล้ว ที่ว่า พอแล้ว หมายถึงมันได้ดีที่สุดเท่านี้แหละ
ผลจากการที่มันสามารถวัดความเร่งได้ แน่นอนว่ามันต้อง sense แรง g (ที่เป็น bias ในสภาวะ dynamics) ได้ กลายเป็นประโยชน์เมื่อทำให้เราสามารถวัดมุมเอียงได้จากการแตกแรง g ในสภาวะ static เรียกว่ามันกลายเป็น tilt sensor ไป แป่ว
2. gyroscope เป็น sensor วัดความเร็วเชิงมุม อันนี้ง่ายขึ้นมาหน่อยเพราะ อินทิเกรตทีเดียว ก็ได้ ค่ามุมแล้ว เรียกว่าเราสามารถรู้ว่าเราหมุนไปกี่องศาในแต่ละแกนเมื่อเวลาผ่านไป เรียกว่าเรารู้ orientation ของตัวเราได้ ข้อเสียมันมี(ทำไมต้องมีด้วยนะ) มันสามารถวัดอย่างถูกต้องได้เพียงช่วงเวลาสั้นๆ หลังจากนั้นแล้วค่าที่วัดได้จะมี bias เรียกว่า drift จะต้องมีกระบวนการขจัดเจ้าสิ่งนี้ออกปาย
3. magnetometer เค้าเปรียบเทียบว่า ถ้าไม่มี ทิศทางก็เหมือนเราอยู่ในห้องมืด ค่าที่ได้จาก sensor ทั้งสองตัวข้างบน ไม่สามารถบอกได้ว่าเราอยู่ตรงไหน(อ้างอิงกับสิ่งหนึ่งสิ่งใดภายนอก) เจ้า sensor ตัวนี้มีดีตรงมัน sense สนามแม่เหล็กโลกได้ เหมือนเข็มทิศนั่นเอง ข้อเสียของมันก็คืออะไรที่มีคุณสมบัติแม่เหล็กมันก็ sense ได้ทั้งนั้น แปลว่ามันไม่ทนต่อสัญญาณรบกวนนั่นเอง แป่ว(อีกที)
เมื่อเอาเจ้าพวกนี้มายำรวมๆกันเรียกให่เท่ห์ว่า fusion ก็จะได้ sensor ที่บอกได้ทั้ง orientation และ positioning ถ้าใช้ร่วมกับ GPS ก็จะได้ localization ด้วย แต่มันก็ต้องมีศิลปะในการยำไม่ใช้น้อย
ประโยชน์ของมันนั้นมีมากหลาย ถ้ามันเวิร์คอะนะ ทั้งเรื่อง motion capture ที่ตัวผมเองสนใจ และนั่งหน้าดำคร่ำเครียดพัฒนาอยู่, uav (อากาศยานไร้คนขับ), camera match moving สำหรับทำ realtime video composite นี่เอาแค่หย่ายๆนะ
ความยาก มันมาจากไหนเหรอ อย่างแรก จากความผิดพลาดของค่าที่อ่านได้จาก sensor แต่ละตัว อันนี้ก็ขึ้นอยู่กับความถูกแพงของ sensor ที่เราใช้ด้วย
1. accelerator ชื่อมันบอกว่าเป็นการวัดความเร่ง (dynamics) ก็ดีพอใช้ได้สำหรับค่าความเร่ง ในแนว xy ซึ่งสมมติว่าไม่มีแรง g เข้ามาเกี่ยวนะ แต่ที่เราอยากได้มันคือค่า position (ทำไมต้องเขียนเป็นภาษาอังกฤษด้วยนะ) ลองดุว่า ค่า a ที่เราได้จาก sensor จริงๆมันคือ
a_sensor = a_real + a_bias + a_noise
พอ integrate สองครั้งเพื่อให้ได้ค่า position ค่า bias และ noise จึงเข้ามามีผลอย่างมากมาย ถ้าเราไม่มีการวัดค่า position จริงๆ เข้ามาเป็น input ป้อนกลับ เพื่อไว้แก้ค่า error เพื่อใช้ในการทำนายค่าล่วงหน้าใน kalman filter มันก็ช่วยอะไรไม่ได้มาก ใช้วิธีการเขียนโปรแกรมธรรมดา ทำ low pass filter เอาก็พอแล้ว ที่ว่า พอแล้ว หมายถึงมันได้ดีที่สุดเท่านี้แหละ
ผลจากการที่มันสามารถวัดความเร่งได้ แน่นอนว่ามันต้อง sense แรง g (ที่เป็น bias ในสภาวะ dynamics) ได้ กลายเป็นประโยชน์เมื่อทำให้เราสามารถวัดมุมเอียงได้จากการแตกแรง g ในสภาวะ static เรียกว่ามันกลายเป็น tilt sensor ไป แป่ว
2. gyroscope เป็น sensor วัดความเร็วเชิงมุม อันนี้ง่ายขึ้นมาหน่อยเพราะ อินทิเกรตทีเดียว ก็ได้ ค่ามุมแล้ว เรียกว่าเราสามารถรู้ว่าเราหมุนไปกี่องศาในแต่ละแกนเมื่อเวลาผ่านไป เรียกว่าเรารู้ orientation ของตัวเราได้ ข้อเสียมันมี(ทำไมต้องมีด้วยนะ) มันสามารถวัดอย่างถูกต้องได้เพียงช่วงเวลาสั้นๆ หลังจากนั้นแล้วค่าที่วัดได้จะมี bias เรียกว่า drift จะต้องมีกระบวนการขจัดเจ้าสิ่งนี้ออกปาย
3. magnetometer เค้าเปรียบเทียบว่า ถ้าไม่มี ทิศทางก็เหมือนเราอยู่ในห้องมืด ค่าที่ได้จาก sensor ทั้งสองตัวข้างบน ไม่สามารถบอกได้ว่าเราอยู่ตรงไหน(อ้างอิงกับสิ่งหนึ่งสิ่งใดภายนอก) เจ้า sensor ตัวนี้มีดีตรงมัน sense สนามแม่เหล็กโลกได้ เหมือนเข็มทิศนั่นเอง ข้อเสียของมันก็คืออะไรที่มีคุณสมบัติแม่เหล็กมันก็ sense ได้ทั้งนั้น แปลว่ามันไม่ทนต่อสัญญาณรบกวนนั่นเอง แป่ว(อีกที)
เมื่อเอาเจ้าพวกนี้มายำรวมๆกันเรียกให่เท่ห์ว่า fusion ก็จะได้ sensor ที่บอกได้ทั้ง orientation และ positioning ถ้าใช้ร่วมกับ GPS ก็จะได้ localization ด้วย แต่มันก็ต้องมีศิลปะในการยำไม่ใช้น้อย
ประโยชน์ของมันนั้นมีมากหลาย ถ้ามันเวิร์คอะนะ ทั้งเรื่อง motion capture ที่ตัวผมเองสนใจ และนั่งหน้าดำคร่ำเครียดพัฒนาอยู่, uav (อากาศยานไร้คนขับ), camera match moving สำหรับทำ realtime video composite นี่เอาแค่หย่ายๆนะ
วันอาทิตย์ที่ 16 พฤศจิกายน พ.ศ. 2551
windows driver development note # 4
วันนี้มาว่ากันที่ USB บ้าง ตัว device จะถูกเรียกว่า client และเครื่องคอมพิวเตอร์ของเราที่มี USB port จะเรียกว่า host
ตัว client มันก็จะรัน firmware สำหรับติดต่อพูดคุยกับ host และเพื่อบ่งบอกตัวเองว่าเป็นใคร (vendor id, product id, version id) ถูกคอนฟิกมาเพื่อติดต่อกับ host ในลักษณะใด โดยจะมีรูปแบบของคอนฟิกเป็นดังตัวอย่างข้างล่างนี้
configuration 1
packet คือ บล็อกของ data ทีส่งระหว่าง device กับ host ในหนึ่ง packet ประกอบด้วย synchronization signals, packet id (pid), data และ CRC check bytes
pid มี 10 ค่า แบ่งได้เป็น 4 ชนิด คือ
ชนิดของการ transfer หรือการทำ transaction นั้น มี 4 ชนิดด้วยกันคือ control, interrupt, bulk และ isochronous
ใน packet แบบ token นั้นจะมี address และ endpoint เพื่อบ่งชี้ device และ endpoint ที่ต้องการจะติดต่อด้วย
ตัว client มันก็จะรัน firmware สำหรับติดต่อพูดคุยกับ host และเพื่อบ่งบอกตัวเองว่าเป็นใคร (vendor id, product id, version id) ถูกคอนฟิกมาเพื่อติดต่อกับ host ในลักษณะใด โดยจะมีรูปแบบของคอนฟิกเป็นดังตัวอย่างข้างล่างนี้
configuration 1
- - interface 0
- - endpoint (หรือเรียกว่า pipe) 0 ชนิด interrupt ทิศทาง IN (from device to host)
- endpoint 1 ชนิด Bulk ทิศทาง OUT (from host to device)
- ...
- ... - - endpoint (หรือเรียกว่า pipe) 0 ชนิด interrupt ทิศทาง IN (from device to host)
packet คือ บล็อกของ data ทีส่งระหว่าง device กับ host ในหนึ่ง packet ประกอบด้วย synchronization signals, packet id (pid), data และ CRC check bytes
pid มี 10 ค่า แบ่งได้เป็น 4 ชนิด คือ
- token คือ OUT, IN , SETUP, SOF
data คือ DATA0, DATA1
handshake คือ ACK, NAK, STALL
special คือ PRE
ชนิดของการ transfer หรือการทำ transaction นั้น มี 4 ชนิดด้วยกันคือ control, interrupt, bulk และ isochronous
ใน packet แบบ token นั้นจะมี address และ endpoint เพื่อบ่งชี้ device และ endpoint ที่ต้องการจะติดต่อด้วย
วันพุธที่ 22 ตุลาคม พ.ศ. 2551
windows driver development note # 1
เป็นเพราะระบบดีไวซ์บนเมนบอร์ดนั้นเชื่อมต่อกันแบบต้นไม้หรือลูกโซ่ ดังนั้นระบบ driver หรือ software ที่ใช้ติดต่อกับดีไวซ์นั้นๆก็มีโครงสร้างเช่นเดียวกัน การทำงานตอบสนอง request จาก user mode ที่เป็น api เช่น read, write, open, close จะถูกเปลี่ยนมาเป็นรูปแบบของ message ที่วิ่งไปและกลับตามลำดับชั้นของ driver ใน kernel mode ที่เรียกว่า irp ซึ่ง irp จะประกอบไปด้วย header และ data structure ทีสัมพันธ์กับ driver แต่ละตัว เรียกว่า IO_STACK_LOCATION เมื่อ driver ทำงานก็จะทำการเปลี่ยนแปลงหรือเขียนข้อมูลลงในโครงสร้างข้อมูลที่ว่านี้
นอกจาก function driver ที่ติดต่อกับดีไวซ์จริงๆแล้ว ยังมี driver อีกชนิดหนึ่งชื่อ filter driver มันมีความสามารถในการเปลี่ยนแปลงแก้ไขข้อมูลที่ได้จากการทำงานของ function driver โดยการที่เรา install มันเอาไว้ใน chain ก่อนหรือหลัง function driver เพื่อประโยชน์บางอย่าง เช่น ทำการ encrypt ข้อมูลก่อนจะส่งกลับขึ้นไปให้ user mode
ขี้เกียจเขียนรูปอะ จะเอาของเขามาแปะ ก็กลัวโดนเรื่อง ลิขสิทธิ์อะ
นอกจาก function driver ที่ติดต่อกับดีไวซ์จริงๆแล้ว ยังมี driver อีกชนิดหนึ่งชื่อ filter driver มันมีความสามารถในการเปลี่ยนแปลงแก้ไขข้อมูลที่ได้จากการทำงานของ function driver โดยการที่เรา install มันเอาไว้ใน chain ก่อนหรือหลัง function driver เพื่อประโยชน์บางอย่าง เช่น ทำการ encrypt ข้อมูลก่อนจะส่งกลับขึ้นไปให้ user mode
ขี้เกียจเขียนรูปอะ จะเอาของเขามาแปะ ก็กลัวโดนเรื่อง ลิขสิทธิ์อะ
วันศุกร์ที่ 3 ตุลาคม พ.ศ. 2551
มาสร้าง driver กันเหอะ
ความเดิมจากตอนที่แล้ว พอจะเริ่มเขียนตอนต่อไป ความขี้เกียจเข้าครอบงำทันที จึงเปลี่ยนวิธีการ น่าจะดีกว่า ตั้งธงเอาไว้ว่า อยากจะทำ driver อะไร แล้วค่อยๆทำไป step by step แล้วก็มาเล่าให้ฟังไปด้วย น่าจะเวอร์คกว่า
แต่ เอ ทำอะไรดีละ...
เอางี้ดีกว่า เรามาศึกษา USB driver กันดีกว่า ทำ hard lock เล่นๆดู โดยการใช้ flash drive ด้วยการ encrpyt ไฟล์ที่ใส่ serial number ไว้ แล้วให้โปรแกรมที่เราต้องการ protect อ่านออกมาตรวจสอบถ้า decrypt ได้ถูกต้องก็รันโปรแกรมต่อไป ถ้าไม่ถูกหรือหาไฟล์บน flash drive นั้นไม่เจอ ก็รันโปรแกรมไม่ได้
ท่าจะยาก เหมือนกันแฮะ เอาน่ะ ค่อยๆว่ากันไปทีละเรื่องละกันนะ
แต่ เอ ทำอะไรดีละ...
เอางี้ดีกว่า เรามาศึกษา USB driver กันดีกว่า ทำ hard lock เล่นๆดู โดยการใช้ flash drive ด้วยการ encrpyt ไฟล์ที่ใส่ serial number ไว้ แล้วให้โปรแกรมที่เราต้องการ protect อ่านออกมาตรวจสอบถ้า decrypt ได้ถูกต้องก็รันโปรแกรมต่อไป ถ้าไม่ถูกหรือหาไฟล์บน flash drive นั้นไม่เจอ ก็รันโปรแกรมไม่ได้
ท่าจะยาก เหมือนกันแฮะ เอาน่ะ ค่อยๆว่ากันไปทีละเรื่องละกันนะ
วันอาทิตย์ที่ 28 กันยายน พ.ศ. 2551
ATI - ตัดใจไม่ลง
อัพเดตล่าสุด กลับมาใช้ ati อีกแล้วอะ ด้วยความตะขดตะขวงใจ และตามประสาชอบมวยรอง ตอนนี้ fglrx รองรับ tvtime แล้วนะ มีคำสั่งที่สามารถมอนิเตอร์ดูคล็อก ดูอุณหภูมิของ GPU ได้ ก็ดีสำหรับงานภาคสนามนะ
ส่วนที่ไม่เข้าใจ และยังไม่รองรับ นั่นก็คือ pbo - pixel buffer object ก็ไม่รู้ว่าทำไมมันไม่ยอมทำสักที แต่ถึงกระนั้นก็เหอะ ข้อดีที่ทำให้ยอมรับมันได้กับการใช้ 4850 นะก็คือ กิน cpu น้อยลงมาก แถมการไม่ใช้ pbo ก็ให้ผลลัพธ์ที่ดี ยอมรับได้อีกด้วย อีกอย่างการรันโปรแกรมก็ไม่เกิดแครชเลย ทั้งทั้งที่บน nvidia นั้น 50-50 เลยแหละ
ไอ้ผมละเป็นงง
ส่วนที่ไม่เข้าใจ และยังไม่รองรับ นั่นก็คือ pbo - pixel buffer object ก็ไม่รู้ว่าทำไมมันไม่ยอมทำสักที แต่ถึงกระนั้นก็เหอะ ข้อดีที่ทำให้ยอมรับมันได้กับการใช้ 4850 นะก็คือ กิน cpu น้อยลงมาก แถมการไม่ใช้ pbo ก็ให้ผลลัพธ์ที่ดี ยอมรับได้อีกด้วย อีกอย่างการรันโปรแกรมก็ไม่เกิดแครชเลย ทั้งทั้งที่บน nvidia นั้น 50-50 เลยแหละ
ไอ้ผมละเป็นงง
วันศุกร์ที่ 1 สิงหาคม พ.ศ. 2551
WDF Part 0
ห่างหายไปนาน มาคราวนี้ย้ายฝั่งกลับมา Windows บ้าง แต่จะกลับมาทั้งทีต้องมีอะไรเด็ดๆมาว่ากันยาวๆหน่อย น่าจะสนุกแน่ เพราะมีครบทั้ง hardware และ document มาให้ติดตามและทดลองกันให้เห็นจะจะ ไหนๆก็ซื้อมาดองไว้นานได้ที่และ
อันนี้เนี่ย เมื่อก่อนเนี้ยเป็นความใฝ่ฝันอันหนึ่งเลย แต่ด้วยเหตุว่ามันทำเงินให้ไม่ได้ และงานด้านนี้ก็โคตรหายากในเมืองไทย(ก็ต้องกิน ต้องใช้อะนะ) และจะศึกษามันก็ไม่ใช่เรื่องง่ายๆ ก็เลยพักไว้ก่อนแต่ก็ยังคงติดตามข่าวคราวอยู่สม่ำเสมอ เนื่องด้วยได้รับ magazine ชื่อ The NT insider อยู่เป็นประจำ(ฟรีอีกต่างหาก)มาหลายปีแล้ว ส่งตรงมาจาก OSR.com ก็ขอบคุณงามๆไว้ ณ ที่นี้ด้วย ในความกรุณา developer ไทยจนๆคนหนึ่ง กระทั่งทนหน้าด้านรับเค้าฟรีๆต่อไปไม่ไหว ก็เลยช่วยอุดหนุนโดยการซื้อ บอร์ดทดลองเพื่อการพัฒนาสิ่งที่กำลังจะพูดถึงต่อไปนี้
เกริ่นมาตั้งนานแล้ว บอกก็ได้ว่า สิ่งที่จะเขียนต่อไปในซีรี่ย์นี้ก็เรื่อง การพัฒนา driver ด้วย Windows Driver Foundation (WDF) ก็รู้อะนะว่าคงมีคนสนใจน้อยมากหรือไม่มีเลย แต่ถ้าไม่เขียนไว้ มันก็คงไม่มีต่อไป ก็หวังว่าสักวันมันคงทำให้ใครสักคนที่สนใจเริ่มต้นพัฒนาซอฟแวร์ชนิดนี้ได้ง่ายขึ้น ก็ถือเป็นการสืบทอดเจตนารมย์ของ OSR ต่อมาละกัน
เข้าเรื่องนิดหน่อยเลยดีกว่า พอเข้ายุค windows98, Windows2000 เรื่อยมาเนี่ย สถาปัตยกรรมของวินโดวส์ก็เปลี่ยนไปจากเดิมมาก การเขียนโปรแกรมเพื่อติดต่อกับอุปกรณ์ภายนอกนั้นต้องทำผ่านไดรเวอร์เป็นหลัก ดูง่ายๆเลยก็เช่น ปรินเตอร์ หรือ การ์ดจอ การ์ดเสียง หรืออุปกรณ์ที่ต่อภายนอกอื่นๆผ่านทางพอร์ตต่างๆ เข่น USB ก่อนใช้งานเราต้องลงไดรเวอร์ เพื่อให้วินโดวส์รู้จักเสียก่อนจึงจะสามารถใข้งานได้อย่างเต็มที่
ที่นี้ถ้าเราอยากสร้างดีไวซ์ขึ้นมาสักตัวหนึ่งเพื่อขายหรือใช้เองและต้องมีการติดต่อกับคอมพิวเตอร์เพื่อรับส่งคำสั่งและข้อมูลระหว่างกัน ทั้งสองฝั่งก็ต้องรู้จักกัน คุยกันรู้เรื่องได้ตลอดรอดฝั่ง มันก็ต้องมีวิธีการน่ะ ทางด้านตัววินโดวส์เองก็ต้องทำตัวเป็นตัวกลางเพื่อให้โปรแกรมที่เราใช้สามารถติดต่อสื่อสารไปถึงอุปกรณ์ที่ต่ออยู่ได้ ด้วยเหตุนี้เองการพัฒนาไดรเวอร์จึงเป็นสิ่งจำเป็นและดูเป็นศาตร์ด้านมืด(แปดด้าน) เนื่องจากต้องรู้การทำงานของเคอร์เนลของวินโดวส์และอาจจะต้องรู้การเขียนโปรแกรมบนอุปกรณ์นั้นควบคู่ไปด้วย ถ้าไม่มีใครช่วยทำให้อะนะ
เมื่อก่อนเคยพยายามศึกษามันหลายทีแล้ว แต่ไปไม่ถึงไหนสักทีด้วยเหตุผลที่บอกๆไปข้างต้น แต่มาบัดนี้ ด้วย WDF จะทำให้งานของเราง่ายขึ้น รึเปล่า? ก็ลองติดตามกันต่อๆไปละกัน วันนี้เมื่อยแล้ว พอแค่นี้ก่อน
อันนี้เนี่ย เมื่อก่อนเนี้ยเป็นความใฝ่ฝันอันหนึ่งเลย แต่ด้วยเหตุว่ามันทำเงินให้ไม่ได้ และงานด้านนี้ก็โคตรหายากในเมืองไทย(ก็ต้องกิน ต้องใช้อะนะ) และจะศึกษามันก็ไม่ใช่เรื่องง่ายๆ ก็เลยพักไว้ก่อนแต่ก็ยังคงติดตามข่าวคราวอยู่สม่ำเสมอ เนื่องด้วยได้รับ magazine ชื่อ The NT insider อยู่เป็นประจำ(ฟรีอีกต่างหาก)มาหลายปีแล้ว ส่งตรงมาจาก OSR.com ก็ขอบคุณงามๆไว้ ณ ที่นี้ด้วย ในความกรุณา developer ไทยจนๆคนหนึ่ง กระทั่งทนหน้าด้านรับเค้าฟรีๆต่อไปไม่ไหว ก็เลยช่วยอุดหนุนโดยการซื้อ บอร์ดทดลองเพื่อการพัฒนาสิ่งที่กำลังจะพูดถึงต่อไปนี้
เกริ่นมาตั้งนานแล้ว บอกก็ได้ว่า สิ่งที่จะเขียนต่อไปในซีรี่ย์นี้ก็เรื่อง การพัฒนา driver ด้วย Windows Driver Foundation (WDF) ก็รู้อะนะว่าคงมีคนสนใจน้อยมากหรือไม่มีเลย แต่ถ้าไม่เขียนไว้ มันก็คงไม่มีต่อไป ก็หวังว่าสักวันมันคงทำให้ใครสักคนที่สนใจเริ่มต้นพัฒนาซอฟแวร์ชนิดนี้ได้ง่ายขึ้น ก็ถือเป็นการสืบทอดเจตนารมย์ของ OSR ต่อมาละกัน
เข้าเรื่องนิดหน่อยเลยดีกว่า พอเข้ายุค windows98, Windows2000 เรื่อยมาเนี่ย สถาปัตยกรรมของวินโดวส์ก็เปลี่ยนไปจากเดิมมาก การเขียนโปรแกรมเพื่อติดต่อกับอุปกรณ์ภายนอกนั้นต้องทำผ่านไดรเวอร์เป็นหลัก ดูง่ายๆเลยก็เช่น ปรินเตอร์ หรือ การ์ดจอ การ์ดเสียง หรืออุปกรณ์ที่ต่อภายนอกอื่นๆผ่านทางพอร์ตต่างๆ เข่น USB ก่อนใช้งานเราต้องลงไดรเวอร์ เพื่อให้วินโดวส์รู้จักเสียก่อนจึงจะสามารถใข้งานได้อย่างเต็มที่
ที่นี้ถ้าเราอยากสร้างดีไวซ์ขึ้นมาสักตัวหนึ่งเพื่อขายหรือใช้เองและต้องมีการติดต่อกับคอมพิวเตอร์เพื่อรับส่งคำสั่งและข้อมูลระหว่างกัน ทั้งสองฝั่งก็ต้องรู้จักกัน คุยกันรู้เรื่องได้ตลอดรอดฝั่ง มันก็ต้องมีวิธีการน่ะ ทางด้านตัววินโดวส์เองก็ต้องทำตัวเป็นตัวกลางเพื่อให้โปรแกรมที่เราใช้สามารถติดต่อสื่อสารไปถึงอุปกรณ์ที่ต่ออยู่ได้ ด้วยเหตุนี้เองการพัฒนาไดรเวอร์จึงเป็นสิ่งจำเป็นและดูเป็นศาตร์ด้านมืด(แปดด้าน) เนื่องจากต้องรู้การทำงานของเคอร์เนลของวินโดวส์และอาจจะต้องรู้การเขียนโปรแกรมบนอุปกรณ์นั้นควบคู่ไปด้วย ถ้าไม่มีใครช่วยทำให้อะนะ
เมื่อก่อนเคยพยายามศึกษามันหลายทีแล้ว แต่ไปไม่ถึงไหนสักทีด้วยเหตุผลที่บอกๆไปข้างต้น แต่มาบัดนี้ ด้วย WDF จะทำให้งานของเราง่ายขึ้น รึเปล่า? ก็ลองติดตามกันต่อๆไปละกัน วันนี้เมื่อยแล้ว พอแค่นี้ก่อน
สมัครสมาชิก:
บทความ (Atom)