From b32f80dfc4df86a8cceaff979bc028928c466ab0 Mon Sep 17 00:00:00 2001 From: KubaPro010 Date: Sun, 15 Jun 2025 11:59:05 +0200 Subject: [PATCH] optimize? --- src/lib.c | 304 ++++++++++++++++++++++++------------------------ src/modulator.c | 12 +- src/rds.c | 24 ++-- src/rds95.c | 19 +-- 4 files changed, 170 insertions(+), 189 deletions(-) diff --git a/src/lib.c b/src/lib.c index b877808..1a1de75 100644 --- a/src/lib.c +++ b/src/lib.c @@ -8,7 +8,7 @@ void msleep(unsigned long ms) { nanosleep(&ts, NULL); } -int _strnlen(const char *s, int maxlen) { +inline int _strnlen(const char *s, int maxlen) { int len = 0; while (s[len] != 0 && len < maxlen) len++; return len; @@ -26,7 +26,7 @@ uint16_t crc16_ccitt(char* data, uint16_t len) { return ((crc ^= 0xFFFF) & 0xFFFF); } -uint16_t get_block_from_group(RDSGroup *group, uint8_t block) { +inline uint16_t get_block_from_group(RDSGroup *group, uint8_t block) { switch (block) { case 0: return group->a; case 1: return group->b; @@ -36,35 +36,38 @@ uint16_t get_block_from_group(RDSGroup *group, uint8_t block) { } } -static uint16_t offset_words[] = { +static uint16_t offset_words_typea[] = { 0x0FC, /* A */ 0x198, /* B */ 0x168, /* C */ 0x1B4, /* D */ - 0x350 /* C' */ +}; +static uint16_t offset_words_typeb[] = { + 0x0FC, /* A */ + 0x198, /* B */ + 0x350, /* C' */ + 0x1B4, /* D */ }; void add_checkwords(RDSGroup *group, uint8_t *bits) -{ - uint16_t offset_word; +{ + uint16_t* offset_words; + if(group->is_type_b) offset_words = offset_words_typeb; + else offset_words = offset_words_typea; for (uint8_t i = 0; i < GROUP_LENGTH; i++) { - offset_word = offset_words[i]; - if (i == 2 && group->is_type_b) offset_word = offset_words[4]; - uint16_t block = get_block_from_group(group, i); uint16_t block_crc = 0; - uint8_t j, bit, msb; + uint8_t j; for (j = 0; j < BLOCK_SIZE; j++) { - bit = (block & (0x8000 >> j)) != 0; - msb = (block_crc >> (POLY_DEG - 1)) & 1; + uint8_t bit = (block & (0x8000 >> j)) != 0; + uint8_t msb = (block_crc >> (POLY_DEG - 1)) & 1; block_crc <<= 1; if (msb ^ bit) block_crc ^= POLY; - *bits++ = bit; + *bits++ = bit; // Write the data itself to the bits } - uint16_t check = block_crc ^ offset_word; - for (j = 0; j < POLY_DEG; j++) *bits++ = (check & ((1 << (POLY_DEG - 1)) >> j)) != 0; + for (j = 0; j < POLY_DEG; j++) *bits++ = ((block_crc ^ offset_words[i]) >> (POLY_DEG - 1 - j)) & 1; // Write the checkword to the bits } } @@ -76,26 +79,23 @@ uint8_t add_rds_af_oda(RDSAFsODA *af_list, float freq) { if (af_list->num_afs + entries_reqd > MAX_AFS) return 1; - if(freq >= 64.1f && freq <= 88.0f) { - af = (uint16_t)(freq * 10.0f) - 384; - af_list->afs[af_list->num_entries] = af; - af_list->num_entries += 1; - } else if (freq >= 87.6f && freq <= 107.9f) { + if(freq >= 87.6f && freq <= 107.9f) { af = (uint16_t)(freq * 10.0f) - 875; af_list->afs[af_list->num_entries] = af; - af_list->num_entries += 1; + } else if (freq >= 64.1f && freq <= 88.0f) { + af = (uint16_t)(freq * 10.0f) - 384; + af_list->afs[af_list->num_entries] = af; } else if (freq >= 153.0f && freq <= 279.0f) { af = (uint16_t)(freq - 153.0f) / 9 + 1; af_list->afs[af_list->num_entries + 0] = AF_CODE_LFMF_FOLLOWS; af_list->afs[af_list->num_entries + 1] = af; - af_list->num_entries += 2; } else if (freq >= 531.0f && freq <= 1602.0f) { af = (uint16_t)(freq - 531.0f) / 9 + 16; af_list->afs[af_list->num_entries + 0] = AF_CODE_LFMF_FOLLOWS; af_list->afs[af_list->num_entries + 1] = af; - af_list->num_entries += 2; } else return 1; + af_list->num_entries += entries_reqd; af_list->num_afs++; return 0; @@ -112,19 +112,17 @@ uint8_t add_rds_af(RDSAFs *af_list, float freq) { if (freq >= 87.6f && freq <= 107.9f) { af = (uint16_t)(freq * 10.0f) - 875; af_list->afs[af_list->num_entries] = af; - af_list->num_entries += 1; } else if (freq >= 153.0f && freq <= 279.0f) { af = (uint16_t)(freq - 153.0f) / 9 + 1; af_list->afs[af_list->num_entries + 0] = AF_CODE_LFMF_FOLLOWS; af_list->afs[af_list->num_entries + 1] = af; - af_list->num_entries += 2; } else if (freq >= 531.0f && freq <= 1602.0f) { af = (uint16_t)(freq - 531.0f) / 9 + 16; af_list->afs[af_list->num_entries + 0] = AF_CODE_LFMF_FOLLOWS; af_list->afs[af_list->num_entries + 1] = af; - af_list->num_entries += 2; } else return 1; + af_list->num_entries += entries_reqd; af_list->num_afs++; return 0; @@ -136,177 +134,177 @@ char *convert_to_rdscharset(char *str) { while (*str != 0 && i < 255) { switch (*str) { - case 0xc2: + case (char)0xc2: str++; switch (*str) { - case 0xa1: new_str[i] = 0x8e; break; /* INVERTED EXCLAMATION MARK */ - case 0xa3: new_str[i] = 0xaa; break; /* POUND SIGN */ - case 0xa7: new_str[i] = 0xbf; break; /* SECTION SIGN */ - case 0xa9: new_str[i] = 0xa2; break; /* COPYRIGHT SIGN */ - case 0xaa: new_str[i] = 0xa0; break; /* FEMININE ORDINAL INDICATOR */ - case 0xb0: new_str[i] = 0xbb; break; /* DEGREE SIGN */ - case 0xb1: new_str[i] = 0xb4; break; /* PLUS-MINUS SIGN */ - case 0xb2: new_str[i] = 0xb2; break; /* SUPERSCRIPT TWO */ - case 0xb3: new_str[i] = 0xb3; break; /* SUPERSCRIPT THREE */ - case 0xb5: new_str[i] = 0xb8; break; /* MIKRO SIGN */ - case 0xb9: new_str[i] = 0xb1; break; /* SUPERSCRIPT ONE */ - case 0xba: new_str[i] = 0xb0; break; /* MASCULINE ORDINAL INDICATOR */ - case 0xbc: new_str[i] = 0xbc; break; /* VULGAR FRACTION ONE QUARTER */ - case 0xbd: new_str[i] = 0xbd; break; /* VULGAR FRACTION ONE HALF */ - case 0xbe: new_str[i] = 0xbe; break; /* VULGAR FRACTION THREE QUARTERS */ - case 0xbf: new_str[i] = 0xb9; break; /* INVERTED QUESTION MARK */ + case (char)0xa1: new_str[i] = (char)0x8e; break; /* INVERTED EXCLAMATION MARK */ + case (char)0xa3: new_str[i] = (char)0xaa; break; /* POUND SIGN */ + case (char)0xa7: new_str[i] = (char)0xbf; break; /* SECTION SIGN */ + case (char)0xa9: new_str[i] = (char)0xa2; break; /* COPYRIGHT SIGN */ + case (char)0xaa: new_str[i] = (char)0xa0; break; /* FEMININE ORDINAL INDICATOR */ + case (char)0xb0: new_str[i] = (char)0xbb; break; /* DEGREE SIGN */ + case (char)0xb1: new_str[i] = (char)0xb4; break; /* PLUS-MINUS SIGN */ + case (char)0xb2: new_str[i] = (char)0xb2; break; /* SUPERSCRIPT TWO */ + case (char)0xb3: new_str[i] = (char)0xb3; break; /* SUPERSCRIPT THREE */ + case (char)0xb5: new_str[i] = (char)0xb8; break; /* MIKRO SIGN */ + case (char)0xb9: new_str[i] = (char)0xb1; break; /* SUPERSCRIPT ONE */ + case (char)0xba: new_str[i] = (char)0xb0; break; /* MASCULINE ORDINAL INDICATOR */ + case (char)0xbc: new_str[i] = (char)0xbc; break; /* VULGAR FRACTION ONE QUARTER */ + case (char)0xbd: new_str[i] = (char)0xbd; break; /* VULGAR FRACTION ONE HALF */ + case (char)0xbe: new_str[i] = (char)0xbe; break; /* VULGAR FRACTION THREE QUARTERS */ + case (char)0xbf: new_str[i] = (char)0xb9; break; /* INVERTED QUESTION MARK */ default: new_str[i] = ' '; break; } break; - case 0xc3: + case (char)0xc3: str++; switch (*str) { - case 0x80: new_str[i] = 0xc1; break; /* LATIN CAPITAL LETTER A WITH GRAVE */ - case 0x81: new_str[i] = 0xc0; break; /* LATIN CAPITAL LETTER A WITH ACUTE */ - case 0x82: new_str[i] = 0xd0; break; /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ - case 0x83: new_str[i] = 0xe0; break; /* LATIN CAPITAL LETTER A WITH TILDE */ - case 0x84: new_str[i] = 0xd1; break; /* LATIN CAPITAL LETTER A WITH DIAERESIS */ - case 0x85: new_str[i] = 0xe1; break; /* LATIN CAPITAL LETTER A WITH RING ABOVE */ - case 0x86: new_str[i] = 0xe2; break; /* LATIN CAPITAL LETTER AE */ - case 0x87: new_str[i] = 0x8b; break; /* LATIN CAPITAL LETTER C WITH CEDILLA */ - case 0x88: new_str[i] = 0xc3; break; /* LATIN CAPITAL LETTER E WITH GRAVE */ - case 0x89: new_str[i] = 0xc2; break; /* LATIN CAPITAL LETTER E WITH ACUTE */ - case 0x8a: new_str[i] = 0xd2; break; /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ - case 0x8b: new_str[i] = 0xd3; break; /* LATIN CAPITAL LETTER E WITH DIAERESIS */ - case 0x8c: new_str[i] = 0xc5; break; /* LATIN CAPITAL LETTER I WITH GRAVE */ - case 0x8d: new_str[i] = 0xc4; break; /* LATIN CAPITAL LETTER I WITH ACUTE */ - case 0x8e: new_str[i] = 0xd4; break; /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ - case 0x8f: new_str[i] = 0xd5; break; /* LATIN CAPITAL LETTER I WITH DIAERESIS */ - case 0x90: new_str[i] = 0xce; break; /* LATIN CAPITAL LETTER ETH */ - case 0x91: new_str[i] = 0x8a; break; /* LATIN CAPITAL LETTER N WITH TILDE */ - case 0x92: new_str[i] = 0xc7; break; /* LATIN CAPITAL LETTER O WITH GRAVE */ - case 0x93: new_str[i] = 0xc6; break; /* LATIN CAPITAL LETTER O WITH ACUTE */ - case 0x94: new_str[i] = 0xd6; break; /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ - case 0x95: new_str[i] = 0xe6; break; /* LATIN CAPITAL LETTER O WITH TILDE */ - case 0x96: new_str[i] = 0xd7; break; /* LATIN CAPITAL LETTER O WITH DIAERESIS */ - case 0x98: new_str[i] = 0xe7; break; /* LATIN CAPITAL LETTER O WITH STROKE */ - case 0x99: new_str[i] = 0xc9; break; /* LATIN CAPITAL LETTER U WITH GRAVE */ - case 0x9a: new_str[i] = 0xc8; break; /* LATIN CAPITAL LETTER U WITH ACUTE */ - case 0x9b: new_str[i] = 0xd8; break; /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ - case 0x9c: new_str[i] = 0xd9; break; /* LATIN CAPITAL LETTER U WITH DIAERESIS */ - case 0x9d: new_str[i] = 0xe5; break; /* LATIN CAPITAL LETTER Y WITH ACUTE */ - case 0x9e: new_str[i] = 0xe8; break; /* LATIN CAPITAL LETTER THORN */ - case 0xa0: new_str[i] = 0x81; break; /* LATIN SMALL LETTER A WITH GRAVE */ - case 0xa1: new_str[i] = 0x80; break; /* LATIN SMALL LETTER A WITH ACUTE */ - case 0xa2: new_str[i] = 0x90; break; /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ - case 0xa3: new_str[i] = 0xf0; break; /* LATIN SMALL LETTER A WITH TILDE */ - case 0xa4: new_str[i] = 0x91; break; /* LATIN SMALL LETTER A WITH DIAERESIS */ - case 0xa5: new_str[i] = 0xf1; break; /* LATIN SMALL LETTER A WITH RING ABOVE */ - case 0xa6: new_str[i] = 0xf2; break; /* LATIN SMALL LETTER AE */ - case 0xa7: new_str[i] = 0x9b; break; /* LATIN SMALL LETTER C WITH CEDILLA */ - case 0xa8: new_str[i] = 0x83; break; /* LATIN SMALL LETTER E WITH GRAVE */ - case 0xa9: new_str[i] = 0x82; break; /* LATIN SMALL LETTER E WITH ACUTE */ - case 0xaa: new_str[i] = 0x92; break; /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ - case 0xab: new_str[i] = 0x93; break; /* LATIN SMALL LETTER E WITH DIAERESIS */ - case 0xac: new_str[i] = 0x85; break; /* LATIN SMALL LETTER I WITH GRAVE */ - case 0xad: new_str[i] = 0x84; break; /* LATIN SMALL LETTER I WITH ACUTE */ - case 0xae: new_str[i] = 0x94; break; /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ - case 0xaf: new_str[i] = 0x95; break; /* LATIN SMALL LETTER I WITH DIAERESIS */ - case 0xb0: new_str[i] = 0xef; break; /* LATIN SMALL LETTER ETH */ - case 0xb1: new_str[i] = 0x9a; break; /* LATIN SMALL LETTER N WITH TILDE */ - case 0xb2: new_str[i] = 0x87; break; /* LATIN SMALL LETTER O WITH GRAVE */ - case 0xb3: new_str[i] = 0x86; break; /* LATIN SMALL LETTER O WITH ACUTE */ - case 0xb4: new_str[i] = 0x96; break; /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ - case 0xb5: new_str[i] = 0xf6; break; /* LATIN SMALL LETTER O WITH TILDE */ - case 0xb6: new_str[i] = 0x97; break; /* LATIN SMALL LETTER O WITH DIAERESIS */ - case 0xb7: new_str[i] = 0xba; break; /* DIVISION SIGN */ - case 0xb8: new_str[i] = 0xf7; break; /* LATIN SMALL LETTER O WITH STROKE */ - case 0xb9: new_str[i] = 0x89; break; /* LATIN SMALL LETTER U WITH GRAVE */ - case 0xba: new_str[i] = 0x88; break; /* LATIN SMALL LETTER U WITH ACUTE */ - case 0xbb: new_str[i] = 0x98; break; /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ - case 0xbc: new_str[i] = 0x99; break; /* LATIN SMALL LETTER U WITH DIAERESIS */ - case 0xbd: new_str[i] = 0xf5; break; /* LATIN SMALL LETTER Y WITH ACUTE */ - case 0xbe: new_str[i] = 0xf8; break; /* LATIN SMALL LETTER THORN */ + case (char)0x80: new_str[i] = (char)0xc1; break; /* LATIN CAPITAL LETTER A WITH GRAVE */ + case (char)0x81: new_str[i] = (char)0xc0; break; /* LATIN CAPITAL LETTER A WITH ACUTE */ + case (char)0x82: new_str[i] = (char)0xd0; break; /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ + case (char)0x83: new_str[i] = (char)0xe0; break; /* LATIN CAPITAL LETTER A WITH TILDE */ + case (char)0x84: new_str[i] = (char)0xd1; break; /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + case (char)0x85: new_str[i] = (char)0xe1; break; /* LATIN CAPITAL LETTER A WITH RING ABOVE */ + case (char)0x86: new_str[i] = (char)0xe2; break; /* LATIN CAPITAL LETTER AE */ + case (char)0x87: new_str[i] = (char)0x8b; break; /* LATIN CAPITAL LETTER C WITH CEDILLA */ + case (char)0x88: new_str[i] = (char)0xc3; break; /* LATIN CAPITAL LETTER E WITH GRAVE */ + case (char)0x89: new_str[i] = (char)0xc2; break; /* LATIN CAPITAL LETTER E WITH ACUTE */ + case (char)0x8a: new_str[i] = (char)0xd2; break; /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ + case (char)0x8b: new_str[i] = (char)0xd3; break; /* LATIN CAPITAL LETTER E WITH DIAERESIS */ + case (char)0x8c: new_str[i] = (char)0xc5; break; /* LATIN CAPITAL LETTER I WITH GRAVE */ + case (char)0x8d: new_str[i] = (char)0xc4; break; /* LATIN CAPITAL LETTER I WITH ACUTE */ + case (char)0x8e: new_str[i] = (char)0xd4; break; /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ + case (char)0x8f: new_str[i] = (char)0xd5; break; /* LATIN CAPITAL LETTER I WITH DIAERESIS */ + case (char)0x90: new_str[i] = (char)0xce; break; /* LATIN CAPITAL LETTER ETH */ + case (char)0x91: new_str[i] = (char)0x8a; break; /* LATIN CAPITAL LETTER N WITH TILDE */ + case (char)0x92: new_str[i] = (char)0xc7; break; /* LATIN CAPITAL LETTER O WITH GRAVE */ + case (char)0x93: new_str[i] = (char)0xc6; break; /* LATIN CAPITAL LETTER O WITH ACUTE */ + case (char)0x94: new_str[i] = (char)0xd6; break; /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ + case (char)0x95: new_str[i] = (char)0xe6; break; /* LATIN CAPITAL LETTER O WITH TILDE */ + case (char)0x96: new_str[i] = (char)0xd7; break; /* LATIN CAPITAL LETTER O WITH DIAERESIS */ + case (char)0x98: new_str[i] = (char)0xe7; break; /* LATIN CAPITAL LETTER O WITH STROKE */ + case (char)0x99: new_str[i] = (char)0xc9; break; /* LATIN CAPITAL LETTER U WITH GRAVE */ + case (char)0x9a: new_str[i] = (char)0xc8; break; /* LATIN CAPITAL LETTER U WITH ACUTE */ + case (char)0x9b: new_str[i] = (char)0xd8; break; /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ + case (char)0x9c: new_str[i] = (char)0xd9; break; /* LATIN CAPITAL LETTER U WITH DIAERESIS */ + case (char)0x9d: new_str[i] = (char)0xe5; break; /* LATIN CAPITAL LETTER Y WITH ACUTE */ + case (char)0x9e: new_str[i] = (char)0xe8; break; /* LATIN CAPITAL LETTER THORN */ + case (char)0xa0: new_str[i] = (char)0x81; break; /* LATIN SMALL LETTER A WITH GRAVE */ + case (char)0xa1: new_str[i] = (char)0x80; break; /* LATIN SMALL LETTER A WITH ACUTE */ + case (char)0xa2: new_str[i] = (char)0x90; break; /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ + case (char)0xa3: new_str[i] = (char)0xf0; break; /* LATIN SMALL LETTER A WITH TILDE */ + case (char)0xa4: new_str[i] = (char)0x91; break; /* LATIN SMALL LETTER A WITH DIAERESIS */ + case (char)0xa5: new_str[i] = (char)0xf1; break; /* LATIN SMALL LETTER A WITH RING ABOVE */ + case (char)0xa6: new_str[i] = (char)0xf2; break; /* LATIN SMALL LETTER AE */ + case (char)0xa7: new_str[i] = (char)0x9b; break; /* LATIN SMALL LETTER C WITH CEDILLA */ + case (char)0xa8: new_str[i] = (char)0x83; break; /* LATIN SMALL LETTER E WITH GRAVE */ + case (char)0xa9: new_str[i] = (char)0x82; break; /* LATIN SMALL LETTER E WITH ACUTE */ + case (char)0xaa: new_str[i] = (char)0x92; break; /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ + case (char)0xab: new_str[i] = (char)0x93; break; /* LATIN SMALL LETTER E WITH DIAERESIS */ + case (char)0xac: new_str[i] = (char)0x85; break; /* LATIN SMALL LETTER I WITH GRAVE */ + case (char)0xad: new_str[i] = (char)0x84; break; /* LATIN SMALL LETTER I WITH ACUTE */ + case (char)0xae: new_str[i] = (char)0x94; break; /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ + case (char)0xaf: new_str[i] = (char)0x95; break; /* LATIN SMALL LETTER I WITH DIAERESIS */ + case (char)0xb0: new_str[i] = (char)0xef; break; /* LATIN SMALL LETTER ETH */ + case (char)0xb1: new_str[i] = (char)0x9a; break; /* LATIN SMALL LETTER N WITH TILDE */ + case (char)0xb2: new_str[i] = (char)0x87; break; /* LATIN SMALL LETTER O WITH GRAVE */ + case (char)0xb3: new_str[i] = (char)0x86; break; /* LATIN SMALL LETTER O WITH ACUTE */ + case (char)0xb4: new_str[i] = (char)0x96; break; /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ + case (char)0xb5: new_str[i] = (char)0xf6; break; /* LATIN SMALL LETTER O WITH TILDE */ + case (char)0xb6: new_str[i] = (char)0x97; break; /* LATIN SMALL LETTER O WITH DIAERESIS */ + case (char)0xb7: new_str[i] = (char)0xba; break; /* DIVISION SIGN */ + case (char)0xb8: new_str[i] = (char)0xf7; break; /* LATIN SMALL LETTER O WITH STROKE */ + case (char)0xb9: new_str[i] = (char)0x89; break; /* LATIN SMALL LETTER U WITH GRAVE */ + case (char)0xba: new_str[i] = (char)0x88; break; /* LATIN SMALL LETTER U WITH ACUTE */ + case (char)0xbb: new_str[i] = (char)0x98; break; /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ + case (char)0xbc: new_str[i] = (char)0x99; break; /* LATIN SMALL LETTER U WITH DIAERESIS */ + case (char)0xbd: new_str[i] = (char)0xf5; break; /* LATIN SMALL LETTER Y WITH ACUTE */ + case (char)0xbe: new_str[i] = (char)0xf8; break; /* LATIN SMALL LETTER THORN */ default: new_str[i] = ' '; break; } break; - case 0xc4: + case (char)0xc4: str++; switch (*str) { - case 0x87: new_str[i] = 0xfb; break; /* LATIN SMALL LETTER C WITH ACUTE */ - case 0x8c: new_str[i] = 0xcb; break; /* LATIN CAPITAL LETTER C WITH CARON */ - case 0x8d: new_str[i] = 0xdb; break; /* LATIN SMALL LETTER C WITH CARON */ - case 0x91: new_str[i] = 0xde; break; /* LATIN SMALL LETTER D WITH STROKE */ - case 0x9b: new_str[i] = 0xa5; break; /* LATIN SMALL LETTER E WITH CARON */ - case 0xb0: new_str[i] = 0xb5; break; /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ - case 0xb1: new_str[i] = 0x9f; break; /* LATIN SMALL LETTER DOTLESS I */ - case 0xb2: new_str[i] = 0x8f; break; /* LATIN CAPITAL LIGATURE IJ */ - case 0xb3: new_str[i] = 0x9f; break; /* LATIN SMALL LIGATURE IJ */ - case 0xbf: new_str[i] = 0xcf; break; /* LATIN CAPITAL LETTER L WITH MIDDLE DOT */ + case (char)0x87: new_str[i] = (char)0xfb; break; /* LATIN SMALL LETTER C WITH ACUTE */ + case (char)0x8c: new_str[i] = (char)0xcb; break; /* LATIN CAPITAL LETTER C WITH CARON */ + case (char)0x8d: new_str[i] = (char)0xdb; break; /* LATIN SMALL LETTER C WITH CARON */ + case (char)0x91: new_str[i] = (char)0xde; break; /* LATIN SMALL LETTER D WITH STROKE */ + case (char)0x9b: new_str[i] = (char)0xa5; break; /* LATIN SMALL LETTER E WITH CARON */ + case (char)0xb0: new_str[i] = (char)0xb5; break; /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ + case (char)0xb1: new_str[i] = (char)0x9f; break; /* LATIN SMALL LETTER DOTLESS I */ + case (char)0xb2: new_str[i] = (char)0x8f; break; /* LATIN CAPITAL LIGATURE IJ */ + case (char)0xb3: new_str[i] = (char)0x9f; break; /* LATIN SMALL LIGATURE IJ */ + case (char)0xbf: new_str[i] = (char)0xcf; break; /* LATIN CAPITAL LETTER L WITH MIDDLE DOT */ default: new_str[i] = ' '; break; } break; - case 0xc5: + case (char)0xc5: str++; switch (*str) { - case 0x80: new_str[i] = 0xdf; break; /* LATIN SMALL LETTER L WITH MIDDLE DOT */ - case 0x84: new_str[i] = 0xb6; break; /* LATIN SMALL LETTER N WITH ACUTE */ - case 0x88: new_str[i] = 0xa6; break; /* LATIN SMALL LETTER N WITH CARON */ - case 0x8a: new_str[i] = 0xe9; break; /* LATIN CAPITAL LETTER ENG */ - case 0x8b: new_str[i] = 0xf9; break; /* LATIN SMALL LETTER ENG */ - case 0x91: new_str[i] = 0xa7; break; /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */ - case 0x92: new_str[i] = 0xe3; break; /* LATIN CAPITAL LIGATURE OE */ - case 0x93: new_str[i] = 0xf3; break; /* LATIN SMALL LIGATURE OE */ - case 0x94: new_str[i] = 0xea; break; /* LATIN CAPITAL LETTER R WITH ACUTE */ - case 0x95: new_str[i] = 0xfa; break; /* LATIN SMALL LETTER R WITH ACUTE */ - case 0x98: new_str[i] = 0xca; break; /* LATIN CAPITAL LETTER R WITH CARON */ - case 0x99: new_str[i] = 0xda; break; /* LATIN SMALL LETTER R WITH CARON */ - case 0x9a: new_str[i] = 0xec; break; /* LATIN CAPITAL LETTER S WITH ACUTE */ - case 0x9b: new_str[i] = 0xfc; break; /* LATIN SMALL LETTER S WITH ACUTE */ - case 0x9e: new_str[i] = 0x8c; break; /* LATIN CAPITAL LETTER S WITH CEDILLA */ - case 0x9f: new_str[i] = 0x9c; break; /* LATIN SMALL LETTER S WITH CEDILLA */ - case 0xa0: new_str[i] = 0xcc; break; /* LATIN CAPITAL LETTER S WITH CARON */ - case 0xa1: new_str[i] = 0xdc; break; /* LATIN SMALL LETTER S WITH CARON */ - case 0xa6: new_str[i] = 0xee; break; /* LATIN CAPITAL LETTER T WITH STROKE */ - case 0xa7: new_str[i] = 0xfe; break; /* LATIN SMALL LETTER T WITH STROKE */ - case 0xb1: new_str[i] = 0xb7; break; /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */ - case 0xb5: new_str[i] = 0xf4; break; /* LATIN SMALL LETTER W WITH CIRCUMFLEX */ - case 0xb7: new_str[i] = 0xe4; break; /* LATIN SMALL LETTER Y WITH CIRCUMFLEX */ - case 0xb9: new_str[i] = 0xed; break; /* LATIN CAPITAL LETTER Z WITH ACUTE */ - case 0xba: new_str[i] = 0xfd; break; /* LATIN SMALL LETTER Z WITH ACUTE */ - case 0xbd: new_str[i] = 0xcd; break; /* LATIN CAPITAL LETTER Z WITH CARON */ - case 0xbe: new_str[i] = 0xdd; break; /* LATIN SMALL LETTER Z WITH CARON */ + case (char)0x80: new_str[i] = (char)0xdf; break; /* LATIN SMALL LETTER L WITH MIDDLE DOT */ + case (char)0x84: new_str[i] = (char)0xb6; break; /* LATIN SMALL LETTER N WITH ACUTE */ + case (char)0x88: new_str[i] = (char)0xa6; break; /* LATIN SMALL LETTER N WITH CARON */ + case (char)0x8a: new_str[i] = (char)0xe9; break; /* LATIN CAPITAL LETTER ENG */ + case (char)0x8b: new_str[i] = (char)0xf9; break; /* LATIN SMALL LETTER ENG */ + case (char)0x91: new_str[i] = (char)0xa7; break; /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */ + case (char)0x92: new_str[i] = (char)0xe3; break; /* LATIN CAPITAL LIGATURE OE */ + case (char)0x93: new_str[i] = (char)0xf3; break; /* LATIN SMALL LIGATURE OE */ + case (char)0x94: new_str[i] = (char)0xea; break; /* LATIN CAPITAL LETTER R WITH ACUTE */ + case (char)0x95: new_str[i] = (char)0xfa; break; /* LATIN SMALL LETTER R WITH ACUTE */ + case (char)0x98: new_str[i] = (char)0xca; break; /* LATIN CAPITAL LETTER R WITH CARON */ + case (char)0x99: new_str[i] = (char)0xda; break; /* LATIN SMALL LETTER R WITH CARON */ + case (char)0x9a: new_str[i] = (char)0xec; break; /* LATIN CAPITAL LETTER S WITH ACUTE */ + case (char)0x9b: new_str[i] = (char)0xfc; break; /* LATIN SMALL LETTER S WITH ACUTE */ + case (char)0x9e: new_str[i] = (char)0x8c; break; /* LATIN CAPITAL LETTER S WITH CEDILLA */ + case (char)0x9f: new_str[i] = (char)0x9c; break; /* LATIN SMALL LETTER S WITH CEDILLA */ + case (char)0xa0: new_str[i] = (char)0xcc; break; /* LATIN CAPITAL LETTER S WITH CARON */ + case (char)0xa1: new_str[i] = (char)0xdc; break; /* LATIN SMALL LETTER S WITH CARON */ + case (char)0xa6: new_str[i] = (char)0xee; break; /* LATIN CAPITAL LETTER T WITH STROKE */ + case (char)0xa7: new_str[i] = (char)0xfe; break; /* LATIN SMALL LETTER T WITH STROKE */ + case (char)0xb1: new_str[i] = (char)0xb7; break; /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */ + case (char)0xb5: new_str[i] = (char)0xf4; break; /* LATIN SMALL LETTER W WITH CIRCUMFLEX */ + case (char)0xb7: new_str[i] = (char)0xe4; break; /* LATIN SMALL LETTER Y WITH CIRCUMFLEX */ + case (char)0xb9: new_str[i] = (char)0xed; break; /* LATIN CAPITAL LETTER Z WITH ACUTE */ + case (char)0xba: new_str[i] = (char)0xfd; break; /* LATIN SMALL LETTER Z WITH ACUTE */ + case (char)0xbd: new_str[i] = (char)0xcd; break; /* LATIN CAPITAL LETTER Z WITH CARON */ + case (char)0xbe: new_str[i] = (char)0xdd; break; /* LATIN SMALL LETTER Z WITH CARON */ default: new_str[i] = ' '; break; } break; - case 0xc7: + case (char)0xc7: str++; switch (*str) { - case 0xa6: new_str[i] = 0xa4; break; /* LATIN CAPITAL LETTER G WITH CARON */ - case 0xa7: new_str[i] = 0x9d; break; /* LATIN SMALL LETTER G WITH CARON */ + case (char)0xa6: new_str[i] = (char)0xa4; break; /* LATIN CAPITAL LETTER G WITH CARON */ + case (char)0xa7: new_str[i] = (char)0x9d; break; /* LATIN SMALL LETTER G WITH CARON */ default: new_str[i] = ' '; break; } break; - case 0xce: + case (char)0xce: str++; switch (*str) { - case 0xb1: new_str[i] = 0xa1; break; /* GREEK SMALL LETTER ALPHA */ - case 0xb2: new_str[i] = 0x8d; break; /* GREEK SMALL LETTER BETA */ + case (char)0xb1: new_str[i] = (char)0xa1; break; /* GREEK SMALL LETTER ALPHA */ + case (char)0xb2: new_str[i] = (char)0x8d; break; /* GREEK SMALL LETTER BETA */ default: new_str[i] = ' '; break; } break; - case 0xcf: + case (char)0xcf: str++; switch (*str) { - case 0x80: new_str[i] = 0xa8; break; /* GREEK SMALL LETTER PI */ + case (char)0x80: new_str[i] = (char)0xa8; break; /* GREEK SMALL LETTER PI */ default: new_str[i] = ' '; break; } break; default: /* 0-127 or unknown */ switch (*str) { - case '$': new_str[i] = 0xab; break; /* DOLLAR SIGN */ + case '$': new_str[i] = (char)0xab; break; /* DOLLAR SIGN */ default: new_str[i] = *str; break; } break; diff --git a/src/modulator.c b/src/modulator.c index ec1f056..648e48b 100644 --- a/src/modulator.c +++ b/src/modulator.c @@ -20,16 +20,12 @@ void Modulator_saveToFile(RDSModulatorParameters *emp, const char *option) { } memcpy(&tempMod, &tempFile.params, sizeof(RDSModulatorParameters)); - if (strcmp(option, "LEVEL") == 0) { - tempMod.level = emp->level; - } else if (strcmp(option, "RDSGEN") == 0) { - tempMod.rdsgen = emp->rdsgen; - } else if (strcmp(option, "ALL") == 0) { + if (strcmp(option, "LEVEL") == 0) tempMod.level = emp->level; + else if (strcmp(option, "RDSGEN") == 0) tempMod.rdsgen = emp->rdsgen; + else if (strcmp(option, "ALL") == 0) { tempMod.level = emp->level; tempMod.rdsgen = emp->rdsgen; - } else { - return; - } + } else return; memcpy(&tempFile.params, &tempMod, sizeof(RDSModulatorParameters)); tempFile.check = 160; diff --git a/src/rds.c b/src/rds.c index 1d467f8..8aebb5f 100644 --- a/src/rds.c +++ b/src/rds.c @@ -240,7 +240,7 @@ static void get_rdsp_ert_oda_group(RDSGroup *group) { group->d = ODA_AID_ERT; } -static void get_rdsp_oda_af_oda_group( RDSGroup *group) { +static void get_rdsp_oda_af_oda_group(RDSGroup *group) { group->b |= 3 << 12; group->b |= 7 << 1; @@ -252,9 +252,7 @@ static void get_rds_oda_af_group(RDSEncoder* enc, RDSGroup *group) { get_next_af_oda(enc, af); group->b |= 7 << 12; - for (int i = 0; i < 4; i++) { - group->b |= ((af[i] >> 8) & 1) << i; - } + for (int i = 0; i < 4; i++) group->b |= ((af[i] >> 8) & 1) << i; group->c = af[0] & 0xFF; group->c <<= 8; @@ -558,8 +556,7 @@ static void get_rds_sequence_group(RDSEncoder* enc, RDSGroup *group, char* grp, } } -static uint8_t check_rds_good_group(RDSEncoder* enc, char* grp, uint8_t stream) { - (void)stream; +static uint8_t check_rds_good_group(RDSEncoder* enc, char* grp) { uint8_t good_group = 0; if(*grp == '0') good_group = 1; if(*grp == '1' && (enc->data[enc->program].ecc != 0 || enc->data[enc->program].slc_data != 0)) good_group = 1; @@ -617,11 +614,8 @@ static void get_rds_group(RDSEncoder* enc, RDSGroup *group, uint8_t stream) { enc->state[enc->program].rt_switching_period_state--; if(enc->state[enc->program].rt_switching_period_state == 0) { enc->data[enc->program].current_rt ^= 1; - 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); - } + 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; } @@ -665,7 +659,7 @@ static void get_rds_group(RDSEncoder* enc, RDSGroup *group, uint8_t stream) { } grp = enc->data[enc->program].grp_sqc_rds2[grp_sqc_idx]; - good_group = check_rds_good_group(enc, &grp, stream); + good_group = check_rds_good_group(enc, &grp); if(!good_group) cant_find_group++; else cant_find_group = 0; @@ -695,7 +689,7 @@ static void get_rds_group(RDSEncoder* enc, RDSGroup *group, uint8_t stream) { } grp = enc->data[enc->program].grp_sqc[grp_sqc_idx]; - good_group = check_rds_good_group(enc, &grp, stream); + good_group = check_rds_good_group(enc, &grp); if(!good_group) cant_find_group++; else cant_find_group = 0; @@ -904,7 +898,7 @@ void set_rds_ert(RDSEncoder* enc, char *ert) { } else enc->state[enc->program].ert_segments = 32; } -void set_rds_rtplus_tags(RDSEncoder* enc, uint8_t *tags) { +inline void set_rds_rtplus_tags(RDSEncoder* enc, uint8_t *tags) { enc->rtpData[enc->program][0].type[0] = tags[0] & 0x3f; enc->rtpData[enc->program][0].start[0] = tags[1] & 0x3f; enc->rtpData[enc->program][0].len[0] = tags[2] & 0x3f; @@ -917,7 +911,7 @@ void set_rds_rtplus_tags(RDSEncoder* enc, uint8_t *tags) { enc->rtpData[enc->program][0].enabled = 1; } -void set_rds_ertplus_tags(RDSEncoder* enc, uint8_t *tags) { +inline void set_rds_ertplus_tags(RDSEncoder* enc, uint8_t *tags) { enc->rtpData[enc->program][1].type[0] = tags[0] & 0x3f; enc->rtpData[enc->program][1].start[0] = tags[1] & 0x3f; enc->rtpData[enc->program][1].len[0] = tags[2] & 0x3f; diff --git a/src/rds95.c b/src/rds95.c index 7a09484..8c6483f 100644 --- a/src/rds95.c +++ b/src/rds95.c @@ -33,11 +33,11 @@ static void *control_pipe_worker(void* modulator) { pthread_exit(NULL); } -static void show_version() { +static inline void show_version() { printf("rds95 (a RDS encoder by radio95) version %s\n", VERSION); } -static void show_help(char *name) { +static inline void show_help(char *name) { printf( "\n" "Usage: %s [options]\n" @@ -125,15 +125,12 @@ int main(int argc, char **argv) { if (control_pipe[0]) { if (open_control_pipe(control_pipe) == 0) { fprintf(stderr, "Reading control commands on %s.\n", control_pipe); - int r; - r = pthread_create(&control_pipe_thread, &attr, control_pipe_worker, (void*)&rdsModulator); + int r = pthread_create(&control_pipe_thread, &attr, control_pipe_worker, (void*)&rdsModulator); if (r < 0) { fprintf(stderr, "Could not create control pipe thread.\n"); control_pipe[0] = 0; goto exit; - } else { - fprintf(stderr, "Created control pipe thread.\n"); - } + } else fprintf(stderr, "Created control pipe thread.\n"); } else { fprintf(stderr, "Failed to open control pipe: %s.\n", control_pipe); control_pipe[0] = 0; @@ -145,9 +142,7 @@ int main(int argc, char **argv) { float rds_buffer[NUM_MPX_FRAMES*STREAMS]; while(!stop_rds) { - for (uint16_t i = 0; i < NUM_MPX_FRAMES*STREAMS; i += STREAMS) { - for(uint8_t j = 0; j < STREAMS; j++) rds_buffer[i + j] = get_rds_sample(&rdsModulator, j); - } + for (uint16_t i = 0; i < NUM_MPX_FRAMES * STREAMS; i++) rds_buffer[i] = get_rds_sample(&rdsModulator, i % STREAMS); if (pa_simple_write(rds_device, rds_buffer, sizeof(rds_buffer), &pulse_error) != 0) { fprintf(stderr, "Error: could not play audio. (%s : %d)\n", pa_strerror(pulse_error), pulse_error); @@ -162,9 +157,7 @@ exit: } pthread_attr_destroy(&attr); - if (rds_device != NULL) { - pa_simple_free(rds_device); - } + if (rds_device != NULL) pa_simple_free(rds_device); return 0; } \ No newline at end of file