** คำสั่ง fxotune นี้ไม่ใช่ว่าจะเวอร์คกับการ์ดทุกชนิดนะครับ มี 2 เงื่อนไขครับ **
1. คำสั่งนี้ใช้ได้กับการ์ดบางรุ่นเท่านั้น อย่างเช่นการ์ด TDM410, TDM410P หรือการ์ด 8 FXO TDM8XX ของ Yeastar ที่ผมเอามาเป็นตัวอย่าง ใช้ได้แน่ๆ ส่วนการ์ด X100P ไม่รองรับครับ
2. ใช้ได้กับพอร์ต FXO เท่านั้น ถ้าไม่ใช่ FXO หล่ะก็ใช้ไม่ได้ครับ พวก FXS, E1 นี่หมดสิทธิ์
การ์ดประเภทอื่นๆที่คำสั่งนี้ไม่รองรับ คงต้องหา Tools ของการ์ดมาจัดการเองหล่ะครับ
คำสั่ง fxotune อยู่ในชุด DAHDI Tools เวลาเราคอมไพล์ DAHDI Tools ก็จะมีมาให้อยู่แล้วโดยไม่ต้องไปคลิ๊กอะไรเพิ่ม แต่สำหรับคนที่ใช้ Elastix ก็จะมีมาให้อยู่แล้วโดยไม่ต้องไปทำอะไรอีก คำสั่งนี้เอาไว้ใช้แก้ปัญหาเรื่องเสียง Echo ครับ ให้โปรแกรม Software Echo Canceller อย่างเช่น OSLEC ทำงานได้ดียิ่งขึ้น โดยมันจะสร้าง pattern ขึ้นมาแล้วทดสอบหาค่าชดเชยต่างๆที่เหมาะสมจนทำให้เสียง Echo เหลือน้อยที่สุด ถ้าท่านใดมีปัญหาก็ลองใช้คำสั่งนี้ได้เลย น่าจะช่วยได้
1. เช็คให้แน่ใจว่า DAHDI service รันอยู่
- โค้ด: เลือกทั้งหมด
service dahdi status
ถ้าได้คล้ายๆแบบนี้แสดงว่า DAHDI รันอยู่ครับ
### Span 1: WCTDM/8 "YSTDM8xx REV E Board 9" (MASTER)
1 FXO FXSKS (In use) (SWEC: OSLEC) RED
2 FXO FXSKS (In use) (SWEC: OSLEC) RED
3 FXO FXSKS (In use) (SWEC: OSLEC) RED
4 FXO FXSKS (In use) (SWEC: OSLEC) RED
5 FXO FXSKS (In use) (SWEC: OSLEC) RED
6 FXO FXSKS (In use) (SWEC: OSLEC) RED
7 FXO FXSKS (In use) (SWEC: OSLEC) RED
8 FXO FXSKS (In use) (SWEC: OSLEC) RED
เครื่องผมใส่การ์ด Yeastar TDM800 ก็เลยโชว์แบบนี้ ถ้ารันคำสั่งแล้วไม่โชว์อะไรเลย แสดงว่า DAHDI ยังไม่ทำงาน ให้สั่งสตาร์ทด้วยคำสั่ง
- โค้ด: เลือกทั้งหมด
service dahdi start
2. ปิด Asterisk
ต้องปิด Asterisk ก่อนนะครับ ไม่งั้นเราจะใช้คำสั่ง fxotune ไม่ได้ เพราะว่า Asterisk มันจอง DAHDI อยู่
- โค้ด: เลือกทั้งหมด
service asterisk stop
ถ้าใช้ Elastix/Trixbox ให้รันคำสั่งนี้แทนครับ
- โค้ด: เลือกทั้งหมด
amportal stop
3. รันคำสั่ง fxotune
- โค้ด: เลือกทั้งหมด
fxotune -i
ต้องมี -i ต่อท้ายด้วยนะครับ ก็จะได้ข้อความแบบนี้
Tuning module /dev/dahdi/1
...รอสักพัก...
Done!
Tuning module /dev/dahdi/2
Done!
Tuning module /dev/dahdi/3
Done!
Tuning module /dev/dahdi/4
Done!
Tuning module /dev/dahdi/5
Done!
Tuning module /dev/dahdi/6
Done!
Tuning module /dev/dahdi/7
Done!
Tuning module /dev/dahdi/8
Done!
/dev/dahdi/9 absent: No such file or directory
/dev/dahdi/10 absent: No such file or directory
/dev/dahdi/11 absent: No such file or directory
/dev/dahdi/12 absent: No such file or directory
/dev/dahdi/13 absent: No such file or directory
/dev/dahdi/14 absent: No such file or directory
/dev/dahdi/15 absent: No such file or directory
/dev/dahdi/16 absent: No such file or directory
/dev/dahdi/17 absent: No such file or directory
/dev/dahdi/18 absent: No such file or directory
/dev/dahdi/19 absent: No such file or directory
/dev/dahdi/20 absent: No such file or directory
/dev/dahdi/21 absent: No such file or directory
/dev/dahdi/22 absent: No such file or directory
/dev/dahdi/23 absent: No such file or directory
/dev/dahdi/24 absent: No such file or directory
/dev/dahdi/25 absent: No such file or directory
/dev/dahdi/26 absent: No such file or directory
/dev/dahdi/27 absent: No such file or directory
/dev/dahdi/28 absent: No such file or directory
/dev/dahdi/29 absent: No such file or directory
/dev/dahdi/30 absent: No such file or directory
/dev/dahdi/31 absent: No such file or directory
/dev/dahdi/32 absent: No such file or directory
/dev/dahdi/33 absent: No such file or directory
/dev/dahdi/34 absent: No such file or directory
/dev/dahdi/35 absent: No such file or directory
/dev/dahdi/36 absent: No such file or directory
/dev/dahdi/37 absent: No such file or directory
/dev/dahdi/38 absent: No such file or directory
/dev/dahdi/39 absent: No such file or directory
/dev/dahdi/40 absent: No such file or directory
/dev/dahdi/41 absent: No such file or directory
/dev/dahdi/42 absent: No such file or directory
/dev/dahdi/43 absent: No such file or directory
/dev/dahdi/44 absent: No such file or directory
/dev/dahdi/45 absent: No such file or directory
/dev/dahdi/46 absent: No such file or directory
/dev/dahdi/47 absent: No such file or directory
/dev/dahdi/48 absent: No such file or directory
/dev/dahdi/49 absent: No such file or directory
/dev/dahdi/50 absent: No such file or directory
/dev/dahdi/51 absent: No such file or directory
/dev/dahdi/52 absent: No such file or directory
/dev/dahdi/53 absent: No such file or directory
/dev/dahdi/54 absent: No such file or directory
/dev/dahdi/55 absent: No such file or directory
/dev/dahdi/56 absent: No such file or directory
/dev/dahdi/57 absent: No such file or directory
/dev/dahdi/58 absent: No such file or directory
/dev/dahdi/59 absent: No such file or directory
/dev/dahdi/60 absent: No such file or directory
/dev/dahdi/61 absent: No such file or directory
/dev/dahdi/62 absent: No such file or directory
/dev/dahdi/63 absent: No such file or directory
/dev/dahdi/64 absent: No such file or directory
/dev/dahdi/65 absent: No such file or directory
/dev/dahdi/66 absent: No such file or directory
/dev/dahdi/67 absent: No such file or directory
/dev/dahdi/68 absent: No such file or directory
/dev/dahdi/69 absent: No such file or directory
/dev/dahdi/70 absent: No such file or directory
/dev/dahdi/71 absent: No such file or directory
/dev/dahdi/72 absent: No such file or directory
/dev/dahdi/73 absent: No such file or directory
/dev/dahdi/74 absent: No such file or directory
/dev/dahdi/75 absent: No such file or directory
/dev/dahdi/76 absent: No such file or directory
/dev/dahdi/77 absent: No such file or directory
/dev/dahdi/78 absent: No such file or directory
/dev/dahdi/79 absent: No such file or directory
/dev/dahdi/80 absent: No such file or directory
/dev/dahdi/81 absent: No such file or directory
/dev/dahdi/82 absent: No such file or directory
/dev/dahdi/83 absent: No such file or directory
/dev/dahdi/84 absent: No such file or directory
/dev/dahdi/85 absent: No such file or directory
/dev/dahdi/86 absent: No such file or directory
/dev/dahdi/87 absent: No such file or directory
/dev/dahdi/88 absent: No such file or directory
/dev/dahdi/89 absent: No such file or directory
/dev/dahdi/90 absent: No such file or directory
/dev/dahdi/91 absent: No such file or directory
/dev/dahdi/92 absent: No such file or directory
/dev/dahdi/93 absent: No such file or directory
/dev/dahdi/94 absent: No such file or directory
/dev/dahdi/95 absent: No such file or directory
/dev/dahdi/96 absent: No such file or directory
/dev/dahdi/97 absent: No such file or directory
/dev/dahdi/98 absent: No such file or directory
/dev/dahdi/99 absent: No such file or directory
/dev/dahdi/100 absent: No such file or directory
/dev/dahdi/101 absent: No such file or directory
/dev/dahdi/102 absent: No such file or directory
/dev/dahdi/103 absent: No such file or directory
/dev/dahdi/104 absent: No such file or directory
/dev/dahdi/105 absent: No such file or directory
/dev/dahdi/106 absent: No such file or directory
/dev/dahdi/107 absent: No such file or directory
/dev/dahdi/108 absent: No such file or directory
/dev/dahdi/109 absent: No such file or directory
/dev/dahdi/110 absent: No such file or directory
/dev/dahdi/111 absent: No such file or directory
/dev/dahdi/112 absent: No such file or directory
/dev/dahdi/113 absent: No such file or directory
/dev/dahdi/114 absent: No such file or directory
/dev/dahdi/115 absent: No such file or directory
/dev/dahdi/116 absent: No such file or directory
/dev/dahdi/117 absent: No such file or directory
/dev/dahdi/118 absent: No such file or directory
/dev/dahdi/119 absent: No such file or directory
/dev/dahdi/120 absent: No such file or directory
/dev/dahdi/121 absent: No such file or directory
/dev/dahdi/122 absent: No such file or directory
/dev/dahdi/123 absent: No such file or directory
/dev/dahdi/124 absent: No such file or directory
/dev/dahdi/125 absent: No such file or directory
/dev/dahdi/126 absent: No such file or directory
/dev/dahdi/127 absent: No such file or directory
/dev/dahdi/128 absent: No such file or directory
/dev/dahdi/129 absent: No such file or directory
/dev/dahdi/130 absent: No such file or directory
/dev/dahdi/131 absent: No such file or directory
/dev/dahdi/132 absent: No such file or directory
/dev/dahdi/133 absent: No such file or directory
/dev/dahdi/134 absent: No such file or directory
/dev/dahdi/135 absent: No such file or directory
/dev/dahdi/136 absent: No such file or directory
/dev/dahdi/137 absent: No such file or directory
/dev/dahdi/138 absent: No such file or directory
/dev/dahdi/139 absent: No such file or directory
/dev/dahdi/140 absent: No such file or directory
/dev/dahdi/141 absent: No such file or directory
/dev/dahdi/142 absent: No such file or directory
/dev/dahdi/143 absent: No such file or directory
/dev/dahdi/144 absent: No such file or directory
/dev/dahdi/145 absent: No such file or directory
/dev/dahdi/146 absent: No such file or directory
/dev/dahdi/147 absent: No such file or directory
/dev/dahdi/148 absent: No such file or directory
/dev/dahdi/149 absent: No such file or directory
/dev/dahdi/150 absent: No such file or directory
/dev/dahdi/151 absent: No such file or directory
/dev/dahdi/152 absent: No such file or directory
/dev/dahdi/153 absent: No such file or directory
/dev/dahdi/154 absent: No such file or directory
/dev/dahdi/155 absent: No such file or directory
/dev/dahdi/156 absent: No such file or directory
/dev/dahdi/157 absent: No such file or directory
/dev/dahdi/158 absent: No such file or directory
/dev/dahdi/159 absent: No such file or directory
/dev/dahdi/160 absent: No such file or directory
/dev/dahdi/161 absent: No such file or directory
/dev/dahdi/162 absent: No such file or directory
/dev/dahdi/163 absent: No such file or directory
/dev/dahdi/164 absent: No such file or directory
/dev/dahdi/165 absent: No such file or directory
/dev/dahdi/166 absent: No such file or directory
/dev/dahdi/167 absent: No such file or directory
/dev/dahdi/168 absent: No such file or directory
/dev/dahdi/169 absent: No such file or directory
/dev/dahdi/170 absent: No such file or directory
/dev/dahdi/171 absent: No such file or directory
/dev/dahdi/172 absent: No such file or directory
/dev/dahdi/173 absent: No such file or directory
/dev/dahdi/174 absent: No such file or directory
/dev/dahdi/175 absent: No such file or directory
/dev/dahdi/176 absent: No such file or directory
/dev/dahdi/177 absent: No such file or directory
/dev/dahdi/178 absent: No such file or directory
/dev/dahdi/179 absent: No such file or directory
/dev/dahdi/180 absent: No such file or directory
/dev/dahdi/181 absent: No such file or directory
/dev/dahdi/182 absent: No such file or directory
/dev/dahdi/183 absent: No such file or directory
/dev/dahdi/184 absent: No such file or directory
/dev/dahdi/185 absent: No such file or directory
/dev/dahdi/186 absent: No such file or directory
/dev/dahdi/187 absent: No such file or directory
/dev/dahdi/188 absent: No such file or directory
/dev/dahdi/189 absent: No such file or directory
/dev/dahdi/190 absent: No such file or directory
/dev/dahdi/191 absent: No such file or directory
/dev/dahdi/192 absent: No such file or directory
/dev/dahdi/193 absent: No such file or directory
/dev/dahdi/194 absent: No such file or directory
/dev/dahdi/195 absent: No such file or directory
/dev/dahdi/196 absent: No such file or directory
/dev/dahdi/197 absent: No such file or directory
/dev/dahdi/198 absent: No such file or directory
/dev/dahdi/199 absent: No such file or directory
/dev/dahdi/200 absent: No such file or directory
/dev/dahdi/201 absent: No such file or directory
/dev/dahdi/202 absent: No such file or directory
/dev/dahdi/203 absent: No such file or directory
/dev/dahdi/204 absent: No such file or directory
/dev/dahdi/205 absent: No such file or directory
/dev/dahdi/206 absent: No such file or directory
/dev/dahdi/207 absent: No such file or directory
/dev/dahdi/208 absent: No such file or directory
/dev/dahdi/209 absent: No such file or directory
/dev/dahdi/210 absent: No such file or directory
/dev/dahdi/211 absent: No such file or directory
/dev/dahdi/212 absent: No such file or directory
/dev/dahdi/213 absent: No such file or directory
/dev/dahdi/214 absent: No such file or directory
/dev/dahdi/215 absent: No such file or directory
/dev/dahdi/216 absent: No such file or directory
/dev/dahdi/217 absent: No such file or directory
/dev/dahdi/218 absent: No such file or directory
/dev/dahdi/219 absent: No such file or directory
/dev/dahdi/220 absent: No such file or directory
/dev/dahdi/221 absent: No such file or directory
/dev/dahdi/222 absent: No such file or directory
/dev/dahdi/223 absent: No such file or directory
/dev/dahdi/224 absent: No such file or directory
/dev/dahdi/225 absent: No such file or directory
/dev/dahdi/226 absent: No such file or directory
/dev/dahdi/227 absent: No such file or directory
/dev/dahdi/228 absent: No such file or directory
/dev/dahdi/229 absent: No such file or directory
/dev/dahdi/230 absent: No such file or directory
/dev/dahdi/231 absent: No such file or directory
/dev/dahdi/232 absent: No such file or directory
/dev/dahdi/233 absent: No such file or directory
/dev/dahdi/234 absent: No such file or directory
/dev/dahdi/235 absent: No such file or directory
/dev/dahdi/236 absent: No such file or directory
/dev/dahdi/237 absent: No such file or directory
/dev/dahdi/238 absent: No such file or directory
/dev/dahdi/239 absent: No such file or directory
/dev/dahdi/240 absent: No such file or directory
/dev/dahdi/241 absent: No such file or directory
/dev/dahdi/242 absent: No such file or directory
/dev/dahdi/243 absent: No such file or directory
/dev/dahdi/244 absent: No such file or directory
/dev/dahdi/245 absent: No such file or directory
/dev/dahdi/246 absent: No such file or directory
/dev/dahdi/247 absent: No such file or directory
/dev/dahdi/248 absent: No such file or directory
/dev/dahdi/249 absent: No such file or directory
/dev/dahdi/250 absent: No such file or directory
/dev/dahdi/251 absent: No such file or directory
/dev/dahdi/252 absent: No such file or directory
ตัวเลขที่เห็นคือหมายเลขพอร์ตนะครับ ซึ่งจากตัวอย่างข้างบนผมใช้การ์ด 8 พอร์ต ก็เลยมีพอร์ต 1 ถึง 8 ที่เจอ ตั้งแต่ dahdi 9 จนถึง dahdi 252 ไม่มีฮาร์ดแวร์อยู่ครับ ก็เลยโชว์แบบนั้น ในโฟลเดอร์ /etc จะมีไฟล์ชื่อ fxotune.conf อยู่ครับ ไฟล์นี้เก็บข้อมูล
4. ใช้คำสั่ง fxotune อีกครั้ง
คราวนี้ใช้ออปชั่น -s ครับ ซึ่งหมายถึง set previously calibrated echo settings
- โค้ด: เลือกทั้งหมด
fxotune -s
5. สตาร์ท Asterisk
- โค้ด: เลือกทั้งหมด
service asterisk start
หรือใครใช้ Elastix/Trixbox ใช้คำสั่งนี้แทนนะครับ
- โค้ด: เลือกทั้งหมด
amportal start
6. รัน fxotune -s ทุกครั้งที่สตาร์ทเครื่อง
- โค้ด: เลือกทั้งหมด
/usr/sbin/fxotune -s
ให้รันคำสั่งนี้หลังจากที่ DAHDI สตาร์ทแล้ว และรันก่อนที่ Asterisk จะสตาร์ทนะครับ ถ้างงว่าแล้วจะทำยังไงให้มันสตาร์ทได้ตามลำดับที่ผมบอก ไม่ยากครับ สำหรับท่านที่ใช้ Elastix ดูที่ไฟล์ /etc/rc.d/rc.local เขาจะใส่ไว้ให้แล้ว ไม่ต้องทำอะไรเพิ่ม แต่สำหรับท่านที่ใช้ Asterisk แท้ๆ ในไฟล์ /etc/inid.d/dahdi ก็จะมีบรรทัดรัน fxotune -s ไว้แล้ว ก็ไม่ต้องทำอะไรเพิ่มอีกเช่นเดียวกัน
ปัญหาที่เจอ
1. รัน fxotune -i แล้วเจอข้อความแบบนี้
/dev/dahdi/1 absent: Device or resource busy
แสดงว่ายังไม่ได้ปิด asterisk
2. รัน fxotune -i แล้วเจอข้อความแบบนี้
Tuning module /dev/dahdi/1
Unable to set impedance on fd 4
Failure!
...
Unable to tune 1 devices, even though those devices are present
แสดงว่ามีการ์ดที่คำสั่ง fxotune ไม่รองรับ เช่นการ์ด X100P ส่วนการ์ดที่รองรับชัวร์ๆคือ TDM410, TDM410P ครับ
ทริกในการรัน fxotune
1. ถ้ารู้จำนวนพอร์ตที่แน่นอน เช่นใส่การ์ด TDM410P การ์ดเดียว พอร์ตก็จะมีแค่ 4 พอร์ต ให้ระบุ start device (port) ด้วย -b และระบุ end device (port) ด้วย -e ตามตัวอย่าง
fxotune -i -b 1 -e 4
2. fxotune ใช้กับการ์ด X100P หรือพอร์ต FXS ไม่ได้ เมื่อรันบนเครื่องที่มีการ์ด X100P หรือการ์ด TDM410P ที่ใส่โมดูล FXS ก็จะได้ข้อความแบบนี้
Tuning module /dev/dahdi/1
Unable to set impedance on fd 4
Failure!
Unable to tune 1 devices, even though those devices are present