On the drawing board

Please start a new thread for each new topic. This will allow for easy tracking and hopefully, contributions by others
Mad4Radio
Posts: 27
Joined: Sun Aug 31, 2014 1:41 pm

Re: On the drawing board

Post by Mad4Radio »

Looking well will Carn't wait to test it out, keep up the great work & seasons greetings will

Best Regards
Colin
User avatar
Administrator
Site Admin
Posts: 379
Joined: Mon Jul 21, 2014 5:48 am

Re: On the drawing board

Post by Administrator »

Friday 12 December update.

The distributed "Server" is progressing well.
A number of new "primitive" commands have been added (see below).

I have run this with multiple clients (i.e. on what will eventually be Dispatch Consoles or Remote Radio Heads) plus connected to 2 x Control/Base Station radios attached via USB.

The beauty of "Primitives" is that they are usually easy to implement and test, but when combined into a larger combination of "primitives", they can do an amazing amount of complex operations.

Currently, I don't have a command for downloading the entire Zone/Channel table from the server but I can do most of it by:
(NB: Remember <radio index> is a value of 0~7 - which is the index of the attached radio - via USB)

1. ReadZoneList, <radio index>,
2. GetMaxZones, <radio index>

For each zone number: ...
3. GetZoneName, <radio Index>, <zone number>
4. GetZoneMaxChannels, <radio index>, <zone number>

For each channel in a Zone: ...
5. GetZoneChannelName, <radio index>, <zone number>, <channel number>

Voilà! I can build the Zone/Channel list on the client from just 5 x "primitives" ..
Now that wouldn't be hard to script in ASCII using PHP ;)

cheers
Will

Code: Select all

	//	SET - Connection
	{ EConnectToRadio,			_T("Connect"),		true,	1, },	
	{ EDisconnectFromRadio,		_T("Disconnect"),	true,	1, },
	//	SET - Zone and Channel
	{ EZoneIncrement,			_T("Zone+"),		true,	1, },
	{ EZoneDecrement,			_T("Zone-"),		true,	1, },
	{ EChannelIncrement,		_T("Channel+"),		true,	1, },
	{ EChannelDecrement,		_T("Channel-"),		true,	1, },
	{ EZoneSet,					_T("Zone"),			true,	2, 1, 9999},
	{ EChannelSet,				_T("Channel"),		true,	2, 1, 9999},
	{ EZoneChannelSet,			_T("ZoneChannel"),	true,	3, 1, 9999, 1, 9999, },
	//	SET - Volume
	{ EVolumeIncrement,			_T("Volume+"),		true,	1, },
	{ EVolumeDecrement,			_T("Volume-"),		true,	1, },
	{ EVolumeSet,				_T("Volume"),		true,	2, 0, 255, },
	//	Force Actions
	{ EReadZoneList,			_T("ReadZoneList"),	true,	1, },
	//	GET - Local Data
	{ EGetConnected,			_T("GetConnected"),			false, 1 },
	{ EGetSerialNumber,			_T("GetSerial"),			false, 1 },
	{ EGetLocalRadioId,			_T("GetRadioId"),			false, 1 },
	{ EGetMaxZones,				_T("GetMaxZones"),			false, 1 },
	{ EGetZoneMaxChannels,		_T("GetZoneMaxChannels"),	false, 2, 1, 9999 },	
	{ EGetVolume,				_T("GetVolume"),			false, 1 },
	{ EGetZone,					_T("GetZone"),				false, 1 },
	{ EGetChannel,				_T("GetChannel"),			false, 1 },
	{ EGetZoneName,				_T("GetZoneName"),			false, 2, 1, 9999 },
	{ EGetZoneChannelName,		_T("GetZoneChannelName"),	false, 3, 1, 9999, 1, 9999 },
	//	REGISTER - for Async Events
	{ ERegisterUpdate,			_T("RegisterUpdate"),	false, 1 },
	{ EDeregisterUpdate,		_T("DeregisterUpdate"),	false, 1 },
Geriatrics Generate Methane.
Grafitti Clifton Hill 1974
Living proof 2021
Mad4Radio
Posts: 27
Joined: Sun Aug 31, 2014 1:41 pm

