jtacs(1)

πŸ“¦ version 0.0~git20251206.0c72677, in debian trixie, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– jtacs β€” the manual page, but make it make sense πŸ’–

okay bestie, so you've found yourself in the jtacs(1) page, from the General Commands Manual β€” that's the one we're vibing in right now. Sit down, hydrate, and let's get into it. πŸ“


✨ NAME ✨

jtacs β€” and if you want the whole lore drop, it lives at http://osmocom-analog.eversberg.eu/docs/ πŸ¦‹


🌸 SYNOPSIS 🌸

jtacs -k <kanal/channel> -p -d -F yes | no [-S aid=<aid>] [options]
[station_id]

πŸ‘‘ Global options πŸ‘‘

🌈 GLOBAL OPTIONS 🌈

  • -h --help β€” prints the help. the classic. the icon. πŸ’…
  • --config [~/]<path to config file> β€” hand it a config file to use. if the path starts with ~/, it's relative to your home dir. every single line in the config file is one option, and no, you do not put - or -- in there. default is ~/.osmocom/analog/jtacs.conf ✨
  • --no-config β€” okay so even if a config file does exist, this says nope, don't touch it. πŸ™ˆ
  • -v --verbose <level> | <level>,<category>[,<category>[,...]] | list β€” use list to get a list of all levels and categories, fr fr. verbose level = just a digit for the debug level (default is '3'). verbose level + category = the level digit followed by one or more categories β†’ and if you don't name any category, then all categories get selected. lowkey powerful. πŸ‘‘
  • -v --verbose date β€” shows the date alongside your debug output πŸ—“οΈ
  • -k --kanal <channel> / -k --channel <channel> β€” the channel number (German = Kanal) of the "Sender" (German = Transceiver). yes, two spellings, same energy. πŸ’œ
  • -a --audio-device hw:<card>,<device>[/hw:<card>.<rec-device>] β€” sound card and device number (default = 'hw:0,0'). you can specify a different recording device by using /. Don't set it for SDR! 🚫
  • -s --samplerate <rate> β€” sample rate of the sound device (default = '96000') 🎧
  • -i --interval 0.1..25 β€” interval of the processing loop, in ms (default = '1.0' ms). use 10 to drastically reduce CPU usage. and if you get buffer underrun, increase the buffer accordingly. iykyk. ⏱️
  • -b --buffer <ms> β€” how many milliseconds get processed in advance (default = '50'). heads up: a buffer below 10 ms needs a low interval like 0.1 ms. 🧚
  • -p --pre-emphasis β€” enables pre-emphasis, for when you're directly connected to the oscillator of the transmitter (i.e. the transmitter isn't doing any pre-emphasis itself). πŸ“‘
  • -d --de-emphasis β€” enables de-emphasis, for when you're directly connected to the discriminator of the receiver (i.e. the receiver isn't doing any de-emphasis itself). πŸŽ€
  • --rx-gain <dB> β€” raise/lower the receiver's RX level by the given gain in dB. (works with sound card only.) πŸ”Š
  • --tx-gain <dB> β€” raise/lower the transmitter's RX level by the given gain in dB. (works with sound card only.) πŸ“’
  • -e --echo-test β€” use echo test to send audio from the mobile phone's microphone back to the speaker. (German: 'Blasprobe'.) πŸ”
  • -c --call-device hw:<card>,<device>[/hw:<card>.<rec-device>] β€” sound card and device number for the headset (default = ''). you can specify a different recording device by using /. πŸŽ™οΈ
  • --call-samplerate <rate> β€” sample rate of the sound device for the headset (default = '48000') 🎡
  • --call-buffer <ms> β€” how many milliseconds get processed in advance (default = '50') ⏳
  • -x --osmocc-cross β€” enables the built-in call forwarding between mobiles. be sure to have at least one control channel and two voice channels. alternatively, use one combined control+voice channel and one voice channel. choose your adventure. πŸ”€
  • -o --osmocc-sock β€” disables the built-in call control and offers a socket instead 🧦
  • --cc "<osmo-cc arg>" [--cc ...] β€” pass arguments to the Osmo-CC endpoint. use -cc help for a description. πŸ‘€
  • --no-l16 β€” disables the L16 (linear 16 bit) codec 🚫
  • -t --tones 0 | 1 β€” connect the call on setup/release to provide classic tones towards the fixed network (default = '1') ☎️
  • -l --loopback <type> β€” loopback test: 1 = internal | 2 = external | 3 = echo πŸŒ€
  • -r --realtime <prio> β€” set prio: 0 to disable, 99 for maximum (default = 0) ⚑
  • --fast-math β€” uses fast math approximation, for slow CPU / ARM based systems πŸ’βž‘οΈπŸ‡
  • --write-rx-wave <file> β€” writes received audio to the given wave file πŸ“
  • --write-tx-wave <file> β€” writes transmitted audio to the given wave file πŸ“
  • --read-rx-wave <file> β€” replaces received audio with the given wave file πŸ“‚
  • --read-tx-wave <file> β€” replaces transmitted audio with the given wave file πŸ“‚
  • --limesdr β€” auto-selects several required options for LimeSDR πŸ‹
  • --limesdr-mini β€” auto-selects several required options for LimeSDR Mini πŸ‹βœ¨

