ขอบคุณครับ
Third Party ที่ผมถาม เพราะผมต้องการใช้สำหรับ Inet to RF นี่แหละครับ และเนื่องจาก แต่ก่อนผมใช้ miniTNC ก็เลย คุ้นเคยกับ Full PKT เลยเขียนโปรแกรม รับ ส่ง ข้อมูลแบบเก่า แต่เดี๋ยวผมจะ แก้ไขใหม่ครับ
ตกลงถ้าเราจะใช้ format แบบสั้น ก็ได้ แต่ ว่า เวลาเราส่ง
}HS5TQA-1>APRSTH,WIDE1-1,WIDE2-2:!1736.98NI10042.25E& WX+IGATE APRS ON FraiendlyARM
ปรากฏว่า PKT ที่ส่งจริง มันออกแค่
HS5TQA-1>APRSTH,WIDE1-1,WIDE2-2:!1736.98NI10042.25E& WX+IGATE APRS ON FraiendlyARM
ตัว } มันหายไปครับ ซึ่งผมกังวลว่า ที่ปลายทาง เมื่อรับแล้วจะไม่รู้ว่าเป็น Third Pary แล้วเดี๋ยวมันจะจับยัดลง APRS-IS loop กันไปอีก
ตัวอย่าง ที่ผมกำลังใช้จริง
หมายเลข 1 เป็น PKT จริง ที่อยู่ใน APRS-IS แล้วผมดึงออกมา แล้วจึงใส่ เครื่องหมาย } นำหน้า PKT แล้วส่งออก ไปให้ nTNC
(จิ้มดูข้อมูลที่ขา Rx nTNC)
หมายเลข 2 เป็น PKT ที่รับด้วย TNC อื่น อีกตัวนึง ซึ่ง เครื่องหมาย } หายไป ไม่มาด้วย มันจึงมองเหมือนว่าเป็น PKT ธรรมดา ตรงนี้เองที่ กังวลว่า เมื่อ IGate อื่น รับได้ มันจะ loop ลง APRS-IS หรือเปล่า
แนวทางการแก้ปัญหาของผมมี 3 วิธี คือ
1. ใช้แบบ full format คือ
}ABCD-1,APRSTH,WIDE1-1:}original PKT
ซึ่ง } ตัวแรก ใช้หลอก nTNC เพื่อให้ส่งข้อมูลออกไปให้ ส่วน } ตัวที่2 คือ Third Party
2. ใช้ format ดัดแปลง คือ
}}original PKT
ซึ่ง } ตัวแรก ใช้หลอก nTNC เพื่อให้ส่งข้อมูลออกไปให้ ส่วน } ตัวที่2 คือ Third Party
ที่ต้องมี } 2 ตัวเพราะ nTNC เวลาส่งออกจะตัด } หายไป (เหลือแค่ 1 ตัว)
3. ต้องไปแทรก PATH เช่น RFONLY , TCP เป็นต้น แต่ผมว่ายุ่งยากกว่า 2 วิธีแรก
ถูกหรือเปล่าครับ?
ก่อนอื่นขอลดข้อกังวลท่านก่อนนิดหนึ่งตรงที่ iGate ถ้ามันพบพาธที่มีคำว่า RFONLY,TCPIP,qAx คำพวกนี้ดิจิจะไม่ทวนและไอเกตจะไม่นำส่งเข้า APRS-IS ครับ มันจะเพิกเฉยหรือตัดทิ้งไปเลยปัญหาของ 3rd party ตามมาตรฐานโปรโตคอลเลย ใช้จริงมีปัญหาเรื่องวน Loop นี่ละครับ จำได้ว่าเมืองนอกเค้าก็ถกกันอยู่พักหนึ่ง ทีนี้ผมจะแสดงปัญหาที่ว่าให้ดูครับ
ก่อนอื่นต้องเข้าใจรูปแบบ TNC2 Monitor ก่อนครับ ผมขอแบ่งเป็นสองส่วนใหญ่ ๆ คือส่วนหัวและส่วนลำตัว(ว่ากันง่ายๆ ด้วยภาษาไทยละกัน) ทีนี้ผมจะยกตัวอย่างว่าผมจะส่งสเตตัสง่าย ๆ คำว่า TEST ออกไปจะใช้สัญลักษณ์ > นำหน้าข้อมูล
HS5TQA-2>APNN05,WIDE1-1:
>TESTสีแดงไว้คือส่วนหัว (Header Packet)เครื่องหมาย : เป็นตัวแบ่งระหว่างหัวกับตัว
สีน้ำเงินคือส่วนตัว (Infomation) หรือข้อความโปรโตคอล APRSลำดับแรก ส่งเข้าไอเก็ต HS5TQA-1 ข้อมูลที่วิ่งบน APRS-IS (หรือดู raw ใน aprs.fi) ก็จะได้เป็น
HS5TQA-2>APNN05,WIDE1-1
,qAR,HS5TQA-1:>TEST
สังเกตุดูว่ามันจะไปเพิ่มส่วนหัวตรงเส้นทาง qAR,HS5TQA-1 ขึ้นมา ถ้าเราเอาแพ็คเก็จนี้ส่งออก RF อีกครั้ง ไอเก็ตจะไม่ส่งเข้า APRS-IS อีกแล้วเพราะมันไปพบคำว่าง qAR เป็นตัวกำหนดว่ามันโดนส่งเข้าเครือข่ายอินเทอร์เน็ตไปแล้ว
ลำดับที่สอง เมื่อไอเก็ตรับมาแล้วจะส่งออก RF อีกครั้งในแบบ 3rd party (ตามมาตรฐาน) สมมุติผมใช้ HS5TQA-4 เป็น inet2rf แล้วกำหนดใช้พาธไอเก็ตเป็น WIDE1-1 จะได้
HS5TQA-4>APRSTH,WIDE1-1:
}HS5TQA-2>APNN05,WIDE1-1,qAR,HS5TQA-1:>TESTท่านจะเห็นว่าส่วนหัวถูกเปลี่ยนไปเป็นของสถานีไอเกตแล้ว และส่วนหัวเดิมกลายเป็นตัวข้อมูลในรูปแบบเต็มของ TNC2 Monitor ถ้าเอาแพ็จเก็ตนี้ส่งออก RF จะเกิดอะไรขึ้น ?
1.สถานีดิจิจะทำการทวนแน่นอน เพราะเส้นทางเป็น WIDE1-1
2.สถานีไอเก็ตทำการส่งต่อเข้า APRS-IS อีกรอบเพราะส่วนหัวเส้นทางเป็น WIDE1-1 ในส่วน qAR มันไม่ได้ไปดูเพราะมันเป็นส่วนข้อความ/ข้อมูล จึงไม่ได้อยู่ในข้อกำหนดเส้นทาง
3.เครื่องจอมอนิเตอร์ที่ไม่ฉลาดพอ ก็ถอดแพ็คเก็จ } มาแสดงผลไม่ได้ (ถ้าเจอลูป 2-5ชั้นเข้าไปไม่ต้องพูดถึง)
4.ปริมาณข้อมูลแพ็จเก็จจะยาวขึ้นเรื่อย ๆ จากข้อมูลเดิมเพียงแค่
>TEST กลายเป็น
}HS5TQA-2>APNN05,WIDE1-1,qAR,HS5TQA-1:>TEST5.digi/tnc ที่มีบัฟเฟอร์เก็บแพ็คเก็จ AX.25 ไม่พอ มันจะเกิดปัญหาขึ้น
ลำดับที่สาม บังเอิญว่าสถานีไอเก็ต HS5TQA-1 รับสัญญาณจาก HS5TQA-4 ได้ ผลที่ได้คือมันส่งเข้า APRS-IS อีกครั้ง ได้ข้อมูลเป็น
HS5TQA-4>APRSTH,WIDE1-1,qAR,HS5TQA-1:
}HS5TQA-2>APNN05,WIDE1-1,qAR,HS5TQA-1:>TESTลำดับที่สี่ สมมุติมีไอเก็ต HS5TQA-5 รับได้อีก ก็จะเริ่มเห็น 3rd party ลูปกัน 2ชั้นแล้วครับ
HS5TQA-5>APRSTH,WIDE1-1:
}HS5TQA-4>APRSTH,WIDE1-1,qAR,HS5TQA-1:}HS5TQA-2>APNN05,WIDE1-1,qAR,HS5TQA-1:>TESTถ้ามีสถานีไอเก็ตและดิจิมากกว่านี้จะเห็นมันลูปยุ่งมากกว่านี้มาก แค่นี้ก็พอจะเริ่มเห็นภาพข้อมูลวนลูปแถมปริมาณข้อมูลก็เพิ่มขึ้นเรื่อย ๆ จากที่เราแค่ต้องการส่งข้อความ TEST เท่านั้น แต่มันโดนเพิ่มรูปแบบ TNC2 Monitor เข้าไปยาวเหยียด การใช้งานจริงมันจึงเกิดปัญหาครับ
และอย่าลืมว่า ข้อมูลที่วิ่งออก RF นั้นจริงแล้วไม่ใช่รูปแบบ TNC2 Monitor แต่เป็นโปรโตคอล AX.25 นะครับ ซึ่งในส่วนของเฮดเดอร์(ส่วนหัว)นั้น มันเป็นข้อมูลไบนารี่ทั้งหมดครับ ดังนั้นถ้าใส่ส่วนหัวเข้าไปในโปรโตคอล APRS แล้ว AX.25 มันจะมองเป็นส่วน Infomation หรือข้อความ/ข้อมูล
การแก้ปัญหานี้ ผมใช้วิธีจับมันส่งไปใหม่โดยไม่ต้องแทรกส่วนหัวสถานีไอเก็ตออกไป เช่น รับข้อมูลนี้มาจาก APRS-IS (ตัวอย่างนี้ได้จาก aprsd)
}HS5TQA-2>APNN05,WIDE1-1,qAR,HS5TQA-1:>TEST
มันก็จะส่งออก RF โดยใช้ส่วนหัวเดิมเลย ก็จะได้
HS5TQA-2>APNN05,WIDE1-1,qAR,HS5TQA-1:>TEST
ผลที่ได้คือไม่เกิดลูป ดิจิและไอเก็ตเพิกเฉยไม่ทำงาน ก็มีค่าเท่ากับสถานี inet2rf นี้ส่งข้อมูลออกไปทางอากาศให้เครื่องที่มีจอแสดงผลหรือสถานีที่จะเอาข้อมูลที่รับทาง RF ไปใช้งานอย่างอื่นต่อไป
ตัวอย่างเช่น ผมส่งข้อมูลตรวจวัดอากาศ(WX) ที่อุตรดิตถ์ แล้วผมทำ inet2rf ที่กรุงเทพฯ แน่นอนว่าดิจิและไอเก็ตแถวนั้นไม่ทวนและไม่ส่งเข้าเน็ต แต่ผมใช้วิทยุ VX8/FTM350 สามารถแสดงข้อมูลตรวจอากาศของอุตรดิตถ์ที่กรุงเทพฯได้โดยผ่่านคลื่นวิทยุเป็นต้น
ทีนี้มาดูตัว nTNCที่ท่านเห็นว่ามันตัด } นั้น จริง ๆ มันไม่ได้ตัดนะครับ มันเอาส่วนหัว(เฮดเดอร์)ในแพ็คเก็จที่ส่งนั้น ไปเป็นส่วนหัวใน AX.25 แทนส่วนหัวของ TNC ที่กำหนดไว้ มันไม่ได้เอาไปเป็นข้อมูลตามมาตรฐาน 3rd-party ที่เอาส่วนหัวมาต่อในข้อมูลไปเรื่อย ๆ
ยังไงท่านก็ลองเล่นดูครับ ถ้าเจอลูป 3rd-party สัก 2-3ชั้น ก็คงจะเริ่มร้องอ๋อเองละครับ เพราะมันจะเริ่มถอดข้อมูลโปรโตคอล APRS มาแสดงผลได้ยากขึ้น ปัญหาจะเจอเยอะขึ้น ใช้หน่วยความจำ MCU มากขึ้น ฯลฯ