From f688066897e6dedbd0916d3721cf13aeb0b952c5 Mon Sep 17 00:00:00 2001 From: Tom Early Date: Tue, 22 May 2018 17:34:10 -0700 Subject: [PATCH] AudioNotifyThread uses SDSVT --- QnetLink.cpp | 99 ++++++++++++++++++++++++---------------------------- 1 file changed, 46 insertions(+), 53 deletions(-) diff --git a/QnetLink.cpp b/QnetLink.cpp index 2ca5135..0c4f94f 100644 --- a/QnetLink.cpp +++ b/QnetLink.cpp @@ -3636,7 +3636,6 @@ void CQnetLink::AudioNotifyThread(char *arg) unsigned short rlen = 0; size_t nread = 0; - unsigned char dstar_buf[56]; bool useTEXT = false; short int TEXT_idx = 0; char RADIO_ID[21]; @@ -3707,6 +3706,7 @@ void CQnetLink::AudioNotifyThread(char *arg) } /* stupid DVTOOL + 4 byte num_of_records */ + unsigned char dstar_buf[10]; nread = fread(dstar_buf, 10, 1, fp); if (nread != 1) { printf("Cant read first 10 bytes from %s\n", temp_file); @@ -3737,93 +3737,86 @@ void CQnetLink::AudioNotifyThread(char *arg) break; } - nread = fread(dstar_buf, rlen, 1, fp); + SDSVT dsvt; + nread = fread(dsvt.title, rlen, 1, fp); if (nread == 1) { - if (memcmp(dstar_buf, "DSVT", 4) != 0) { + if (memcmp(dsvt.title, "DSVT", 4) != 0) { printf("DVST not found in %s\n", temp_file); break; } - if (dstar_buf[8] != 0x20) { + if (dsvt.id != 0x20) { printf("Not Voice type in %s\n", temp_file); break; } - if (dstar_buf[4] == 0x10) - ; - else if (dstar_buf[4] == 0x20) - ; - else { + if (dsvt.config!=0x10 && dsvt.config!=0x20) { printf("Not a valid record type in %s\n", temp_file); break; } - dstar_buf[12] = streamid_raw / 256U; - dstar_buf[13] = streamid_raw % 256U; + dsvt.streamid = htons(streamid_raw); if (rlen == 56) { - dstar_buf[15] = 0x01; + dsvt.hdr.flag[0] = 0x01; - memcpy(dstar_buf + 18, owner.c_str(), CALL_SIZE); - dstar_buf[25] = mod; + memcpy(dsvt.hdr.rpt1, owner.c_str(), CALL_SIZE); + dsvt.hdr.rpt1[7] = mod; - memcpy(dstar_buf + 26, owner.c_str(), CALL_SIZE); - dstar_buf[33] = 'G'; + memcpy(dsvt.hdr.rpt2, owner.c_str(), CALL_SIZE); + dsvt.hdr.rpt2[7] = 'G'; - memcpy(dstar_buf + 34, "CQCQCQ ", 8); + memcpy(dsvt.hdr.urcall, "CQCQCQ ", 8); - memcpy(dstar_buf + 42, owner.c_str(), CALL_SIZE); - dstar_buf[48] = ' '; - dstar_buf[49] = ' '; + memcpy(dsvt.hdr.mycall, owner.c_str(), CALL_SIZE); + dsvt.hdr.mycall[6] = dsvt.hdr.mycall[7] = ' '; - memcpy(dstar_buf + 50, "RPTR", 4); - calcPFCS(dstar_buf, 56); + memcpy(dsvt.hdr.sfx, "RPTR", 4); + calcPFCS(dsvt.title, 56); } else { if (useTEXT) { - if ((dstar_buf[24] != 0x55) || - (dstar_buf[25] != 0x2d) || - (dstar_buf[26] != 0x16)) { + if ((dsvt.vasd.text[0] != 0x55) || (dsvt.vasd.text[1] != 0x2d) || (dsvt.vasd.text[2] != 0x16)) { if (TEXT_idx == 0) { - dstar_buf[24] = '@' ^ 0x70; - dstar_buf[25] = RADIO_ID[TEXT_idx++] ^ 0x4f; - dstar_buf[26] = RADIO_ID[TEXT_idx++] ^ 0x93; + dsvt.vasd.text[0] = '@' ^ 0x70; + dsvt.vasd.text[1] = RADIO_ID[TEXT_idx++] ^ 0x4f; + dsvt.vasd.text[2] = RADIO_ID[TEXT_idx++] ^ 0x93; } else if (TEXT_idx == 2) { - dstar_buf[24] = RADIO_ID[TEXT_idx++] ^ 0x70; - dstar_buf[25] = RADIO_ID[TEXT_idx++] ^ 0x4f; - dstar_buf[26] = RADIO_ID[TEXT_idx++] ^ 0x93; + dsvt.vasd.text[0] = RADIO_ID[TEXT_idx++] ^ 0x70; + dsvt.vasd.text[1] = RADIO_ID[TEXT_idx++] ^ 0x4f; + dsvt.vasd.text[2] = RADIO_ID[TEXT_idx++] ^ 0x93; } else if (TEXT_idx == 5) { - dstar_buf[24] = 'A' ^ 0x70; - dstar_buf[25] = RADIO_ID[TEXT_idx++] ^ 0x4f; - dstar_buf[26] = RADIO_ID[TEXT_idx++] ^ 0x93; + dsvt.vasd.text[0] = 'A' ^ 0x70; + dsvt.vasd.text[1] = RADIO_ID[TEXT_idx++] ^ 0x4f; + dsvt.vasd.text[2] = RADIO_ID[TEXT_idx++] ^ 0x93; } else if (TEXT_idx == 7) { - dstar_buf[24] = RADIO_ID[TEXT_idx++] ^ 0x70; - dstar_buf[25] = RADIO_ID[TEXT_idx++] ^ 0x4f; - dstar_buf[26] = RADIO_ID[TEXT_idx++] ^ 0x93; + dsvt.vasd.text[0] = RADIO_ID[TEXT_idx++] ^ 0x70; + dsvt.vasd.text[1] = RADIO_ID[TEXT_idx++] ^ 0x4f; + dsvt.vasd.text[2] = RADIO_ID[TEXT_idx++] ^ 0x93; } else if (TEXT_idx == 10) { - dstar_buf[24] = 'B' ^ 0x70; - dstar_buf[25] = RADIO_ID[TEXT_idx++] ^ 0x4f; - dstar_buf[26] = RADIO_ID[TEXT_idx++] ^ 0x93; + dsvt.vasd.text[0] = 'B' ^ 0x70; + dsvt.vasd.text[1] = RADIO_ID[TEXT_idx++] ^ 0x4f; + dsvt.vasd.text[2] = RADIO_ID[TEXT_idx++] ^ 0x93; } else if (TEXT_idx == 12) { - dstar_buf[24] = RADIO_ID[TEXT_idx++] ^ 0x70; - dstar_buf[25] = RADIO_ID[TEXT_idx++] ^ 0x4f; - dstar_buf[26] = RADIO_ID[TEXT_idx++] ^ 0x93; + dsvt.vasd.text[0] = RADIO_ID[TEXT_idx++] ^ 0x70; + dsvt.vasd.text[1] = RADIO_ID[TEXT_idx++] ^ 0x4f; + dsvt.vasd.text[2] = RADIO_ID[TEXT_idx++] ^ 0x93; } else if (TEXT_idx == 15) { - dstar_buf[24] = 'C' ^ 0x70; - dstar_buf[25] = RADIO_ID[TEXT_idx++] ^ 0x4f; - dstar_buf[26] = RADIO_ID[TEXT_idx++] ^ 0x93; + dsvt.vasd.text[0] = 'C' ^ 0x70; + dsvt.vasd.text[1] = RADIO_ID[TEXT_idx++] ^ 0x4f; + dsvt.vasd.text[2] = RADIO_ID[TEXT_idx++] ^ 0x93; } else if (TEXT_idx == 17) { - dstar_buf[24] = RADIO_ID[TEXT_idx++] ^ 0x70; - dstar_buf[25] = RADIO_ID[TEXT_idx++] ^ 0x4f; - dstar_buf[26] = RADIO_ID[TEXT_idx++] ^ 0x93; + dsvt.vasd.text[0] = RADIO_ID[TEXT_idx++] ^ 0x70; + dsvt.vasd.text[1] = RADIO_ID[TEXT_idx++] ^ 0x4f; + dsvt.vasd.text[2] = RADIO_ID[TEXT_idx++] ^ 0x93; } else { - dstar_buf[24] = 0x70; - dstar_buf[25] = 0x4f; - dstar_buf[26] = 0x93; + dsvt.vasd.text[0] = 0x70; + dsvt.vasd.text[1] = 0x4f; + dsvt.vasd.text[2] = 0x93; } } } } - sendto(rptr_sock, dstar_buf, rlen, 0, (struct sockaddr *)&toLocalg2,sizeof(struct sockaddr_in)); + sendto(rptr_sock, dsvt.title, rlen, 0, (struct sockaddr *)&toLocalg2,sizeof(struct sockaddr_in)); } std::this_thread::sleep_for(std::chrono::milliseconds(delay_between)); }