mirror of
https://github.com/radio95-rnt/rds95.git
synced 2026-02-26 20:33:53 +01:00
get rid of unsignedchar
This commit is contained in:
@@ -4,20 +4,20 @@
|
|||||||
#include "lib.h"
|
#include "lib.h"
|
||||||
#include "ascii_cmd.h"
|
#include "ascii_cmd.h"
|
||||||
|
|
||||||
#define CMD_MATCHES(a) (ustrcmp(cmd, (unsigned char *)a) == 0)
|
#define CMD_MATCHES(a) (ustrcmp(cmd, (char *)a) == 0)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *cmd;
|
const char *cmd;
|
||||||
void (*handler)(unsigned char *arg, RDSModulator* mod);
|
void (*handler)(char *arg, RDSModulator* mod);
|
||||||
uint8_t cmd_length;
|
uint8_t cmd_length;
|
||||||
} command_handler_t;
|
} command_handler_t;
|
||||||
|
|
||||||
static void handle_ptyn(unsigned char *arg, RDSModulator* mod) {
|
static void handle_ptyn(char *arg, RDSModulator* mod) {
|
||||||
arg[PTYN_LENGTH] = 0;
|
arg[PTYN_LENGTH] = 0;
|
||||||
set_rds_ptyn(mod->enc, xlat(arg));
|
set_rds_ptyn(mod->enc, xlat(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_afch(unsigned char *arg, RDSModulator* mod) {
|
static void handle_afch(char *arg, RDSModulator* mod) {
|
||||||
if(arg[0] == '\0') {
|
if(arg[0] == '\0') {
|
||||||
memset(&(mod->enc->data[mod->enc->program].af), 0, sizeof(mod->enc->data[mod->enc->program].af));
|
memset(&(mod->enc->data[mod->enc->program].af), 0, sizeof(mod->enc->data[mod->enc->program].af));
|
||||||
return;
|
return;
|
||||||
@@ -53,52 +53,46 @@ static void handle_afch(unsigned char *arg, RDSModulator* mod) {
|
|||||||
memcpy(&(mod->enc->data[mod->enc->program].af), &new_af, sizeof(mod->enc->data[mod->enc->program].af));
|
memcpy(&(mod->enc->data[mod->enc->program].af), &new_af, sizeof(mod->enc->data[mod->enc->program].af));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_tps(unsigned char *arg, RDSModulator* mod) {
|
static void handle_tps(char *arg, RDSModulator* mod) {
|
||||||
arg[PS_LENGTH * 2] = 0;
|
arg[PS_LENGTH * 2] = 0;
|
||||||
set_rds_tps(mod->enc, xlat(arg));
|
set_rds_tps(mod->enc, xlat(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_rt1(unsigned char *arg, RDSModulator* mod) {
|
static void handle_rt1(char *arg, RDSModulator* mod) {
|
||||||
arg[RT_LENGTH * 2] = 0;
|
arg[RT_LENGTH * 2] = 0;
|
||||||
set_rds_rt1(mod->enc, xlat(arg));
|
set_rds_rt1(mod->enc, xlat(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_pty(unsigned char *arg, RDSModulator* mod) {
|
static void handle_pty(char *arg, RDSModulator* mod) {
|
||||||
arg[2] = 0;
|
arg[2] = 0;
|
||||||
mod->enc->data[mod->enc->program].pty = strtoul((char *)arg, NULL, 10);
|
mod->enc->data[mod->enc->program].pty = strtoul((char *)arg, NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_ecc(unsigned char *arg, RDSModulator* mod) {
|
static void handle_ecc(char *arg, RDSModulator* mod) {
|
||||||
arg[2] = 0;
|
arg[2] = 0;
|
||||||
mod->enc->data[mod->enc->program].ecc = strtoul((char *)arg, NULL, 16);
|
mod->enc->data[mod->enc->program].ecc = strtoul((char *)arg, NULL, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_lic(unsigned char *arg, RDSModulator* mod) {
|
static void handle_lic(char *arg, RDSModulator* mod) {
|
||||||
arg[2] = 0;
|
arg[3] = 0;
|
||||||
mod->enc->data[mod->enc->program].lic = strtoul((char *)arg, NULL, 16);
|
mod->enc->data[mod->enc->program].lic = strtoul((char *)arg, NULL, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_rtp(unsigned char *arg, RDSModulator* mod) {
|
static void handle_rtp(char *arg, RDSModulator* mod) {
|
||||||
char tag_names[2][32];
|
char tag_names[2][32];
|
||||||
uint8_t tags[6];
|
uint8_t tags[6];
|
||||||
|
|
||||||
if (sscanf((char *)arg, "%hhu,%hhu,%hhu,%hhu,%hhu,%hhu",
|
if (sscanf((char *)arg, "%hhu,%hhu,%hhu,%hhu,%hhu,%hhu", &tags[0], &tags[1], &tags[2], &tags[3], &tags[4], &tags[5]) == 6) {
|
||||||
&tags[0], &tags[1], &tags[2], &tags[3], &tags[4], &tags[5]) == 6) {
|
|
||||||
set_rds_rtplus_tags(mod->enc, tags);
|
|
||||||
} else if (sscanf((char *)arg, "%31[^,],%hhu,%hhu,%31[^,],%hhu,%hhu",
|
|
||||||
tag_names[0], &tags[1], &tags[2], tag_names[1], &tags[4], &tags[5]) == 6) {
|
|
||||||
tags[0] = get_rtp_tag_id(tag_names[0]);
|
|
||||||
tags[3] = get_rtp_tag_id(tag_names[1]);
|
|
||||||
set_rds_rtplus_tags(mod->enc, tags);
|
set_rds_rtplus_tags(mod->enc, tags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_lps(unsigned char *arg, RDSModulator* mod) {
|
static void handle_lps(char *arg, RDSModulator* mod) {
|
||||||
arg[LPS_LENGTH] = 0;
|
arg[LPS_LENGTH] = 0;
|
||||||
set_rds_lps(mod->enc, arg);
|
set_rds_lps(mod->enc, arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_pin(unsigned char *arg, RDSModulator* mod) {
|
static void handle_pin(char *arg, RDSModulator* mod) {
|
||||||
uint8_t pin[3];
|
uint8_t pin[3];
|
||||||
if (sscanf((char *)arg, "%hhu,%hhu,%hhu", &pin[0], &pin[1], &pin[2]) == 3) {
|
if (sscanf((char *)arg, "%hhu,%hhu,%hhu", &pin[0], &pin[1], &pin[2]) == 3) {
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
@@ -107,42 +101,42 @@ static void handle_pin(unsigned char *arg, RDSModulator* mod) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_ps(unsigned char *arg, RDSModulator* mod) {
|
static void handle_ps(char *arg, RDSModulator* mod) {
|
||||||
arg[PS_LENGTH * 2] = 0;
|
arg[PS_LENGTH * 2] = 0;
|
||||||
set_rds_ps(mod->enc, xlat(arg));
|
set_rds_ps(mod->enc, xlat(arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_ct(unsigned char *arg, RDSModulator* mod) {
|
static void handle_ct(char *arg, RDSModulator* mod) {
|
||||||
arg[2] = 1;
|
arg[2] = 1;
|
||||||
mod->enc->data[mod->enc->program].ct = arg[0];
|
mod->enc->data[mod->enc->program].ct = arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_di(unsigned char *arg, RDSModulator* mod) {
|
static void handle_di(char *arg, RDSModulator* mod) {
|
||||||
arg[2] = 0;
|
arg[2] = 0;
|
||||||
mod->enc->data[mod->enc->program].di = arg[0];
|
mod->enc->data[mod->enc->program].di = arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_tp(unsigned char *arg, RDSModulator* mod) {
|
static void handle_tp(char *arg, RDSModulator* mod) {
|
||||||
arg[1] = 0;
|
arg[1] = 0;
|
||||||
mod->enc->data[mod->enc->program].tp = arg[0];
|
mod->enc->data[mod->enc->program].tp = arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_ta(unsigned char *arg, RDSModulator* mod) {
|
static void handle_ta(char *arg, RDSModulator* mod) {
|
||||||
arg[1] = 0;
|
arg[1] = 0;
|
||||||
mod->enc->data[mod->enc->program].ta = arg[0];
|
mod->enc->data[mod->enc->program].ta = arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_ms(unsigned char *arg, RDSModulator* mod) {
|
static void handle_ms(char *arg, RDSModulator* mod) {
|
||||||
arg[1] = 0;
|
arg[1] = 0;
|
||||||
mod->enc->data[mod->enc->program].ms = arg[0];
|
mod->enc->data[mod->enc->program].ms = arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_pi(unsigned char *arg, RDSModulator* mod) {
|
static void handle_pi(char *arg, RDSModulator* mod) {
|
||||||
arg[4] = 0;
|
arg[4] = 0;
|
||||||
mod->enc->data[mod->enc->program].pi = strtoul((char *)arg, NULL, 16);
|
mod->enc->data[mod->enc->program].pi = strtoul((char *)arg, NULL, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_af(unsigned char *arg, RDSModulator* mod) {
|
static void handle_af(char *arg, RDSModulator* mod) {
|
||||||
if (arg[0] == 'A' || arg[0] == 'B') {
|
if (arg[0] == 'A' || arg[0] == 'B') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -178,7 +172,7 @@ static void handle_af(unsigned char *arg, RDSModulator* mod) {
|
|||||||
memcpy(&(mod->enc->data[mod->enc->program].af), &new_af, sizeof(mod->enc[mod->enc->program].data->af));
|
memcpy(&(mod->enc->data[mod->enc->program].af), &new_af, sizeof(mod->enc[mod->enc->program].data->af));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_g(unsigned char *arg, RDSModulator* mod) {
|
static void handle_g(char *arg, RDSModulator* mod) {
|
||||||
uint16_t blocks[3];
|
uint16_t blocks[3];
|
||||||
int count = sscanf((char *)arg, "%4hx%4hx%4hx", &blocks[0], &blocks[1], &blocks[2]);
|
int count = sscanf((char *)arg, "%4hx%4hx%4hx", &blocks[0], &blocks[1], &blocks[2]);
|
||||||
if (count == 3) {
|
if (count == 3) {
|
||||||
@@ -189,37 +183,37 @@ static void handle_g(unsigned char *arg, RDSModulator* mod) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_pinen(unsigned char *arg, RDSModulator* mod) {
|
static void handle_pinen(char *arg, RDSModulator* mod) {
|
||||||
arg[1] = 0;
|
arg[1] = 0;
|
||||||
mod->enc->data[mod->enc->program].pin[0] = arg[0];
|
mod->enc->data[mod->enc->program].pin[0] = arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_rt1en(unsigned char *arg, RDSModulator* mod) {
|
static void handle_rt1en(char *arg, RDSModulator* mod) {
|
||||||
arg[1] = 0;
|
arg[1] = 0;
|
||||||
mod->enc->data[mod->enc->program].rt1_enabled = arg[0];
|
mod->enc->data[mod->enc->program].rt1_enabled = arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_ptynen(unsigned char *arg, RDSModulator* mod) {
|
static void handle_ptynen(char *arg, RDSModulator* mod) {
|
||||||
arg[1] = 0;
|
arg[1] = 0;
|
||||||
mod->enc->data[mod->enc->program].ptyn_enabled = strtoul((char *)arg, NULL, 10);
|
mod->enc->data[mod->enc->program].ptyn_enabled = strtoul((char *)arg, NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_rtprun(unsigned char *arg, RDSModulator* mod) {
|
static void handle_rtprun(char *arg, RDSModulator* mod) {
|
||||||
arg[1] = 0;
|
arg[1] = 0;
|
||||||
set_rds_rtplus_flags(mod->enc, strtoul((char *)arg, NULL, 10));
|
set_rds_rtplus_flags(mod->enc, strtoul((char *)arg, NULL, 10));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_eccen(unsigned char *arg, RDSModulator* mod) {
|
static void handle_eccen(char *arg, RDSModulator* mod) {
|
||||||
arg[1] = 0;
|
arg[1] = 0;
|
||||||
mod->enc->data[mod->enc->program].ecclic_enabled = arg[0];
|
mod->enc->data[mod->enc->program].ecclic_enabled = arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_shortrt(unsigned char *arg, RDSModulator* mod) {
|
static void handle_shortrt(char *arg, RDSModulator* mod) {
|
||||||
arg[1] = 0;
|
arg[1] = 0;
|
||||||
mod->enc->data[mod->enc->program].shortrt = arg[0];
|
mod->enc->data[mod->enc->program].shortrt = arg[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_program(unsigned char *arg, RDSModulator* mod) {
|
static void handle_program(char *arg, RDSModulator* mod) {
|
||||||
int16_t program = strtol((char *)arg, NULL, 10)-1;
|
int16_t program = strtol((char *)arg, NULL, 10)-1;
|
||||||
if(program >= PROGRAMS) program = (PROGRAMS-1);
|
if(program >= PROGRAMS) program = (PROGRAMS-1);
|
||||||
if(program < 0) program = 0;
|
if(program < 0) program = 0;
|
||||||
@@ -228,28 +222,28 @@ static void handle_program(unsigned char *arg, RDSModulator* mod) {
|
|||||||
mod->enc->program = (uint8_t)program;
|
mod->enc->program = (uint8_t)program;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_grpseq(unsigned char *arg, RDSModulator* mod) {
|
static void handle_grpseq(char *arg, RDSModulator* mod) {
|
||||||
if (arg[0] == '\0') {
|
if (arg[0] == '\0') {
|
||||||
memset(&(mod->enc->data[mod->enc->program].grp_sqc), 0, 24);
|
memset(&(mod->enc->data[mod->enc->program].grp_sqc), 0, 24);
|
||||||
memcpy(&(mod->enc->data[mod->enc->program].grp_sqc), (unsigned char*)DEFAULT_GRPSQC, sizeof(DEFAULT_GRPSQC));
|
memcpy(&(mod->enc->data[mod->enc->program].grp_sqc), (char*)DEFAULT_GRPSQC, sizeof(DEFAULT_GRPSQC));
|
||||||
} else {
|
} else {
|
||||||
memset(&(mod->enc->data[mod->enc->program].grp_sqc), 0, 24);
|
memset(&(mod->enc->data[mod->enc->program].grp_sqc), 0, 24);
|
||||||
memcpy(&(mod->enc->data[mod->enc->program].grp_sqc), arg, 24);
|
memcpy(&(mod->enc->data[mod->enc->program].grp_sqc), arg, 24);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_level(unsigned char *arg, RDSModulator* mod) {
|
static void handle_level(char *arg, RDSModulator* mod) {
|
||||||
mod->params.level = strtoul((char *)arg, NULL, 10)/255.0f;
|
mod->params.level = strtoul((char *)arg, NULL, 10)/255.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_rdsgen(unsigned char *arg, RDSModulator* mod) {
|
static void handle_rdsgen(char *arg, RDSModulator* mod) {
|
||||||
mod->params.rdsgen = strtoul((char *)arg, NULL, 10);
|
mod->params.rdsgen = strtoul((char *)arg, NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_udg1(unsigned char *arg, RDSModulator* mod) {
|
static void handle_udg1(char *arg, RDSModulator* mod) {
|
||||||
uint16_t blocks[8][3];
|
uint16_t blocks[8][3];
|
||||||
int sets = 0;
|
int sets = 0;
|
||||||
unsigned char *ptr = arg;
|
char *ptr = arg;
|
||||||
|
|
||||||
while (sets < 8) {
|
while (sets < 8) {
|
||||||
int count = sscanf((char *)ptr, "%4hx%4hx%4hx",
|
int count = sscanf((char *)ptr, "%4hx%4hx%4hx",
|
||||||
@@ -275,10 +269,10 @@ static void handle_udg1(unsigned char *arg, RDSModulator* mod) {
|
|||||||
memcpy(&(mod->enc->data[mod->enc->program].udg1), &blocks, sets * sizeof(uint16_t[3]));
|
memcpy(&(mod->enc->data[mod->enc->program].udg1), &blocks, sets * sizeof(uint16_t[3]));
|
||||||
mod->enc->data[mod->enc->program].udg1_len = sets;
|
mod->enc->data[mod->enc->program].udg1_len = sets;
|
||||||
}
|
}
|
||||||
static void handle_udg2(unsigned char *arg, RDSModulator* mod) {
|
static void handle_udg2(char *arg, RDSModulator* mod) {
|
||||||
uint16_t blocks[8][3];
|
uint16_t blocks[8][3];
|
||||||
int sets = 0;
|
int sets = 0;
|
||||||
unsigned char *ptr = arg;
|
char *ptr = arg;
|
||||||
|
|
||||||
while (sets < 8) {
|
while (sets < 8) {
|
||||||
int count = sscanf((char *)ptr, "%4hx%4hx%4hx",
|
int count = sscanf((char *)ptr, "%4hx%4hx%4hx",
|
||||||
@@ -305,7 +299,7 @@ static void handle_udg2(unsigned char *arg, RDSModulator* mod) {
|
|||||||
mod->enc->data[mod->enc->program].udg2_len = sets;
|
mod->enc->data[mod->enc->program].udg2_len = sets;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_init(unsigned char *arg, RDSModulator* mod) {
|
static void handle_init(char *arg, RDSModulator* mod) {
|
||||||
(void)arg;
|
(void)arg;
|
||||||
set_rds_defaults(mod->enc, mod->enc->program);
|
set_rds_defaults(mod->enc, mod->enc->program);
|
||||||
}
|
}
|
||||||
@@ -369,9 +363,9 @@ static const command_handler_t commands_exact[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static bool process_command_table(const command_handler_t *table, int table_size,
|
static bool process_command_table(const command_handler_t *table, int table_size,
|
||||||
unsigned char *cmd, unsigned char *arg, RDSModulator* mod) {
|
char *cmd, char *arg, RDSModulator* mod) {
|
||||||
for (int i = 0; i < table_size; i++) {
|
for (int i = 0; i < table_size; i++) {
|
||||||
if (ustrcmp(cmd, (unsigned char *)table[i].cmd) == 0) {
|
if (ustrcmp(cmd, (char *)table[i].cmd) == 0) {
|
||||||
table[i].handler(arg, mod);
|
table[i].handler(arg, mod);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -379,8 +373,8 @@ static bool process_command_table(const command_handler_t *table, int table_size
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void process_ascii_cmd(RDSModulator* mod, unsigned char *str) {
|
void process_ascii_cmd(RDSModulator* mod, char *str) {
|
||||||
unsigned char *cmd, *arg;
|
char *cmd, *arg;
|
||||||
uint16_t cmd_len = _strnlen((const char*)str, CTL_BUFFER_SIZE);
|
uint16_t cmd_len = _strnlen((const char*)str, CTL_BUFFER_SIZE);
|
||||||
|
|
||||||
for(uint16_t i = 0; i < cmd_len; i++) {
|
for(uint16_t i = 0; i < cmd_len; i++) {
|
||||||
@@ -390,7 +384,7 @@ void process_ascii_cmd(RDSModulator* mod, unsigned char *str) {
|
|||||||
for (size_t i = 0; i < sizeof(commands_exact) / sizeof(command_handler_t); i++) {
|
for (size_t i = 0; i < sizeof(commands_exact) / sizeof(command_handler_t); i++) {
|
||||||
const command_handler_t *handler = &commands_exact[i];
|
const command_handler_t *handler = &commands_exact[i];
|
||||||
if (cmd_len == handler->cmd_length &&
|
if (cmd_len == handler->cmd_length &&
|
||||||
ustrcmp(str, (unsigned char *)handler->cmd) == 0) {
|
ustrcmp(str, (char *)handler->cmd) == 0) {
|
||||||
handler->handler(NULL, mod);
|
handler->handler(NULL, mod);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,4 +4,4 @@
|
|||||||
#define CTL_BUFFER_SIZE (CMD_BUFFER_SIZE * 2)
|
#define CTL_BUFFER_SIZE (CMD_BUFFER_SIZE * 2)
|
||||||
#define READ_TIMEOUT_MS 100
|
#define READ_TIMEOUT_MS 100
|
||||||
|
|
||||||
extern void process_ascii_cmd(RDSModulator* mod, unsigned char *str);
|
extern void process_ascii_cmd(RDSModulator* mod, char *str);
|
||||||
@@ -17,8 +17,8 @@ int open_control_pipe(char *filename) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void poll_control_pipe(RDSModulator* mod) {
|
void poll_control_pipe(RDSModulator* mod) {
|
||||||
static unsigned char pipe_buf[CTL_BUFFER_SIZE];
|
static char pipe_buf[CTL_BUFFER_SIZE];
|
||||||
static unsigned char cmd_buf[CMD_BUFFER_SIZE];
|
static char cmd_buf[CMD_BUFFER_SIZE];
|
||||||
int bytes_read;
|
int bytes_read;
|
||||||
char *token;
|
char *token;
|
||||||
|
|
||||||
|
|||||||
91
src/lib.c
91
src/lib.c
@@ -17,8 +17,8 @@ int _strnlen(const char *s, int maxlen) {
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ustrcmp(const unsigned char *s1, const unsigned char *s2) {
|
int ustrcmp(const char *s1, const char *s2) {
|
||||||
unsigned char c1, c2;
|
char c1, c2;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
c1 = *s1++;
|
c1 = *s1++;
|
||||||
@@ -30,89 +30,6 @@ int ustrcmp(const unsigned char *s1, const unsigned char *s2) {
|
|||||||
return c1 - c2;
|
return c1 - c2;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *rtp_content_types[64] = {
|
|
||||||
"DUMMY_CLASS",
|
|
||||||
"ITEM.TITLE",
|
|
||||||
"ITEM.ALBUM",
|
|
||||||
"ITEM.TRACKNUMBER",
|
|
||||||
"ITEM.ARTIST",
|
|
||||||
"ITEM.COMPOSITION",
|
|
||||||
"ITEM.MOVEMENT",
|
|
||||||
"ITEM.CONDUCTOR",
|
|
||||||
"ITEM.COMPOSER",
|
|
||||||
"ITEM.BAND",
|
|
||||||
"ITEM.COMMENT",
|
|
||||||
"ITEM.GENRE",
|
|
||||||
"INFO.NEWS",
|
|
||||||
"INFO.NEWS.LOCAL",
|
|
||||||
"INFO.STOCKMARKET",
|
|
||||||
"INFO.SPORT",
|
|
||||||
"INFO.LOTTERY",
|
|
||||||
"INFO.HOROSCOPE",
|
|
||||||
"INFO.DAILY_DIVERSION",
|
|
||||||
"INFO.HEALTH",
|
|
||||||
"INFO.EVENT",
|
|
||||||
"INFO.SCENE",
|
|
||||||
"INFO.CINEMA",
|
|
||||||
"INFO.TV",
|
|
||||||
"INFO.DATE_TIME",
|
|
||||||
"INFO.WEATHER",
|
|
||||||
"INFO.TRAFFIC",
|
|
||||||
"INFO.ALARM",
|
|
||||||
"INFO.ADVERTISEMENT",
|
|
||||||
"INFO.URL",
|
|
||||||
"INFO.OTHER",
|
|
||||||
"STATIONNAME.SHORT",
|
|
||||||
"STATIONNAME.LONG",
|
|
||||||
"PROGRAMME.NOW",
|
|
||||||
"PROGRAMME.NEXT",
|
|
||||||
"PROGRAMME.PART",
|
|
||||||
"PROGRAMME.HOST",
|
|
||||||
"PROGRAMME.EDITORIAL_STAFF",
|
|
||||||
"PROGRAMME.FREQUENCY",
|
|
||||||
"PROGRAMME.HOMEPAGE",
|
|
||||||
"PROGRAMME.SUBCHANNEL",
|
|
||||||
"PHONE.HOTLINE",
|
|
||||||
"PHONE.STUDIO",
|
|
||||||
"PHONE.OTHER",
|
|
||||||
"SMS.STUDIO",
|
|
||||||
"SMS.OTHER",
|
|
||||||
"EMAIL.HOTLINE",
|
|
||||||
"EMAIL.STUDIO",
|
|
||||||
"EMAIL.OTHER",
|
|
||||||
"MMS.OTHER",
|
|
||||||
"CHAT",
|
|
||||||
"CHAT.CENTRE",
|
|
||||||
"VOTE.QUESTION",
|
|
||||||
"VOTE.CENTRE",
|
|
||||||
"RFU_1",
|
|
||||||
"RFU_2",
|
|
||||||
"PRIVATE_1",
|
|
||||||
"PRIVATE_2",
|
|
||||||
"PRIVATE_3",
|
|
||||||
"PLACE",
|
|
||||||
"APPOINTMENT",
|
|
||||||
"IDENTIFIER",
|
|
||||||
"PURCHASE",
|
|
||||||
"GET_DATA"
|
|
||||||
};
|
|
||||||
|
|
||||||
uint8_t get_rtp_tag_id(char *rtp_tag_name) {
|
|
||||||
uint8_t tag_id = 0;
|
|
||||||
for (uint8_t i = 0; i < 64; i++) {
|
|
||||||
if (strcmp(rtp_tag_name, rtp_content_types[i]) == 0) {
|
|
||||||
tag_id = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tag_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *get_rtp_tag_name(uint8_t rtp_tag) {
|
|
||||||
if (rtp_tag > 63) rtp_tag = 0;
|
|
||||||
return rtp_content_types[rtp_tag];
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint16_t offset_words[] = {
|
static uint16_t offset_words[] = {
|
||||||
0x0FC, /* A */
|
0x0FC, /* A */
|
||||||
0x198, /* B */
|
0x198, /* B */
|
||||||
@@ -189,8 +106,8 @@ uint8_t add_rds_af(RDSAFs *af_list, float freq) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define XLATSTRLEN 255
|
#define XLATSTRLEN 255
|
||||||
unsigned char *xlat(unsigned char *str) {
|
char *xlat(char *str) {
|
||||||
static unsigned char new_str[XLATSTRLEN];
|
static char new_str[XLATSTRLEN];
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
|
|
||||||
while (*str != 0 && i < XLATSTRLEN) {
|
while (*str != 0 && i < XLATSTRLEN) {
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
extern void msleep(unsigned long ms);
|
extern void msleep(unsigned long ms);
|
||||||
|
|
||||||
extern int _strnlen(const char *s, int maxlen);
|
extern int _strnlen(const char *s, int maxlen);
|
||||||
extern int ustrcmp(const unsigned char *s1, const unsigned char *s2);
|
extern int ustrcmp(const char *s1, const char *s2);
|
||||||
|
|
||||||
extern uint8_t get_rtp_tag_id(char *rtp_tag_name);
|
|
||||||
extern char *get_rtp_tag_name(uint8_t rtp_tag);
|
|
||||||
extern void add_checkwords(uint16_t *blocks, uint8_t *bits);
|
extern void add_checkwords(uint16_t *blocks, uint8_t *bits);
|
||||||
extern uint8_t add_rds_af(RDSAFs *af_list, float freq);
|
extern uint8_t add_rds_af(RDSAFs *af_list, float freq);
|
||||||
extern char *show_af_list(RDSAFs af_list);
|
extern char *xlat(char *str);
|
||||||
extern unsigned char *xlat(unsigned char *str);
|
|
||||||
10
src/rds.c
10
src/rds.c
@@ -528,7 +528,7 @@ void init_rds_encoder(RDSEncoder* enc) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_rds_rt1(RDSEncoder* enc, unsigned char *rt1) {
|
void set_rds_rt1(RDSEncoder* enc, char *rt1) {
|
||||||
uint8_t i = 0, len = 0;
|
uint8_t i = 0, len = 0;
|
||||||
|
|
||||||
enc->state[enc->program].rt_update = 1;
|
enc->state[enc->program].rt_update = 1;
|
||||||
@@ -550,7 +550,7 @@ void set_rds_rt1(RDSEncoder* enc, unsigned char *rt1) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_rds_ps(RDSEncoder* enc, unsigned char *ps) {
|
void set_rds_ps(RDSEncoder* enc, char *ps) {
|
||||||
uint8_t len = 0;
|
uint8_t len = 0;
|
||||||
|
|
||||||
enc->state[enc->program].ps_update = 1;
|
enc->state[enc->program].ps_update = 1;
|
||||||
@@ -558,7 +558,7 @@ void set_rds_ps(RDSEncoder* enc, unsigned char *ps) {
|
|||||||
while (*ps != 0 && len < PS_LENGTH) enc->data[enc->program].ps[len++] = *ps++;
|
while (*ps != 0 && len < PS_LENGTH) enc->data[enc->program].ps[len++] = *ps++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_rds_tps(RDSEncoder* enc, unsigned char *tps) {
|
void set_rds_tps(RDSEncoder* enc, char *tps) {
|
||||||
uint8_t len = 0;
|
uint8_t len = 0;
|
||||||
|
|
||||||
enc->state[enc->program].tps_update = 1;
|
enc->state[enc->program].tps_update = 1;
|
||||||
@@ -571,7 +571,7 @@ void set_rds_tps(RDSEncoder* enc, unsigned char *tps) {
|
|||||||
while (*tps != 0 && len < PS_LENGTH) enc->data[enc->program].tps[len++] = *tps++;
|
while (*tps != 0 && len < PS_LENGTH) enc->data[enc->program].tps[len++] = *tps++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_rds_lps(RDSEncoder* enc, unsigned char *lps) {
|
void set_rds_lps(RDSEncoder* enc, char *lps) {
|
||||||
uint8_t i = 0, len = 0;
|
uint8_t i = 0, len = 0;
|
||||||
|
|
||||||
enc->state[enc->program].lps_update = 1;
|
enc->state[enc->program].lps_update = 1;
|
||||||
@@ -614,7 +614,7 @@ void set_rds_rtplus_tags(RDSEncoder* enc, uint8_t *tags) {
|
|||||||
enc->rtpData[enc->program].enabled = 1;
|
enc->rtpData[enc->program].enabled = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_rds_ptyn(RDSEncoder* enc, unsigned char *ptyn) {
|
void set_rds_ptyn(RDSEncoder* enc, char *ptyn) {
|
||||||
uint8_t len = 0;
|
uint8_t len = 0;
|
||||||
|
|
||||||
enc->state[enc->program].ptyn_update = 1;
|
enc->state[enc->program].ptyn_update = 1;
|
||||||
|
|||||||
50
src/rds.h
50
src/rds.h
@@ -44,13 +44,13 @@ typedef struct {
|
|||||||
uint8_t enabled : 1;
|
uint8_t enabled : 1;
|
||||||
uint16_t pi;
|
uint16_t pi;
|
||||||
uint8_t pin[4];
|
uint8_t pin[4];
|
||||||
unsigned char ps[8];
|
char ps[8];
|
||||||
uint8_t ta : 1;
|
uint8_t ta : 1;
|
||||||
uint8_t tp : 1;
|
uint8_t tp : 1;
|
||||||
RDSAFs af;
|
RDSAFs af;
|
||||||
} RDSEONs;
|
} RDSEONs;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned char text[255];
|
char text[255];
|
||||||
uint8_t destination : 4;
|
uint8_t destination : 4;
|
||||||
} RDSMessage;
|
} RDSMessage;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -62,7 +62,7 @@ typedef struct {
|
|||||||
} RDSMessages;
|
} RDSMessages;
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
unsigned char command[35];
|
char command[35];
|
||||||
uint8_t days : 7; // let's say that here it will be stored by bits, so 0b1000000 is monday and so on
|
uint8_t days : 7; // let's say that here it will be stored by bits, so 0b1000000 is monday and so on
|
||||||
uint8_t pty: 5;
|
uint8_t pty: 5;
|
||||||
uint16_t execution_hours[12];
|
uint16_t execution_hours[12];
|
||||||
@@ -89,14 +89,14 @@ typedef struct {
|
|||||||
uint8_t ms : 1;
|
uint8_t ms : 1;
|
||||||
uint8_t di : 4;
|
uint8_t di : 4;
|
||||||
|
|
||||||
unsigned char ps[PS_LENGTH];
|
char ps[PS_LENGTH];
|
||||||
unsigned char tps[PS_LENGTH];
|
char tps[PS_LENGTH];
|
||||||
|
|
||||||
uint8_t eqtext1 : 1;
|
uint8_t eqtext1 : 1;
|
||||||
uint8_t dps1_enabled : 1;
|
uint8_t dps1_enabled : 1;
|
||||||
uint8_t dps2_enabled : 1;
|
uint8_t dps2_enabled : 1;
|
||||||
unsigned char dps1[255];
|
char dps1[255];
|
||||||
unsigned char dps2[255];
|
char dps2[255];
|
||||||
uint8_t dps1_mode : 2;
|
uint8_t dps1_mode : 2;
|
||||||
uint8_t dps2_mode : 2;
|
uint8_t dps2_mode : 2;
|
||||||
uint8_t dps1_numberofrepeats : 7;
|
uint8_t dps1_numberofrepeats : 7;
|
||||||
@@ -113,22 +113,22 @@ typedef struct {
|
|||||||
uint8_t rt_type : 2;
|
uint8_t rt_type : 2;
|
||||||
uint8_t rt_text_timeout;
|
uint8_t rt_text_timeout;
|
||||||
uint8_t rt_switching_period;
|
uint8_t rt_switching_period;
|
||||||
unsigned char default_rt[RT_LENGTH];
|
char default_rt[RT_LENGTH];
|
||||||
unsigned char rt1[RT_LENGTH];
|
char rt1[RT_LENGTH];
|
||||||
unsigned char rt2[RT_LENGTH];
|
char rt2[RT_LENGTH];
|
||||||
|
|
||||||
uint8_t ptyn_enabled : 1;
|
uint8_t ptyn_enabled : 1;
|
||||||
unsigned char ptyn[PTYN_LENGTH];
|
char ptyn[PTYN_LENGTH];
|
||||||
|
|
||||||
RDSAFs af;
|
RDSAFs af;
|
||||||
|
|
||||||
uint8_t ct : 1;
|
uint8_t ct : 1;
|
||||||
|
|
||||||
unsigned char lps[LPS_LENGTH];
|
char lps[LPS_LENGTH];
|
||||||
|
|
||||||
uint8_t pin[4];
|
uint8_t pin[4];
|
||||||
|
|
||||||
unsigned char grp_sqc[24];
|
char grp_sqc[24];
|
||||||
|
|
||||||
uint8_t udg1_len : 4;
|
uint8_t udg1_len : 4;
|
||||||
uint8_t udg2_len : 4;
|
uint8_t udg2_len : 4;
|
||||||
@@ -145,25 +145,25 @@ typedef struct {
|
|||||||
|
|
||||||
uint8_t ps_update : 1;
|
uint8_t ps_update : 1;
|
||||||
uint8_t tps_update : 1;
|
uint8_t tps_update : 1;
|
||||||
unsigned char ps_text[PS_LENGTH];
|
char ps_text[PS_LENGTH];
|
||||||
unsigned char tps_text[PS_LENGTH];
|
char tps_text[PS_LENGTH];
|
||||||
uint8_t ps_csegment : 4;
|
uint8_t ps_csegment : 4;
|
||||||
|
|
||||||
unsigned char dps1_text[255];
|
char dps1_text[255];
|
||||||
unsigned char dps1_nexttext[127];
|
char dps1_nexttext[127];
|
||||||
|
|
||||||
unsigned char rt_text[RT_LENGTH];
|
char rt_text[RT_LENGTH];
|
||||||
uint8_t rt_state : 5;
|
uint8_t rt_state : 5;
|
||||||
uint8_t rt_update : 1;
|
uint8_t rt_update : 1;
|
||||||
uint8_t rt_ab : 1;
|
uint8_t rt_ab : 1;
|
||||||
uint8_t rt_segments : 5;
|
uint8_t rt_segments : 5;
|
||||||
|
|
||||||
unsigned char ptyn_text[RT_LENGTH];
|
char ptyn_text[RT_LENGTH];
|
||||||
uint8_t ptyn_state : 1;
|
uint8_t ptyn_state : 1;
|
||||||
uint8_t ptyn_update : 1;
|
uint8_t ptyn_update : 1;
|
||||||
uint8_t ptyn_ab : 1;
|
uint8_t ptyn_ab : 1;
|
||||||
|
|
||||||
unsigned char lps_text[RT_LENGTH];
|
char lps_text[RT_LENGTH];
|
||||||
uint8_t lps_state : 5;
|
uint8_t lps_state : 5;
|
||||||
uint8_t lps_update : 1;
|
uint8_t lps_update : 1;
|
||||||
uint8_t lps_segments : 5;
|
uint8_t lps_segments : 5;
|
||||||
@@ -278,12 +278,12 @@ int rdssaved();
|
|||||||
void set_rds_defaults(RDSEncoder* enc, uint8_t program);
|
void set_rds_defaults(RDSEncoder* enc, uint8_t program);
|
||||||
void init_rds_encoder(RDSEncoder* enc);
|
void init_rds_encoder(RDSEncoder* enc);
|
||||||
void get_rds_bits(RDSEncoder* enc, uint8_t *bits);
|
void get_rds_bits(RDSEncoder* enc, uint8_t *bits);
|
||||||
void set_rds_rt1(RDSEncoder* enc, unsigned char *rt1);
|
void set_rds_rt1(RDSEncoder* enc, char *rt1);
|
||||||
void set_rds_ps(RDSEncoder* enc, unsigned char *ps);
|
void set_rds_ps(RDSEncoder* enc, char *ps);
|
||||||
void set_rds_tps(RDSEncoder* enc, unsigned char *tps);
|
void set_rds_tps(RDSEncoder* enc, char *tps);
|
||||||
void set_rds_lps(RDSEncoder* enc, unsigned char *lps);
|
void set_rds_lps(RDSEncoder* enc, char *lps);
|
||||||
void set_rds_rtplus_flags(RDSEncoder* enc, uint8_t flags);
|
void set_rds_rtplus_flags(RDSEncoder* enc, uint8_t flags);
|
||||||
void set_rds_rtplus_tags(RDSEncoder* enc, uint8_t *tags);
|
void set_rds_rtplus_tags(RDSEncoder* enc, uint8_t *tags);
|
||||||
void set_rds_ptyn(RDSEncoder* enc, unsigned char *ptyn);
|
void set_rds_ptyn(RDSEncoder* enc, char *ptyn);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -31,9 +31,12 @@ static void *control_pipe_worker(void* modulator) {
|
|||||||
pthread_exit(NULL);
|
pthread_exit(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void show_version() {
|
||||||
|
printf("rds95 (a RDS encoder by radio95) version 1.0");
|
||||||
|
}
|
||||||
|
|
||||||
static void show_help(char *name) {
|
static void show_help(char *name) {
|
||||||
printf(
|
printf(
|
||||||
"rds95 (a RDS encoder by radio95) version %.1f\n"
|
|
||||||
"\n"
|
"\n"
|
||||||
"Usage: %s [options]\n"
|
"Usage: %s [options]\n"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -46,6 +49,8 @@ static void show_help(char *name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
show_version();
|
||||||
|
|
||||||
char control_pipe[51] = "\0";
|
char control_pipe[51] = "\0";
|
||||||
|
|
||||||
pa_simple *device;
|
pa_simple *device;
|
||||||
|
|||||||
Reference in New Issue
Block a user