บังเอิญว่าที่สำนักงานมีปัญหาเรื่องระบบเครือข่ายพอสมควรทั้งระบบสายและระบบไร้สาย หลายท่านได้แก้ปัญหาโดยการใช้ USB Modem ไม่ว่าจะเป็น Edge หรือ 3G แต่เคราะห์ซ้ำกรรมซัดที่สำนักงานมีนโยบายให้ใช้ Suriyan ทั้งสำนักงาน ทำให้เจ้า Edge Modem ที่ซื้อมาใช้งานไม่ได้ :P งานก็เข้ามาที่ผมอย่างรวดเร็วในฐานะสมาชิกพรรคมารตะวันจันทรา ก่อนจะกล่าวถึงวิธีการแก้ปัญหาของเจ้าตัวขาว ขอเล่าให้ฟังเรื่องการออกแบบ USB Edge/3G Modem สมัยใหม่กันก่อน ทุกวันนี้คงปฏิเสธกันไม่ได้ว่าอุปกรณ์ USB เป็นที่นิยมมากตั้งแต่ Wireless, GPRS/Edge/CDMA/3G Modem แต่ปัญหาที่ทุกคนเป็นเหมือนกันหมด คือ ลืมไดร์เวอร์ทุกที ถ้าเป็น Wireless หรือ GPRS/Edge/CDMA/3G Modem ด้วยแล้วก็ลำบากล่ะครับ เพราะรุ่นใหม่ๆ ออกมาเกือบทุก 3 เดือน เอาเป็นว่าการแก้ปัญหานี้ทำง่ายนิดเดียว ก็โยนแผ่นไดเวอร์ทิ้งไปซะ ~ เย้ยยยยย ไม่ใช่ครับ

ทางผู้ผลิตเขาก็ผลิตอุปกรณ์เหล่านี้ออกมาพร้อมกับคุณสมบัติที่เป็น Storage ในตัว อืม…บางคนอาจจะเคยซื้อ Edge/3G USB Modem ที่ใส่ SD Mini เข้าไปใช้เป็น Thumb Drive ได้ในตัว ซึ่งเป็นเทคโนโลยีแบบนี้เป็นการกันลืมในรุ่นแรกๆ อ้อกันไวรัสไม่ได้ล่ะ เผลอลบไฟล์ทิ้งก็จบกัน ถ้าจะให้ทันสมัยต้องเป็น Storage ในตัว จิ้มลงเครื่องปุ๊บเห็นเป็น CD ROM/Storage แบบเขียนลงไปไม่ได้ทันที เท่ห์มั๊ย เป็นจุดขายที่ดีต่างหาก ไม่ต้องกลัวลืมไดร์เวอร์ ไม่ต้องกลัวติดไวรัส ไม่ต้องกลัวไดร์เวอร์หาย ซึ่งการออกแบบอุปกรณ์ให้ทำงานได้หลายอย่างแบบนี้นี่ดูเหมือนจะดีถ้ามองในแง่ผู้ใช้ แต่การเชื่อมต่อผ่าน Modem ยังต้องใช้โปรแกรมที่มากับตัวเครื่อง เพื่อให้เลือกโหมดการทำงานของ Modem แทนที่จะเป็นโหมด USB Mass Storage :)

สรุปการทำงานของเจ้าตัวขาวมันก็จะทำงานแบบนี้ครับ เสียบเข้าเครื่องเห็นเป็น USB Mass Storage มองเป็น CD ROM ติดไดร์เวอร์ติดโปรแกรม ใช้โปรแกรมที่ติดตั้งแล้วเชื่อมต่อ Modem การทำงานของเจ้าตัวขาวง่ายมั๊ยครับ ถ้าเล่นตัวขาวบน M$ Windows นะ แต่บน Linux มันไม่ง่ายอย่างนั้นนะสิครับ ยิ่งเป็น Suriyan ระบบปฏิบัติการลอกคราบ Ubuntu แบบ home-made ก็เป็นปัญหาเช่นกัน คือ จิ้มไปแล้วเห็นเป็น CD ROM เฉยๆ ทำอะไรไม่ได้ซะงั้น ;P งานก็เลยเข้าไงครับ เอ้าใครอยากดูหน้าของเจ้า USB Edge Modem ที่ว่านี้ ก็หน้าตาขาวเนียนเช่นนี้ล่ะครับ

