Control your radio transceiver from your web browser

About 5 years ago, i’ve create a small php script to control my YAESU FT817 via APACHE server and a LINUX box,
since this moment, i have work on my « cloud » for HAM radio « www.crx.cloud » and I thought about how to have the most powerfull system and on the cloud.

During this time, i’ve test various project a DLL for IE/Firefox for serial COM port operation with Javascript,
also a Google Chrome application and extension to do this job.

In parallel I discovered NODEJS and also the WEBSOCKETS with Socket.IO, suddenly I left on this concept:

– A NODEJS application that fulfills the role of WEBSOCKETS server and also allows to control the serial port.

– On the other a client, in the browser using JAVASCRIPT and WEBSOCKETS to connect to the server via his WEB BROWSER.

 

 

Thus the user launches the server in the background on the PC he wants. Then it connects to it from any browser (CHROME / FIREFOX or OPERA).

On the protocol side, each radio equipment manufacturer uses its own system except for some of the groups, so I had to deal with that, so I grouped:

– yaesu1 / icom1

– kenwood1 / elecraft1 / yaesu2

Why that ? simply because the method of writing and reading the serial port is not the same.

On one side are hexadecimal values ​​for ICOM / YAESU and on the other character strings for YAESU2 / KENWOOD1.

Finally in terms of protocol ICOM uses identifiers for each of their equipment, against the procole remains the same,
so even if the code is more complicated to use their protocol, it’s quite simple in the end to control. YAESU side,
it’s not the same thing because there are 2 different protocols.

Funny thing also at YAESU protocol V1 the radio returns frequency and mode in the same frame … so I had to adapt my code
so that it works in all situations, so JAVASCRIPT side I had to use the Promise class here allows to control the execution
of an asynchronous task before launching another example:

– My client JS asks the server: What is the frequency?

– He must wait before asking what is the mode,

Otherwise the remote NODEJS server will not be able to execute commands on the serial port and may overlap with them.

This is where the JS Promise class comes into play.

Then I created a class javascript by constructor to generate the commands, the most complicated being that
for ICOM because of the calculations and the changes of bases to operate (with binary shift for example).

Note that for the moment the system is not perfect because on the part NODEJS I still have books of reading specific to each
manufacturer in the long term I would like to do these operations also on the client side JS / WEBSOCKET and not side NodeJS.

Finally for the moment, the project is in « beta » because I do not have hardware kenwood1 / yaesu2
so I advance the code thanks to feedback from users.

If you want to see what this gives:

Server CRX-COM (NODEJS):
https://git.crx.cloud/f4eyq/crx-com

Client part (JS Web browser) CRX-CLOUD:
https://git.crx.cloud/crx-php/crx-cloud-ham/tree/master/app-php/crxComClient
https://git.crx.cloud/crx-php/crx-cloud-ham/tree/master/app-js/crxComClient

I also posted a little documentation to explain all this here:
https://project.crx.cloud/crx-com

And a diagram is available here:
https://project.crx.cloud/crx-com-schema

73  to   all