SOUNDMODEM(9)

πŸ“¦
version 1.1.0 Β· 2 versions
  • 1.1.0 Β· alpine 3.24, debian bookworm, debian trixie, nixos 26.05, ubuntu jammy, ubuntu noble, ubuntu questing, ubuntu resolute, ubuntu stonking (latest)
  • 1.0.4 Β· fedora 43, fedora 44
, in alpine 3.24, debian bookworm, debian trixie, nixos 26.05, ubuntu jammy, ubuntu noble, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– SOUNDMODEM(9) β€” the kernel reference guide, but make it cute πŸ’–

okay bestie, so this is the soundmodem(9) manual page, and it's genuinely one of the nerdiest-girl things in the whole kernel. it's the driver that makes your soundcard pretend it's a ham radio. let's get into it πŸŽ€

✨ NAME ✨

soundmodem β€” the amateur (AX.25) packet radio network driver for soundcards. yes, that kind of packet radio. we're doing ham radio in software, and we're doing it fabulously πŸ¦‹

✨ SYNOPSIS ✨

#include <linux/soundmodem.h>
#include <linux/hdlcdrv.h>

that's it. two includes. no notes. πŸ’…

✨ DESCRIPTION ✨

so like, right now this driver supports both 1200 baud AFSK and 9600 baud FSK (G3RUH compatible), and it does it all on a standard SoundBlaster compatible or WindowsSoundSystem compatible soundcard. iconic behaviour honestly 🌈

the whole decoding happens in software, which is the fun part β€” but also, and I need you to hear me on this, you definitely do not want to run this on a 386SX class machine. like. respectfully. it will not slay, it will simply perish 😭

✨ KEYING THE TRANSMITTER ✨

okay so here's the situation: soundcards do not have a DC coupled output that could serve as a PTT signal. that's just not a thing they do. so there are basically four possibilities for obtaining a PTT signal, and sample schematic diagrams can be found at http://www.ife.ee.ethz.ch/~sailer/pcf/ptt_circ/ptt.html β€” go look, it's lowkey adorable πŸ‘‘

πŸŽ€ VOX circuitry

a simple VOX circuitry that detects output signals at the output of the soundcard can be used β€” and honestly this one ate, because it can be built with a single transistor plus a few passive components, and typical soundcards have strong output signals. single transistor!! we love a low-effort icon ✨

πŸŽ€ Parallel Port

a parallel port line can also be used to signal PTT. if selected, the PTT signal is output on the DATA0 line and DCD is output on the DATA1 line. two lines, no drama. 🫢

πŸŽ€ Serial Port

a standard serial port (8250, 16450, 16550) can also be used to output PTT. PTT is output on RTS and TxD, while DCD is output on DTR. the way that this just... reuses the pins you already have. periodt. πŸ’œ

πŸŽ€ MPU401 MIDI Port

the MIDI port is basically an asynchronous serial interface and thus cannot output a straight DC level β€” however it may be used if connected through a retriggerable monoflop with about 15ms pulse duration. also note that only newer SoundBlaster models have a genuine MPU401 MIDI port. the older SB MIDI port cannot be used. πŸ’€ (this is your warning, bestie β€” check your hardware before you commit.)

✨ IOCTL CALLS ✨

the ioctl calls follow the implementation in the hdlcdrv. here's the whole squad:

  • SMCTL_GETMODEMTYPE β€” returns the modem type (i.e. SBC1200, SBC9600, WSS1200 or WSS9600) 🌸
  • SMCTL_SETMODEMTYPE β€” sets the modem type. only superuser can do this. main character energy only πŸ”₯
  • SMCTL_GETMIXER β€” returns the mixer type and the contents of the specified mixer register. πŸ“
  • SMCTL_SETMIXER β€” sets the specified mixer register, if the specified mixer type matches the mixer type of the soundcard. only superuser can do this. πŸ”
  • SMCTL_DIAGNOSE β€” returns the contents of the diagnose buffer, which is used by smdiag to display the eye and oscilloscope diagrams. this one's the pretty one, we love a visual πŸ‘‘
  • SMCTL_GETDEBUG β€” return some debugging values. not always available. πŸ™ˆ (ngl, sometimes she just ghosts you)

✨ SEE ALSO ✨

baycom (9), soundmodem (9), smdiag (8), smmixer (9), linux/drivers/net/hdlcdrv.c β€” go read them, they're all friends of hers 🧚

✨ AUTHOR ✨

soundmodem was written by Thomas Sailer, HB9JNX/AE4WA, (t.sailer@alumni.ethz.ch). legend behaviour, fr fr πŸ’–


and that's the page!! this one's from Linux 2.1.x, dated 27 April 2008 β€” so basically vintage, which is a vibe in itself. mwah πŸ’‹ <rainbow>stay packet-y, bestie</rainbow> πŸ¦‹βœ¨