98 lines
2.7 KiB
Bash
Executable file
98 lines
2.7 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# usage:
|
|
# ./radio.sh radio-station-frequency
|
|
|
|
# examples:
|
|
|
|
# Sydney - Triple J
|
|
# ./radio.sh 105.7
|
|
|
|
# Sydney - Triple M
|
|
# ./radio.sh 104.9
|
|
|
|
# Sydney - WSFM
|
|
# ./radio.sh 101.7
|
|
|
|
# Sydney - Nova 969
|
|
# ./radio.sh 96.9
|
|
|
|
# Mute, by not passing in a frequency
|
|
# ./radio.sh
|
|
|
|
|
|
# The Grove I2C FM Receiver can operate in RDA5807 or TEA5767 mode
|
|
# In simpler TEA5767 mode, the I2C address 0x60
|
|
|
|
# http://www.voti.nl/docs/TEA5767.pdf
|
|
# http://en.wikipedia.org/wiki/List_of_radio_stations_in_Australia
|
|
|
|
# Connect your FM receiver to one of the I2C sockets
|
|
# Check if the device was found
|
|
# i2cdetect -y 1
|
|
|
|
# enable I2C via the raspi-config "Advanced Options" menu
|
|
# sudo raspi-config
|
|
|
|
# make sure "i2c-dev" is in /etc/modules
|
|
# sudo nano /etc/modules
|
|
|
|
# To run i2cdetect and i2cset you will need to install the i2c-tools package
|
|
# sudo apt-get install i2c-tools
|
|
|
|
# If you want to run i2cset without sudo, you'll need to add the pi user to the i2c group
|
|
# sudo usermod -aG i2c pi
|
|
|
|
# dont forget to make the script executable
|
|
# chmod +x radio.sh
|
|
|
|
|
|
# TEA5767 mode I2C address
|
|
addr=0x60
|
|
|
|
freq=$@
|
|
|
|
# setting of synthesizer programmable counter for search or preset
|
|
pll=$(echo $freq | awk '{ printf "%d", 4 * ($1 * 1000000 + 225000) / 32768 }')
|
|
|
|
byte1=0
|
|
byte1=$((pll>>8)) # bits 0-5 contain the msb bits of the frequency preset
|
|
#byte1=$((byte1|0x80)) # MUTE - left and right are muted
|
|
#byte1=$((byte1|0x40)) # SM - search mode
|
|
|
|
# mute if no frequency has been provided
|
|
if [ ! "$freq" ]; then
|
|
byte1=$((byte1|0x80)) # MUTE - left and right are muted
|
|
fi
|
|
|
|
byte2=0
|
|
byte2=$((pll&0xFF)) # bits 0-7 contain the lsb bits of the frequency preset
|
|
|
|
byte3=0
|
|
byte3=$((byte3|0x80)) # SUD - search up
|
|
#byte3=$((byte3|0x40)) # SSL1 - search stop level high
|
|
#byte3=$((byte3|0x20)) # SSL0 - search stop level high
|
|
byte3=$((byte3|0x10)) # HLSI - high side injection
|
|
#byte3=$((byte3|0x08)) # MS - mono to stereo
|
|
#byte3=$((byte3|0x04)) # MR - mute right
|
|
#byte3=$((byte3|0x02)) # ML - mute left
|
|
#byte3=$((byte3|0x01)) # SWP1 - software programmable port 1
|
|
|
|
byte4=0
|
|
#byte4=$((byte4|0x80)) # SWP2 - software programmable port 2
|
|
#byte4=$((byte4|0x40)) # STBY - standby mode
|
|
#byte4=$((byte4|0x20)) # BL - band limited to japanese fm band, else us/europe band
|
|
byte4=$((byte4|0x10)) # XTAL - clock 32.768kHz
|
|
#byte4=$((byte4|0x08)) # SMUTE - soft mute
|
|
#byte4=$((byte4|0x80)) # HCC - high cut control
|
|
#byte4=$((byte4|0x80)) # SNC - stereo noise cancelling
|
|
#byte4=$((byte4|0x80)) # SI - search indicator
|
|
|
|
byte5=0
|
|
#byte5=$((byte5|0x80)) # PLLREF - 6.5 MHz reference frequency for the PLL
|
|
#byte5=$((byte5|0x40)) # DTC - de-emphasis time constant is 75us
|
|
# the other byte5 bits are unused
|
|
|
|
# send the 5 byte command
|
|
# if you are using an old raspi replace the 1 with 0 to use the older i2c bus 0
|
|
i2cset -y 1 $addr $byte1 $byte2 $byte3 $byte4 $byte5 i
|