0
1
mirror of https://github.com/radio95-rnt/rds95.git synced 2026-02-26 20:33:53 +01:00

add default rt setter + rt timeout and switching period now can be in seconds

This commit is contained in:
2025-12-26 09:18:51 +01:00
parent 4310a847d9
commit 9c4321d9e4
6 changed files with 62 additions and 35 deletions

View File

@@ -314,12 +314,13 @@ STR_SETTER(ps, set_rds_ps)
STR_SETTER(tps, set_rds_tps)
STR_SETTER(rt1, set_rds_rt1)
STR_SETTER(rt2, set_rds_rt2)
STR_SETTER(default_rt, set_rds_default_rt)
STR_RAW_SETTER(lps, set_rds_lps)
STR_RAW_GETTER(lps, LPS_LENGTH)
STR_RAW_SETTER(grp_sqc_rds2, set_rds_grpseq2)
STR_RAW_GETTER(grp_sqc_rds2, 24)
STR_RAW_GETTER(grp_sqc_rds2, 32)
int lua_set_rds_grp_sqc(lua_State *localL) {
const char* str = luaL_checklstring(localL, 1, NULL);
@@ -327,7 +328,7 @@ int lua_set_rds_grp_sqc(lua_State *localL) {
else set_rds_grpseq(mod->enc, str);
return 0;
}
STR_RAW_GETTER(grp_sqc, 24)
STR_RAW_GETTER(grp_sqc, 32)
AF_SETTER(af_group0, af, RDSAFs, add_rds_af)
AF_SETTER(af_oda, af_oda, RDSAFsODA, add_rds_af_oda)
@@ -589,6 +590,7 @@ void init_lua(RDSModulator* rds_mod) {
lua_register(L, "set_rds_tps", lua_set_rds_tps);
lua_register(L, "set_rds_rt1", lua_set_rds_rt1);
lua_register(L, "set_rds_rt2", lua_set_rds_rt2);
lua_register(L, "set_rds_default_rt", lua_set_rds_default_rt);
lua_register(L, "set_rds_lps", lua_set_rds_lps);
lua_register(L, "get_rds_lps", lua_get_rds_lps);

View File

@@ -170,6 +170,26 @@ static void get_rds_group(RDSEncoder* enc, RDSGroup *group, uint8_t stream) {
if(utc->tm_sec != enc->state[enc->program].last_second) {
enc->state[enc->program].last_second = utc->tm_sec;
if(enc->data[enc->program].rt1_enabled && enc->data[enc->program].current_rt == 0 && enc->state[enc->program].rt_text_timeout_state) {
enc->state[enc->program].rt_text_timeout_state--;
if(enc->state[enc->program].rt_text_timeout_state == 0) {
enc->state[enc->program].rt_update = 1;
memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].default_rt, RT_LENGTH);
enc->state[enc->program].rt_segments = enc->state[enc->program].default_rt_segments;
}
}
if(enc->data[enc->program].rt1_enabled && enc->data[enc->program].rt2_enabled && enc->state[enc->program].rt_switching_period_state) {
enc->state[enc->program].rt_switching_period_state--;
if(enc->state[enc->program].rt_switching_period_state == 0) {
TOGGLE(enc->data[enc->program].current_rt);
if (enc->data[enc->program].current_rt == 1) memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt2, RT_LENGTH);
else memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt1, RT_LENGTH);
enc->state[enc->program].rt_state = 0;
enc->state[enc->program].rt_switching_period_state = enc->data[enc->program].rt_switching_period;
}
}
lua_call_function("tick");
}
@@ -191,25 +211,6 @@ static void get_rds_group(RDSEncoder* enc, RDSGroup *group, uint8_t stream) {
};
}
if(enc->data[enc->program].rt1_enabled && enc->data[enc->program].rt2_enabled && enc->state[enc->program].rt_switching_period_state) {
enc->state[enc->program].rt_switching_period_state--;
if(enc->state[enc->program].rt_switching_period_state == 0) {
TOGGLE(enc->data[enc->program].current_rt);
if (enc->data[enc->program].current_rt == 1) memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt2, RT_LENGTH);
else memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].rt1, RT_LENGTH);
enc->state[enc->program].rt_state = 0;
enc->state[enc->program].rt_switching_period_state = enc->data[enc->program].rt_switching_period;
}
}
if(enc->data[enc->program].rt1_enabled && enc->data[enc->program].current_rt == 0 && enc->state[enc->program].rt_text_timeout_state) {
enc->state[enc->program].rt_text_timeout_state--;
if(enc->state[enc->program].rt_text_timeout_state == 0) {
enc->state[enc->program].rt_update = 1;
memcpy(enc->state[enc->program].rt_text, enc->data[enc->program].default_rt, RT_LENGTH);
}
}
if(enc->data[enc->program].ct && stream == 0) {
get_rdsp_ct_group(group, now);
goto group_coded;

View File

@@ -87,8 +87,8 @@ typedef struct {
char lps[LPS_LENGTH];
char grp_sqc[24];
char grp_sqc_rds2[24];
char grp_sqc[32];
char grp_sqc_rds2[32];
uint8_t udg1_len : 4;
uint8_t udg2_len : 4;
@@ -137,6 +137,7 @@ typedef struct {
uint8_t rt_ab : 1;
uint8_t rt_segments : 5;
uint8_t rt2_segments : 5;
uint8_t default_rt_segments : 5;
char ptyn_text[PTYN_LENGTH];
uint8_t ptyn_state : 1;
@@ -240,6 +241,7 @@ void get_rds_bits(RDSEncoder* enc, uint8_t *bits, uint8_t stream);
void set_rds_rt1(RDSEncoder* enc, const char *rt1);
void set_rds_rt2(RDSEncoder* enc, const char *rt2);
void set_rds_default_rt(RDSEncoder* enc, const char *rt);
void set_rds_ps(RDSEncoder* enc, const char *ps);
void set_rds_tps(RDSEncoder* enc, const char *tps);
void set_rds_lps(RDSEncoder* enc, const char *lps);

View File

@@ -23,6 +23,25 @@ void set_rds_rt1(RDSEncoder* enc, const char *rt1) {
if(enc->state[enc->program].rt_segments > 16) enc->state[enc->program].rt_segments = 16; //make sure
}
void set_rds_default_rt(RDSEncoder* enc, const char *rt) {
uint8_t i = 0, len = 0;
memset(enc->data[enc->program].default_rt, ' ', RT_LENGTH);
while (*rt != 0 && len < RT_LENGTH) enc->data[enc->program].default_rt[len++] = *rt++;
while (len > 0 && enc->data[enc->program].default_rt[len - 1] == ' ') len--;
if (len < RT_LENGTH) {
enc->state[enc->program].default_rt_segments = 0;
enc->data[enc->program].default_rt[len++] = '\r';
while (i < len) {
i += 4;
enc->state[enc->program].default_rt_segments++;
}
} else enc->state[enc->program].default_rt_segments = 16;
if(enc->state[enc->program].default_rt_segments > 16) enc->state[enc->program].default_rt_segments = 16; //make sure
}
void set_rds_rt2(RDSEncoder* enc, const char *rt2) {
uint8_t i = 0, len = 0;
@@ -131,25 +150,25 @@ void set_rds_grpseq(RDSEncoder* enc, const char *grpseq) {
uint8_t len = 0;
if(grpseq[0] == '\0') {
while (DEFAULT_GRPSQC[len] != 0 && len < 24) {
while (DEFAULT_GRPSQC[len] != 0 && len < 32) {
enc->data[enc->program].grp_sqc[len] = DEFAULT_GRPSQC[len];
len++;
}
return;
}
memset(enc->data[enc->program].grp_sqc, 0, 24);
while (*grpseq != 0 && len < 24) enc->data[enc->program].grp_sqc[len++] = *grpseq++;
memset(enc->data[enc->program].grp_sqc, 0, 32);
while (*grpseq != 0 && len < 32) enc->data[enc->program].grp_sqc[len++] = *grpseq++;
}
void set_rds_grpseq2(RDSEncoder* enc, const char *grpseq2) {
uint8_t len = 0;
if(grpseq2[0] == '\0') {
memset(enc->data[enc->program].grp_sqc_rds2, 0, 24);
memcpy(enc->data[enc->program].grp_sqc_rds2, enc->data[enc->program].grp_sqc, 24);
memset(enc->data[enc->program].grp_sqc_rds2, 0, 32);
memcpy(enc->data[enc->program].grp_sqc_rds2, enc->data[enc->program].grp_sqc, 32);
return;
}
memset(enc->data[enc->program].grp_sqc_rds2, 0, 24);
while (*grpseq2 != 0 && len < 24) enc->data[enc->program].grp_sqc_rds2[len++] = *grpseq2++;
memset(enc->data[enc->program].grp_sqc_rds2, 0, 32);
while (*grpseq2 != 0 && len < 32) enc->data[enc->program].grp_sqc_rds2[len++] = *grpseq2++;
}