πŸ¦‹ SDR options πŸ¦‹

πŸ’« SDR OPTIONS πŸ’«

  • --sdr-soapy β€” forces the SoapySDR driver 🧼
  • --sdr-channel <channel #> β€” gives the channel number for a multi channel SDR device (default = 0) πŸ”’
  • --sdr-device-args <args> / --sdr-stream-args <args> / --sdr-tune-args <args> β€” optional SDR device arguments, separated by commas, e.g. --sdr-device-args <key>=<value>[,<key>=<value>[,...]] 🧩
  • --sdr-samplerate <samplerate> β€” sample rate to use with SDR. by default it equals the regular sample rate. 🎚️
  • --sdr-lo-offset <Hz> β€” gives a frequency offset in Hz to move the local oscillator away from the target frequency. (default = -1000000) πŸ“»
  • --sdr-bandwidth <bandwidth> β€” gives the IF filter bandwidth to use. if you don't, the sample rate gets used instead. 🌊
  • --sdr-rx-antenna <name> β€” the SDR device's RX antenna name; use 'list' to get a list πŸ“‹
  • --sdr-tx-antenna <name> β€” the SDR device's TX antenna name; use 'list' to get a list πŸ“‹
  • --sdr-clock-source <name> β€” the SDR device's clock sourc name; use 'list' to get a list (yes, that typo is canon, we keep it πŸ’€)
  • --sdr-rx-gain <gain> β€” the SDR device's RX gain in dB (default = 0.0) πŸ“Ά
  • --sdr-tx-gain <gain> β€” the SDR device's TX gain in dB (default = 0.0) πŸ“Ά
  • --write-iq-rx-wave <file> β€” writes received IQ data to the given wave file πŸ’Ύ
  • --write-iq-tx-wave <file> β€” writes transmitted IQ data to the given wave file πŸ’Ύ
  • --read-iq-rx-wave <file> β€” replaces received IQ data with the given wave file πŸ“
  • --read-iq-tx-wave <file> β€” replaces transmitted IQ data with the given wave file πŸ“
  • --sdr-swap-links β€” swaps RX and TX frequencies for loopback tests over the air πŸ”„
  • --sdr-timestamps 1 | 0 β€” uses TX timestamps on a UHD device. (default = 1) ⏰

πŸ’… Network specific options πŸ’…