เจ้าขาว

มาหาวิธีแก้ไขกัน เรื่องของเรื่องคือทำยังไงก็ได้ให้เปลี่ยนโหมดการทำงานของอุปกรณ์นี้ให้ได้ นั่นแหละคือคำตอบ ช่วยได้มั๊ยเนี่ย วิธีการง่ายๆ คือใช้เครื่องมือเล็กๆ อย่าง usb-modeswitch เจ้าโปรแกรมนี้สามารถเปลี่ยนโหมดการทำงานของเจ้าขาวได้ เปลี่ยนแบบ flip-flop เลยล่ะ แต่เราต้องเขาใจว่าเจ้าขาวมีโหมดอะไรให้เล่นบ้าง และถ้าจะเปลี่ยนโหมดจะใช้ค่าตัวเลขโหมดอะไรถึงจะบอกว่าเป็น Modem ให้ลองนึกภาพคำสั่ง lsusb เราก็จะได้ค่าของเจ้าขาวมาเป็นแบบนี้

# lsusb
Bus 002 Device 012: ID 0471:1237 Philips TalkTalk SNU5630NS/05 Wireless Adapter
...

ดูเลขอุปกรณ์แล้วไม่ต้องงงครับ ID 0471:1237 Philips TalkTalk SNU5630NS/05 Wireless Adapter นี่มัน Modem หรือ Wireless กันแน่! เรื่องของเรื่องคือบริษัทผลิตชิปคือ NXP Semiconductors ออกแบบชิปที่ใช้สลับโหมดให้กับหลายยี่ห้อ ซึ่งคาดว่าตัวแรกที่ทำน่าจะเป็น USB Wireless เดาเอาน่ะครับ ถ้าไม่แน่ใจเอาฆ้อนมาทุบเจ้าขาวดูครับ ;) เอ้าวิธีตรวจภายในเจ้าขาวทำได้ง่ายๆ โดยใช้คำสั่งนี้

# lsusb -v -d 0471:1237

ก็จะได้ผลลัพท์ยาวๆ หลายหน้า ถ้างงดูแค่ 2 จุดก่อนเพื่อให้รู้ว่าเจ้าขาวทำอะไรได้บ้าง คือ iInterface ครับ ซึ่งเจ้าขาวมี Interface เป็น

iInterface 4 Mass Storage Device
iInterface 5 WMC USB Modem
iInterface 6 WMC Modem bulk data

อ่ะไม่ต้องสงสัยละ เจ้าขาวเป็น WMC USB Modem ได้ และ Mass Storage ได้ ถัดมาที่ต้องดูคือ เจ้าขาวมีเลขโหมดอะไรบ้าง ให้ดูค่า bConfigurationValue ครับ และเจ้าขาวมีค่า bConfigurationValue แบบนี้

bConfigurationValue 1
bConfigurationValue 2

คือมี 2 โหมด ใช้เลข 1 และ 2 เป็นตัวกำกับนั่นเอง เอาล่ะ เข้าเรื่องวิธีการสลับโหมดกันเลยดีกว่า วิธีการก็ใช้ usb-modeswitch นั่นแหละครับ ให้ติดตั้ง แพคเกจที่ชื่อ usb-modeswitch ถ้าใน Suriyan ก็รุ่นเก่าหน่อย แต่พอใช้ได้ครับ

# apt-get install usb-modeswitch

จากนั้นให้ตั้งค่าอุปกรณ์เพื่อสลับโหมด อันนี้ยากสักหน่อยเพราะมีชิบแบบนี้ที่ NXP Semiconductors ผลิตและหลายโรงงานในจีนเอาไปประกอบทำเป็นอุปกรณ์แบบนี้ ซึ่งมี 2 ยี่ห้อด้วยกันคือ Philips TalkTalk (NXP Semiconductors “Dragonfly”) และ HuaXing E600 (NXP Semiconductors “Dragonfly”) แต่เท่าที่เดาได้ง่ายๆ เจ้าขาวเป็นชิปยี่ห้อ Philips ครับ (เหมาเอาเองละกัน) ดังนั้นเราจะต้องตั้งค่าคอนฟิกให้ usb-modeswitch ดังนี้

