This commit is contained in:
2025-04-13 18:14:28 +02:00
parent b624c9f263
commit 285317cee2
+23 -29
View File
@@ -98,23 +98,20 @@ static uint16_t get_next_af(RDSEncoder* enc) {
uint16_t out;
if (enc->data[enc->program].af.num_afs) {
uint8_t* afs = enc->data[enc->program].af.afs;
uint8_t num_afs = enc->data[enc->program].af.num_afs;
if(enc->state[enc->program].af_state == 0) {
out = (AF_CODE_NUM_AFS_BASE + num_afs) << 8;
out |= afs[0];
enc->state[enc->program].af_state++;
} else if (enc->state[enc->program].af_state < num_afs) {
out = afs[enc->state[enc->program].af_state];
enc->state[enc->program].af_state++;
if (enc->state[enc->program].af_state == 0) {
out = (AF_CODE_NUM_AFS_BASE + enc->data[enc->program].af.num_afs) << 8;
out |= enc->data[enc->program].af.afs[0];
enc->state[enc->program].af_state += 1;
} else {
out = AF_CODE_FILLER;
out = enc->data[enc->program].af.afs[enc->state[enc->program].af_state] << 8;
if (enc->data[enc->program].af.afs[enc->state[enc->program].af_state + 1]) {
out |= enc->data[enc->program].af.afs[enc->state[enc->program].af_state + 1];
} else {
out |= AF_CODE_FILLER;
enc->state[enc->program].af_state += 2;
}
if (enc->state[enc->program].af_state >= enc->data[enc->program].af.num_entries) {
enc->state[enc->program].af_state = 0;
}
if (enc->state[enc->program].af_state >= enc->data[enc->program].af.num_entries) enc->state[enc->program].af_state = 0;
} else {
out = AF_CODE_NUM_AFS_BASE << 8 | AF_CODE_FILLER;
}
@@ -123,25 +120,22 @@ static uint16_t get_next_af(RDSEncoder* enc) {
}
static void get_next_af_oda(RDSEncoder* enc, uint16_t* af_group) {
uint16_t* afs = enc->data[enc->program].af_oda.afs;
uint16_t num_afs = enc->data[enc->program].af_oda.num_afs;
for (int i = 0; i < 4; ++i) {
if(enc->state[enc->program].af_oda_state == 0) {
af_group[i] = (AF_CODE_NUM_AFS_BASE + num_afs) << 8;
af_group[i] |= afs[0];
enc->state[enc->program].af_oda_state++;
} else if (enc->state[enc->program].af_oda_state < num_afs) {
af_group[i] = afs[enc->state[enc->program].af_oda_state];
enc->state[enc->program].af_oda_state++;
uint8_t offset = 0;
if (enc->state[enc->program].af_oda_state == 0) {
af_group[0] = (AF_CODE_NUM_AFS_BASE + enc->data[enc->program].af_oda.num_afs) << 8;
offset = 1;
} else {
af_group[i] = AF_CODE_FILLER;
af_group[0] = enc->data[enc->program].af_oda.afs[enc->state[enc->program].af_oda_state++] << 8;
}
for(int i = 0; i < 3; i++) {
if (enc->data[enc->program].af_oda.afs[enc->state[enc->program].af_oda_state + offset]) {
af_group[i + 1] = enc->data[enc->program].af_oda.afs[enc->state[enc->program].af_oda_state + offset];
} else {
af_group[i + 1] = AF_CODE_FILLER;
}
if (enc->state[enc->program].af_oda_state >= enc->data[enc->program].af_oda.num_entries) {
enc->state[enc->program].af_oda_state = 0;
enc->state[enc->program].af_oda_state++;
}
if (enc->state[enc->program].af_oda_state >= enc->data[enc->program].af_odanum_entries) enc->state[enc->program].af_oda_state = 0;
}
static uint16_t get_next_af_eon(RDSEncoder* enc, uint8_t eon_index) {