πŸŽ€ NETWORK SPECIFIC OPTIONS πŸŽ€

  • -T --channel-type <channel type> | list β€” gives the channel type; use 'list' to get a list. (default = 'CC/PC/VC') πŸ—‚οΈ
  • -F --flip-polarity no | yes β€” flips the polarity of the transmitted FSK signal. if yes, the sound card generates a negative signal rather than a positive one. be sure that a positive signal causes a positive deviation on your transmitter. if the phone shows 'NoSrv', try the other way. πŸͺž
  • -P --ms-power <power level> β€” gives the power level of the mobile station, 0..7. (default = '4') 0 = 2.28 W; 1 = 1.12 W; 2 = 447 mW; 3 = 178 mW; 4 = 70.8 mW; 5 = 28.2 mW; 6 = 11.2 mW; 7 = 4.5 mW ⚑
  • -D --dtx <parameter> β€” gives the DTX parameter for Discontinuous Transmission. (default = '0') 0 = disable DTX; 1 = reserved; 2 = 8 dB attenuation in low state; 3 = transmitter off πŸ”‡
  • -I --caller-id 1 | 0 β€” if set, the caller ID is sent while ringing the phone. (default = '0') note that this does not work as documented in the specs. if the phone doesn't support caller ID, it will abort the connection on receiving caller ID for some unknown reason. therefore, use caller ID only with phones that support it. πŸ“ž
  • -S --sysinfo aid=<System ID> | aid=list β€” gives the area ID of cell broadcast (default = '1'). if it changes, the phone re-registers. use 'aid=list' to get a full list. πŸ“
  • -S --sysinfo dcc=<digital color code> β€” gives the digital color code 0..3 (default = '0') 🎨
  • -S --sysinfo scc=<SAT color code> β€” gives the supervisor tone color code 0..2 (default = '0') 🎨
  • -S --sysinfo regincr β€” amount to add to REGID after successful registration (default = '300'). since REGID is incremented every second, this value defines after how many seconds the phone waits before it re-registers. ⏲️
  • -S --sysinfo pureg=0 | pureg=1 β€” if 1, the phone registers on every power on (default = '0'). Warning: older phones may not like this and show 'No Service'! Note: this feature was added 1995 to the standard, it might not work. ⚠️
  • -S --sysinfo pdreg=0 | pdreg=1 β€” if 1, the phone de-registers on every power down (default = '0'). Warning: older phones may not like this and show 'No Service'! Note: this feature was added 1995 to the standard, it might not work. ⚠️
  • -S --sysinfo locaid=<location area ID > | locaid=-1 to disable β€” (default = '-1'). if it changes, the phone re-registers. Warning: older phones may not like this and show 'No Service'! Note: this feature was added 1995 to the standard, it might not work. ⚠️
  • -S --sysinfo regh=0 | regh=1 β€” if 1, the phone registers only if the System ID matches (default = '1') βœ…
  • -S --sysinfo regr=0 | regr=1 β€” if 1, the phone registers only if the System ID is different (default = '1') πŸ”€
  • -S --sysinfo bis=0 | bis=1 β€” if 0, the phone ignores the BUSY/IDLE bit on FOCC (default = '0'). if 1, be sure to have a round-trip delay (latency) not more than 5 ms. πŸ“
  • -O --tolerant β€” be more tolerant when hunting for the sync sequence 🧘

🌟 station_id & the keys 🌟

station_id: give 10 digits of station ID, so you don't need to enter it for every start of this application. give 10 digits for the JTACS number (440-XXXXXXX). πŸ“±


okay and now the fun part β€” the keyboard, bestie:

  • press digits '0'..'9' and then the 'd' key to dial towards the mobile station πŸ“²
  • press the 'h' key to hangup πŸ™…
  • press the 'w' key to toggle display of the RX wave form 🌊
  • press the 'c' key to toggle display of the channel status πŸ“Š
  • press the 'm' key to toggle display of the measurement value πŸ“
  • press the 'q' key to toggle display of the RX I/Q vector 🧭
  • press the 's' key to toggle display of the RX spectrum 🌈
  • press the 'b' key to remove the DC level 🧹

ok that's the whole page, every flag accounted for, nothing skipped, we ate and left no crumbs πŸ’…

and that's a wrap on jtacs(1)<|place_holder_mm_span_0442|> β€” yes, that's the page name down there at the bottom, jtacs(1), same one you walked in with. go forth and run it, bestie πŸ«ΆπŸ’–βœ¨