Re: On the drawing board

Post by Mad4Radio »

Any idea of a release date as yet will & have you given it anymore thought as per a smartphone app that could link back into the dispatch software console????

Cheers will keep up the good work

P.S been on hols so & back home now so I can play more with the latest release of TT

Take care will
User avatar
Administrator
Site Admin
Posts: 379
Joined: Mon Jul 21, 2014 5:48 am

Re: On the drawing board

Post by Administrator »

Hi Colin,

I'm not sure about a release date as yet, but Yesterday I finished the "Auto Update" of the Radio Display (attributes & Text) out to the Client Application(s).

Code: Select all

	//	Text Line Data
	{ EGetMaxTextLines,			_T("GetMaxTextLines"),		false, 1 },
	{ EGetMaxTextColumns,		_T("GetMaxTextColumns"),	false, 1 },
	{ EGetTextLine,				_T("GetTextLine"),			false, 2, 0, 6 },
And today, I've finished the Momentary Push buttons for the upcoming "Remote Radio Head" application:-

Code: Select all

	//	Momentary Push Buttons
	{ EPBOK,					_T("PBOK"),			true,	1, },							// Select/OK
	{ EPBMenu,					_T("PBMenu"),		true,	1, },
	{ EPBBack,					_T("PBBack"),		true,	1, },
	{ EPBLeftArrow,				_T("PBLeft"),		true,	1, },
	{ EPBRightArrow,			_T("PBRight"),		true,	1, },
	{ EPBUpArrow,				_T("PBUp"),			true,	1, },
	{ EPBDownArrow,				_T("PBDown"),		true,	1, },
	{ EPBShortProg1,			_T("PBP1"),			true,	1, },
	{ EPBShortProg2,			_T("PBP2"),			true,	1, },
	{ EPBShortProg3,			_T("PBP3"),			true,	1, },
	{ EPBShortProg4,			_T("PBP4"),			true,	1, },
	{ EPBLongProg1,				_T("PBP1Long"),		true,	1, },
	{ EPBLongProg2,				_T("PBP2Long"),		true,	1, },
	{ EPBLongProg3,				_T("PB3Long"),		true,	1, },
	{ EPBLongProg4,				_T("PBP4Long"),		true,	1, },
cheers
Will
Geriatrics Generate Methane.
Grafitti Clifton Hill 1974
Living proof 2021
Mad4Radio
Posts: 27
Joined: Sun Aug 31, 2014 1:41 pm

Re: On the drawing board

Post by Mad4Radio »

Looks interesting will Carn't wait to test it.....keep up the good work will & seasons greetings buddy

Very kindest Regards

Colin
User avatar
Administrator
Site Admin
Posts: 379
Joined: Mon Jul 21, 2014 5:48 am

Re: On the drawing board

Post by Administrator »

Hi guys,

This is progressing well ...
I have added monitoring for Call Progress:-

Code: Select all

	//	Call Progress
	{ EGetCallProgress,			_T("GetCallProgress"),		false, 1 },
	//	REGISTER - for Async Events
	{ ERegisterCall,			_T("RegisterCall"),		false, 1 },
	{ EDeregisterCall,			_T("DeregisterCall"),	false, 1 },
(The Remote Client can Register and Deregister from receiving asynchronous Call Progress messages, i.e. I could then write a very simple remote App that could monitor "Calls Only" ... filter the calls and print or produce a log of some form).

I am finalising the details of the data that will be contained in the "Call Progress" Message/Packet sent to the remote Client:-

1. Enumeration of the Call transaction type, (See below)
2. Boolean flag indicating if the Source was the PC
3. Text String - currently not used
4. Source Subscriber ID (Radio number)
(4a. Possibly - string text alias of the source)
5. Destination ID - either Group number or Subscriber ID
(5a. Possibly - string text alias of the destination)
6. Zone Number
7. Channel Number
8. UTC Time Stamp of this Transaction
9. Total Call time in seconds (so far including any hang time)
10. Total Sub Call in seconds (last Caller PTT time if applicable)

Next cab off the rank will then be Commands initiating different call types by the client PTT i.e. Group, Private or Alert calls.
Then I'll be trying some ventriloquism ;)

