@@ -797,6 +797,32 @@ prais_set_ps(struct rds_encoder *enc, uint8_t dsn, uint8_t psn, char* ps)
797
797
return ret ;
798
798
}
799
799
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
+ }
800
826
801
827
/**
802
828
* 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
824
850
if (enc -> addr == PRAIS_DF_ADDR_BCAST )
825
851
return - EOPNOTSUPP ;
826
852
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
+
827
858
enc -> seq = 0 ;
828
859
829
860
/* 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
839
870
ret = prais_set_rt_mode (enc , 0 );
840
871
if (ret < 0 )
841
872
return ret ;
873
+
874
+ /* Manipulate message */
875
+ prais_manipulator_rt (rt -> msg );
842
876
843
877
for (k = 0 ; k < 4 ; k ++ ) {
844
878
for (i = 0 ; i < 16 ; i ++ ) {
0 commit comments