{"id":1546,"date":"2026-10-07T12:46:19","date_gmt":"2026-10-07T12:46:19","guid":{"rendered":"https:\/\/b9xelectronics.com\/?page_id=1546"},"modified":"2026-10-07T20:09:45","modified_gmt":"2026-10-07T20:09:45","slug":"b9x-handie-talkie-module","status":"publish","type":"page","link":"https:\/\/b9xelectronics.com\/?page_id=1546","title":{"rendered":"B9X Handie Talkie Module"},"content":{"rendered":"\n<div id=\"b9x-qrz-promo\">\n<style>\n#b9x-qrz-promo{--m:#5b1723;--m2:#7b2434;--ink:#17191d;--muted:#60656d;--soft:#f6f2f3;--line:#dfd4d6;font-family:Arial,Helvetica,sans-serif;color:var(--ink);line-height:1.55;background:#fff}\n#b9x-qrz-promo *{box-sizing:border-box} #b9x-qrz-promo .w{max-width:1120px;margin:auto;padding:0 22px}\n#b9x-qrz-promo .hero{padding:62px 0 50px;color:#fff;background:linear-gradient(135deg,#3d0d16,#721e2d 62%,#2b0a10)}\n#b9x-qrz-promo h1{font-size:clamp(38px,6vw,68px);line-height:1.02;margin:10px 0 18px;max-width:950px}\n#b9x-qrz-promo .ey{font-size:13px;font-weight:900;letter-spacing:.13em;text-transform:uppercase;color:#f0c77a}\n#b9x-qrz-promo .lead{font-size:21px;max-width:900px;color:#f8eaed}\n#b9x-qrz-promo section{padding:54px 0} #b9x-qrz-promo h2{font-size:34px;line-height:1.15;color:var(--m);margin:0 0 13px}\n#b9x-qrz-promo h3{color:var(--m);margin:0 0 8px;font-size:21px} #b9x-qrz-promo .sub{font-size:18px;color:var(--muted);max-width:900px}\n#b9x-qrz-promo .chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:24px}.chip{border:1px solid #d9aeb6;border-radius:999px;padding:7px 11px;font-weight:800;background:#fff;color:#5b1723}\n#b9x-qrz-promo .btns{display:flex;flex-wrap:wrap;gap:12px;margin-top:25px}.btn{padding:13px 20px;border-radius:7px;text-decoration:none!important;font-weight:900;display:inline-block}.primary{background:#fff;color:#5b1723!important}.outline{border:1px solid #dfadb6;color:#fff!important}\n#b9x-qrz-promo .diagram{margin-top:28px;border:1px solid var(--line);border-radius:15px;padding:14px;background:#fbf9f9;box-shadow:0 8px 28px rgba(40,15,20,.08)}.diagram svg{display:block;width:100%;height:auto}\n#b9x-qrz-promo .band{background:var(--soft)}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:27px}.card{background:#fff;border:1px solid var(--line);border-radius:12px;padding:23px;box-shadow:0 5px 18px rgba(0,0,0,.04)}\n#b9x-qrz-promo .n{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:var(--m);color:#fff;font-weight:900;margin-bottom:12px}\n#b9x-qrz-promo .features{display:grid;grid-template-columns:1fr 1fr;gap:15px 30px;margin-top:26px}.feature{padding-left:29px;position:relative}.feature:before{content:\"\u2713\";position:absolute;left:0;color:#14744f;font-size:20px;font-weight:900}\n#b9x-qrz-promo .note{margin-top:27px;padding:18px 20px;border-left:5px solid #c89a47;border-radius:7px;background:#fff8e8;font-size:14px;color:#464a50}\n#b9x-qrz-promo .cta{text-align:center;background:var(--m);color:#fff}.cta h2{color:#fff}.cta p{font-size:18px;color:#f3e4e7;max-width:800px;margin:0 auto}\n@media(max-width:760px){#b9x-qrz-promo .grid,#b9x-qrz-promo .features{grid-template-columns:1fr}#b9x-qrz-promo section{padding:40px 0}}\n<\/style>\n\n<section class=\"hero\"><div class=\"w\">\n<div class=\"ey\">B9X Electronics \u2022 Internet Voice + Amateur Radio<\/div>\n<h1>Your B9X Basic GUI Module Becomes a Wi\u2011Fi Handie\u2011Talkie.<\/h1>\n<p class=\"lead\">Create a secure push\u2011to\u2011talk voice group through B9X Voice Server \u2014 then optionally connect an amateur radio so licensed operators can bring the group onto the air.<\/p>\n<div class=\"chips\"><span class=\"chip\">Touchscreen PTT<\/span><span class=\"chip\">Low\u2011latency group voice<\/span><span class=\"chip\">256\u2011bit AES Internet audio<\/span><span class=\"chip\">Complete B9X Basic source included<\/span><span class=\"chip\">Free Windows radio gateway app<\/span><span class=\"chip\">Optional radio gateway<\/span><\/div>\n<div class=\"btns\"><a class=\"btn primary\" href=\"https:\/\/b9xelectronics.com\/?page_id=144\">Explore B9X Voice Server<\/a><a class=\"btn outline\" href=\"https:\/\/b9xelectronics.com\/?page_id=1506\">Explore B9X Basic GUI Module<\/a><\/div>\n<\/div><\/section>\n\n<section><div class=\"w\">\n<h2>One Group. B9X Handie\u2011Talkies. And Amateur Radio.<\/h2>\n<p class=\"sub\">B9X Voice Server is the central meeting point. B9X Basic GUI Modules join through Wi\u2011Fi\/Internet. If a radio connection is desired, the included free Windows radio gateway app can join the same voice group and control\/interface the DigiRig connection to an amateur transceiver.<\/p>\n<div class=\"diagram\">\n<svg viewBox=\"0 0 1080 570\" role=\"img\" aria-label=\"B9X handie-talkie and amateur radio system diagram\">\n<defs><filter id=\"s\"><feDropShadow dx=\"0\" dy=\"5\" stdDeviation=\"7\" flood-opacity=\".14\"\/><\/filter><linearGradient id=\"g\"><stop stop-color=\"#591622\"\/><stop offset=\"1\" stop-color=\"#812737\"\/><\/linearGradient><\/defs>\n<rect width=\"1080\" height=\"570\" rx=\"20\" fill=\"#fff\"\/>\n<!-- left HT 1 -->\n<g filter=\"url(#s)\"><rect x=\"45\" y=\"72\" width=\"240\" height=\"165\" rx=\"18\" fill=\"#f7f2f3\" stroke=\"#d9c8cb\"\/>\n<rect x=\"70\" y=\"96\" width=\"72\" height=\"118\" rx=\"9\" fill=\"#25292e\"\/><rect x=\"79\" y=\"107\" width=\"54\" height=\"68\" rx=\"3\" fill=\"#b9dcd4\"\/>\n<circle cx=\"106\" cy=\"195\" r=\"11\" fill=\"#741f2e\"\/><text x=\"162\" y=\"121\" font-family=\"Arial\" font-size=\"20\" font-weight=\"700\" fill=\"#5b1723\">B9X Basic<\/text><text x=\"162\" y=\"146\" font-family=\"Arial\" font-size=\"20\" font-weight=\"700\" fill=\"#5b1723\">GUI Module<\/text><text x=\"162\" y=\"178\" font-family=\"Arial\" font-size=\"14\" fill=\"#555\">Wi\u2011Fi handie\u2011talkie<\/text><text x=\"162\" y=\"200\" font-family=\"Arial\" font-size=\"14\" fill=\"#555\">Touchscreen PTT<\/text><\/g>\n<!-- left HT 2 -->\n<g filter=\"url(#s)\"><rect x=\"45\" y=\"334\" width=\"240\" height=\"165\" rx=\"18\" fill=\"#f7f2f3\" stroke=\"#d9c8cb\"\/>\n<rect x=\"70\" y=\"358\" width=\"72\" height=\"118\" rx=\"9\" fill=\"#25292e\"\/><rect x=\"79\" y=\"369\" width=\"54\" height=\"68\" rx=\"3\" fill=\"#b9dcd4\"\/>\n<circle cx=\"106\" cy=\"457\" r=\"11\" fill=\"#741f2e\"\/><text x=\"162\" y=\"385\" font-family=\"Arial\" font-size=\"20\" font-weight=\"700\" fill=\"#5b1723\">More B9X<\/text><text x=\"162\" y=\"410\" font-family=\"Arial\" font-size=\"20\" font-weight=\"700\" fill=\"#5b1723\">Clients<\/text><text x=\"162\" y=\"442\" font-family=\"Arial\" font-size=\"14\" fill=\"#555\">Everyone joins the<\/text><text x=\"162\" y=\"464\" font-family=\"Arial\" font-size=\"14\" fill=\"#555\">same voice group<\/text><\/g>\n<!-- server -->\n<g filter=\"url(#s)\"><rect x=\"402\" y=\"185\" width=\"276\" height=\"200\" rx=\"23\" fill=\"url(#g)\"\/><rect x=\"436\" y=\"219\" width=\"208\" height=\"94\" rx=\"9\" fill=\"#fff\"\/>\n<circle cx=\"462\" cy=\"244\" r=\"7\" fill=\"#19805a\"\/><circle cx=\"462\" cy=\"270\" r=\"7\" fill=\"#19805a\"\/><circle cx=\"462\" cy=\"296\" r=\"7\" fill=\"#19805a\"\/>\n<line x1=\"484\" y1=\"244\" x2=\"618\" y2=\"244\" stroke=\"#d3c5c8\" stroke-width=\"6\"\/><line x1=\"484\" y1=\"270\" x2=\"618\" y2=\"270\" stroke=\"#d3c5c8\" stroke-width=\"6\"\/><line x1=\"484\" y1=\"296\" x2=\"618\" y2=\"296\" stroke=\"#d3c5c8\" stroke-width=\"6\"\/>\n<text x=\"540\" y=\"349\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"23\" font-weight=\"700\" fill=\"#fff\">B9X Voice Server<\/text><text x=\"540\" y=\"372\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"13\" fill=\"#f1dce0\">Windows \u2022 real\u2011time voice group<\/text><\/g>\n<!-- right gateway -->\n<g filter=\"url(#s)\"><rect x=\"798\" y=\"75\" width=\"235\" height=\"165\" rx=\"18\" fill=\"#f7f2f3\" stroke=\"#d9c8cb\"\/>\n<rect x=\"824\" y=\"104\" width=\"80\" height=\"52\" rx=\"5\" fill=\"#617984\"\/><text x=\"864\" y=\"136\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"14\" font-weight=\"700\" fill=\"#fff\">Windows PC<\/text>\n<rect x=\"924\" y=\"103\" width=\"82\" height=\"54\" rx=\"8\" fill=\"#292d31\"\/><text x=\"965\" y=\"136\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"14\" font-weight=\"700\" fill=\"#fff\">DigiRig<\/text>\n<text x=\"915\" y=\"188\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"18\" font-weight=\"700\" fill=\"#5b1723\">Radio Gateway<\/text><text x=\"915\" y=\"211\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"13\" fill=\"#555\">Free Windows client app<\/text><\/g>\n<!-- radio -->\n<g filter=\"url(#s)\"><rect x=\"798\" y=\"337\" width=\"235\" height=\"165\" rx=\"18\" fill=\"#f7f2f3\" stroke=\"#d9c8cb\"\/>\n<rect x=\"835\" y=\"368\" width=\"160\" height=\"75\" rx=\"9\" fill=\"#30343a\"\/><rect x=\"853\" y=\"383\" width=\"100\" height=\"25\" rx=\"3\" fill=\"#d9b65f\"\/>\n<circle cx=\"858\" cy=\"426\" r=\"6\" fill=\"#a92f2f\"\/><circle cx=\"882\" cy=\"426\" r=\"6\" fill=\"#777\"\/><circle cx=\"906\" cy=\"426\" r=\"6\" fill=\"#777\"\/>\n<text x=\"915\" y=\"474\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"19\" font-weight=\"700\" fill=\"#5b1723\">Amateur Radio<\/text><\/g>\n<!-- connections -->\n<path d=\"M285 155 C340 155 360 224 402 247\" fill=\"none\" stroke=\"#7a4650\" stroke-width=\"4\"\/><path d=\"M285 416 C340 416 360 348 402 326\" fill=\"none\" stroke=\"#7a4650\" stroke-width=\"4\"\/>\n<path d=\"M678 247 C726 220 749 173 798 159\" fill=\"none\" stroke=\"#7a4650\" stroke-width=\"4\"\/><path d=\"M915 240 L915 337\" fill=\"none\" stroke=\"#7a4650\" stroke-width=\"4\"\/>\n<text x=\"322\" y=\"194\" font-family=\"Arial\" font-size=\"13\" fill=\"#5b1723\">Encrypted Internet\/Wi\u2011Fi<\/text><text x=\"706\" y=\"226\" font-family=\"Arial\" font-size=\"13\" fill=\"#5b1723\">Internet<\/text><text x=\"929\" y=\"292\" font-family=\"Arial\" font-size=\"13\" fill=\"#5b1723\">Audio + PTT<\/text>\n<\/svg><\/div><\/div><\/section>\n\n<section class=\"band\"><div class=\"w\"><h2>From Internet PTT to the Airwaves<\/h2><p class=\"sub\">The idea is deliberately simple for the operator.<\/p>\n<div class=\"grid\">\n<div class=\"card\"><div class=\"n\">1<\/div><h3>Load It and Connect<\/h3><p>The complete B9X Basic handie\u2011talkie application is included. The source is open, ready to use, and ready to customize. Load it on the B9X Basic GUI Module, connect to B9X Voice Server over Wi\u2011Fi\/Internet, and you have a touchscreen push\u2011to\u2011talk endpoint.<\/p><\/div>\n<div class=\"card\"><div class=\"n\">2<\/div><h3>Talk Securely Online<\/h3><p>The server brings the connected clients into one low\u2011latency voice group. B9X Electronics specifies AES encryption with a 256\u2011bit key for client\/server voice and passwords.<\/p><\/div>\n<div class=\"card\"><div class=\"n\">3<\/div><h3>Bridge to Radio \u2014 Optional<\/h3><p>If you want an amateur\u2011radio connection, a free Windows app is included for the radio gateway. It connects to B9X Voice Server and controls\/interfaces the DigiRig connection to a compatible transceiver, providing the audio and PTT path to RF.<\/p><\/div>\n<\/div><\/div><\/section>\n\n<section><div class=\"w\">\n<h2>The Software Is Included<\/h2>\n<p class=\"sub\">This is not just a hardware concept. The software needed to get the B9X side of the system running is supplied with it, so you can start with a working application instead of starting from a blank editor.<\/p>\n<div class=\"grid\">\n<div class=\"card\"><h3>Complete B9X Basic Handie\u2011Talkie Code<\/h3><p>All B9X Basic code needed for the B9X Basic GUI Module handie\u2011talkie application is included. The source code is open and ready to use as supplied.<\/p><\/div>\n<div class=\"card\"><h3>Customize the Source<\/h3><p>Because the B9X Basic application source is provided, you can change the touchscreen, labels, controls, operating logic and other features to build the handie\u2011talkie you want.<\/p><\/div>\n<div class=\"card\"><h3>Free Windows DigiRig App<\/h3><p>If you choose to add an amateur\u2011radio gateway, a free Windows application is included to connect B9X Voice Server with DigiRig and control the radio interface. The radio connection is optional\u2014the B9X Internet voice group works without it.<\/p><\/div>\n<\/div><\/div><\/section>\n\n<section><div class=\"w\"><h2>More Than a Walkie\u2011Talkie<\/h2><p class=\"sub\">The B9X Basic GUI Module is programmable, so the radio-style interface can be built around the needs of your group instead of being locked to one fixed front panel.<\/p>\n<div class=\"features\">\n<div class=\"feature\"><strong>Touchscreen PTT<\/strong><br>Large, clear controls for push\u2011to\u2011talk operation.<\/div>\n<div class=\"feature\"><strong>Connection status<\/strong><br>Show server connection and operating state on screen.<\/div>\n<div class=\"feature\"><strong>Audio controls<\/strong><br>B9X Basic includes VoIP volume and microphone gain functions.<\/div>\n<div class=\"feature\"><strong>Programmable GUI<\/strong><br>Add buttons, labels, meters, lamps, switches and other touchscreen elements.<\/div>\n<div class=\"feature\"><strong>Group communication<\/strong><br>Multiple connected clients participate through the central Voice Server.<\/div>\n<div class=\"feature\"><strong>Radio possibilities<\/strong><br>B9X Voice Server is designed to support remote-base\/simplex-node style radio integration.<\/div>\n<\/div><\/div><\/section>\n\n<section class=\"band\"><div class=\"w\"><h2>The Amateur\u2011Radio Gateway<\/h2><p class=\"sub\">DigiRig Mobile combines a USB audio codec, serial\/CAT interface and hardware PTT control. One USB connection goes to the Windows PC; the radio side carries the audio and PTT signals required by the gateway.<\/p>\n<div class=\"diagram\"><svg viewBox=\"0 0 1060 245\" role=\"img\" aria-label=\"B9X Voice Server to amateur radio gateway\">\n<rect x=\"25\" y=\"48\" width=\"220\" height=\"145\" rx=\"18\" fill=\"#fff\" stroke=\"#d8c9cc\" stroke-width=\"2\"\/><text x=\"135\" y=\"95\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"22\" font-weight=\"700\" fill=\"#5b1723\">B9X Voice Server<\/text><text x=\"135\" y=\"126\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"14\" fill=\"#555\">Voice group<\/text>\n<line x1=\"245\" y1=\"120\" x2=\"345\" y2=\"120\" stroke=\"#741f2e\" stroke-width=\"4\"\/><text x=\"295\" y=\"105\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"13\">Internet<\/text>\n<rect x=\"345\" y=\"48\" width=\"190\" height=\"145\" rx=\"18\" fill=\"#fff\" stroke=\"#d8c9cc\" stroke-width=\"2\"\/><rect x=\"383\" y=\"72\" width=\"114\" height=\"66\" rx=\"6\" fill=\"#617984\"\/><text x=\"440\" y=\"111\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"17\" font-weight=\"700\" fill=\"#fff\">Windows PC<\/text><text x=\"440\" y=\"164\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"14\" fill=\"#555\">FREE B9X app<\/text>\n<line x1=\"535\" y1=\"120\" x2=\"635\" y2=\"120\" stroke=\"#741f2e\" stroke-width=\"4\"\/><text x=\"585\" y=\"105\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"13\">USB<\/text>\n<rect x=\"635\" y=\"76\" width=\"155\" height=\"88\" rx=\"15\" fill=\"#292d31\"\/><text x=\"712\" y=\"113\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"22\" font-weight=\"700\" fill=\"#fff\">DigiRig<\/text><text x=\"712\" y=\"139\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"13\" fill=\"#ddd\">Audio + PTT<\/text>\n<line x1=\"790\" y1=\"120\" x2=\"860\" y2=\"120\" stroke=\"#741f2e\" stroke-width=\"4\"\/>\n<rect x=\"860\" y=\"48\" width=\"175\" height=\"145\" rx=\"18\" fill=\"#fff\" stroke=\"#d8c9cc\" stroke-width=\"2\"\/><rect x=\"893\" y=\"73\" width=\"110\" height=\"55\" rx=\"7\" fill=\"#30343a\"\/><rect x=\"907\" y=\"84\" width=\"78\" height=\"19\" rx=\"2\" fill=\"#d9b65f\"\/><text x=\"947\" y=\"158\" text-anchor=\"middle\" font-family=\"Arial\" font-size=\"18\" font-weight=\"700\" fill=\"#5b1723\">Amateur Radio<\/text>\n<\/svg><\/div>\n<div class=\"note\"><strong>Important U.S. amateur-radio distinction:<\/strong> \u201csecure\u201d and \u201c256\u2011bit AES encrypted\u201d describe the B9X Internet\/Wi\u2011Fi client\/server portion. They should not be advertised as encryption of the amateur-radio RF transmission. FCC \u00a797.113(a)(4) prohibits amateur stations from transmitting messages encoded for the purpose of obscuring their meaning. The RF side is ordinary amateur communication and remains subject to the operator\u2019s licensing, identification, control and other Part 97 obligations.<\/div>\n<\/div><\/section>\n\n<section><div class=\"w\"><h2>A Strong Fit for Radio Clubs and Experimenters<\/h2><p class=\"sub\">A QRZ visitor can immediately see the possibilities: a private Internet voice group for everyday communication, programmable B9X handheld-style clients, and an optional amateur-radio bridge when licensed operators want the conversation on RF.<\/p>\n<div class=\"grid\"><div class=\"card\"><h3>Club Voice Group<\/h3><p>Give members a simple PTT experience through the Internet without tying up an amateur frequency for every conversation.<\/p><\/div><div class=\"card\"><h3>Remote Radio<\/h3><p>Use the radio gateway for remote-base or simplex-node style experiments supported by B9X Voice Server.<\/p><\/div><div class=\"card\"><h3>Build It Your Way<\/h3><p>Create the touchscreen controls, indicators and workflow in B9X Basic rather than relying on a fixed-purpose radio client.<\/p><\/div><\/div>\n<\/div><\/section>\n\n<section class=\"cta\"><div class=\"w\"><h2>Build Your Own B9X Voice Network<\/h2><p>Start with B9X Basic GUI Modules and B9X Voice Server. Add the amateur-radio gateway when you are ready to bring properly licensed operators onto the air.<\/p>\n<div class=\"btns\" style=\"justify-content:center\"><a class=\"btn primary\" href=\"https:\/\/b9xelectronics.com\/?page_id=144\">B9X Voice Server<\/a><a class=\"btn outline\" href=\"https:\/\/b9xelectronics.com\/?page_id=1506\">B9X Basic GUI Module<\/a><a class=\"btn outline\" href=\"https:\/\/b9xelectronics.com\/\">B9X Electronics<\/a><\/div><\/div><\/section>\n<\/div>\n\n\n\n<!-- =========================================================\n     B9X Wi-Fi Handie-Talkie - Under The Hood\n     Customer-facing source-code overview\n     ========================================================= -->\n\n<section class=\"b9x-underhood\">\n<style>\n.b9x-underhood{\n    max-width:1180px;\n    margin:50px auto 30px auto;\n    padding:0 18px;\n    font-family:Arial,Helvetica,sans-serif;\n    color:#292929;\n    line-height:1.65;\n}\n.b9x-underhood *{box-sizing:border-box}\n\n.b9x-underhood .b9x-hero{\n    background:linear-gradient(135deg,#65081c,#8b1029);\n    color:#fff;\n    border-radius:14px;\n    padding:32px 34px;\n    box-shadow:0 6px 20px rgba(0,0,0,.16);\n}\n.b9x-underhood .b9x-hero h2{\n    margin:0 0 8px 0;\n    color:#fff;\n    font-size:34px;\n    line-height:1.15;\n}\n.b9x-underhood .b9x-hero p{\n    margin:0;\n    font-size:18px;\n    max-width:900px;\n}\n.b9x-underhood .b9x-badge{\n    display:inline-block;\n    background:#f2b91c;\n    color:#241600;\n    padding:5px 11px;\n    border-radius:20px;\n    font-size:12px;\n    font-weight:700;\n    margin-bottom:13px;\n    letter-spacing:.4px;\n}\n.b9x-underhood h3{\n    color:#6d0a21;\n    font-size:24px;\n    margin:32px 0 10px 0;\n}\n.b9x-underhood h4{\n    color:#6d0a21;\n    margin:0 0 8px 0;\n    font-size:18px;\n}\n.b9x-underhood .b9x-intro{\n    font-size:17px;\n    margin:24px 3px;\n}\n.b9x-underhood .b9x-grid{\n    display:grid;\n    grid-template-columns:repeat(2,minmax(0,1fr));\n    gap:18px;\n    margin:20px 0;\n}\n.b9x-underhood .b9x-card{\n    background:#fff;\n    border:1px solid #ddd;\n    border-top:4px solid #750b24;\n    border-radius:10px;\n    padding:20px;\n    box-shadow:0 3px 12px rgba(0,0,0,.07);\n}\n.b9x-underhood .b9x-card p{\n    margin:6px 0 0 0;\n}\n.b9x-underhood .b9x-flow{\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    flex-wrap:wrap;\n    gap:8px;\n    margin:24px 0;\n    padding:22px;\n    background:#f5f5f5;\n    border-radius:10px;\n}\n.b9x-underhood .b9x-step{\n    background:#fff;\n    border:2px solid #790c25;\n    border-radius:8px;\n    padding:11px 15px;\n    font-weight:700;\n    text-align:center;\n    min-width:125px;\n}\n.b9x-underhood .b9x-arrow{\n    color:#790c25;\n    font-size:24px;\n    font-weight:bold;\n}\n.b9x-underhood pre{\n    background:#17191d;\n    color:#f5f5f5;\n    border-left:5px solid #a51234;\n    padding:17px;\n    border-radius:7px;\n    overflow:auto;\n    line-height:1.45;\n    font-family:Consolas,\"Courier New\",monospace;\n    font-size:14px;\n}\n.b9x-underhood code{\n    font-family:Consolas,\"Courier New\",monospace;\n}\n.b9x-underhood .b9x-inline{\n    background:#f1e8eb;\n    color:#67091f;\n    padding:2px 6px;\n    border-radius:4px;\n    white-space:nowrap;\n}\n.b9x-underhood .b9x-highlight{\n    background:#fff8dd;\n    border:1px solid #ecd578;\n    border-left:5px solid #e1ae10;\n    border-radius:8px;\n    padding:18px 20px;\n    margin:24px 0;\n}\n.b9x-underhood .b9x-source{\n    background:#f7f7f7;\n    border:1px solid #ddd;\n    border-radius:10px;\n    padding:20px;\n    margin-top:22px;\n}\n@media(max-width:760px){\n    .b9x-underhood .b9x-grid{grid-template-columns:1fr}\n    .b9x-underhood .b9x-hero h2{font-size:28px}\n    .b9x-underhood .b9x-arrow{transform:rotate(90deg)}\n}\n<\/style>\n\n<div class=\"b9x-hero\">\n    <span class=\"b9x-badge\">B9X BASIC SOURCE CODE INCLUDED<\/span>\n    <h2>Under The Hood<\/h2>\n    <p>\n        The B9X Wi-Fi Handie-Talkie isn&#8217;t a closed black box.\n        The complete B9X Basic application is included, so you can see how\n        the radio works, modify it, and use it as the starting point for your\n        own communications projects.\n    <\/p>\n<\/div>\n\n<p class=\"b9x-intro\">\n    One of the advantages of the B9X Basic GUI Module is that a fairly\n    sophisticated touchscreen push-to-talk application can be written in\n    understandable B9X Basic. The Handie-Talkie program creates the user\n    interface, connects to the B9X Voice Server, monitors the microphone and\n    battery, controls speaker volume, handles push-to-talk, stores the\n    connection settings, and processes touchscreen events.\n<\/p>\n\n<h3>Two Screens, One B9X Basic Application<\/h3>\n\n<div class=\"b9x-grid\">\n\n    <div class=\"b9x-card\">\n        <h4>Main Handie-Talkie Screen<\/h4>\n        <p>\n            <code class=\"b9x-inline\">createMainScreen()<\/code> builds the\n            primary operating screen. It contains the large Push To Talk\n            button, microphone-level meter, battery meter, connection lamp,\n            speaker-volume slider and Configure button.\n        <\/p>\n    <\/div>\n\n    <div class=\"b9x-card\">\n        <h4>Configuration Screen<\/h4>\n        <p>\n            <code class=\"b9x-inline\">createConfigScreen()<\/code> provides\n            editable Host, Port and Password fields together with Connect,\n            Close and Main Screen controls. A built-in on-screen keyboard is\n            added for entering the connection information.\n        <\/p>\n    <\/div>\n\n<\/div>\n\n<p>\n    The screens were created with the B9X Basic Screen Designer and are then\n    controlled directly from B9X Basic. Each control is assigned an element\n    number so the program can determine exactly which control the operator\n    touched.\n<\/p>\n\n<h3>The Main Screen Is Created in B9X Basic<\/h3>\n\n<p>\n    For example, the large Push To Talk button is created with a single\n    B9X Basic display command:\n<\/p>\n\n<pre>result = displayAddRoundedButton(PTT_BUTTON, 41, 349, 239, 90, \"Push To Talk\", 4, 10);<\/pre>\n\n<p>\n    The program uses the same approach for the microphone meter, battery\n    meter, connection lamp, speaker-volume slider and other controls.\n    A background bitmap stored in SPIFFS supplies the graphical background:\n<\/p>\n\n<pre>result = displayAddBmpFromFile(0, 0, 0, \"\/spiffs\/background.bmp\", 0);<\/pre>\n\n<p>\n    This makes the user interface customizable. The supplied application is\n    ready to use, but it can also become the starting point for a completely\n    different B9X Basic communications application.\n<\/p>\n\n<h3>Connecting to the B9X Voice Server<\/h3>\n\n<p>\n    The <code class=\"b9x-inline\">vConnect()<\/code> function reads the Host,\n    Port and Password directly from the configuration screen:\n<\/p>\n\n<pre>let host$=trim$(displayGetText$(TXT_HOST));\nport=val(trim$(displayGetText$(TXT_PORT)));\nlet password$=trim$(displayGetText$(PTXT_PASSWORD));<\/pre>\n\n<p>\n    The settings are saved in nonvolatile storage so they can be restored\n    later:\n<\/p>\n\n<pre>retVal=setNVS(\"fHost\", host$);\nretVal=setNVS(\"fPort\", str$(port));\nretVal=setNVS(\"fPassword\", password$);<\/pre>\n\n<p>\n    The application then asks the VOIP system to connect to the B9X Voice\n    Server:\n<\/p>\n\n<pre>retVal=voipConnect(host$, port, password$, \"MYNODE\", b9x_key2$);<\/pre>\n\n<div class=\"b9x-highlight\">\n    <strong>An important part of the connection sequence:<\/strong>\n    the program waits until the connection has actually been established\n    before starting the receive audio stream. This keeps connection setup\n    separate from normal audio operation.\n<\/div>\n\n<pre>for i=0 to 40 do\n    retVal=voipIsConnected();\n\n    if retVal==1 then\n        retVal=voipStartListening();\n        return 1;\n    endif\n\n    x=wait(250);\nnext<\/pre>\n\n<div class=\"b9x-flow\">\n    <div class=\"b9x-step\">Enter Server<br>Information<\/div>\n    <div class=\"b9x-arrow\">\u2192<\/div>\n    <div class=\"b9x-step\">Connect<\/div>\n    <div class=\"b9x-arrow\">\u2192<\/div>\n    <div class=\"b9x-step\">Wait for<br>Connection<\/div>\n    <div class=\"b9x-arrow\">\u2192<\/div>\n    <div class=\"b9x-step\">Start<br>Listening<\/div>\n<\/div>\n\n<h3>Push To Talk Really Is Push To Talk<\/h3>\n\n<p>\n    The touchscreen produces events that can be retrieved with\n    <code class=\"b9x-inline\">getDisplayMessage$()<\/code>. The application\n    examines those events to determine which control was operated.\n<\/p>\n\n<p>\n    When the operator presses the Push To Talk button, the application starts\n    transmitting:\n<\/p>\n\n<pre>if event==B9X_DISPLAY_PRESSED then\n    if number==PTT_BUTTON then\n        isSending=1;\n        retVal=voipStartSending();\n    endif\nendif<\/pre>\n\n<p>\n    Releasing the button stops transmission:\n<\/p>\n\n<pre>if event==B9X_DISPLAY_RELEASED then\n    if number==PTT_BUTTON then\n        isSending=0;\n        retVal=voipHaltSending();\n    endif\nendif<\/pre>\n\n<div class=\"b9x-flow\">\n    <div class=\"b9x-step\">Press PTT<\/div>\n    <div class=\"b9x-arrow\">\u2192<\/div>\n    <div class=\"b9x-step\">Start Sending<\/div>\n    <div class=\"b9x-arrow\">\u2192<\/div>\n    <div class=\"b9x-step\">Talk<\/div>\n    <div class=\"b9x-arrow\">\u2192<\/div>\n    <div class=\"b9x-step\">Release PTT<\/div>\n    <div class=\"b9x-arrow\">\u2192<\/div>\n    <div class=\"b9x-step\">Stop Sending<\/div>\n<\/div>\n\n<h3>Live Microphone Level<\/h3>\n\n<p>\n    While transmitting, the program retrieves the current microphone level\n    and displays it on the vertical Mic meter:\n<\/p>\n\n<pre>micLevel=voipGetMicLevel();\n\nif isSending==1 then\n    retVal=displaySetValue(MICLEVEL_VBAR, micLevel);\nelse\n    retVal=displaySetValue(MICLEVEL_VBAR, 0);\nendif<\/pre>\n\n<p>\n    This gives the operator immediate visual feedback while talking.\n<\/p>\n\n<h3>Speaker Volume From the Touchscreen<\/h3>\n\n<p>\n    The speaker-volume control is a normal touchscreen slider. When its value\n    changes, the new value is sent directly to the VOIP audio system:\n<\/p>\n\n<pre>if event==B9X_DISPLAY_VALUE_CHANGED then\n    if number==SPKVOL_SLIDER then\n        retVal=voipSetVolume(value);\n    endif\nendif<\/pre>\n\n<p>\n    There is no separate settings application required. The touchscreen\n    control and the audio system are tied together directly in the B9X Basic\n    program.\n<\/p>\n\n<h3>Connection Status at a Glance<\/h3>\n\n<p>\n    The program continually checks the Voice Server connection. The\n    Connected lamp on the main screen follows the actual connection state:\n<\/p>\n\n<pre>retVal=voipIsConnected();\n\nif retVal==1 then\n    retVal=displaySetChecked(CONNECTED_LAMP, 1);\nelse\n    retVal=displaySetChecked(CONNECTED_LAMP, 0);\nendif<\/pre>\n\n<h3>Battery Monitoring<\/h3>\n\n<p>\n    Battery level is also updated continuously and displayed on the\n    touchscreen:\n<\/p>\n\n<pre>let blevel=batteryLevel();\nretVal=displaySetValue(BATTERY_VBAR, blevel);<\/pre>\n\n<p>\n    The result is a radio-style interface where the operator can see the\n    battery condition without leaving the main screen.\n<\/p>\n\n<h3>Automatic Display Dimming<\/h3>\n\n<p>\n    The application even handles display power management. User interaction\n    restores full brightness. After approximately ten seconds without a\n    touchscreen event, the program reduces the display brightness:\n<\/p>\n\n<pre>if (getTicks(1)-ticks)&gt;10000 then\n    ticks=getTicks(1);\n    retVal=displaySetBrightness(5);\nendif<\/pre>\n\n<p>\n    When another display message arrives, the program returns the display to\n    full brightness:\n<\/p>\n\n<pre>ticks=getTicks(1);\nretVal=displaySetBrightness(100);<\/pre>\n\n<h3>The Event-Driven Main Loop<\/h3>\n\n<p>\n    At the center of the application is a straightforward B9X Basic\n    <code class=\"b9x-inline\">while<\/code> loop. It updates the battery,\n    connection indicator and microphone meter, then checks the display event\n    queue for user activity.\n<\/p>\n\n<p>\n    The helper function <code class=\"b9x-inline\">getNthField$()<\/code>\n    extracts information from the display message so the application can\n    obtain the element number, event type and current value.\n<\/p>\n\n<pre>let dmsg$=getDisplayMessage$();\n\nif len(dmsg$)&gt;0 then\n    number=val(getNthField$(2, dmsg$));\n    event=val(getNthField$(4, dmsg$));\n    value=val(getNthField$(5, dmsg$));\nendif<\/pre>\n\n<p>\n    From there, ordinary B9X Basic <code class=\"b9x-inline\">if<\/code>\n    statements decide what the application should do.\n<\/p>\n\n<h3>What the Included Source Demonstrates<\/h3>\n\n<div class=\"b9x-grid\">\n\n    <div class=\"b9x-card\">\n        <h4>Touchscreen GUI<\/h4>\n        <p>\n            Buttons, labels, sliders, lamps, vertical meters, password\n            entry, backgrounds and the built-in keyboard are all controlled\n            from B9X Basic.\n        <\/p>\n    <\/div>\n\n    <div class=\"b9x-card\">\n        <h4>Push-To-Talk VOIP<\/h4>\n        <p>\n            Connect, listen, start transmitting, stop transmitting, close the\n            connection, adjust volume and monitor microphone level.\n        <\/p>\n    <\/div>\n\n    <div class=\"b9x-card\">\n        <h4>Persistent Configuration<\/h4>\n        <p>\n            Host, port and password settings are saved using B9X Basic\n            nonvolatile-storage functions and restored when the Configure\n            screen is opened.\n        <\/p>\n    <\/div>\n\n    <div class=\"b9x-card\">\n        <h4>Real-Time Status<\/h4>\n        <p>\n            The program continually updates connection status, microphone\n            activity and battery level while remaining responsive to the\n            touchscreen.\n        <\/p>\n    <\/div>\n\n<\/div>\n\n<div class=\"b9x-source\">\n    <h3 style=\"margin-top:0;\">The Source Code Is Part of the Product<\/h3>\n\n    <p>\n        The B9X Wi-Fi Handie-Talkie application is supplied as B9X Basic\n        source code. You aren&#8217;t limited to the interface or operating\n        behavior shown here. The supplied program can be studied, changed\n        and expanded to fit your own project.\n    <\/p>\n\n    <p>\n        Change the screen layout. Add controls. Change how PTT operates.\n        Add status information. Integrate other B9X Basic features. Or use\n        the Handie-Talkie program as the foundation for an entirely new\n        communications application.\n    <\/p>\n\n    <p style=\"margin-bottom:0;\">\n        <strong>That&#8217;s the idea behind B9X Basic:<\/strong> powerful embedded\n        applications that remain understandable and accessible at the\n        application level.\n    <\/p>\n<\/div>\n\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>B9X Electronics \u2022 Internet Voice + Amateur Radio Your B9X Basic GUI Module Becomes a Wi\u2011Fi Handie\u2011Talkie. Create a secure push\u2011to\u2011talk voice group through B9X Voice Server \u2014 then optionally connect an amateur radio so licensed operators can bring the group onto the air. Touchscreen PTTLow\u2011latency group voice256\u2011bit AES Internet audioComplete B9X Basic source includedFree [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1546","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/b9xelectronics.com\/index.php?rest_route=\/wp\/v2\/pages\/1546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/b9xelectronics.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/b9xelectronics.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/b9xelectronics.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/b9xelectronics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1546"}],"version-history":[{"count":3,"href":"https:\/\/b9xelectronics.com\/index.php?rest_route=\/wp\/v2\/pages\/1546\/revisions"}],"predecessor-version":[{"id":1555,"href":"https:\/\/b9xelectronics.com\/index.php?rest_route=\/wp\/v2\/pages\/1546\/revisions\/1555"}],"wp:attachment":[{"href":"https:\/\/b9xelectronics.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}