cheers

Call Transaction Type

Code: Select all

typedef	enum	ECRC_CallResultCode_Tag {
		//	Asynchronous Call Notifications
		ECallStartOutgoingPrivateCall,
		ECallStartOutgoingGroupCall,
		ECallStartOutgoingAllSystemCall,
		ECallStartOutgoingAlertCall,
		ECallStartOutgoingEmergency,
		//
		ECallStartIncomingPrivateCall,
		ECallStartIncomingGroupCall,
		ECallStartIncomingAlertCall,
		ECallStartIncomingEmergency,
		//	Other may join
		ECallInProgressPrivate,
		ECallInProgressGroup,
		ECallInProgressAlert,
		EInProgressEmergency,
		//	Hang Time
		ECallInHangTimePrivate,
		ECallInHangTimeGroup,
		ECallInHangTimeAlert,

		//	Termination
		ECallEndCall,
		ECallEndEmergency,
		ECallOutgoingPrivateCallFails,
		ECallOutgoingGroupCallFails,
		ECallOutgoingAllSystemCallFails,
		ECallOutgoingAlertCallFails,
		//	Acknowledges
		ECallAlertCallAcknowledged,
		ECallGroupCallAcknowledged,
		ECallInactive	= -1,
	} ECRC_CallResultCode;
Geriatrics Generate Methane.
Grafitti Clifton Hill 1974
Living proof 2021
User avatar
Administrator
Site Admin
Posts: 379
Joined: Mon Jul 21, 2014 5:48 am

Re: On the drawing board

Post by Administrator »

And now for some ventriloquism ...

I designed this nearly 3 x years ago - now to see if the the "remote" parts work .. the local bits do ;)

P.S. Have a Happy and Safe New Year to all.
Attachments
VOICE_01.jpg
VOICE_01.jpg (118.39 KiB) Viewed 11413 times
Geriatrics Generate Methane.
Grafitti Clifton Hill 1974
Living proof 2021
User avatar
Administrator
Site Admin
Posts: 379
Joined: Mon Jul 21, 2014 5:48 am

Re: On the drawing board

Post by Administrator »

Hi guys,

This is still moving along quite well ... I've just spent a few days creating the "Configuration" application to setup some of the servers on the Win "Service" box.
NearlyVOIP.PNG
NearlyVOIP.PNG (81.46 KiB) Viewed 11409 times
The server is saving a "nice" copy of the *.wav files coming in from the radio ... tomorrow I'll try and pump those Raw WAV Packets out to other clients on my network - and "listen" to how they sound.

cheers
Will B
Geriatrics Generate Methane.
Grafitti Clifton Hill 1974
Living proof 2021
User avatar
Administrator
Site Admin
Posts: 379
Joined: Mon Jul 21, 2014 5:48 am

Re: On the drawing board

Post by Administrator »

Hi guys,

FWIW - progress ...

From small acorns ... a test client is now well under way ... but the GUI (dialogs etc) required to set up both the Server/Service (8 x radio instances) plus the Client etc are a real pain. I just want to write the interesting techie stuff not the <expletive deleted> Windows Interface ;) ...

Below is an image of 2 x clients plus a client config dialog and a Win Server (not the Service version), all running on 1 x PC.

One test client is using the ASCII interface and the other is using the Binary Interface (which is still under test).

FYI: The Text version converts speech into 8 bit uLaw encoding and then converts that data into Base64 encoding (just like that used to send binary data over HTTP), before it squirts it across the Network. I still haven't tested the VoIP part (in text or Binary) - because of all the config GUI coding and testing that was required to get it to that point. :(

The Voice recording by the Server/Service into disk based *.WAV files - works like a gem (and the client uses the same engine just with different sources/sinks)!!

Added some more commands to register to receive Asynchronous messages/Data from the radios.

