^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) .. SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) The Radiotrack radio driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) ===========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) Author: Stephen M. Benoit <benoits@servicepro.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) Date: Dec 14, 1996
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) ACKNOWLEDGMENTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) ----------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) This document was made based on 'C' code for Linux from Gideon le Grange
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) (legrang@active.co.za or legrang@cs.sun.ac.za) in 1994, and elaborations from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) Frans Brinkman (brinkman@esd.nl) in 1996. The results reported here are from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) experiments that the author performed on his own setup, so your mileage may
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) vary... I make no guarantees, claims or warranties to the suitability or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) validity of this information. No other documentation on the AIMS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) Lab (http://www.aimslab.com/) RadioTrack card was made available to the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) author. This document is offered in the hopes that it might help users who
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) want to use the RadioTrack card in an environment other than MS Windows.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) WHY THIS DOCUMENT?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) ------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) I have a RadioTrack card from back when I ran an MS-Windows platform. After
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) converting to Linux, I found Gideon le Grange's command-line software for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) running the card, and found that it was good! Frans Brinkman made a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) comfortable X-windows interface, and added a scanning feature. For hack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) value, I wanted to see if the tuner could be tuned beyond the usual FM radio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) broadcast band, so I could pick up the audio carriers from North American
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) broadcast TV channels, situated just below and above the 87.0-109.0 MHz range.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) I did not get much success, but I learned about programming ioports under
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) Linux and gained some insights about the hardware design used for the card.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) So, without further delay, here are the details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) PHYSICAL DESCRIPTION
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) --------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) The RadioTrack card is an ISA 8-bit FM radio card. The radio frequency (RF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) input is simply an antenna lead, and the output is a power audio signal
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) available through a miniature phone plug. Its RF frequencies of operation are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) more or less limited from 87.0 to 109.0 MHz (the commercial FM broadcast
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) band). Although the registers can be programmed to request frequencies beyond
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) these limits, experiments did not give promising results. The variable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) frequency oscillator (VFO) that demodulates the intermediate frequency (IF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) signal probably has a small range of useful frequencies, and wraps around or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) gets clipped beyond the limits mentioned above.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) CONTROLLING THE CARD WITH IOPORT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) --------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) The RadioTrack (base) ioport is configurable for 0x30c or 0x20c. Only one
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) ioport seems to be involved. The ioport decoding circuitry must be pretty
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) simple, as individual ioport bits are directly matched to specific functions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) (or blocks) of the radio card. This way, many functions can be changed in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) parallel with one write to the ioport. The only feedback available through
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) the ioports appears to be the "Stereo Detect" bit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) The bits of the ioport are arranged as follows:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) .. code-block:: none
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) MSb LSb
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) +------+------+------+--------+--------+-------+---------+--------+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) | VolA | VolB | ???? | Stereo | Radio | TuneA | TuneB | Tune |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) | (+) | (-) | | Detect | Audio | (bit) | (latch) | Update |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) | | | | Enable | Enable | | | Enable |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) +------+------+------+--------+--------+-------+---------+--------+
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) ==== ==== =================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) VolA VolB Description
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) ==== ==== =================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 0 0 audio mute
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 0 1 volume + (some delay required)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) 1 0 volume - (some delay required)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 1 1 stay at present volume
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) ==== ==== =================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) ==================== ===========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) Stereo Detect Enable Description
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) ==================== ===========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) 0 No Detect
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) 1 Detect
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) ==================== ===========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) Results available by reading ioport >60 msec after last port write.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) 0xff ==> no stereo detected, 0xfd ==> stereo detected.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) ============================= =============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) Radio to Audio (path) Enable Description
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) ============================= =============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) 0 Disable path (silence)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) 1 Enable path (audio produced)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) ============================= =============================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) ===== ===== ==================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) TuneA TuneB Description
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) ===== ===== ==================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 0 0 "zero" bit phase 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 0 1 "zero" bit phase 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 1 0 "one" bit phase 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 1 1 "one" bit phase 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) ===== ===== ==================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 24-bit code, where bits = (freq*40) + 10486188.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) The Most Significant 11 bits must be 1010 xxxx 0x0 to be valid.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) The bits are shifted in LSb first.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) ================== ===========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) Tune Update Enable Description
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) ================== ===========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 0 Tuner held constant
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 1 Tuner updating in progress
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) ================== ===========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) PROGRAMMING EXAMPLES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) --------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) .. code-block:: none
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) Default: BASE <-- 0xc8 (current volume, no stereo detect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) radio enable, tuner adjust disable)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) Card Off: BASE <-- 0x00 (audio mute, no stereo detect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) radio disable, tuner adjust disable)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) Card On: BASE <-- 0x00 (see "Card Off", clears any unfinished business)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) BASE <-- 0xc8 (see "Default")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) Volume Down: BASE <-- 0x48 (volume down, no stereo detect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) radio enable, tuner adjust disable)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) wait 10 msec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) BASE <-- 0xc8 (see "Default")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) Volume Up: BASE <-- 0x88 (volume up, no stereo detect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) radio enable, tuner adjust disable)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) wait 10 msec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) BASE <-- 0xc8 (see "Default")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) Check Stereo: BASE <-- 0xd8 (current volume, stereo detect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) radio enable, tuner adjust disable)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) wait 100 msec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) x <-- BASE (read ioport)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) BASE <-- 0xc8 (see "Default")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) x=0xff ==> "not stereo", x=0xfd ==> "stereo detected"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) Set Frequency: code = (freq*40) + 10486188
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) foreach of the 24 bits in code,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) (from Least to Most Significant):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) to write a "zero" bit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) BASE <-- 0x01 (audio mute, no stereo detect, radio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) disable, "zero" bit phase 1, tuner adjust)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) BASE <-- 0x03 (audio mute, no stereo detect, radio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) disable, "zero" bit phase 2, tuner adjust)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) to write a "one" bit,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) BASE <-- 0x05 (audio mute, no stereo detect, radio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) disable, "one" bit phase 1, tuner adjust)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) BASE <-- 0x07 (audio mute, no stereo detect, radio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) disable, "one" bit phase 2, tuner adjust)