change power setting method
This commit is contained in:
parent
92827cd09a
commit
85e65321bc
|
|
@ -24,35 +24,11 @@ extern "C"
|
||||||
#include <librpitx/librpitx.h>
|
#include <librpitx/librpitx.h>
|
||||||
|
|
||||||
ngfmdmasync *fmmod;
|
ngfmdmasync *fmmod;
|
||||||
static volatile uint32_t *pad_reg;
|
|
||||||
#define GPIO_PAD_0_27 (0x2C/4)
|
|
||||||
#define GPIO_PAD_28_45 (0x30/4)
|
|
||||||
#define PI 3
|
|
||||||
|
|
||||||
#if (PI) == 1 //Original
|
|
||||||
#define PERIPH_VIRT_BASE 0x20000000
|
|
||||||
#elif (PI) == 2
|
|
||||||
#define PERIPH_VIRT_BASE 0x3f000000
|
|
||||||
#elif (PI) == 3
|
|
||||||
#define PERIPH_VIRT_BASE 0x3f000000
|
|
||||||
#elif (PI) == 4
|
|
||||||
#define PERIPH_VIRT_BASE 0xfe000000
|
|
||||||
#else
|
|
||||||
#error Unknown Raspberry Pi version (variable PI)
|
|
||||||
#endif
|
|
||||||
//i dunno it for pi 5, but rp1 is gonna steer the io: https://datasheets.raspberrypi.com/rp1/rp1-peripherals.pdf
|
|
||||||
#define SUBSIZE 512
|
|
||||||
#define DATA_SIZE 5000
|
#define DATA_SIZE 5000
|
||||||
#define PAD_LEN (0x40/4) //0x64
|
|
||||||
#define PAD_BASE_OFFSET 0x00100000
|
|
||||||
#define PAD_VIRT_BASE (PERIPH_VIRT_BASE + PAD_BASE_OFFSET)
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
terminate(int num)
|
terminate(int num)
|
||||||
{
|
{
|
||||||
delete fmmod;
|
delete fmmod;
|
||||||
pad_reg[GPIO_PAD_0_27] = 0x5a000018 + 1; //Set original power, just in case
|
|
||||||
pad_reg[GPIO_PAD_28_45] = 0x5a000018 + 1;
|
|
||||||
fm_mpx_close();
|
fm_mpx_close();
|
||||||
close_control_pipe();
|
close_control_pipe();
|
||||||
exit(num);
|
exit(num);
|
||||||
|
|
@ -68,19 +44,6 @@ fatal(char *fmt, ...)
|
||||||
terminate(0);
|
terminate(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static volatile void *map_peripheral(uint32_t base, uint32_t len)
|
|
||||||
{
|
|
||||||
int fd = open("/dev/mem", O_RDWR | O_SYNC);
|
|
||||||
void * vaddr;
|
|
||||||
if (fd < 0)
|
|
||||||
fatal("Failed to open /dev/mem: %m.\n");
|
|
||||||
vaddr = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED, fd, base);
|
|
||||||
if (vaddr == MAP_FAILED)
|
|
||||||
fatal("Failed to map peripheral at 0x%08x: %m.\n", base);
|
|
||||||
close(fd);
|
|
||||||
return vaddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt, char *control_pipe, int pty, int *af_array, int raw, int drds, double preemp, int power, int rawSampleRate, int rawChannels, int deviation, int ta, int tp, float cutoff_freq, float gaim, float compressor_decay, float compressor_attack, float compressor_max_gain_recip, int enablecompressor, int rds_ct_enabled, float rds_volume, float pilot_volume) {
|
int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt, char *control_pipe, int pty, int *af_array, int raw, int drds, double preemp, int power, int rawSampleRate, int rawChannels, int deviation, int ta, int tp, float cutoff_freq, float gaim, float compressor_decay, float compressor_attack, float compressor_max_gain_recip, int enablecompressor, int rds_ct_enabled, float rds_volume, float pilot_volume) {
|
||||||
// Catch all signals possible - it is vital we kill the DMA engine
|
// Catch all signals possible - it is vital we kill the DMA engine
|
||||||
// on process exit!
|
// on process exit!
|
||||||
|
|
@ -103,11 +66,6 @@ int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt,
|
||||||
sigaction(SIGTSTP, &sa, NULL);
|
sigaction(SIGTSTP, &sa, NULL);
|
||||||
sigaction(SIGSEGV, &sa, NULL); //seg fault
|
sigaction(SIGSEGV, &sa, NULL); //seg fault
|
||||||
|
|
||||||
//Set the power
|
|
||||||
pad_reg = (volatile uint32_t *)map_peripheral(PAD_VIRT_BASE, PAD_LEN);
|
|
||||||
pad_reg[GPIO_PAD_0_27] = 0x5a000018 + power;
|
|
||||||
pad_reg[GPIO_PAD_28_45] = 0x5a000018 + power;
|
|
||||||
|
|
||||||
// Data structures for baseband data
|
// Data structures for baseband data
|
||||||
float data[DATA_SIZE];
|
float data[DATA_SIZE];
|
||||||
float devfreq[DATA_SIZE];
|
float devfreq[DATA_SIZE];
|
||||||
|
|
@ -116,6 +74,10 @@ int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt,
|
||||||
|
|
||||||
int disablestereo = 0;
|
int disablestereo = 0;
|
||||||
|
|
||||||
|
//set the power
|
||||||
|
padgpio gpiopad;
|
||||||
|
gpiopad.setlevel(power);
|
||||||
|
|
||||||
// Initialize the baseband generator
|
// Initialize the baseband generator
|
||||||
if(fm_mpx_open(audio_file, DATA_SIZE, raw, preemp, rawSampleRate, rawChannels, cutoff_freq) < 0) return 1;
|
if(fm_mpx_open(audio_file, DATA_SIZE, raw, preemp, rawSampleRate, rawChannels, cutoff_freq) < 0) return 1;
|
||||||
|
|
||||||
|
|
@ -204,8 +166,8 @@ int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt,
|
||||||
} else if(pollResult.res == CONTROL_PIPE_RDS_SET) {
|
} else if(pollResult.res == CONTROL_PIPE_RDS_SET) {
|
||||||
drds = pollResult.arg_int;
|
drds = pollResult.arg_int;
|
||||||
} else if(pollResult.res == CONTROL_PIPE_PWR_SET) {
|
} else if(pollResult.res == CONTROL_PIPE_PWR_SET) {
|
||||||
pad_reg[GPIO_PAD_0_27] = 0x5a000018 + std::stoi(pollResult.arg);
|
padgpio gpiopad;
|
||||||
pad_reg[GPIO_PAD_28_45] = 0x5a000018 + std::stoi(pollResult.arg);
|
gpiopad.setlevel(pollResult.arg_int);
|
||||||
} else if(pollResult.res == CONTROL_PIPE_DEVIATION_SET) {
|
} else if(pollResult.res == CONTROL_PIPE_DEVIATION_SET) {
|
||||||
deviation = std::stoi(pollResult.arg);
|
deviation = std::stoi(pollResult.arg);
|
||||||
deviation_scale_factor= 0.1 * (deviation );
|
deviation_scale_factor= 0.1 * (deviation );
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue