diff --git a/src/pifmrds/control_pipe.c b/src/pifmrds/control_pipe.c index 1c9ca4a..ba443af 100644 --- a/src/pifmrds/control_pipe.c +++ b/src/pifmrds/control_pipe.c @@ -15,10 +15,6 @@ #include "control_pipe.h" #define CTL_BUFFER_SIZE 70 -#define GPIO_PAD_0_27 (0x2C/4) -#define GPIO_PAD_28_45 (0x30/4) - -static volatile uint32_t *pad_reg; int fd; FILE *f_ctl; @@ -26,9 +22,8 @@ FILE *f_ctl; /* * Opens a file (pipe) to be used to control the RDS coder, in non-blocking mode. */ -int open_control_pipe(char *filename, volatile uint32_t *padreg) +int open_control_pipe(char *filename) { - pad_reg = padreg; fd = open(filename, O_RDWR | O_NONBLOCK); if(fd == -1) return -1; @@ -129,8 +124,7 @@ ResultAndArg poll_control_pipe() { resarg.res = CONTROL_PIPE_PTY_SET; } else if(fifo[0] == 'P' && fifo[1] == 'W' && fifo[2] == 'R') { int power_level = atoi(arg); - pad_reg[GPIO_PAD_0_27] = 0x5a000018 + power_level; - pad_reg[GPIO_PAD_28_45] = 0x5a000018 + power_level; + resarg.arg = (char)power_level; printf("POWER set to: \"%s\"\n", arg); resarg.res = CONTROL_PIPE_PWR_SET; } else if(fifo[0] == 'R' && fifo[1] == 'T' && fifo[2] == 'B') { diff --git a/src/pifmrds/control_pipe.h b/src/pifmrds/control_pipe.h index 3e29aca..d92d876 100644 --- a/src/pifmrds/control_pipe.h +++ b/src/pifmrds/control_pipe.h @@ -21,6 +21,6 @@ typedef struct { char *arg; } ResultAndArg; -extern int open_control_pipe(char *filename, volatile uint32_t *padreg); +extern int open_control_pipe(char *filename); extern int close_control_pipe(); extern ResultAndArg poll_control_pipe(); diff --git a/src/pifmrds/pi_fm_rds.cpp b/src/pifmrds/pi_fm_rds.cpp index 9c5b13c..d57e941 100644 --- a/src/pifmrds/pi_fm_rds.cpp +++ b/src/pifmrds/pi_fm_rds.cpp @@ -96,7 +96,7 @@ int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt, 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 float data[DATA_SIZE]; float devfreq[DATA_SIZE]; @@ -189,6 +189,9 @@ int tx(uint32_t carrier_freq, char *audio_file, uint16_t pi, char *ps, char *rt, varying_ps = 0; } else if(pollResult.res == CONTROL_PIPE_RDS_SET) { drds = (int)pollResult.arg; + } else if(pollResult.res == CONTROL_PIPE_PWR_SET) { + pad_reg[GPIO_PAD_0_27] = 0x5a000018 + (int)pollResult.arg; + pad_reg[GPIO_PAD_28_45] = 0x5a000018 + (int)pollResult.arg; } }