Practical details:
There are some things you need to tweak in order to make app_rpt and alsaradio working as a repeater and Echolink node.
Hardware:
I’m using FT-857D to build the repeater. The connection between PC and radio station is signaling and audio. For signaling I’m using the DATA connector on the back which is a mini DIN 6 pin:
The PTT is activated low and needs very low current to be activated. I measured about 140uA needed current for activating PTT.
The SQL signal (which sometimes is called COR – Carrier Operated Relay or COS – Carrier Operated Squelch) is activated high but it can only drive small current (uA) and therefore a transistor needs to be used to drive the serial line. That is why one will need an additional power supply if driving optocoupler is needed in an isolated interface (I’ll present it later on).
You could see that the DATA connector has DATA IN, DATA OUT 1200 and DATA OUT 9600 pins which could be used to input/output audio when no digital modes are used. However, DATA OUT pins do not output squelched audio. Hence I used only DATA IN for audio input and oudio output has been taken from oudio output jack in the back of the rig.
Audio adjustments:
A good level meter for ALSA is ameter. It is an ALSA plugin that will get the PCM level to from sound card and display it in a graphical environment. Download, build and install it as per given instructions. The following is an screenshot of ameter GUI:
To adjust input level just use arecord with the following command:
arecord -D ameter -c 2 -f S16_LE test.waw
It will record the input level while showing ameter levels. You should adjust input level either from your card controls or from your rig’s volume level to see a 3/4 from your maximum ameter level.
To adjust output level you need to set your rig to display modulation level. Then adjust your card output level so that the modulation level is what your rig’s manual says (On FT-857 you should see couple of bars at maximum).
Testing the system:
If you start asterisk and signaling and media path are connected then you should be able to do the following from another radio station with a DTMF pad:
– activate parrot mode (simplex repeater functionality): *94 – now all you speak is sent back to you
– deactivate parrot mode: *95
– get system time: *81
– get version of the system: *82
– *3 – conects to an internet node (needs parrot mode disabled)
– *1 – disconnects from an internet node
All of the above DTMF sequences are configured in the rpt.conf and you coud add more, see app_rpt documentation.
Connecting to Echolink:
The Echolink numbers are prefixed with digit 3 and padded with 0 until 7 digits.
– *33009999 – this will conect to *ECHOTEST* node
– *13009999 – will disconnect from *ECHOTEST* node
Connecting to Allstarlink:
The Allstarlink numbers are starting by default with digit 2 and there is no need to prefix anything:
– *31234 conencts to Allstarlink number 1234
– *11234 disconnects from the Allstarlink number 1234
Connecting to IRLP:
The IRLP node numbers are prefixed with digit 4 and no padding.
– *349500 – connects to IRLP node 9500
– *149500 – disconnects from IRLP node 9500
Testing from Asterisk’s CLI:
DTMF commands could also be sent from the asterisk’s console. Start asterisk CLI with “asterisk -r” and then you should be able to do the same, for example:
rpt fun *94 – activate parrot mode
rpt fun *95 – deactivate parrot mode
Other commands useful for testing from CLI:
database show – shows database with Echolink nodes
aradio key – keys the transmitter
aradio unkey – unkeys the transmitter
aradio rkey – simulates COR present
aradio runkey – seize COR present
Sourcecode released as Open Source under GNU GPL license:
example of alsaradio.conf: alsaradio.conf.tar.gz
example of rpt.conf: rpt.conf.tar.gz
chan alsaradio (v01): chan_alsaradio.c_01.tar.gz
chan alsaradio (v02): chan_alsaradio.c_02.tar.gz
To correctly build the chan_alsaradio driver, the following line needs to be added in channels/Makefile:
chan_alsaradio.so: LIBS+=-lasound
I need some help. when I compile this I get this error
chan_alsaradio.c: In function âalsaradio_readâ:
chan_alsaradio.c:1298: warning: unused variable ânâ
chan_alsaradio.c: At top level:
chan_alsaradio.c:1859: warning: âtune_writeâ defined but not used
chan_alsaradio.c:568: warning: âlpassâ defined but not used
chan_alsaradio.c:606: warning: âsetamixerâ defined but not used
how can I fix it? I would love to run this chan. just need to fix this.
Hello, what you present above is just warnings, no errors.
I have this loaded. and it keeps rebooting asterisk. In the log file I get this.
[Feb 20 22:04:53] WARNING[6623] chan_alsaradio.c: alsaradio_request type data 0x0xb78aadbe
Then asterisk reboots. I can see the asterisk is controling the soundcard and the serial port. But have no idea what i am doing wrong. Would you be willing to help he fix this?
73
Ryan
KB8PMY
Hi Ryan,
I added the last version of chan_alsaradio.c I have to this thread. Also a version of alsaradio.conf I’m currently using.
Regards,
Bogdan
There was a problem with the web server and the archives were damaged. Now they should be fixed. Mozilla seems to keep in cache the older versions of archives so probably is better to get them with wget. Also I added rpt.conf and alsaradio.conf I’m using.
[CC] chan_alsaradio.c -> chan_alsaradio.o
chan_alsaradio.c:94:18: error: busy.h: No such file or directory
chan_alsaradio.c:95:22: error: ringtone.h: No such file or directory
chan_alsaradio.c:96:20: error: ring10.h: No such file or directory
chan_alsaradio.c:97:20: error: answer.h: No such file or directory
chan_alsaradio.c:322: error: ‘ringtone’ undeclared here (not in a function)
chan_alsaradio.c:323: error: ‘busy’ undeclared here (not in a function)
chan_alsaradio.c:325: error: ‘ring10’ undeclared here (not in a function)
chan_alsaradio.c:326: error: ‘answer’ undeclared here (not in a function)
chan_alsaradio.c:557: warning: initialization from incompatible pointer type
chan_alsaradio.c:726:31: error: macro “ast_config_load” requires 2 arguments, but only 1 given
chan_alsaradio.c: In function ‘serthread’:
chan_alsaradio.c:726: error: ‘ast_config_load’ undeclared (first use in this function)
chan_alsaradio.c:726: error: (Each undeclared identifier is reported only once
chan_alsaradio.c:726: error: for each function it appears in.)
chan_alsaradio.c:726: warning: assignment from incompatible pointer type
chan_alsaradio.c:753: warning: passing argument 2 of ‘ast_select’ from incompatible pointer type
/root/Documents/PBX/asterisk/files/asterisk-1.8.4/include/asterisk/select.h:76: note: expected ‘struct ast_fdset *’ but argument is of type ‘struct fd_set *’
chan_alsaradio.c:836:4: error: invalid suffix “x__dont_use_bcopy__use_memmove_instead” on integer constant
chan_alsaradio.c: In function ‘send_sound’:
chan_alsaradio.c:836: error: called object ‘’ is not a function
chan_alsaradio.c:836: error: called object ‘’ is not a function
chan_alsaradio.c:836: warning: statement with no effect
chan_alsaradio.c:846:5: error: invalid suffix “x__dont_use_bcopy__use_memmove_instead” on integer constant
chan_alsaradio.c:846: error: called object ‘’ is not a function
chan_alsaradio.c:846: error: called object ‘’ is not a function
chan_alsaradio.c:846: warning: statement with no effect
chan_alsaradio.c:853:7: error: invalid suffix “x__dont_use_bcopy__use_memmove_instead” on integer constant
chan_alsaradio.c:853: error: called object ‘’ is not a function
chan_alsaradio.c:853: error: called object ‘’ is not a function
chan_alsaradio.c:853: warning: statement with no effect
chan_alsaradio.c:861: error: incompatible types when assigning to type ‘union ast_frame_subclass’ from type ‘long long unsigned int’
chan_alsaradio.c:861: warning: statement with no effect
chan_alsaradio.c:864: error: incompatible types when assigning to type ‘union ’ from type ‘short int *’
chan_alsaradio.c:864: warning: statement with no effect
chan_alsaradio.c: In function ‘sound_thread’:
chan_alsaradio.c:899: warning: passing argument 2 of ‘ast_select’ from incompatible pointer type
/root/Documents/PBX/asterisk/files/asterisk-1.8.4/include/asterisk/select.h:76: note: expected ‘struct ast_fdset *’ but argument is of type ‘struct fd_set *’
chan_alsaradio.c:899: warning: passing argument 3 of ‘ast_select’ from incompatible pointer type
/root/Documents/PBX/asterisk/files/asterisk-1.8.4/include/asterisk/select.h:76: note: expected ‘struct ast_fdset *’ but argument is of type ‘struct fd_set *’
chan_alsaradio.c: In function ‘alsa_write’:
chan_alsaradio.c:1131: error: incompatible type for argument 2 of ‘memcpy’
/usr/include/string.h:43: note: expected ‘const void * __restrict__’ but argument is of type ‘union ’
chan_alsaradio.c:1131: warning: statement with no effect
chan_alsaradio.c: In function ‘alsaradio_write’:
chan_alsaradio.c:1201: error: cannot convert to a pointer type
chan_alsaradio.c:1178: warning: unused variable ‘tv2’
chan_alsaradio.c:1177: warning: unused variable ‘tv’
chan_alsaradio.c:1176: warning: unused variable ‘ret’
chan_alsaradio.c:1175: warning: unused variable ‘ftmp’
chan_alsaradio.c:1174: warning: unused variable ‘buftmp’
chan_alsaradio.c: In function ‘alsa_read’:
chan_alsaradio.c:1268: error: incompatible types when assigning to type ‘union ast_frame_subclass’ from type ‘int’
chan_alsaradio.c:1268: warning: statement with no effect
chan_alsaradio.c:1271: error: incompatible types when assigning to type ‘union ’ from type ‘void *’
chan_alsaradio.c:1271: warning: statement with no effect
chan_alsaradio.c:1307: error: incompatible types when assigning to type ‘union ast_frame_subclass’ from type ‘long long unsigned int’
chan_alsaradio.c:1307: warning: statement with no effect
chan_alsaradio.c:1310: error: incompatible types when assigning to type ‘union ’ from type ‘short int *’
chan_alsaradio.c:1310: warning: statement with no effect
chan_alsaradio.c: In function ‘alsaradio_read’:
chan_alsaradio.c:1359: error: incompatible type for argument 1 of ‘fwrite’
/usr/include/stdio.h:688: note: expected ‘const void * __restrict__’ but argument is of type ‘union ’
chan_alsaradio.c:1359: warning: statement with no effect
chan_alsaradio.c:1382: error: incompatible types when assigning to type ‘union ast_frame_subclass’ from type ‘int’
chan_alsaradio.c:1382: warning: statement with no effect
chan_alsaradio.c:1388: error: incompatible types when assigning to type ‘union ast_frame_subclass’ from type ‘int’
chan_alsaradio.c:1388: warning: statement with no effect
chan_alsaradio.c:1401: error: invalid operands to binary == (have ‘union ast_frame_subclass’ and ‘int’)
chan_alsaradio.c:1401: error: invalid operands to binary == (have ‘union ast_frame_subclass’ and ‘int’)
chan_alsaradio.c:1404: error: incompatible types when assigning to type ‘union ast_frame_subclass’ from type ‘int’
chan_alsaradio.c:1404: warning: statement with no effect
chan_alsaradio.c:1408: warning: format ‘%c’ expects type ‘int’, but argument 6 has type ‘union ast_frame_subclass’
chan_alsaradio.c:1414: error: cannot convert to a pointer type
chan_alsaradio.c: In function ‘alsaradio_new’:
chan_alsaradio.c:1541: warning: passing argument 9 of ‘__ast_channel_alloc’ makes integer from pointer without a cast
/root/Documents/PBX/asterisk/files/asterisk-1.8.4/include/asterisk/channel.h:1108: note: expected ‘int’ but argument is of type ‘char *’
chan_alsaradio.c:1557: error: ‘struct ast_channel’ has no member named ‘cid’
chan_alsaradio.c:1557: error: request for member ‘cid_num’ in something not a structure or union
chan_alsaradio.c:1557: warning: statement with no effect
chan_alsaradio.c:1558: error: ‘struct ast_channel’ has no member named ‘cid’
chan_alsaradio.c:1558: error: request for member ‘cid_ani’ in something not a structure or union
chan_alsaradio.c:1558: warning: statement with no effect
chan_alsaradio.c:1559: error: ‘struct ast_channel’ has no member named ‘cid’
chan_alsaradio.c:1559: error: request for member ‘cid_name’ in something not a structure or union
chan_alsaradio.c:1559: warning: statement with no effect
chan_alsaradio.c:1561: error: ‘struct ast_channel’ has no member named ‘cid’
chan_alsaradio.c:1561: error: request for member ‘cid_dnid’ in something not a structure or union
chan_alsaradio.c:1561: warning: statement with no effect
chan_alsaradio.c: At top level:
chan_alsaradio.c:1826: warning: initialization from incompatible pointer type
chan_alsaradio.c:1827: warning: initialization makes integer from pointer without a cast
chan_alsaradio.c:1827: error: initializer element is not computable at load time
chan_alsaradio.c:1827: error: (near initialization for ‘cli_alsaradio[0].inuse’)
chan_alsaradio.c:1830: warning: initialization from incompatible pointer type
chan_alsaradio.c:1831: warning: initialization makes integer from pointer without a cast
chan_alsaradio.c:1831: error: initializer element is not computable at load time
chan_alsaradio.c:1831: error: (near initialization for ‘cli_alsaradio[1].inuse’)
chan_alsaradio.c:1834: warning: initialization from incompatible pointer type
chan_alsaradio.c:1835: warning: initialization makes integer from pointer without a cast
chan_alsaradio.c:1835: error: initializer element is not computable at load time
chan_alsaradio.c:1835: error: (near initialization for ‘cli_alsaradio[2].inuse’)
chan_alsaradio.c:1838: warning: initialization from incompatible pointer type
chan_alsaradio.c:1839: warning: initialization makes integer from pointer without a cast
chan_alsaradio.c:1839: error: initializer element is not computable at load time
chan_alsaradio.c:1839: error: (near initialization for ‘cli_alsaradio[3].inuse’)
chan_alsaradio.c:1842: warning: initialization from incompatible pointer type
chan_alsaradio.c:1843: warning: initialization makes integer from pointer without a cast
chan_alsaradio.c:1843: error: initializer element is not computable at load time
chan_alsaradio.c:1843: error: (near initialization for ‘cli_alsaradio[4].inuse’)
chan_alsaradio.c:1846: warning: initialization from incompatible pointer type
chan_alsaradio.c:1847: warning: initialization makes integer from pointer without a cast
chan_alsaradio.c:1847: error: initializer element is not computable at load time
chan_alsaradio.c:1847: error: (near initialization for ‘cli_alsaradio[5].inuse’)
chan_alsaradio.c:1850: warning: initialization from incompatible pointer type
chan_alsaradio.c:1851: warning: initialization makes integer from pointer without a cast
chan_alsaradio.c:1851: error: initializer element is not computable at load time
chan_alsaradio.c:1851: error: (near initialization for ‘cli_alsaradio[6].inuse’)
chan_alsaradio.c:1854: warning: initialization from incompatible pointer type
chan_alsaradio.c:1855: warning: initialization makes integer from pointer without a cast
chan_alsaradio.c:1855: error: initializer element is not computable at load time
chan_alsaradio.c:1855: error: (near initialization for ‘cli_alsaradio[7].inuse’)
chan_alsaradio.c: In function ‘store_config’:
chan_alsaradio.c:2009: error: ‘DSP_FEATURE_DTMF_DETECT’ undeclared (first use in this function)
chan_alsaradio.c:2009: warning: passing argument 2 of ‘ast_dsp_set_features’ makes integer from pointer without a cast
/root/Documents/PBX/asterisk/files/asterisk-1.8.4/include/asterisk/dsp.h:116: note: expected ‘int’ but argument is of type ‘struct ast_cli_entry *’
chan_alsaradio.c:2010: warning: implicit declaration of function ‘ast_dsp_digitmode’
chan_alsaradio.c:2458:36: error: macro “ast_config_load” requires 2 arguments, but only 1 given
chan_alsaradio.c: In function ‘load_module’:
chan_alsaradio.c:2458: error: ‘ast_config_load’ undeclared (first use in this function)
chan_alsaradio.c:2458: warning: assignment from incompatible pointer type
make[1]: *** [chan_alsaradio.o] Error 1
make: *** [channels] Error 2
Please find below the gdb backtrace output:
(gdb) bt full
#0 0x00000000 in ?? ()
No symbol table info available.
#1 0x003908ed in ___newselect_nocancel () from /lib/libc.so.6
No symbol table info available.
#2 0x004a9e76 in ast_select (arg=0x0) at /home/TASL/Installer/asterisk-1.8.11.1/include/asterisk/select.h:84
No locals.
#3 serthread (arg=0x0) at chan_alsaradio.c:748
ctcssed =
txreq =
lastrx = 0 ’00’
fname = “alsaradio_tune_ard0.conf”, ’00’ , “16\31062”, ’00’
res =
o = 0x0
to = {tv_sec = 0, tv_usec = 0}
cfg1 = 0x0
v =
rfds = {fds_bits = {0, 512, 0 }}
zeroflag = {flags = 0}
__PRETTY_FUNCTION__ = “serthread”
#4 0x00000000 in ?? ()
Please analyse and provide your valuable feedback so that I can use this driver with my asterisk server.
Can alsa radio is working ?
How to make radio to radio call.
Thanks in advance , i am stuck here. Pls help.
Somehow succesful in running rpt . But following error is coming again and again. Kindly help.
*CLI> [Jul 27 11:24:29] NOTICE[2626]: app_rpt.c:13133 rpt_exec: parsing argument=102
[Jul 27 11:24:29] NOTICE[2626]: app_rpt.c:13151 rpt_exec: options=(null)
[Jul 27 11:24:29] NOTICE[2626]: app_rpt.c:1397 linkcount: numoflinks=0
[Jul 27 11:24:29] WARNING[2626]: app_rpt.c:13274 rpt_exec: We only accept links via IAX2 or Local!!
succesfully registered the node with sound card but don’t know how to bridge with local channel.
Just to let you know, your chan_alsaradio works OK on a Raspberry PI with arch linux….
regards
Anthony, VK2ACP