Skip to content

Commit 7552653

Browse files
authored
Merge pull request #1 from ggalan87/master
Added a manipulator for prais Radiotext message
2 parents 3c06f55 + 4a60481 commit 7552653

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

prais.c

+34
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,32 @@ prais_set_ps(struct rds_encoder *enc, uint8_t dsn, uint8_t psn, char* ps)
797797
return ret;
798798
}
799799

800+
/**
801+
* prais_manipulator_rt - Replicates message as many times at it fits to the rt buffer
802+
* @msg: The message to be manipulated
803+
*/
804+
static void
805+
prais_manipulator_rt(char* msg)
806+
{
807+
size_t len;
808+
int times;
809+
int segment_size;
810+
int i;
811+
812+
len = strlen(msg);
813+
segment_size = len + PRAIS_RT_SPACE_LENGTH;
814+
times = (RDS_RT_MSG_LEN_MAX - 1) / segment_size;
815+
816+
/* optional */
817+
if(times < 2) return;
818+
819+
memset(msg + len, ' ', (RDS_RT_MSG_LEN_MAX - 1) - len);
820+
821+
for(i = 1; i < times; ++i)
822+
{
823+
memcpy(msg + i * segment_size, msg, segment_size);
824+
}
825+
}
800826

801827
/**
802828
* prais_set_rt - Set RadioText message on a Prais encoder
@@ -824,6 +850,11 @@ prais_set_rt(struct rds_encoder *enc, uint8_t dsn, uint8_t psn, struct rds_rt *r
824850
if(enc->addr == PRAIS_DF_ADDR_BCAST)
825851
return -EOPNOTSUPP;
826852

853+
if(rt->buffer_config == RDS_RT_BUFF_CONFIG_APPEND)
854+
return -EOPNOTSUPP;
855+
else if(rt->buffer_config == RDS_RT_BUFF_CONFIG_FLUSH && strlen(rt->msg) == 0)
856+
return prais_set_rt_mode(enc, 0);
857+
827858
enc->seq = 0;
828859

829860
/* If active, disable it */
@@ -839,6 +870,9 @@ prais_set_rt(struct rds_encoder *enc, uint8_t dsn, uint8_t psn, struct rds_rt *r
839870
ret = prais_set_rt_mode(enc, 0);
840871
if(ret < 0)
841872
return ret;
873+
874+
/* Manipulate message */
875+
prais_manipulator_rt(rt->msg);
842876

843877
for(k = 0; k < 4; k++) {
844878
for(i = 0; i < 16; i++) {

prais.h

+4
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ struct prais_message {
7171

7272
#define PRAIS_MT_MAX_LEN 40
7373

74+
/* Prais RT related */
75+
#define PRAIS_RT_SPACE_LENGTH 8
76+
77+
7478
/* A data frame for Prais Coder mod. 735 */
7579
struct prais_data_frame {
7680
uint8_t no_reply; /* Set the no reply flag */

0 commit comments

Comments
 (0)