Code: Select all

	//	Display/Text Line Data - (Immediate)
	{ EGetMaxTextLines,			_T("GetMaxTextLines"),		false, 0, NULL, 0, NULL },		//1 },
	{ EGetMaxTextColumns,		_T("GetMaxTextColumns"),	false, 0, NULL, 0, NULL },		//1 },
	{ EGetTextLine,				_T("GetTextLine"),			false, 1, gatInputGetTextLine, 0, NULL },	//2, 0, 6 },
	//	Call Progress
	{ EGetCallProgress,			_T("GetCallProgress"),		false, 0, NULL, 0, NULL },		//1 },
	//	Voice
	{ EGetVoiceParameters,		_T("GetVoiceParameters"),	false, 0, NULL, 0, NULL },		//1 },
	{ EVoiceDataPacket,			_T("VoiceDataPacket"),		false, 0, NULL, 0, NULL },		//1 },

	//	--->	---------------------	<---
	//	--->	Registration services	<---
	//	--->	---------------------	<---
	//	REGISTER - for Async Events - (Registration)
	{ ERegisterUpdate,			_T("RegisterUpdate"),		false, 0, NULL, 0, NULL },		//1 },
	{ EDeregisterUpdate,		_T("DeregisterUpdate"),		false, 0, NULL, 0, NULL },		//1 },
	{ ERegisterCall,			_T("RegisterCall"),			false, 0, NULL, 0, NULL },		//1 },
	{ EDeregisterCall,			_T("DeregisterCall"),		false, 0, NULL, 0, NULL },		//1 },
	{ ERegisterDisplay,			_T("RegisterDisplay"),		false, 0, NULL, 0, NULL },		//1 },
	{ EDeregisterDisplay,		_T("DeregisterDisplay"),	false, 0, NULL, 0, NULL },		//1 },
	{ ERegisterVoice,			_T("RegisterVoice"),		false, 0, NULL, 0, NULL },		//1 },
	{ EDeregisterVoice,			_T("DeregisterVoice"),		false, 0, NULL, 0, NULL },		//1 },
	
	//	--->	----------------------------	<---
	//	--->	Unsolicited/Async Responses		<---
	//	--->	----------------------------	<---

	//	--->	Malformed Request	<---
	{ EMalformedRequest,		MALFORMED_REQUEST,			false, 0, NULL, 0, NULL },
Slow - but at least it's getting closer though.

cheers
Will B
(Image link)
http://www.transtrbo.com/images/TTServer150211.PNG

Image
Geriatrics Generate Methane.
Grafitti Clifton Hill 1974
Living proof 2021
User avatar
Administrator
Site Admin
Posts: 379
Joined: Mon Jul 21, 2014 5:48 am

Re: On the drawing board

Post by Administrator »

Hi guys,

A quick update - I've finally got to the position where I can Transmit and Receive VoIP (in Binary Mode using PCM encoding - 11.025 kHz, Mono, 16-bit - collection sample rate 20Hz).

This has only been tested on a TCP/IP connection between the server and a client running on the same PC. (i.e. I haven't implemented any "Jitter" control yet).

But I've also found that I must have a bug somewhere in the uLaw encoding/decoding part of my code - but other than that - IMO this point is a major milestone towards the completion of this project.

I am using PC "Line-In" from the /V\ "Line-out" (back connector) and it is very very loud - the radio "has been told" that the receiver is self powered and has it's own amp - any suggestions about setting the "Line-Out" volume would be appreciated... (I've just lowered the "Control Panel -> Sound -> Recording -> (Realtek) Line In -> Properties -> Levels" value to about 27 from 47 - so I'll try again - FWIW: 10 is working really well - oops maybe it's my headphones - lol).

It's Sunday here in Aussieland and the buses are a bit quiet - I'm looking at adding a *.WAV file transmitter - that will allow me to test VoIP on a less ad-hoc basis plus add some needed functionality ;).

I will fix the bug with the uLaw encoding/decoding and that should improve the traffic flow over a real (LAN) Network - wish me luck - because now this project is slowly coming to fruition.

When this is finally working - the next step will be:- PTT on the Networked PC -> Server/Service PC -> /V\ Radio (Line In) -> Air Waves :)

cheers
Will B

P.S. I see a new command "PlayWavFile" coming up soon - the *.WAV file (in the correct format) will have to be on the server - any suggestions ?
(This will play the *.WAV file to any registered listeners on that Radio Index - possibly including the attached radio).
Geriatrics Generate Methane.
Grafitti Clifton Hill 1974
Living proof 2021
Post Reply