########################################################
# Philips TalkTalk (NXP Semiconductors "Dragonfly")
#
DefaultVendor= 0x0471
DefaultProduct= 0x1237

TargetVendor= 0x0471
TargetProduct= 0x1234

MessageContent="5553424312345678000000000000061b000000030000000000000000000000"

Configuration=2

ใส่ข้อมูลข้างบนลงในไฟล์ /etc/usb_modeswitch.conf ครับ ก่อน switch mode ดู dmsg กันก่อน หน้าตาจะเป็นแบบนี้

# dmesg | tail -n 12

จะได้ผลลัพท์แบบนี้

[ 7060.024279] usb 2-1.4: new full speed USB device using ehci_hcd and address 12
[ 7060.225084] usb 2-1.4: configuration #1 chosen from 2 choices
[ 7060.231885] scsi10 : SCSI emulation for USB Mass Storage devices
[ 7060.232228] usb-storage: device found at 12
[ 7060.232233] usb-storage: waiting for device to settle before scanning
[ 7065.233736] usb-storage: device scan complete
[ 7065.234454] scsi 10:0:0:0: CD-ROM Philips Dev. 0 LUN 0 1.0 PQ: 0 ANSI: 0
[ 7065.243250] sr1: scsi-1 drive
[ 7065.243498] sr 10:0:0:0: Attached scsi CD-ROM sr1
[ 7065.243642] sr 10:0:0:0: Attached scsi generic sg2 type 5
[ 7065.851281] ISO 9660 Extensions: Microsoft Joliet Level 3
[ 7065.854289] ISOFS: changing to secondary root

จาก dmesg ข้างบนรู้ว่าตอนนี้เจาขาวเป็น Mass Storage แบบ CD-ROM ผูกไว้ที่ /dev/sr1 เอ้า switch mode เจ้าขาวกัน โดยใช้คำสั่ง

# usb_modeswitch

จะได้ผลลัพท์แบบนี้

* usb_modeswitch: tool for controlling "flip flop" mode USB devices
* Version 1.0.2 (C) Josua Dietze 2009
* Works with libusb 0.1.12 and probably other versions

Looking for target devices ...
No devices in target mode or class found
Looking for default devices ...
Found default devices (1)
Accessing device 012 on bus 002 ...
Using endpoints 0x03 (out) and 0x83 (in)
Not a storage device, skipping SCSI inquiry

Device description data (identification)
-------------------------
Manufacturer: NXP Semiconductors
Product: Reference Design Dragonfly Platform
Serial No.: 000000-00-0000000
-------------------------
Looking for active driver ...
OK, driver found ("usb-storage")
OK, driver "usb-storage" detached
Setting up communication with interface 0 ...
Trying to send the message to endpoint 0x03 ...
OK, message successfully sent
Changing configuration to 2 ...
OK, configuration set
-> Run lsusb to note any changes. Bye.

ทีนี้มาดู dmesg กันอีกที

# dmesg | tail -n 12

จะได้ผลลัพท์แบบนี้

[ 8585.016671] scsi 10:0:0:0: rejecting I/O to dead device
[ 8585.136195] usb 2-1.4: reset full speed USB device using ehci_hcd and address 12
[ 8585.323703] usb 2-1.4: read over firmware interface failed: -32
[ 8585.396354] usb 2-1.4: reset full speed USB device using ehci_hcd and address 12
[ 8585.558996] zd1211rw: probe of 2-1.4:2.0 failed with error -32
[ 8585.559092] cdc_acm 2-1.4:2.0: ttyACM2: USB ACM device
[ 8586.074337] usb 2-1.4: USB disconnect, address 12
[ 8587.300219] usb 2-1.4: new full speed USB device using ehci_hcd and address 13
[ 8587.503639] usb 2-1.4: configuration #2 chosen from 2 choices
[ 8587.505420] cdc_acm 2-1.4:2.0: ttyACM2: USB ACM device

ตอนนี้เจ้าขาวกลายเป็น USB Modem ไปแล้ว ผูกอยู่ที่ /dev/ttyACM2 เป็นอุปกรณ์ Modem แล้ว ;) เอ้าทีนี้เราก็หมุนเจ้าขาวออก GPRS/Edge กันได้แล้ว จะใช้ wvdial,gnome-ppp หรือ Network Manager ก็ตามสะดวกครับ

Comments are closed.