From d0e7dcde04119e1c572fde40eeaf0addc58936ce Mon Sep 17 00:00:00 2001 From: Stephen Blinick Date: Sun, 10 Feb 2019 10:20:48 -0700 Subject: [PATCH 01/45] Perf: Replace rtl_tcp linked list with ring buffer Removed the linked list structure, locking, and malloc/free on each USB callback. Replaced it with a non blocking ring buffer for performance. This resulted in a large performance improvement when using an Raspberry Pi or Raspberry Pi Zero W as a rtl_tcp server. The sample rate could be doubled and instead of wired ethernet wifi could be used. Frequnecy change lag was reduced greatly also. Signed-off-by: Stephen Blinick --- src/rtl_tcp.c | 202 +++++++++++++++++++++++--------------------------- 1 file changed, 92 insertions(+), 110 deletions(-) diff --git a/src/rtl_tcp.c b/src/rtl_tcp.c index da6057b..d6602ed 100644 --- a/src/rtl_tcp.c +++ b/src/rtl_tcp.c @@ -61,15 +61,8 @@ static pthread_t command_thread; static pthread_cond_t exit_cond; static pthread_mutex_t exit_cond_lock; -static pthread_mutex_t ll_mutex; static pthread_cond_t cond; -struct llist { - char *data; - size_t len; - struct llist *next; -}; - typedef struct { /* structure size must be multiple of 2 bytes */ char magic[4]; uint32_t tuner_type; @@ -79,9 +72,17 @@ typedef struct { /* structure size must be multiple of 2 bytes */ static rtlsdr_dev_t *dev = NULL; static int enable_biastee = 0; -static int global_numq = 0; -static struct llist *ll_buffers = 0; -static int llbuf_num = 500; + +// Ring Buffer declarations +// 8MB appears to cover several seconds at high bitrates -- about as much lag as you'd want +#define RINGBUFSZ_INIT (8*1024*1024) +static int ringbuf_sz = RINGBUFSZ_INIT; +static int ringbuf_trimsz = 512*1024; +static unsigned char *ringbuf = NULL; +static volatile unsigned int ringbuf_head = 0; +static volatile unsigned int ringbuf_tail = 0; +static unsigned int total_radio_bytes = 0; +static unsigned int max_bytes_in_flight = 0; static volatile int do_exit = 0; @@ -145,53 +146,60 @@ static void sighandler(int signum) void rtlsdr_callback(unsigned char *buf, uint32_t len, void *ctx) { + static time_t lasttime = 0; + static int lastbytes = 0; + time_t curtime; + if(!do_exit) { - struct llist *rpt = (struct llist*)malloc(sizeof(struct llist)); - rpt->data = (char*)malloc(len); - memcpy(rpt->data, buf, len); - rpt->len = len; - rpt->next = NULL; + unsigned int bufferleft; - pthread_mutex_lock(&ll_mutex); - - if (ll_buffers == NULL) { - ll_buffers = rpt; - } else { - struct llist *cur = ll_buffers; - int num_queued = 0; - - while (cur->next != NULL) { - cur = cur->next; - num_queued++; - } - - if(llbuf_num && llbuf_num == num_queued-2){ - struct llist *curelem; - - free(ll_buffers->data); - curelem = ll_buffers->next; - free(ll_buffers); - ll_buffers = curelem; - } - - cur->next = rpt; - - if (num_queued > global_numq) - printf("ll+, now %d\n", num_queued); - else if (num_queued < global_numq) - printf("ll-, now %d\n", num_queued); - - global_numq = num_queued; + if (ringbuf == NULL) + { + printf("Allocate %d bytes for ringbuf.\n", ringbuf_sz); + ringbuf = (unsigned char*)malloc(ringbuf_sz); + } + + bufferleft = ringbuf_sz - ((ringbuf_head < ringbuf_tail) ? (ringbuf_head - ringbuf_tail + ringbuf_sz) : (ringbuf_head - ringbuf_tail)); + if (len < bufferleft) + { + if ((ringbuf_head+len) < (unsigned int)ringbuf_sz) + { + memcpy(((unsigned char*)(ringbuf+ringbuf_head)), buf, len); + } + else + { + memcpy(((unsigned char*)ringbuf+ringbuf_head), buf, ringbuf_sz-ringbuf_head); + memcpy((unsigned char*)ringbuf, buf+(ringbuf_sz-ringbuf_head), len-(ringbuf_sz-ringbuf_head)); + } + ringbuf_head = (ringbuf_head + len) % ringbuf_sz; + } + else + { + printf("overrun: head=%d tail=%d, Trimming %d bytes from tail of buffer\n", ringbuf_head, ringbuf_tail, ringbuf_trimsz); + ringbuf_tail = (ringbuf_tail + ringbuf_trimsz) % ringbuf_sz; + } + + total_radio_bytes += len; + curtime = time (NULL); + if ((curtime - lasttime) > 30) + { + int nsecs = curtime - lasttime; + int nbytes = total_radio_bytes - lastbytes; + int bytes_in_flight = (ringbuf_head - ringbuf_tail); + if (bytes_in_flight < 0) + bytes_in_flight = ringbuf_sz + bytes_in_flight; + lasttime=curtime; + lastbytes=total_radio_bytes; + printf(">> [ %3.2fMB/s ] [ bytes_in_flight(cur/max) = %4dK / %4dK ]\n", + (float)nbytes/(float)nsecs/1000.0/1000.0, bytes_in_flight/1024, max_bytes_in_flight/1024); + max_bytes_in_flight=0; } - pthread_cond_signal(&cond); - pthread_mutex_unlock(&ll_mutex); } } static void *tcp_worker(void *arg) { - struct llist *curelem,*prev; - int bytesleft,bytessent, index; + int bytesleft, bytessent; struct timeval tv= {1,0}; struct timespec ts; struct timeval tp; @@ -202,47 +210,33 @@ static void *tcp_worker(void *arg) if(do_exit) pthread_exit(0); - pthread_mutex_lock(&ll_mutex); - gettimeofday(&tp, NULL); - ts.tv_sec = tp.tv_sec+5; - ts.tv_nsec = tp.tv_usec * 1000; - r = pthread_cond_timedwait(&cond, &ll_mutex, &ts); - if(r == ETIMEDOUT) { - pthread_mutex_unlock(&ll_mutex); - printf("worker cond timeout\n"); - sighandler(0); - pthread_exit(NULL); - } - - curelem = ll_buffers; - ll_buffers = 0; - pthread_mutex_unlock(&ll_mutex); - - while(curelem != 0) { - bytesleft = curelem->len; - index = 0; - bytessent = 0; - while(bytesleft > 0) { - FD_ZERO(&writefds); - FD_SET(s, &writefds); - tv.tv_sec = 1; - tv.tv_usec = 0; - r = select(s+1, NULL, &writefds, NULL, &tv); - if(r) { - bytessent = send(s, &curelem->data[index], bytesleft, 0); - bytesleft -= bytessent; - index += bytessent; - } - if(bytessent == SOCKET_ERROR || do_exit) { - printf("worker socket bye\n"); - sighandler(0); - pthread_exit(NULL); - } - } - prev = curelem; - curelem = curelem->next; - free(prev->data); - free(prev); + bytesleft = (ringbuf_head < ringbuf_tail) ? + (ringbuf_head - ringbuf_tail + ringbuf_sz) : + (ringbuf_head - ringbuf_tail); + while (bytesleft > 0) + { + FD_ZERO(&writefds); + FD_SET(s, &writefds); + tv.tv_sec = 1; + tv.tv_usec = 0; + r = select(s+1, NULL, &writefds, NULL, &tv); + if(r) { + unsigned int sendchunk; + if (ringbuf_tail < ringbuf_head) + sendchunk = ringbuf_head - ringbuf_tail; + else + sendchunk = ringbuf_sz - ringbuf_tail; + if (sendchunk > max_bytes_in_flight) + max_bytes_in_flight = sendchunk; + bytessent = send(s, (unsigned char*)(ringbuf+ringbuf_tail), sendchunk, 0); + bytesleft -= bytessent; + ringbuf_tail = (ringbuf_tail + bytessent) % ringbuf_sz; + } + if(bytessent == SOCKET_ERROR || do_exit) { + printf("worker socket bye\n"); + sighandler(0); + pthread_exit(NULL); + } } } } @@ -397,7 +391,7 @@ int main(int argc, char **argv) struct sigaction sigact, sigign; #endif - while ((opt = getopt(argc, argv, "a:p:f:g:s:b:n:d:P:T")) != -1) { + while ((opt = getopt(argc, argv, "a:p:f:g:s:b:d:P:T")) != -1) { switch (opt) { case 'd': dev_index = verbose_device_search(optarg); @@ -421,9 +415,6 @@ int main(int argc, char **argv) case 'b': buf_num = atoi(optarg); break; - case 'n': - llbuf_num = atoi(optarg); - break; case 'P': ppm_error = atoi(optarg); break; @@ -444,7 +435,7 @@ int main(int argc, char **argv) } if (dev_index < 0) { - exit(1); + exit(1); } rtlsdr_open(&dev, (uint32_t)dev_index); @@ -510,7 +501,6 @@ int main(int argc, char **argv) fprintf(stderr, "WARNING: Failed to reset buffers.\n"); pthread_mutex_init(&exit_cond_lock, NULL); - pthread_mutex_init(&ll_mutex, NULL); pthread_mutex_init(&exit_cond_lock, NULL); pthread_cond_init(&cond, NULL); pthread_cond_init(&exit_cond, NULL); @@ -536,10 +526,10 @@ int main(int argc, char **argv) while(1) { printf("listening...\n"); printf("Use the device argument 'rtl_tcp=%s:%d' in OsmoSDR " - "(gr-osmosdr) source\n" - "to receive samples in GRC and control " - "rtl_tcp parameters (frequency, gain, ...).\n", - addr, port); + "(gr-osmosdr) source\n" + "to receive samples in GRC and control " + "rtl_tcp parameters (frequency, gain, ...).\n", + addr, port); listen(listensocket,1); while(1) { @@ -590,24 +580,16 @@ int main(int argc, char **argv) closesocket(s); printf("all threads dead..\n"); - curelem = ll_buffers; - ll_buffers = 0; - - while(curelem != 0) { - prev = curelem; - curelem = curelem->next; - free(prev->data); - free(prev); - } do_exit = 0; - global_numq = 0; } out: rtlsdr_close(dev); closesocket(listensocket); closesocket(s); + if (ringbuf) + free(ringbuf); #ifdef _WIN32 WSACleanup(); #endif From da0c8ea073c31faa28e2d257d64c1fcdf86ca38b Mon Sep 17 00:00:00 2001 From: Stephen Blinick Date: Sun, 10 Feb 2019 15:23:42 -0700 Subject: [PATCH 02/45] Clean out stale data in ring buffer when client disconnects. --- src/rtl_tcp.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/rtl_tcp.c b/src/rtl_tcp.c index d6602ed..7f34fdb 100644 --- a/src/rtl_tcp.c +++ b/src/rtl_tcp.c @@ -580,6 +580,10 @@ int main(int argc, char **argv) closesocket(s); printf("all threads dead..\n"); + + // Clear stale data for next client + ringbuf_head = ringbuf_tail = 0; + memset(ringbuf, 0, ringbuf_sz); do_exit = 0; } From f26bf11bbd8c51dc398accfa987987ec09489ce7 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 11 Oct 2019 15:06:50 +1300 Subject: [PATCH 03/45] Max VCO currents Better L-Band locks --- src/tuner_r82xx.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c index fe52bd9..98df3f4 100644 --- a/src/tuner_r82xx.c +++ b/src/tuner_r82xx.c @@ -447,8 +447,8 @@ static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq) if (rc < 0) return rc; - /* set VCO current = 100 */ - rc = r82xx_write_reg_mask(priv, 0x12, 0x80, 0xe0); + /* set VCO current = 100 RTL-SDRBLOG MOD: MAX CURRENT*/ + rc = r82xx_write_reg_mask(priv, 0x12, 0x00, 0xe0); if (rc < 0) return rc; @@ -540,7 +540,7 @@ static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq) if (!i) { /* Didn't lock. Increase VCO current */ - rc = r82xx_write_reg_mask(priv, 0x12, 0x60, 0xe0); + rc = r82xx_write_reg_mask(priv, 0x12, 0x00, 0xe0); if (rc < 0) return rc; } From 9d3d8a5faf9bf970f1c2bc88b6e0f4ddd5e3bf30 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 11 Oct 2019 13:23:38 +0100 Subject: [PATCH 04/45] direct sampling added to rtl_tcp --- README | 6 ++++++ build/install_manifest.txt | 15 +++++++++++++++ build/src/libconvenience_static.a | Bin 0 -> 7594 bytes build/src/librtlsdr.a | Bin 0 -> 97414 bytes build/src/librtlsdr.so | 1 + build/src/librtlsdr.so.0 | 1 + build/src/librtlsdr.so.0.6git | Bin 0 -> 92192 bytes build/src/rtl_adsb | Bin 0 -> 24604 bytes build/src/rtl_eeprom | Bin 0 -> 17772 bytes build/src/rtl_fm | Bin 0 -> 39772 bytes build/src/rtl_power | Bin 0 -> 30040 bytes build/src/rtl_sdr | Bin 0 -> 19156 bytes build/src/rtl_tcp | Bin 0 -> 24868 bytes build/src/rtl_test | Bin 0 -> 24680 bytes src/rtl_power.c | 2 +- src/rtl_tcp.c | 14 ++++++++++++-- 16 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 build/install_manifest.txt create mode 100644 build/src/libconvenience_static.a create mode 100644 build/src/librtlsdr.a create mode 120000 build/src/librtlsdr.so create mode 120000 build/src/librtlsdr.so.0 create mode 100755 build/src/librtlsdr.so.0.6git create mode 100755 build/src/rtl_adsb create mode 100755 build/src/rtl_eeprom create mode 100755 build/src/rtl_fm create mode 100755 build/src/rtl_power create mode 100755 build/src/rtl_sdr create mode 100755 build/src/rtl_tcp create mode 100755 build/src/rtl_test diff --git a/README b/README index 9098683..3a11c11 100644 --- a/README +++ b/README @@ -4,3 +4,9 @@ turns your Realtek RTL2832 based DVB dongle into a SDR receiver For more information see: https://osmocom.org/projects/rtl-sdr/wiki + +Modified RTL-SDR Blog Version + +1) VCO PLL current fix - Improves stability at frequencies above ~1.5 GHz https://www.rtl-sdr.com/beta-testing-a-modified-rtl-sdr-driver-for-l-band-heat-issues/ +2) RTL_TCP ring buffer enhancement by Stephen Blinick https://www.rtl-sdr.com/significantly-improving-rtl_tcps-performance-with-ring-buffers/ +3) Enabled direct sampling for rtl_tcp diff --git a/build/install_manifest.txt b/build/install_manifest.txt new file mode 100644 index 0000000..ce6c476 --- /dev/null +++ b/build/install_manifest.txt @@ -0,0 +1,15 @@ +/etc/udev/rules.d/rtl-sdr.rules +/usr/local/lib/pkgconfig/librtlsdr.pc +/usr/local/include/rtl-sdr.h +/usr/local/include/rtl-sdr_export.h +/usr/local/lib/librtlsdr.so.0.6git +/usr/local/lib/librtlsdr.so.0 +/usr/local/lib/librtlsdr.so +/usr/local/lib/librtlsdr.a +/usr/local/bin/rtl_sdr +/usr/local/bin/rtl_tcp +/usr/local/bin/rtl_test +/usr/local/bin/rtl_fm +/usr/local/bin/rtl_eeprom +/usr/local/bin/rtl_adsb +/usr/local/bin/rtl_power \ No newline at end of file diff --git a/build/src/libconvenience_static.a b/build/src/libconvenience_static.a new file mode 100644 index 0000000000000000000000000000000000000000..1b5225418eb37ce5b509494680c54c2251712895 GIT binary patch literal 7594 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 H-uwRn)hIH} literal 0 HcmV?d00001 diff --git a/build/src/rtl_adsb b/build/src/rtl_adsb new file mode 100755 index 0000000000000000000000000000000000000000..ba4e9c4865635bf1d428acc4e3f60565bc826492 GIT binary patch literal 24604 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 literal 0 HcmV?d00001 diff --git a/build/src/rtl_fm b/build/src/rtl_fm new file mode 100755 index 0000000000000000000000000000000000000000..8d1039ae6870780fe28d84e8870d577d1337ebaa GIT binary patch literal 39772 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 literal 0 HcmV?d00001 diff --git a/build/src/rtl_sdr b/build/src/rtl_sdr new file mode 100755 index 0000000000000000000000000000000000000000..1ae940e31d011a6d42d080fc0af94f1864818813 GIT binary patch literal 19156 zcmeHPeR!0`wV%xgh7e?dAQ5AEQNW;NvjId*Q8s*I`3Mkgs@7$*yGgbtyX)=-0jW)u zRx40ZQ$KFiY`y*PdbOoK++J$YOIy74>4nx-+e@{TY{C}gOSDw67s>toX5QIMUeTxR z(?9wL1G6({&Y3f3&YXE?-kJC03-cDwcez|bhdfas2yGqd64Q{5pO2pcQ8-OlVlZ%@ z5El|3pE*&8nG;b5EvhFlcGFqs>SZL$(k=6sQN4t#Y17>7>6w8Rj&bh=w zw8hB!#FFNShcQpa9VqBVWV^)Y;rAr)CxK@y0*;Y*En^&T9BnhsMLDC!EzhPx06!F1 z-;KBec(eUd@M2_rB%-P{(pc3Rs%(u!+t*YE5^XI_o@C536(~tV9;92a^ja1P>Vq;f zkVh#Z%ZPtr^n8w5U69XU#4nb1@Bg;%+&g>?manM3 z_Q?*gFR%t75yDCX-?3BNQR|DBhz^&xz&B2aUE@O5?DJQ7#kZ&wrB|gNj$<+65X5s4 zhaobIKpcrU3h_L|GQ=^67a*1+jzzQ(FG4iKcmNX-Cm~*jSczDTI0cakp`DmvI)Ez? zuX^Unq4hU@cK9ELynp9|6ISN`>(!mxzp(C>rRz5)haGz5t#f16C-=C%H|^k;k3YD6 ze!~^RUfL*IlsN_;lA{h?`$kDsd;F~toQqNR9v{J{PRbL4;xzA^Y~*w zdZ2vDuJ=a#;Qejf;AiO>YLj5`q3X2##&vc z+KT7Q`^}LD-`&HJnFEe#!$CR6C}Q9Vzv_TjJK(z<@cA@MJFtG4ga1ev=E<>&Xap?eB?tX0px^CP zmE5qBryceC9Q2oiUnlsjLR%xmQ1LGg`tyNL=lG2lw>#>89`sv*=e!w?_AW5!Eiqbb zbnv?Y@HT_K(t#h0`X?X{`B9!)2Yw>pCyn|`9P+#YyxISSj{08*Umd95kq-P+2OM

QJH97(3aiTWjTT4T|0eW0;5Ed2iFwpi4kOa&4t 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 N=keoYO{Ll+^#A_+5@-Mb literal 0 HcmV?d00001 diff --git a/build/src/rtl_tcp b/build/src/rtl_tcp new file mode 100755 index 0000000000000000000000000000000000000000..c931d1ce6abdfe1e87cd7ea359f3c0b0b498d95d GIT binary patch literal 24868 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 LBM(K@pYQ(#eu&A| literal 0 HcmV?d00001 diff --git a/build/src/rtl_test b/build/src/rtl_test new file mode 100755 index 0000000000000000000000000000000000000000..58a91a023032117479ec8debf6e5196bb34a2c37 GIT binary patch literal 24680 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 TR}2D~?t5RscX<;DoSFUqG52%2 literal 0 HcmV?d00001 diff --git a/src/rtl_power.c b/src/rtl_power.c index 625d818..8416176 100644 --- a/src/rtl_power.c +++ b/src/rtl_power.c @@ -913,7 +913,7 @@ int main(int argc, char **argv) #endif if (direct_sampling) { - verbose_direct_sampling(dev, 1); + verbose_direct_sampling(dev, 2); } if (offset_tuning) { diff --git a/src/rtl_tcp.c b/src/rtl_tcp.c index 7f34fdb..270e9f6 100644 --- a/src/rtl_tcp.c +++ b/src/rtl_tcp.c @@ -98,7 +98,8 @@ void usage(void) "\t[-n max number of linked list buffers to keep (default: 500)]\n" "\t[-d device index (default: 0)]\n" "\t[-P ppm_error (default: 0)]\n" - "\t[-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)]\n"); + "\t[-T enable bias-T on GPIO PIN 0 (works for rtl-sdr.com v3 dongles)]\n" + "\t[-D enable direct sampling (default: off)]\n"); exit(1); } @@ -374,6 +375,7 @@ int main(int argc, char **argv) int dev_given = 0; int gain = 0; int ppm_error = 0; + int direct_sampling = 0; struct llist *curelem,*prev; pthread_attr_t attr; void *status; @@ -391,7 +393,7 @@ int main(int argc, char **argv) struct sigaction sigact, sigign; #endif - while ((opt = getopt(argc, argv, "a:p:f:g:s:b:d:P:T")) != -1) { + while ((opt = getopt(argc, argv, "a:p:f:g:s:b:d:P:T:D")) != -1) { switch (opt) { case 'd': dev_index = verbose_device_search(optarg); @@ -421,6 +423,9 @@ int main(int argc, char **argv) case 'T': enable_biastee = 1; break; + case 'D': + direct_sampling = 1; + break; default: usage(); break; @@ -457,6 +462,11 @@ int main(int argc, char **argv) SetConsoleCtrlHandler( (PHANDLER_ROUTINE) sighandler, TRUE ); #endif + /* Set direct sampling */ + if (direct_sampling) { + verbose_direct_sampling(dev, 2); + } + /* Set the tuner error */ verbose_ppm_set(dev, ppm_error); From 65ea7235bca017b571fb4cd2fe5449a917820043 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Thu, 17 Oct 2019 13:18:24 +0100 Subject: [PATCH 05/45] add rtl_biast, add biast EEPROM hack --- README | 2 + build/install_manifest.txt | 3 +- build/src/librtlsdr.a | Bin 97414 -> 98082 bytes build/src/librtlsdr.so.0.6git | Bin 92192 -> 92264 bytes build/src/rtl_adsb | Bin 24604 -> 24604 bytes build/src/rtl_biast | Bin 0 -> 14528 bytes build/src/rtl_eeprom | Bin 17772 -> 17772 bytes build/src/rtl_fm | Bin 39772 -> 39772 bytes build/src/rtl_power | Bin 30040 -> 30040 bytes build/src/rtl_sdr | Bin 19156 -> 19156 bytes build/src/rtl_tcp | Bin 24868 -> 24868 bytes build/src/rtl_test | Bin 24680 -> 24680 bytes include/rtl-sdr.h | 10 +++ src/CMakeLists.txt | 10 ++- src/librtlsdr.c | 28 ++++++++ src/rtl_biast.c | 125 ++++++++++++++++++++++++++++++++++ 16 files changed, 176 insertions(+), 2 deletions(-) create mode 100755 build/src/rtl_biast create mode 100644 src/rtl_biast.c diff --git a/README b/README index 3a11c11..d329b20 100644 --- a/README +++ b/README @@ -10,3 +10,5 @@ Modified RTL-SDR Blog Version 1) VCO PLL current fix - Improves stability at frequencies above ~1.5 GHz https://www.rtl-sdr.com/beta-testing-a-modified-rtl-sdr-driver-for-l-band-heat-issues/ 2) RTL_TCP ring buffer enhancement by Stephen Blinick https://www.rtl-sdr.com/significantly-improving-rtl_tcps-performance-with-ring-buffers/ 3) Enabled direct sampling for rtl_tcp +4) rtl_biast program added, including the ability to turn on/off any GPIO +5) Hack to force the bias tee to always be on by setting the unused IR endpoint bit to 0 in the EEPROM with "rtl_eeprom -i 0" diff --git a/build/install_manifest.txt b/build/install_manifest.txt index ce6c476..d22899b 100644 --- a/build/install_manifest.txt +++ b/build/install_manifest.txt @@ -12,4 +12,5 @@ /usr/local/bin/rtl_fm /usr/local/bin/rtl_eeprom /usr/local/bin/rtl_adsb -/usr/local/bin/rtl_power \ No newline at end of file +/usr/local/bin/rtl_power +/usr/local/bin/rtl_biast \ No newline at end of file diff --git a/build/src/librtlsdr.a b/build/src/librtlsdr.a index fb57b96268fe7c0623b18c7dcf0ce46c77b6e149..91ab6460f2eac224c4ad6cb76e3253d73fed68a4 100644 GIT binary patch delta 10628 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 ZywY{>^&^psG4P-7H;RUWZ~f}6{{b7}DF^@n diff --git a/build/src/librtlsdr.so.0.6git b/build/src/librtlsdr.so.0.6git index 50250d76f610961005c62224d926a7fe657d7354..bc14e71f6c5ed8abff57df3a6fe2bf184d48d3d2 100755 GIT binary patch delta 22150 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 G_x}KmXajlx delta 21196 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 F|3B?HHk1GW diff --git a/build/src/rtl_adsb b/build/src/rtl_adsb index ba4e9c4865635bf1d428acc4e3f60565bc826492..3d041b9a37f54ca04a8b7d5d0067f94f7e604cd9 100755 GIT binary patch delta 2295 zcmc(gk55xq6vyv@7AUk*`dZqG^%ZNO@F0b_1&moJa|AMR!DTKk(kWZWX2!zEqE5F2 z&1R-k=8rQr$uxatYTSksQ`|5E1(Pj0XT%s5nTgtxw}3duwwQoZ-_C6{-alZ;+T43S z-*fJL@1Aqs%iA{y`v##$1$)IU*JoE2%4af*zdJp7Z2h=jzqmBo3u-D9;d0|e$VGoz zJDBlMnh(11T$%#&@J?C~D$$?b4s-EP`YMTt*+LtQjxIS(*_N3)&nm1V%#k2~YiPdnn3Q~lZ_E)zH)uvcK0 zz*d1X1ZEG}M%SO#lh@}wmE`s~7vnp9u&Aw;2wdG5M!Bbj^#aFpJY~bY`!6)t;3gWuR;e7*rL#a zZITQU?v^CaDq3U8^4=cYK5+Y#uHVe`s$+Z)V|%r99Fl55L6g0Z-i>m*3?W=*m&!9} zPli{G8LVn7o2g?4L8p>tg0_&phn@Bc$i@ryDwu^9hXNOHp~DBm7mq~q%OPz)ABCd5# zQua+QC%k|gTnjwc?o;;cgZL;}FWGup%e6H$Fn$`(xqPMxitsDX;2qZ+kcCa|AY8@W z?mRe&N8JjX!%?>kLpbABJm1nc47 z>u?b@e+AvsQ{aOyvAUqp^vzxUrh#hGjco-%>d1it$$#c9uWZ8@3#pf#jQz?$jlIi# ztJN5FBbH9Chn z7Ev}&7R&GzE-#kdAI|8LlhoEuvX#6>ss#5~ zaKECsHj_<-&HKO_y0jK-Dv^rj z(OT~L;d)1WYUjW>vvz5j^gM<5HG~rl-<^2~zM*i4U%!yHti>aA9dJY>RF# z{UV1xXa1^Mcpl%Z3NEnE0+vH>%Pk8q8`%I2iADyE2fE(cO@5s$eb3kw*<1_Y@h8gn zgv{-I*}(qC@$7$ha~ui%v5YdK9QlVjJz;s~NzH4KtWZ*$5}H>osWTI{o63>YSqa-0 zbvzvbD)x!RLFkQYi(51DdAX85Gpi#wE9fPpe~zxLUuA&q=t#roS=6DnM%l>Em5ZH? tJ|jO-Hx3Z-ZrwtSh@Zlamaxyn@86xxm>Dmvl(0T*HYS=A4Tn#s{0k!%+Ry+1 delta 2289 zcmc(f@lR7%6vywOEl_Bs@LEg7=0OS+cx9ESAxL!(n?+$5Ps<63+P$W+WU6Q;hM+iJXjz>+n&_k6zR z+kZYmly;y z_9S|s7tbUrAmjZ+KP<$&q#$HrPtqE2g-yxFj8K9jmPVAVZFta{3DtPgDnoTxvz`UG ziAU0$!LoV4*r^>+>F4%n+0>x+lotr>6F67kxdPh-wg_x|!Wne_Lp^>z=X-GuM!EP? z2;30(s=${7J}2;qz=Hz!3w%)E0|IyJ!DlzxEd<&H-YW3>0>3Tr>jJMAxKZGj1+II_ zLCSvVQ$buN@B)E-0_O@mS75uq7J-cdKYaWw;d{hE-tSloguo4fuL^ug;Bx|x2s|io zzrY7M({E};@r1Fh_!g^IBT%7Yd4|>co~}v@_Hf(K?c=(BGbLLc<9is}qb1@AsRoMBZ1+Mcme^$|$CY-eB#HJUXR8sT zO^u{6b<7}W18M#7v$&P?KiFw6g;{vsUJh2YIutmEiyR)ffB{Dqgt65juNrK(}i_a7yOZCu$?Qor)T6u?^g;u+I43Flb(v0h z30pJgyRSW>?AX@m?_{&d*3w$8Z52b~$MH<2$2?9Ee)0pnpVvJFo@e?o+E`GIEmAXl9Yf>H)}^J;`&7=)5N>n<_xh@!79&0h0Pp)ea1C9>GK}J);u_c<-cr0jotm9j zUIQ!ejdK5d+bm$|^tFszfn|^_pdrynrtw(UH}#TVC!0WeimcrVcw|Azt_n-AKMmOb zIF|i)5697pJ1Z$O%8@YxONv>Zd0g{a#48ln=9uP{i|dq_?WJf7@Gsoj-!}jN diff --git a/build/src/rtl_biast b/build/src/rtl_biast new file mode 100755 index 0000000000000000000000000000000000000000..ef777e2c5c3958226083591637c5953b48d59625 GIT binary patch literal 14528 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 URCc z`h%HhND8@-zR>5rs>cp5e^(vJWWSBjTp~p-B}1ZG$-<}&77(YHs|-%sDmW=uZbQOO z4Vzg2IUiJF0&FOS!Aye z(1VGG`X;CoY7UQ$--+ku|Cj%R9@sU*5;p@__^aUwG}!*JQ!}2*Z=nb9;Kw_W{QiNU zs{GD|^Qiph%_iX;xLq?6Nsltu@!0S6XMi*P35a zZ(TCAkC=zRQYv?X$_-Gs^3VPvU9Onm8Y?Nt(t{qFM zTumXk#tP?`dA0Tmm$$&;H@H%{gAmVhzR8t3U+@|KQ~cbi6W@eO<(GZz4=4UrDt9(; zoV!>`oi7LHi#T_m+T*NC<<0}YvrkIp4ut+9&K;|AEm)TdXJ=ziE1Vew6W@?aoooWW z)3B7vT`ijq&MR!9l;R3gma4uo@!I$rG?}-dN{RS58v2{4z&BCS_566X5kFDfF`eul4XyK@}{4r-eHUFr= z|MC?4N1gkao^Q^;sZZ|*P2XkM$N4hWtV*5uor7~HTUZa$b-a}Rc~ddUU)oy+*X#AS zaL1y)bB26`^@_OmPo2xY1_Pf1evNDX4uej6_7v@%C-v$3IOoS40gdbNgU0ylKxdp8 zRdIfLKl6^d4g`%`z&Rg2D^!^-(r9X2%Rge!X&-ZuRGBS!z|c7F+@w>#Ds|#vEgBug z^>@j$5noniy0nLJXN^-{rDp=Cy|#gq-eKURGuEn#+W%_|ob)aO=lI7Aob)FQob(L7 zC8(n8+iBpW|JcAe{y76D-R7dpqQ*BGIO)$DILD6~IO&c2W+#gpztq4<-)7((zstZ$ z_syL=evN^Xe%Qb{{xJh5{j`CTK4##g$BNgl@;75ds>~GM(oJ;e^=A%_DvJL_1E+j` z{_F6JXUiPY|T*>y;;rr$E;@uV1s!o}Yux`T9ZNem@1A`(ulPp9RkS zaKgdg0#5&Gyc%1b>$T3IUkseCW zBZuVXIdF*!UuEDn=&u9U&oky=bpzM-GKVQ?@KfHszz;k2lRh|!f1aoZZswTncJUto zt_$T2x$u7kPW^noFh}f1F8VKB_!w|)zX$gJ(M6w0K~AB*MgzBjUu)o`e;l}(b9Ix8 z9&_P$xbQCl=k?hISkZha&mW{e;u`-CF8p7Co8x~9++3gkbn(CL!YkAf z6V}ikJi%PJ*M%=La2x!a4V>d|b>Uxd;aLOccm(7p<;?xepi|x{7ygzD{~G3_&quRy zKB`tnWQj4!x^U4vkWR@Y+ul&98TqwNrfqM0fG+`kJ5FFSh5Ya@Y8Uirh7T@A)J~TC#OnV9h zQ>ozg021C(+mUjGq_9AEpuc}Rh8S3YSx=K#Ly7p-NIV*eha#{u66ELllf@aR_SQ(M8+m(yN%?HSOrj?#;*lVFk-NvtFU==Y_7LYPc1%vE(`?{S z$#+g_p6*A;DqxOwLaS-03iS!<&A`}6Gh?P#IGqUeA?k}%Me?MP#Ri)O7^4+|6*q2Z zTferwXc5D2lZ~b|42%xIHT0q(U#2{w3+a&BJFC}iT;8@WfB^I6m7Rgkw&m+q28zPn ziG@y%Trp!!rOx^N6WM4g7tic@_e{)URvlJ~`F4{=nyGgxu?{;GnREen!levRDle!U zKU0iK_cMDODeh&Plz*o(2hC9zBnVC>PRc1|vf?E2y$*&4j#uW5Hbuk2ORO)L?i1ed_BiCJI+Icq+8U}pZb3r9F@`5MIUYWKOvfrv9|pX(4d)6YrYj|Bc~}rd5pmw0pCu5K4OrM zz!*+7fP9R<`fx@g@F)Rx$>TwN0|4EUkMY_rF!21Y3wc>S4PdO5B*yY?LYS@xZLOF6 zgj)fO&9coH-*NESXq$S0iX8w(`pC!FUk(W4yILOSPzksjK)&Sw#)HoTVVszJjI3$C zJ!sQb>fzbyG{T0AUF$+VmfZl&r((Uzf0BqF@(~^YXgOQI zlh8EMwcdvvKF*hC@i9(T6OHEID!%0B$cLCD|Idu_R8(_f$afT<^dH}K&x6kpS8RU| zd@}%CWA*=H7xHo3j{uDMlaKG3W5_9X%On0Qfb%6E-=WVBFApZY&E%mV}2 z$3j`0S013{$#+N_?>^|$g?xnH05l)pjqbIl_VXzCD3^NqPO%?+<{Lg~EUy75kMG1R zW4JKTL8#Ps$RrVZTx?mMo^Q7g*De!mvgod$8iDjyT}&-oCB{n?q%Ah%aKN8 Ym1(D-Q_Gu$w#iqqn28yB)CAvu11}j_umAu6 literal 0 HcmV?d00001 diff --git a/build/src/rtl_eeprom b/build/src/rtl_eeprom index 7f2ea8779872ad1aab5f5222df0045a3fb82d4a1..7114de2683de065feffb14d3375d4d31005a23bd 100755 GIT binary patch delta 170 zcmaFU#rUR+al-;ek?Gb|&lx_RvFZ7@#I|#BXurS~6V}aJ81FDLKASv|*`ASO@CspjS_jCU9rA5WghY|qF#`69DC z}UKoS&&tq@%>~+R)0qR%@bLFGcp=Zp1__k`8~U*Gy?-8 z5dL6bU=RRe5D>}CD3jie! RI?A&GB^VxTe(KoH3;+UKG*AEl diff --git a/build/src/rtl_fm b/build/src/rtl_fm index 8d1039ae6870780fe28d84e8870d577d1337ebaa..31c245b2af16d8e7991334fd4d982b3a855e997f 100755 GIT binary patch delta 7634 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 RylK={3t{0H-lonG`9DGmsJj3F delta 7699 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 delta 198 zcmccdit)xP#tjP?MW!Zb%sSQ={3c<)sr1$($IK#o=bqTSg>eEiyY10kEI}6riJAMW|J-7A#Bn`n?s*YhuG6mb0`0d;$R$lQ9HO0XUO^ z1Rnt$lc5AJ0Undl1U~@`vk?U!0RbtKF$O;YB9n0jZvjHH;RZVc1Y&G&XOkTYT$6eV zY#9Ln0RZm-000mG001BW000zeX$=4X0{}>q0Sg}iNV6deOC$kOlWi|w0&)tIKqfM> eFn|F8aGu`?Mb&KH!dSz^C_LGa#h=l1awCg8 zqvYg;Ec%SnlP|K^GjeVgWR+)RRGVzbX3r=;xsWZN(SGwoHfv@^!^sLfxi*>jKE(Dd{W?J0w12`5T*UVtl%XOI3nTMA#k6-y#n_LyiVYD;?Qip zTLnk6z>Nae3tS^`P~cL5T>{$#Hr?e=Jo~PQGl6e@CzL?oNrAr+_>90`3w%=GV*(#0 zzV;YCKJNwid31c99^f)g6jT|zGPn4R5RBm~RbCB~BiA#(*xa|ZwZPwyWJ}!;7TOU^2 z(>y@@OqzEPcVe5(2jjTirof+Y)FwkYp0Y`G#T4^XQ-9p#iX?JaB-TrsuToFralL^w zUy)q@o4DMU6W96rw7GI0ojmqxX9GpdbB(Ab(}>!q3#(bA`6_bRh}wf&>>fJ9M(nq#M>ytCypL)lr*cb2T@ItDGZej<^~bMM&vVAP3eA$m zdy-p%WT9-Fc7;`ab0o&+`6UahpOTL=kKTz*lGXnfS%MVFt@~)U|4r-P6W<`_D{<5N ze@#zEai?U3zu>4O!3d5?ufhx1Qdn(YPjQ!Kl2=)9P*o`Zd{6W;S$ziIEVSC&$-6)8 z^`yNK@;-$Vg;wM9!a&+sIvL+EyT;3xR7^M*0`9p6=hYCAr7?+369@7%i> zuAtkcV7puc12`;8=HF>Ck;IU;10#uX9FteT0g74y%kf2*WZsyLSe=d-#8H<--^ZBi zWyr@Sw@f2-yFJDC@wgt^w^a2^+84hfZ7>gA=3GdeMg24$aeHVEF}DPnc!!=nr|~wd zT_D338vhTs5FgdJ5f2i-r|~#`OS~r?<5dFYS8vlBT=X`2BVXq)@mWQNkQOnGdx?8+ zVu6eol|tyytY4wCNQTEXzJYDTOK>Z-f5c&GtMCZ5@8H>@k02X&6?-59KQ4X=Ca|GI zfz#MkBHO>bm7F@BOkT}44XV28NFvuYs5Vk{Kg5v|#dwgsIzuEeiKj{e#89T=y60>nzdn)5RyIp86TSk@XD3jq|xUEcrbvQ!p44QosoW;MF z$+~|`$0lDjC3!pXUffG9ZBJ@0`*HPwyUD`1`oG!k1S`R(>pV%N{&m;j=4b;VOPJ<)LRZ?+?%&xW6Eu$CG!QyeyLP ze2yCfQh}9^PY2JHWYWP4!J3EFB78Go@qR+F+%k5dKYs1Ck0+UFSfxWSafy#1%xDds z4=kbW;|^LNjQ0f<=*6}m-;i5_%fK1^G}xIBi?Dd{G8n?{#eu4&bAXxYpev$&F7+6 zJx^Ck^8}{Sn$kv1^K_>){rb=~``21ef35k|7_ECC3{;`>O9HSonzuBW<>om~UAe50 zpjFV1kX{+}Kl<+sSQK@({1wcVRcw97rp-@p-Q2aQqUMK{3*UdDH;0P7b(L)3v#r6A nRf>Vn^CFHB@xmA3w?uqyOR-?JV&Jn{gmpw(eWP8gKhgake0nyB delta 3135 zcmc(hk8@L17RT>NnzkuzNk~hYyvCRCT0)wpNu_SvQKl^x!GSvMh)PF()4IE3JHSvz zyNjE$3%iOifTvFFOk<-{X6#I75QC!#ENi7IQXEm-m0cM~!YfL37TI+Nk@oGmFX?dq z1K-TM_wzmHy!-Aw=f0Z^jl$3LZ5yz#I50`jbJpHOFbNZG0hZX9$ivQ+MtE75F=W zuL}INz!wA_7x=WmCuTTIX+Jt6cnJg^5_mx1UV--tyi4F60(S}AA#fXUc&6T~1;_GPd+c0+5nuw(7uui!)xzcQDOS#12=8P2+->kNUYzTNOa!}B`N6a{ncwIyrNAgfFxHwJU@QkL(IjJis!8Lv=43hB zr!E5ao|&HJcEs~`zh{J=SYYX+3HPagPfo(%@6qSVeNUmsQSGXyhyr&+wOAr*k6}>FB+XZm%OdJ#-0tu~Ge#W#1|uIi zJ%7I1>zbCs*YE_{dF=DlTS)(z`XcIiR_Kt+nV8Zhufm{OfM%xxzrlc0hTGUg?F4o@ zCG&Cew~_xQ9(3B_6b?HjsKqg-;#;ndoXRbob~%iq{z1`QY+vFA^*m>s??tO*^L@lE zA+k_5F1QC(V{)xVLCGmk!iO_DwEI$1&#$*phDY=2Da5#pP~d?jvr|1Ns^ zEj%dM;T#T25)9y&^dfX)OL4X1X^NYe)~>Tquc}b~`JQ-|$!a^kR%~~yBk$p~*PHf6 z$=izOi|yvE#1Ea}t9Fw1f!xZ%-JdV$~CF_=S#M*QO;;>ty?_TlsOkC)~U_efyEDSGyz&OKN=Pliu) z{vU29KCbgpJVHFe8LucAcw=5MMAA_{C1~CAGrhx2@1u9}l|F~RRb=>s9&rl~5pUM{ zEXIk~>-;IYN@Qr!`6jj!FUD?a-^PAw@5N)(9>R+y#~}+}F7<*DPnP}(KEsCj3Vea> z^JT}`+uG!)rd`jr^s0vHXfoH`t1hDoAH&Fe#r!6D4W?-F8lIUSG=D{kS15ttwZRoE z^qz%LjC-r$C^{DSp%<4dxC~pd)K?9gaE(uaCAib)H8F8NAp9QVK3i!g zjirAN_0ccvjQx{AG;Zg%^{K4$47Z`9Y$;V|LzxWUBhjIm$VPQalI;;)cPs`aJkZIe!9FQIEpR~zIN}0RCz^ZD2S@>Na`1Wx; z7x01we+ou9`DQM?k+SV`W7UR^WyT8D`L zC>74-XY(@*8I9SLq;3s(cJ#Mw{?b@Il%> zo{$Y*#rr}EJcF$vz9qXuOQAUSerQuZ)L?1dQc81YU2tLjY+zP8?A+AP;XU0py0ht? z*0jx6@_}j8)6W*WL48#|V7#{SrTW}(BmFh}1@G`L`Etqz<}@T)C>?~18CjOz^K_*& zPhcvoDQ(s@Pj^bwFA!Zbf3J=7_nKdgu|(OU(sMy_WWD}ol6-L%5CO*$A hI7Y+^@5b+m_}uETaIIqEv#P;GM0$N=?Q2gN{tt%vGr<4= diff --git a/build/src/rtl_test b/build/src/rtl_test index 58a91a023032117479ec8debf6e5196bb34a2c37..28339e22cc43624c2807ffc1b4dd6cb62486c4b6 100755 GIT binary patch delta 5161 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 delta 5193 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 diff --git a/include/rtl-sdr.h b/include/rtl-sdr.h index 3ed13ae..6dd76d7 100644 --- a/include/rtl-sdr.h +++ b/include/rtl-sdr.h @@ -389,6 +389,16 @@ RTLSDR_API int rtlsdr_cancel_async(rtlsdr_dev_t *dev); */ RTLSDR_API int rtlsdr_set_bias_tee(rtlsdr_dev_t *dev, int on); +/*! + * Enable or disable any GPIO. + * \param dev the device handle given by rtlsdr_open() + * \param gpio_pin GPIO pin number for ON + * \param on 1 for GPIO on. 0 for GPIO off. + */ +RTLSDR_API int rtlsdr_set_gpio(rtlsdr_dev_t *dev, int gpio_pin, int on); + + + #ifdef __cplusplus } #endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 07d64ab..ac0ff86 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -91,7 +91,9 @@ add_executable(rtl_fm rtl_fm.c) add_executable(rtl_eeprom rtl_eeprom.c) add_executable(rtl_adsb rtl_adsb.c) add_executable(rtl_power rtl_power.c) -set(INSTALL_TARGETS rtlsdr_shared rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power) +add_executable(rtl_biast rtl_biast.c) + +set(INSTALL_TARGETS rtlsdr_shared rtlsdr_static rtl_sdr rtl_tcp rtl_test rtl_fm rtl_eeprom rtl_adsb rtl_power rtl_biast) target_link_libraries(rtl_sdr rtlsdr_shared convenience_static ${LIBUSB_LIBRARIES} @@ -121,6 +123,10 @@ target_link_libraries(rtl_power rtlsdr_shared convenience_static ${LIBUSB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ) +target_link_libraries(rtl_biast rtlsdr_shared convenience_static + ${LIBUSB_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} +) if(UNIX) target_link_libraries(rtl_fm m) target_link_libraries(rtl_adsb m) @@ -140,6 +146,7 @@ target_link_libraries(rtl_fm libgetopt_static) target_link_libraries(rtl_eeprom libgetopt_static) target_link_libraries(rtl_adsb libgetopt_static) target_link_libraries(rtl_power libgetopt_static) +target_link_libraries(rtl_biast libgetopt_static) set_property(TARGET rtl_sdr APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" ) set_property(TARGET rtl_tcp APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" ) set_property(TARGET rtl_test APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" ) @@ -147,6 +154,7 @@ set_property(TARGET rtl_fm APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" ) set_property(TARGET rtl_eeprom APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" ) set_property(TARGET rtl_adsb APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" ) set_property(TARGET rtl_power APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" ) +set_property(TARGET rtl_biast APPEND PROPERTY COMPILE_DEFINITIONS "rtlsdr_STATIC" ) endif() ######################################################################## # Install built library files & utilities diff --git a/src/librtlsdr.c b/src/librtlsdr.c index 213e96c..aa75415 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -125,6 +125,7 @@ struct rtlsdr_dev { int dev_lost; int driver_active; unsigned int xfer_errors; + int force_bt; }; void rtlsdr_set_gpio_bit(rtlsdr_dev_t *dev, uint8_t gpio, int val); @@ -368,6 +369,7 @@ static rtlsdr_dongle_t known_devices[] = { #define BULK_TIMEOUT 0 #define EEPROM_ADDR 0xa0 +#define EEPROM_SIZE 256 enum usb_reg { USB_SYSCTL = 0x2000, @@ -1447,6 +1449,7 @@ int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index) struct libusb_device_descriptor dd; uint8_t reg; ssize_t cnt; + uint8_t buf[EEPROM_SIZE]; dev = malloc(sizeof(rtlsdr_dev_t)); if (NULL == dev) @@ -1609,6 +1612,7 @@ found: /* enable spectrum inversion */ rtlsdr_demod_write_reg(dev, 1, 0x15, 0x01, 1); + break; case RTLSDR_TUNER_UNKNOWN: fprintf(stderr, "No supported tuner found\n"); @@ -1618,6 +1622,14 @@ found: break; } + + /* Hack to force the Bias T to always be on if we set the IR-Endpoint bit in the EEPROM to 0. */ + //force_bt = 0; + r = rtlsdr_read_eeprom(dev, buf, 0, EEPROM_SIZE); + dev->force_bt = (buf[7] & 0x02) ? 0 : 1; + if(dev->force_bt) rtlsdr_set_gpio(dev, 0, 1); + + if (dev->tuner->init) r = dev->tuner->init(dev); @@ -2014,8 +2026,24 @@ int rtlsdr_set_bias_tee(rtlsdr_dev_t *dev, int on) if (!dev) return -1; + if(dev->force_bt) return 1; // If force_bt is on from the EEPROM, do not allow bias tee to turn off + rtlsdr_set_gpio_output(dev, 0); rtlsdr_set_gpio_bit(dev, 0, on); return 0; } + +int rtlsdr_set_gpio(rtlsdr_dev_t *dev, int gpio_pin, int on) +{ + if (!dev) + return -1; + + if(dev->force_bt) return 1; // If force_bt is on from the EEPROM, do not allow bias tee to turn off + + rtlsdr_set_gpio_output(dev, gpio_pin); + rtlsdr_set_gpio_bit(dev, gpio_pin, on); + + return 1; +} + diff --git a/src/rtl_biast.c b/src/rtl_biast.c new file mode 100644 index 0000000..6018450 --- /dev/null +++ b/src/rtl_biast.c @@ -0,0 +1,125 @@ +/* + * rtl-sdr, turns your Realtek RTL2832 based DVB dongle into a SDR receiver + * rtl_eeprom, EEPROM modification tool + * Copyright (C) 2012 by Steve Markgraf + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include + +#ifndef _WIN32 +#include +#else +#include +#include "getopt/getopt.h" +#endif + +#include "rtl-sdr.h" +#include "convenience/convenience.h" + +#define EEPROM_SIZE 256 +#define MAX_STR_SIZE 256 +#define STR_OFFSET 0x09 + +static rtlsdr_dev_t *dev = NULL; + +typedef struct rtlsdr_config { + uint16_t vendor_id; + uint16_t product_id; + char manufacturer[MAX_STR_SIZE]; + char product[MAX_STR_SIZE]; + char serial[MAX_STR_SIZE]; + int have_serial; + int enable_ir; + int remote_wakeup; +} rtlsdr_config_t; + + +void usage(void) +{ + fprintf(stderr, + "rtl_biast, a tool for turning the RTL-SDR.com \n" + "bias tee or any GPIO ON and OFF. Example to turn on the \n" + "bias tee: rtl_biast -d 0 -b 1\n" + "Any GPIO: rtl_biast -d 0 -g 1 -b 1\n\n" + "Usage:\n" + "\t[-d device_index (default: 0)]\n" + "\t[-b bias_on (default: 0)]\n" + "\t[-g GPIO select (default: 0)]\n"); + exit(1); +} + +int main(int argc, char **argv) +{ + int i, r, opt; + int dev_index = 0; + int dev_given = 0; + uint32_t bias_on = 0; + uint32_t gpio_pin = 0; + int device_count; + char *filename = NULL; + FILE *file = NULL; + char *manuf_str = NULL; + char *product_str = NULL; + char *serial_str = NULL; + uint8_t buf[EEPROM_SIZE]; + rtlsdr_config_t conf; + int flash_file = 0; + int default_config = 0; + int change = 0; + int ir_endpoint = 0; + char ch; + + while ((opt = getopt(argc, argv, "d:b:g:h?")) != -1) { + switch (opt) { + case 'd': + dev_index = verbose_device_search(optarg); + dev_given = 1; + break; + case 'b': + bias_on = atoi(optarg); + break; + case 'g': + gpio_pin = atoi(optarg); + break; + default: + usage(); + break; + } + } + + if (!dev_given) { + dev_index = verbose_device_search("0"); + } + + if (dev_index < 0) { + exit(1); + } + + r = rtlsdr_open(&dev, dev_index); + + rtlsdr_set_gpio(dev, gpio_pin, bias_on); + //rtlsdr_set_bias_tee(dev, bias_on); + + //rtlsdr_set_direct_sampling(dev, 1); + +exit: + rtlsdr_close(dev); + + return r >= 0 ? r : -r; +} + From 9b900be7c6fe2318b1fee770baa10bcebdf47d79 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 18 Oct 2019 05:10:08 +0100 Subject: [PATCH 06/45] fix EEPROM always on bias tee --- build/src/librtlsdr.a | Bin 98082 -> 98130 bytes build/src/librtlsdr.so.0.6git | Bin 92264 -> 92272 bytes src/librtlsdr.c | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/src/librtlsdr.a b/build/src/librtlsdr.a index 91ab6460f2eac224c4ad6cb76e3253d73fed68a4..145659595c766707530022fe173be37457945e86 100644 GIT binary patch delta 3819 zcmb`Je^6A{701urA7lfIT?G|!EgM0l#?*&8!3s?nLn|HabgiV?gv3qN7IlGDQLw=* z2_)krkYF#)(izOY5+^zhlcBS8LTpsp*coR^TH4Tz6Mux=^+ikkK~p+IE3*9_-laii z(!aVhkI(&{bMCq4o_qH#9pm=DjN7|Th~N`MXa7HsNPUU^`^;ZM;>(^DZ-c@j-fI88?R&RY1$I=19uZ<;P?^!uoi;N9G@RROqti!1Aw2M3YyK+gtQ# z&kJGWxxirD;?v_cq9KRYY6$O(F*|LFzAXQAV0}gDim+k#=uz*iFfvJFJdyZJXnNd= z*&bw1_UX}_`oh^H=ZY$?$xPYbdmW+aiwbYUf;P4U`^ zcpiU0{cd3a1^UO5g#)gT0 z5HH3AUgpn<#8AV7db9%%rxy8o+KbX!JM4zD2~O-dN*+D#a5cv!>pUY<4i+rVhgWnB z#$zDw?kq^qSD5N^j->zKE_-T0_~s0G@!&UP#!p{=Dp2&$-^lBYW%PeHR)9K6@{SsU zmvQNFfret7mR{5x;|*B~_4xWM*inLwjv7u^v*GYG8yVDmoy+Rh!bUIVaV%-x*nGLZ zE=#U`c9zr^%n@bs71w+RnsbUskIPdox410B&&~}FPt-UVzYPj)vRa~C3|)AJRf%qt z_=qZTPtom9`6O&OF-t&?ih!QR%kn8(mg(`db9$7^=5o1Iht@n%ZaPY}u4#yIxm;?U z?{@O1U({Q*V4YcKD%UAcr@Oy7HZ0G&=9d}}aG~^D*jY0jHwui$;5*joQ zn7QDfq=G=9$hKJmFvWyyjEGT z;16g@x^~PUpB_(wkBSP9W}OKd4cWv zY^Lwk@x)NcDzmgKRa%Mi*>QfFtJNr!;i|{xjjaqDMVOh>`+>0t&*VW}l8HdRI4@TQ z)`>12&uB+w%hJLISNvB)_68Quqc542q)itMU3s z^61gFDX$OQt|9Z@>rsw-EFsJHtPw%^#-4)U7@Pxp!iEdUMrLxtkg7E_aRBMq<)|`K zLRXGz<;cKRj?MLxQl7)tRC#(xXm zz_*+Wo~>duAusJ+7>vNx?Ft)X9<#oFjJdx3D5D+Y_msUy*~?&W#JEq{b!9Js-H&mT zvL9A<4faxu+m$__>~7c#wXi(2?^`o)o2eWZw+>IPRrc@8{Cc;As08Lwm?&q2Zb0)( zWdL-*o`dlP_{uS^w?@Y5Ube}P8;(a_dcM>Wd9JZNIp}{1Arl`#sbJj{&6xtvm|h~~ zpQ73C`O&?8ZHi|9`EB?5FHO<#XVdWZdjo7czR;Xtq)NK(W<&;F%X9?s%S5v*g5JUR zfAYgIP4`bKbNl`9x0DgxfSKd3Li5J(Q#7IfIc&OR$$xh& zO5VDysv_XuQN3fk%zERKss9qmwH+n$SIM&@vyVSNGgyoRaQ}{I3-eu~?M(cv`I#}I zYUUMmgn143l=&te90aqNc?`uX20+W}n8(B}Ync^9o$MbX+VC`p6K`bRq#!xBV$hCu zFpr@S<}IQw=53;LN*DW}hp`Y7g|smLj@BxDNiiKq!}C4Nn?!}o&&{uh1?{Yc<^pS( z6+v7}4)_c^=QF~NIu)-oe@&E*U9i1YQD>si9>qS86ZSLl3^1|d3rgGY)!{saOytoO z&ohHaG{^&R1mr}cOiUhQA`#(kuy%vox>Dvv?1*^@my>x0@k|_<^T*&76wXAaRxzWv zpv=pd&%|%E9}K$3uoE`CiMIf=2MK;+>SD!K#U8~G#q@GB&Z`(u>{RSiyvjreMws2W z>^n`a+KKb$g-h80wkh@~I(NZ7K$OA!kjTqKT$5t@Zc}>|>zUYL3lkmfWMck##azD` z?^8VK$N6)@L1kEmcC+5DSkFYFHpP?7f8kOxk(eq?u4W=`gVLqUyEr1H+m*jtu}|@8 zPz|WcOq8Qo$h?Mc0~3h@iiZ_-#U8~0CJGv4a;rhUGowr^?uMc*0F685U}6(Nry95v z(-kwAn3&5%qGigiDXvmn%|u+0(#1@~mngkK(W~sGN^dcFAC*lEBFesPiH6f zgwWVI(sz2HXp;@6mxvzu*6Agd&b^_o6fq}sD@C|Or@RA4nan=3#L`z6((~YW)hS#S uaVVra#bV}go>(k2`Tm(Dc26_@9g?@tWLvbZP*Ey^|F~HsMYOY@pZyP+`oBp4 delta 3909 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 O&X#6*!7*yK4Ee^9& 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 diff --git a/src/librtlsdr.c b/src/librtlsdr.c index aa75415..a3eebad 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -2026,7 +2026,7 @@ int rtlsdr_set_bias_tee(rtlsdr_dev_t *dev, int on) if (!dev) return -1; - if(dev->force_bt) return 1; // If force_bt is on from the EEPROM, do not allow bias tee to turn off + if(dev->force_bt) on = 1; // If force_bt is on from the EEPROM, do not allow bias tee to turn off rtlsdr_set_gpio_output(dev, 0); rtlsdr_set_gpio_bit(dev, 0, on); @@ -2039,7 +2039,7 @@ int rtlsdr_set_gpio(rtlsdr_dev_t *dev, int gpio_pin, int on) if (!dev) return -1; - if(dev->force_bt) return 1; // If force_bt is on from the EEPROM, do not allow bias tee to turn off + if(dev->force_bt) on = 1; // If force_bt is on from the EEPROM, do not allow bias tee to turn off rtlsdr_set_gpio_output(dev, gpio_pin); rtlsdr_set_gpio_bit(dev, gpio_pin, on); From 6f9efc93436808a13bfcaefd2f6bc0b38cb339d3 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 18 Oct 2019 06:55:36 +0100 Subject: [PATCH 07/45] lband opts --- build/install_manifest.txt | 1 - build/src/librtlsdr.a | Bin 98130 -> 98126 bytes build/src/librtlsdr.so.0.6git | Bin 92272 -> 92272 bytes src/tuner_r82xx.c | 14 +++++++++++--- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/build/install_manifest.txt b/build/install_manifest.txt index d22899b..23b4dc6 100644 --- a/build/install_manifest.txt +++ b/build/install_manifest.txt @@ -1,4 +1,3 @@ -/etc/udev/rules.d/rtl-sdr.rules /usr/local/lib/pkgconfig/librtlsdr.pc /usr/local/include/rtl-sdr.h /usr/local/include/rtl-sdr_export.h diff --git a/build/src/librtlsdr.a b/build/src/librtlsdr.a index 145659595c766707530022fe173be37457945e86..b8dcfbe584e6cc4377fec3ff3c31325065fcf1f6 100644 GIT binary patch delta 2305 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 W1!= vco_min) && @@ -540,7 +545,7 @@ static int r82xx_set_pll(struct r82xx_priv *priv, uint32_t freq) if (!i) { /* Didn't lock. Increase VCO current */ - rc = r82xx_write_reg_mask(priv, 0x12, 0x00, 0xe0); + rc = r82xx_write_reg_mask(priv, 0x12, 0x06, 0xff); if (rc < 0) return rc; } @@ -663,6 +668,9 @@ static int r82xx_sysfreq_sel(struct r82xx_priv *priv, uint32_t freq, rc = r82xx_write_reg_mask(priv, 0x11, cp_cur, 0x38); if (rc < 0) return rc; + + // RTLSDRBLOG. Improve L-band performance by setting PLL drop out to 2.0v + div_buf_cur = 0xa0; rc = r82xx_write_reg_mask(priv, 0x17, div_buf_cur, 0x30); if (rc < 0) return rc; @@ -968,7 +976,7 @@ int r82xx_set_gain(struct r82xx_priv *priv, int set_manual_gain, int gain) return rc; /* set fixed VGA gain for now (16.3 dB) */ - rc = r82xx_write_reg_mask(priv, 0x0c, 0x08, 0x9f); + rc = r82xx_write_reg_mask(priv, 0x0c, 0x08, 0x9f); //init val 0x08 0x0c works well at 1.7 if (rc < 0) return rc; From 8a3d6a919fd9452c1cd40a4323af2ded80b68e83 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 1 Nov 2019 15:42:27 +1300 Subject: [PATCH 08/45] offset tuning -> bias tee hack Use the offset tuning button to enable the bias tee on the V3. Offset tuning is not used for the R820T so this is okay and allows us to toggle the bias tee on software that hasn't implemented specific bias tee controls. --- src/librtlsdr.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/librtlsdr.c b/src/librtlsdr.c index a3eebad..05a380e 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -1249,6 +1249,9 @@ int rtlsdr_set_offset_tuning(rtlsdr_dev_t *dev, int on) if ((dev->tuner_type == RTLSDR_TUNER_R820T) || (dev->tuner_type == RTLSDR_TUNER_R828D)) + // RTL-SDR-BLOG Hack, enables us to turn on the bias tee by clicking on "offset tuning" in software that doesn't have specified bias tee support. + // Offset tuning is not used for R820T devices so it is no problem. + rtlsdr_set_gpio(dev, 0, on); return -2; if (dev->direct_sampling) From 4f6c1b2e98c8d3c223fdc68232f99cac108823e8 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 1 Nov 2019 17:33:14 +1300 Subject: [PATCH 09/45] Enable EEPROM to force direct sampling mode Re-purpose remote-enabled EEPROM flag to determine if direct sampling mode should be forced ON. Useful for apps that don't have any direct sampling mode settings in their GUI. --- src/librtlsdr.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/librtlsdr.c b/src/librtlsdr.c index 05a380e..f567f01 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -126,6 +126,7 @@ struct rtlsdr_dev { int driver_active; unsigned int xfer_errors; int force_bt; + int force_ds; }; void rtlsdr_set_gpio_bit(rtlsdr_dev_t *dev, uint8_t gpio, int val); @@ -1175,6 +1176,8 @@ int rtlsdr_set_direct_sampling(rtlsdr_dev_t *dev, int on) if (!dev) return -1; + if(dev->force_ds) on = 2; + if (on) { if (dev->tuner && dev->tuner->exit) { rtlsdr_set_i2c_repeater(dev, 1); @@ -1247,11 +1250,12 @@ int rtlsdr_set_offset_tuning(rtlsdr_dev_t *dev, int on) if (!dev) return -1; + // RTL-SDR-BLOG Hack, enables us to turn on the bias tee by clicking on "offset tuning" in software that doesn't have specified bias tee support. + // Offset tuning is not used for R820T devices so it is no problem. + rtlsdr_set_gpio(dev, 0, on); + if ((dev->tuner_type == RTLSDR_TUNER_R820T) || (dev->tuner_type == RTLSDR_TUNER_R828D)) - // RTL-SDR-BLOG Hack, enables us to turn on the bias tee by clicking on "offset tuning" in software that doesn't have specified bias tee support. - // Offset tuning is not used for R820T devices so it is no problem. - rtlsdr_set_gpio(dev, 0, on); return -2; if (dev->direct_sampling) @@ -1619,18 +1623,20 @@ found: break; case RTLSDR_TUNER_UNKNOWN: fprintf(stderr, "No supported tuner found\n"); - rtlsdr_set_direct_sampling(dev, 1); + rtlsdr_set_direct_sampling(dev, 2); break; default: break; } - /* Hack to force the Bias T to always be on if we set the IR-Endpoint bit in the EEPROM to 0. */ - //force_bt = 0; + /* Hack to force the Bias T to always be on if we set the IR-Endpoint bit in the EEPROM to 0. Default on EEPROM is 1. */ r = rtlsdr_read_eeprom(dev, buf, 0, EEPROM_SIZE); - dev->force_bt = (buf[7] & 0x02) ? 0 : 1; + dev->force_bt = (buf[7] & 0x02) ? 0 : 1; if(dev->force_bt) rtlsdr_set_gpio(dev, 0, 1); + /* Hack to force direct sampling mode to always be on if we set the remote-enabled bit in the EEPROM to 1. Default on EEPROM is 0. */ + dev->force_ds = (buf[7] & 0x01) ? 1 : 0; + if(dev->force_ds) dev->tuner_type = RTLSDR_TUNER_UNKNOWN; if (dev->tuner->init) @@ -2049,4 +2055,3 @@ int rtlsdr_set_gpio(rtlsdr_dev_t *dev, int gpio_pin, int on) return 1; } - From 4ff1c4f74f1c2430e32cc524fc3946616ff28093 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 1 Nov 2019 17:34:12 +1300 Subject: [PATCH 10/45] Enable EEPROM to force direct sampling mode Re-purpose remote-enabled EEPROM flag to determine if direct sampling mode should be forced ON. Useful for apps that don't have any direct sampling mode settings in their GUI. --- src/rtl_eeprom.c | 81 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/src/rtl_eeprom.c b/src/rtl_eeprom.c index f562d73..ca35f67 100644 --- a/src/rtl_eeprom.c +++ b/src/rtl_eeprom.c @@ -43,8 +43,8 @@ typedef struct rtlsdr_config { char product[MAX_STR_SIZE]; char serial[MAX_STR_SIZE]; int have_serial; - int enable_ir; - int remote_wakeup; + int enable_bt; + int direct_sampling_on; } rtlsdr_config_t; void dump_config(rtlsdr_config_t *conf) @@ -57,10 +57,10 @@ void dump_config(rtlsdr_config_t *conf) fprintf(stderr, "Serial number:\t\t%s\n", conf->serial); fprintf(stderr, "Serial number enabled:\t"); fprintf(stderr, conf->have_serial ? "yes\n": "no\n"); - fprintf(stderr, "IR endpoint enabled:\t"); - fprintf(stderr, conf->enable_ir ? "yes\n": "no\n"); - fprintf(stderr, "Remote wakeup enabled:\t"); - fprintf(stderr, conf->remote_wakeup ? "yes\n": "no\n"); + fprintf(stderr, "Bias-T Always ON:\t"); + fprintf(stderr, conf->enable_bt ? "no\n": "yes\n"); // 0 is ON for this + fprintf(stderr, "Direct Sampling Always ON:\t"); + fprintf(stderr, conf->direct_sampling_on ? "yes\n": "no\n"); fprintf(stderr, "__________________________________________\n"); } @@ -74,7 +74,8 @@ void usage(void) "\t[-m set manufacturer string]\n" "\t[-p set product string]\n" "\t[-s set serial number string]\n" - "\t[-i <0,1> disable/enable IR-endpoint]\n" + "\t[-b <\"y\",\"n\"> enable/disable bias tee always ON]\n" + "\t[-q <\"y\",\"n\"> enable/disable direct sampling always ON]\n" "\t[-g generate default config and write to device]\n" "\t[ can be one of:]\n" "\t[ realtek\t\tRealtek default (as without EEPROM)]\n" @@ -139,8 +140,8 @@ int parse_eeprom_to_conf(rtlsdr_config_t *conf, uint8_t *dat) conf->vendor_id = dat[2] | (dat[3] << 8); conf->product_id = dat[4] | (dat[5] << 8); conf->have_serial = (dat[6] == 0xa5) ? 1 : 0; - conf->remote_wakeup = (dat[7] & 0x01) ? 1 : 0; - conf->enable_ir = (dat[7] & 0x02) ? 1 : 0; + conf->direct_sampling_on = (dat[7] & 0x01) ? 1 : 0; + conf->enable_bt = (dat[7] & 0x02) ? 1 : 0; pos = get_string_descriptor(STR_OFFSET, dat, conf->manufacturer); pos = get_string_descriptor(pos, dat, conf->product); @@ -161,8 +162,8 @@ int gen_eeprom_from_conf(rtlsdr_config_t *conf, uint8_t *dat) dat[5] = (conf->product_id >> 8) & 0xff; dat[6] = conf->have_serial ? 0xa5 : 0x00; dat[7] = 0x14; - dat[7] |= conf->remote_wakeup ? 0x01 : 0x00; - dat[7] |= conf->enable_ir ? 0x02 : 0x00; + dat[7] |= conf->direct_sampling_on ? 0x01 : 0x00; + dat[7] |= conf->enable_bt ? 0x02 : 0x00; dat[8] = 0x02; pos = set_string_descriptor(STR_OFFSET, dat, conf->manufacturer); @@ -194,8 +195,8 @@ void gen_default_conf(rtlsdr_config_t *conf, int config) strcpy(conf->product, "RTL2832U DVB-T"); strcpy(conf->serial, "0"); conf->have_serial = 1; - conf->enable_ir = 0; - conf->remote_wakeup = 1; + conf->enable_bt = 0; + conf->direct_sampling_on = 1; break; case REALTEK_EEPROM: fprintf(stderr, "Realtek default OEM with EEPROM\n"); @@ -205,8 +206,8 @@ void gen_default_conf(rtlsdr_config_t *conf, int config) strcpy(conf->product, "RTL2838UHIDIR"); strcpy(conf->serial, "00000001"); conf->have_serial = 1; - conf->enable_ir = 1; - conf->remote_wakeup = 0; + conf->enable_bt = 1; + conf->direct_sampling_on = 0; break; case TERRATEC_NOXON: fprintf(stderr, "Terratec NOXON DAB Stick\n"); @@ -216,8 +217,8 @@ void gen_default_conf(rtlsdr_config_t *conf, int config) strcpy(conf->product, "DAB Stick"); strcpy(conf->serial, "0"); conf->have_serial = 1; - conf->enable_ir = 0; - conf->remote_wakeup = 1; + conf->enable_bt = 0; + conf->direct_sampling_on = 1; break; case TERRATEC_T_BLACK: fprintf(stderr, "Terratec T Stick Black\n"); @@ -227,8 +228,8 @@ void gen_default_conf(rtlsdr_config_t *conf, int config) strcpy(conf->product, "RTL2838UHIDIR"); strcpy(conf->serial, "00000001"); conf->have_serial = 1; - conf->enable_ir = 1; - conf->remote_wakeup = 0; + conf->enable_bt = 1; + conf->direct_sampling_on = 0; break; case TERRATEC_T_PLUS: fprintf(stderr, "Terratec ran T Stick+\n"); @@ -238,8 +239,8 @@ void gen_default_conf(rtlsdr_config_t *conf, int config) strcpy(conf->product, "RTL2838UHIDIR"); strcpy(conf->serial, "00000001"); conf->have_serial = 1; - conf->enable_ir = 1; - conf->remote_wakeup = 0; + conf->enable_bt = 1; + conf->direct_sampling_on = 0; break; default: break; @@ -261,10 +262,11 @@ int main(int argc, char **argv) int flash_file = 0; int default_config = 0; int change = 0; - int ir_endpoint = 0; + int enable_bt = 0; + int direct_sampling_on = 0; char ch; - while ((opt = getopt(argc, argv, "d:m:p:s:i:g:w:r:h?")) != -1) { + while ((opt = getopt(argc, argv, "d:m:p:s:b:q:g:w:r:h?")) != -1) { switch (opt) { case 'd': dev_index = atoi(optarg); @@ -281,8 +283,30 @@ int main(int argc, char **argv) serial_str = optarg; change = 1; break; - case 'i': - ir_endpoint = (atoi(optarg) > 0) ? 1 : -1; + case 'b': + if(strcmp(optarg, "y") == 0) + { + enable_bt = 1; + } + else if(strcmp(optarg, "n") == 0) + { + enable_bt = -1; + } + //enable_bt = (!strcmp(optarg, "y")) ? 1 : -1; + //ir_endpoint = (atoi(optarg) > 0) ? 1 : -1; + change = 1; + break; + case 'q': + if(strcmp(optarg, "y") == 0) + { + direct_sampling_on = 1; + } + else if(strcmp(optarg, "n") == 0) + { + direct_sampling_on = -1; + } + //direct_sampling_on = (!strcmp(optarg, "y")) ? 1 : -1; + //direct_sampling_on = (atoi(optarg) > 0) ? 1 : -1; change = 1; break; case 'g': @@ -380,8 +404,11 @@ int main(int argc, char **argv) strncpy((char*)&conf.serial, serial_str, MAX_STR_SIZE); } - if (ir_endpoint != 0) - conf.enable_ir = (ir_endpoint > 0) ? 1 : 0; + if (enable_bt != 0) + conf.enable_bt = (enable_bt > 0) ? 0 : 1; + + if (direct_sampling_on != 0) + conf.direct_sampling_on = (direct_sampling_on > 0) ? 1 : 0; if (!change) goto exit; From 31ad06018f43c3aff483607761ea12a35cfccd96 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 1 Nov 2019 17:36:54 +1300 Subject: [PATCH 11/45] Update README --- README | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README b/README index d329b20..d680972 100644 --- a/README +++ b/README @@ -11,4 +11,6 @@ Modified RTL-SDR Blog Version 2) RTL_TCP ring buffer enhancement by Stephen Blinick https://www.rtl-sdr.com/significantly-improving-rtl_tcps-performance-with-ring-buffers/ 3) Enabled direct sampling for rtl_tcp 4) rtl_biast program added, including the ability to turn on/off any GPIO -5) Hack to force the bias tee to always be on by setting the unused IR endpoint bit to 0 in the EEPROM with "rtl_eeprom -i 0" +5) Hack to force the bias tee to always be on by setting the unused IR endpoint bit to 0 in the EEPROM. Example to force the BT to be always ON "rtl_eeprom -b y", to remove forced BT "rtl_eeprom -b n" +6) Hack to force direct sampling to be always on by setting the unused remote-enabled bit to 1 in the EEPROM. Example to force direct samping always "rtl_eeprom -q y". To remove forced direct sampling "rtl_eeprom -q n" +7) Repurposed "offset tuning" to toggle bias tee ON/OFF. We can now use the "offset tuning" button in SDR# and other programs to toggle the bias tee if there is no specific button in the GUI. From 47dc55765b1280641b2336ea542fd3923d16588b Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 1 Nov 2019 18:15:47 +1300 Subject: [PATCH 12/45] Update README --- README | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/README b/README index d680972..aa7906b 100644 --- a/README +++ b/README @@ -14,3 +14,27 @@ Modified RTL-SDR Blog Version 5) Hack to force the bias tee to always be on by setting the unused IR endpoint bit to 0 in the EEPROM. Example to force the BT to be always ON "rtl_eeprom -b y", to remove forced BT "rtl_eeprom -b n" 6) Hack to force direct sampling to be always on by setting the unused remote-enabled bit to 1 in the EEPROM. Example to force direct samping always "rtl_eeprom -q y". To remove forced direct sampling "rtl_eeprom -q n" 7) Repurposed "offset tuning" to toggle bias tee ON/OFF. We can now use the "offset tuning" button in SDR# and other programs to toggle the bias tee if there is no specific button in the GUI. + +*** +To install: +*** + +sudo apt update +sudo apt install libusb-1.0-0-dev git cmake +git clone git://git.osmocom.org/rtl-sdr.git +cd rtl-sdr/ +mkdir build +cd build +cmake ../ -DINSTALL_UDEV_RULES=ON +make +sudo make install +sudo cp ../rtl-sdr.rules /etc/udev/rules.d/ +sudo ldconfig + +echo 'blacklist dvb_usb_rtl28xxu' | sudo tee --append /etc/modprobe.d/blacklist-dvb_usb_rtl28xxu.conf + +***NOTE*** +If you previously installed librtlsdr-dev via the package manager you should remove this first BEFORE installing these drivers. To completely remove these drivers use the following commands + +sudo apt purge librtlsdr* +sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* /usr/local/include/rtl-sdr* From 0293c8de9f7fba6e11b67956849d297a064e709c Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 1 Nov 2019 18:21:23 +1300 Subject: [PATCH 13/45] Update README --- README | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README b/README index aa7906b..ea2e0a0 100644 --- a/README +++ b/README @@ -15,6 +15,8 @@ Modified RTL-SDR Blog Version 6) Hack to force direct sampling to be always on by setting the unused remote-enabled bit to 1 in the EEPROM. Example to force direct samping always "rtl_eeprom -q y". To remove forced direct sampling "rtl_eeprom -q n" 7) Repurposed "offset tuning" to toggle bias tee ON/OFF. We can now use the "offset tuning" button in SDR# and other programs to toggle the bias tee if there is no specific button in the GUI. +BIAS TEE NOTE: Always take care that you do not enable the bias tee when the device is connected to a short circuited antenna unless there is an inline LNA. However. if you did by accident, don't worry as the circuit is dually protected with a self-resetting thermal fuse and built in protection on the LDO. Just try not to short it out for days at a time, otherwise you could eventually degrade the thermal fuse. + *** To install: *** From dd0759fc52efb63cee7b54d162ab02ddc6e961c6 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 1 Nov 2019 18:28:17 +1300 Subject: [PATCH 14/45] Update README --- README | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/README b/README index ea2e0a0..5b7e16f 100644 --- a/README +++ b/README @@ -5,7 +5,11 @@ turns your Realtek RTL2832 based DVB dongle into a SDR receiver For more information see: https://osmocom.org/projects/rtl-sdr/wiki +********************************************************************** + +***************************** Modified RTL-SDR Blog Version +***************************** 1) VCO PLL current fix - Improves stability at frequencies above ~1.5 GHz https://www.rtl-sdr.com/beta-testing-a-modified-rtl-sdr-driver-for-l-band-heat-issues/ 2) RTL_TCP ring buffer enhancement by Stephen Blinick https://www.rtl-sdr.com/significantly-improving-rtl_tcps-performance-with-ring-buffers/ @@ -17,9 +21,15 @@ Modified RTL-SDR Blog Version BIAS TEE NOTE: Always take care that you do not enable the bias tee when the device is connected to a short circuited antenna unless there is an inline LNA. However. if you did by accident, don't worry as the circuit is dually protected with a self-resetting thermal fuse and built in protection on the LDO. Just try not to short it out for days at a time, otherwise you could eventually degrade the thermal fuse. -*** -To install: -*** +******************** +Installation (Linux): +******************** + +***NOTE*** +If you previously installed librtlsdr-dev via the package manager you should remove this first BEFORE installing these drivers. To completely remove these drivers use the following commands + +sudo apt purge librtlsdr* +sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* /usr/local/include/rtl-sdr* sudo apt update sudo apt install libusb-1.0-0-dev git cmake @@ -35,8 +45,8 @@ sudo ldconfig echo 'blacklist dvb_usb_rtl28xxu' | sudo tee --append /etc/modprobe.d/blacklist-dvb_usb_rtl28xxu.conf -***NOTE*** -If you previously installed librtlsdr-dev via the package manager you should remove this first BEFORE installing these drivers. To completely remove these drivers use the following commands +*********************** +Installation (Windows): +*********************** -sudo apt purge librtlsdr* -sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* /usr/local/include/rtl-sdr* +Download the Release.zip file. Extract the rtlsdr.dll file to the SDR# folder, or whatever software is using it. From c868a614cb34f1ba6f2624b1ddf8167dd93517d8 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 1 Nov 2019 18:37:57 +1300 Subject: [PATCH 15/45] Remove build folder --- build/install_manifest.txt | 15 --------------- build/src/libconvenience_static.a | Bin 7594 -> 0 bytes build/src/librtlsdr.a | Bin 98126 -> 0 bytes build/src/librtlsdr.so | 1 - build/src/librtlsdr.so.0 | 1 - build/src/librtlsdr.so.0.6git | Bin 92272 -> 0 bytes build/src/rtl_adsb | Bin 24604 -> 0 bytes build/src/rtl_biast | Bin 14528 -> 0 bytes build/src/rtl_eeprom | Bin 17772 -> 0 bytes build/src/rtl_fm | Bin 39772 -> 0 bytes build/src/rtl_power | Bin 30040 -> 0 bytes build/src/rtl_sdr | Bin 19156 -> 0 bytes build/src/rtl_tcp | Bin 24868 -> 0 bytes build/src/rtl_test | Bin 24680 -> 0 bytes 14 files changed, 17 deletions(-) delete mode 100644 build/install_manifest.txt delete mode 100644 build/src/libconvenience_static.a delete mode 100644 build/src/librtlsdr.a delete mode 120000 build/src/librtlsdr.so delete mode 120000 build/src/librtlsdr.so.0 delete mode 100755 build/src/librtlsdr.so.0.6git delete mode 100755 build/src/rtl_adsb delete mode 100755 build/src/rtl_biast delete mode 100755 build/src/rtl_eeprom delete mode 100755 build/src/rtl_fm delete mode 100755 build/src/rtl_power delete mode 100755 build/src/rtl_sdr delete mode 100755 build/src/rtl_tcp delete mode 100755 build/src/rtl_test diff --git a/build/install_manifest.txt b/build/install_manifest.txt deleted file mode 100644 index 23b4dc6..0000000 --- a/build/install_manifest.txt +++ /dev/null @@ -1,15 +0,0 @@ -/usr/local/lib/pkgconfig/librtlsdr.pc -/usr/local/include/rtl-sdr.h -/usr/local/include/rtl-sdr_export.h -/usr/local/lib/librtlsdr.so.0.6git -/usr/local/lib/librtlsdr.so.0 -/usr/local/lib/librtlsdr.so -/usr/local/lib/librtlsdr.a -/usr/local/bin/rtl_sdr -/usr/local/bin/rtl_tcp -/usr/local/bin/rtl_test -/usr/local/bin/rtl_fm -/usr/local/bin/rtl_eeprom -/usr/local/bin/rtl_adsb -/usr/local/bin/rtl_power -/usr/local/bin/rtl_biast \ No newline at end of file diff --git a/build/src/libconvenience_static.a b/build/src/libconvenience_static.a deleted file mode 100644 index 1b5225418eb37ce5b509494680c54c2251712895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7594 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 A^Z)<= diff --git a/build/src/librtlsdr.so b/build/src/librtlsdr.so deleted file mode 120000 index 3b02137..0000000 --- a/build/src/librtlsdr.so +++ /dev/null @@ -1 +0,0 @@ -librtlsdr.so.0 \ No newline at end of file diff --git a/build/src/librtlsdr.so.0 b/build/src/librtlsdr.so.0 deleted file mode 120000 index 5a81ec4..0000000 --- a/build/src/librtlsdr.so.0 +++ /dev/null @@ -1 +0,0 @@ -librtlsdr.so.0.6git \ No newline at end of file diff --git a/build/src/librtlsdr.so.0.6git b/build/src/librtlsdr.so.0.6git deleted file mode 100755 index 23d227872b041efe338295cc4d043a0f5cf50421..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92272 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 diff --git a/build/src/rtl_adsb b/build/src/rtl_adsb deleted file mode 100755 index 3d041b9a37f54ca04a8b7d5d0067f94f7e604cd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24604 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 URCc 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 Ym1(D-Q_Gu$w#iqqn28yB)CAvu11}j_umAu6 diff --git a/build/src/rtl_eeprom b/build/src/rtl_eeprom deleted file mode 100755 index 7114de2683de065feffb14d3375d4d31005a23bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17772 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 diff --git a/build/src/rtl_fm b/build/src/rtl_fm deleted file mode 100755 index 31c245b2af16d8e7991334fd4d982b3a855e997f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39772 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

  • hT?3E|dk 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 diff --git a/build/src/rtl_sdr b/build/src/rtl_sdr deleted file mode 100755 index 41e5764493658be5804bcda36abd7a38b9436f90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19156 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 Px{-7Eak8dT?GgHayq*)( diff --git a/build/src/rtl_tcp b/build/src/rtl_tcp deleted file mode 100755 index 3a9e3df6c1c87ceada1d15e0882babd2bb639b6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24868 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 F{ck(3%@qIu diff --git a/build/src/rtl_test b/build/src/rtl_test deleted file mode 100755 index 28339e22cc43624c2807ffc1b4dd6cb62486c4b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24680 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 Y?b181$*&j$GTk%R Date: Fri, 20 Dec 2019 17:44:50 +1300 Subject: [PATCH 16/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 5b7e16f..f4ce13f 100644 --- a/README +++ b/README @@ -33,7 +33,7 @@ sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* sudo apt update sudo apt install libusb-1.0-0-dev git cmake -git clone git://git.osmocom.org/rtl-sdr.git +git clone git clone git://github.com/rtlsdrblog/rtl-sdr-blog.git cd rtl-sdr/ mkdir build cd build From 5d87307bf3467715fa35949ca925b863a189f553 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 20 Dec 2019 20:13:56 +1300 Subject: [PATCH 17/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index f4ce13f..da70903 100644 --- a/README +++ b/README @@ -49,4 +49,4 @@ echo 'blacklist dvb_usb_rtl28xxu' | sudo tee --append /etc/modprobe.d/blacklist- Installation (Windows): *********************** -Download the Release.zip file. Extract the rtlsdr.dll file to the SDR# folder, or whatever software is using it. +Download the Release.zip file. Extract the librtlsdr.dll file to the SDR# folder, or whatever software is using it. Rename to rtlsdr.dll if necessary (e.g. SDR# looks for rtlsdr.dll instead of librtlsdr.dll) From 3380a1252099576a897ea9cccc5d2ee5b4eabce0 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 20 Dec 2019 20:14:38 +1300 Subject: [PATCH 18/45] Update README --- README | 1 + 1 file changed, 1 insertion(+) diff --git a/README b/README index da70903..3ed02bd 100644 --- a/README +++ b/README @@ -18,6 +18,7 @@ Modified RTL-SDR Blog Version 5) Hack to force the bias tee to always be on by setting the unused IR endpoint bit to 0 in the EEPROM. Example to force the BT to be always ON "rtl_eeprom -b y", to remove forced BT "rtl_eeprom -b n" 6) Hack to force direct sampling to be always on by setting the unused remote-enabled bit to 1 in the EEPROM. Example to force direct samping always "rtl_eeprom -q y". To remove forced direct sampling "rtl_eeprom -q n" 7) Repurposed "offset tuning" to toggle bias tee ON/OFF. We can now use the "offset tuning" button in SDR# and other programs to toggle the bias tee if there is no specific button in the GUI. +8) Windows released are linked against libusb 1.0.22 which apparently fixes issues for modern Ryzen motherboards. BIAS TEE NOTE: Always take care that you do not enable the bias tee when the device is connected to a short circuited antenna unless there is an inline LNA. However. if you did by accident, don't worry as the circuit is dually protected with a self-resetting thermal fuse and built in protection on the LDO. Just try not to short it out for days at a time, otherwise you could eventually degrade the thermal fuse. From c36500ddc977cc7caa75406fbf576678bccdee81 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Tue, 31 Dec 2019 12:59:53 +1300 Subject: [PATCH 19/45] Update README --- README | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README b/README index 3ed02bd..e022c5d 100644 --- a/README +++ b/README @@ -32,6 +32,8 @@ If you previously installed librtlsdr-dev via the package manager you should rem sudo apt purge librtlsdr* sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* /usr/local/include/rtl-sdr* +***Now install the drivers*** + sudo apt update sudo apt install libusb-1.0-0-dev git cmake git clone git clone git://github.com/rtlsdrblog/rtl-sdr-blog.git From dc6dd6ae477f17cebb7858d92439e6c233017b24 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Wed, 22 Jan 2020 12:07:52 +1300 Subject: [PATCH 20/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index e022c5d..5d8d356 100644 --- a/README +++ b/README @@ -52,4 +52,4 @@ echo 'blacklist dvb_usb_rtl28xxu' | sudo tee --append /etc/modprobe.d/blacklist- Installation (Windows): *********************** -Download the Release.zip file. Extract the librtlsdr.dll file to the SDR# folder, or whatever software is using it. Rename to rtlsdr.dll if necessary (e.g. SDR# looks for rtlsdr.dll instead of librtlsdr.dll) +Download the Release.zip file from the Releases page. Extract the librtlsdr.dll file to the SDR# folder, or whatever software is using it. Rename to rtlsdr.dll if necessary (e.g. SDR# looks for rtlsdr.dll instead of librtlsdr.dll) From 664781736d249a630d4d94cda9738aa5b89c5a67 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Sun, 15 Mar 2020 12:01:31 +1300 Subject: [PATCH 21/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 5d8d356..20a614e 100644 --- a/README +++ b/README @@ -36,7 +36,7 @@ sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* sudo apt update sudo apt install libusb-1.0-0-dev git cmake -git clone git clone git://github.com/rtlsdrblog/rtl-sdr-blog.git +git clone git://github.com/rtlsdrblog/rtl-sdr-blog.git cd rtl-sdr/ mkdir build cd build From 98106d8057062e61596d96b7760171db2eb16ade Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Tue, 17 Mar 2020 15:50:56 +1300 Subject: [PATCH 22/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 20a614e..8fabd13 100644 --- a/README +++ b/README @@ -37,7 +37,7 @@ sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* sudo apt update sudo apt install libusb-1.0-0-dev git cmake git clone git://github.com/rtlsdrblog/rtl-sdr-blog.git -cd rtl-sdr/ +cd rtl-sdr-blog/ mkdir build cd build cmake ../ -DINSTALL_UDEV_RULES=ON From b0fc1e10770d9852964898ba93a2ec6dc874f2f4 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Mon, 29 Mar 2021 11:45:04 +1300 Subject: [PATCH 23/45] Update README --- README | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README b/README index 8fabd13..b26dd59 100644 --- a/README +++ b/README @@ -22,6 +22,8 @@ Modified RTL-SDR Blog Version BIAS TEE NOTE: Always take care that you do not enable the bias tee when the device is connected to a short circuited antenna unless there is an inline LNA. However. if you did by accident, don't worry as the circuit is dually protected with a self-resetting thermal fuse and built in protection on the LDO. Just try not to short it out for days at a time, otherwise you could eventually degrade the thermal fuse. +Note that Hacks 5) and 6) will only work if your system is using this driver. If it uses another driver branch, then the EEPROM information will not be read. So make sure you completely clean your system of the previous drivers first (with the information below) and ensure you run sudo make install after compiling. + ******************** Installation (Linux): ******************** From 031a044e31e80a2258a7305eb7015708a8277104 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Mon, 29 Mar 2021 11:45:24 +1300 Subject: [PATCH 24/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index b26dd59..a5e5d08 100644 --- a/README +++ b/README @@ -22,7 +22,7 @@ Modified RTL-SDR Blog Version BIAS TEE NOTE: Always take care that you do not enable the bias tee when the device is connected to a short circuited antenna unless there is an inline LNA. However. if you did by accident, don't worry as the circuit is dually protected with a self-resetting thermal fuse and built in protection on the LDO. Just try not to short it out for days at a time, otherwise you could eventually degrade the thermal fuse. -Note that Hacks 5) and 6) will only work if your system is using this driver. If it uses another driver branch, then the EEPROM information will not be read. So make sure you completely clean your system of the previous drivers first (with the information below) and ensure you run sudo make install after compiling. +Note that hacks 5) and 6) will only work if your system is using this driver. If it uses another driver branch, then the EEPROM information will not be read. So make sure you completely clean your system of the previous drivers first (with the information below) and ensure you run sudo make install after compiling. ******************** Installation (Linux): From c16a86b269236cb3eded5a4a994745c889063400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gonzalo=20Jos=C3=A9=20Carracedo=20Carballal?= Date: Tue, 1 Feb 2022 15:52:52 +0100 Subject: [PATCH 25/45] lib: Fix race condition after cancellation of USB transfers --- src/librtlsdr.c | 405 +++++++++++++++++++++++++++++++----------------- 1 file changed, 266 insertions(+), 139 deletions(-) diff --git a/src/librtlsdr.c b/src/librtlsdr.c index f567f01..561fef7 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -92,18 +92,56 @@ static const int fir_default[FIR_LEN] = { 101, 156, 215, 273, 327, 372, 404, 421 /* 12 bit signed */ }; +struct rtlsdr_dev; + +/* + * RTL-SDR transfer context. + * + * Proper transfer cancellation is a stateful operation that involves + * delivering an asynchronous cancellation request and waiting for its + * completion. This is necessary to prevent a race condition during + * cleanup when the device is closed (especially in Win32 systems). + * + * The rtlsdr_xfer_ctx structure encapsulates a transfer state, including + * its buffer, its completion status and a pointer to the device it + * belongs to. + */ + +struct rtlsdr_xfer_ctx { + struct rtlsdr_dev *dev; + struct libusb_transfer *xfer; + unsigned char *buffer; + int done; + int zero_copy; +}; + +typedef struct rtlsdr_xfer_ctx rtlsdr_xfer_ctx_t; + +static rtlsdr_xfer_ctx_t *rtlsdr_xfer_ctx_new(struct rtlsdr_dev *dev); +static int rtlsdr_xfer_ctx_alloc_buffer(rtlsdr_xfer_ctx_t *self); +static void rtlsdr_xfer_ctx_free_buffer(rtlsdr_xfer_ctx_t *self); +static int rtlsdr_xfer_ctx_issue_transfer(rtlsdr_xfer_ctx_t *self); +static void LIBUSB_CALL _rtlsdr_xfer_libusb_callback( + struct libusb_transfer *xfer); +static void rtlsdr_xfer_ctx_destroy(rtlsdr_xfer_ctx_t *self); + +#define rtlsdr_xfer_ctx_status(self) \ + ((self)->xfer->status) + +/* Friend of rtlsdr_xfer_ctx */ struct rtlsdr_dev { libusb_context *ctx; struct libusb_device_handle *devh; - uint32_t xfer_buf_num; + + rtlsdr_xfer_ctx_t **xfer_ctx_list; + uint32_t xfer_ctx_num; uint32_t xfer_buf_len; - struct libusb_transfer **xfer; - unsigned char **xfer_buf; + rtlsdr_read_async_cb_t cb; void *cb_ctx; enum rtlsdr_async_status async_status; int async_cancel; - int use_zerocopy; + /* rtl demod context */ uint32_t rate; /* Hz */ uint32_t rtl_xtal; /* Hz */ @@ -1718,157 +1756,259 @@ int rtlsdr_read_sync(rtlsdr_dev_t *dev, void *buf, int len, int *n_read) return libusb_bulk_transfer(dev->devh, 0x81, buf, len, n_read, BULK_TIMEOUT); } -static void LIBUSB_CALL _libusb_callback(struct libusb_transfer *xfer) -{ - rtlsdr_dev_t *dev = (rtlsdr_dev_t *)xfer->user_data; - - if (LIBUSB_TRANSFER_COMPLETED == xfer->status) { - if (dev->cb) - dev->cb(xfer->buffer, xfer->actual_length, dev->cb_ctx); - - libusb_submit_transfer(xfer); /* resubmit transfer */ - dev->xfer_errors = 0; - } else if (LIBUSB_TRANSFER_CANCELLED != xfer->status) { -#ifndef _WIN32 - if (LIBUSB_TRANSFER_ERROR == xfer->status) - dev->xfer_errors++; - - if (dev->xfer_errors >= dev->xfer_buf_num || - LIBUSB_TRANSFER_NO_DEVICE == xfer->status) { -#endif - dev->dev_lost = 1; - rtlsdr_cancel_async(dev); - fprintf(stderr, "cb transfer status: %d, " - "canceling...\n", xfer->status); -#ifndef _WIN32 - } -#endif - } -} - int rtlsdr_wait_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx) { return rtlsdr_read_async(dev, cb, ctx, 0, 0); } -static int _rtlsdr_alloc_async_buffers(rtlsdr_dev_t *dev) +static void +rtlsdr_xfer_ctx_free_buffer(rtlsdr_xfer_ctx_t *self) { - unsigned int i; + /* + * This path is excersed only if we managed to + * allocate a buffer, which in turn only happens if + * self->dev->xfer_buf_len is set to something meaningful + */ - if (!dev) - return -1; + if (self->buffer != NULL) { + if (self->zero_copy) { +#if defined (__linux__) && LIBUSB_API_VERSION >= 0x01000105 + libusb_dev_mem_free( + self->dev->devh, + self->buffer, + self->dev->xfer_buf_len); +#endif /* __linux__ */ + } else { + free(self->buffer); + } + } +} - if (!dev->xfer) { - dev->xfer = malloc(dev->xfer_buf_num * - sizeof(struct libusb_transfer *)); +static int +rtlsdr_xfer_ctx_cancel(rtlsdr_xfer_ctx_t *self) +{ + int r = 0; - for(i = 0; i < dev->xfer_buf_num; ++i) - dev->xfer[i] = libusb_alloc_transfer(0); + struct timeval zero_tv = {0, 0}; + + self->done = 0; + + r = libusb_cancel_transfer(self->xfer); + + while (!self->done) { + libusb_handle_events_timeout_completed( + self->dev->ctx, + &zero_tv, + &self->done); } - if (dev->xfer_buf) - return -2; + return r; +} - dev->xfer_buf = malloc(dev->xfer_buf_num * sizeof(unsigned char *)); - memset(dev->xfer_buf, 0, dev->xfer_buf_num * sizeof(unsigned char *)); +static int +rtlsdr_xfer_ctx_issue_transfer(rtlsdr_xfer_ctx_t *self) +{ + self->done = 0; + + libusb_fill_bulk_transfer( + self->xfer, + self->dev->devh, + 0x81, + self->buffer, + self->dev->xfer_buf_len, + _rtlsdr_xfer_libusb_callback, + self, + BULK_TIMEOUT); + + return libusb_submit_transfer(self->xfer); +} + +static int +rtlsdr_xfer_ctx_alloc_buffer(rtlsdr_xfer_ctx_t *self) +{ + int ok = 0; + uint32_t buf_len = self->dev->xfer_buf_len; + + self->buffer = NULL; + self->zero_copy = 0; #if defined(ENABLE_ZEROCOPY) && defined (__linux__) && LIBUSB_API_VERSION >= 0x01000105 - fprintf(stderr, "Allocating %d zero-copy buffers\n", dev->xfer_buf_num); + self->buffer = libusb_dev_mem_alloc(self->dev->devh, buf_len); - dev->use_zerocopy = 1; - for (i = 0; i < dev->xfer_buf_num; ++i) { - dev->xfer_buf[i] = libusb_dev_mem_alloc(dev->devh, dev->xfer_buf_len); - - if (dev->xfer_buf[i]) { - /* Check if Kernel usbfs mmap() bug is present: if the - * mapping is correct, the buffers point to memory that - * was memset to 0 by the Kernel, otherwise, they point - * to random memory. We check if the buffers are zeroed - * and otherwise fall back to buffers in userspace. - */ - if (dev->xfer_buf[i][0] || memcmp(dev->xfer_buf[i], - dev->xfer_buf[i] + 1, - dev->xfer_buf_len - 1)) { - fprintf(stderr, "Detected Kernel usbfs mmap() " - "bug, falling back to buffers " - "in userspace\n"); - dev->use_zerocopy = 0; - break; - } + if (self->buffer != NULL) { + /* Check if Kernel usbfs mmap() bug is present: if the + * mapping is correct, the buffers point to memory that + * was memset to 0 by the Kernel, otherwise, they point + * to random memory. We check if the buffers are zeroed + * and otherwise fall back to buffers in userspace. + */ + if (self->buffer[0] || memcmp(self->buffer, + self->buffer + 1, + buf_len - 1)) { + fprintf(stderr, "Detected Kernel usbfs mmap() " + "bug, falling back to buffers " + "in userspace\n"); } else { - fprintf(stderr, "Failed to allocate zero-copy " - "buffer for transfer %d\nFalling " - "back to buffers in userspace\n", i); - dev->use_zerocopy = 0; - break; + /* All looks good! Green light to zerocopy */ + self->zero_copy = 1; } } - /* zero-copy buffer allocation failed (partially or completely) - * we need to free the buffers again if already allocated */ - if (!dev->use_zerocopy) { - for (i = 0; i < dev->xfer_buf_num; ++i) { - if (dev->xfer_buf[i]) - libusb_dev_mem_free(dev->devh, - dev->xfer_buf[i], - dev->xfer_buf_len); - } + /* + * Zero copy buffer allocation failed. We just need to free the + * failed ones, as the current implementation allows mixed + * userspace / zero-copy buffers. + */ + + if (!self->zero_copy && self->buffer != NULL) { + libusb_dev_mem_free( + self->dev->devh, + self->buffer, + buf_len); + self->buffer = NULL; } #endif - /* no zero-copy available, allocate buffers in userspace */ - if (!dev->use_zerocopy) { - for (i = 0; i < dev->xfer_buf_num; ++i) { - dev->xfer_buf[i] = malloc(dev->xfer_buf_len); + /* No zero copy, allocate in userspace */ + if (!self->zero_copy) + if ((self->buffer = malloc(buf_len)) == NULL) + goto done; - if (!dev->xfer_buf[i]) - return -ENOMEM; - } + ok = 1; + +done: + return ok; +} + +rtlsdr_xfer_ctx_t *rtlsdr_xfer_ctx_new(struct rtlsdr_dev *dev) +{ + rtlsdr_xfer_ctx_t *new = NULL; + + if (dev == NULL) + return NULL; + + if ((new = calloc(1, sizeof(rtlsdr_xfer_ctx_t))) == NULL) + goto fail; + + new->dev = dev; + + if ((new->xfer = libusb_alloc_transfer(0)) == NULL) + goto fail; + + if (!rtlsdr_xfer_ctx_alloc_buffer(new)) + goto fail; + + return new; + +fail: + if (new != NULL) + rtlsdr_xfer_ctx_destroy(new); + + return NULL; +} + +static void LIBUSB_CALL _rtlsdr_xfer_libusb_callback( + struct libusb_transfer *xfer) +{ + rtlsdr_xfer_ctx_t *ctx = (rtlsdr_xfer_ctx_t *) xfer->user_data; + rtlsdr_dev_t *dev = ctx->dev; + + switch (xfer->status) { + case LIBUSB_TRANSFER_COMPLETED: + if (dev->cb) + dev->cb(xfer->buffer, xfer->actual_length, dev->cb_ctx); + + libusb_submit_transfer(xfer); /* resubmit transfer */ + dev->xfer_errors = 0; + ctx->done = 1; + break; + + case LIBUSB_TRANSFER_CANCELLED: + ctx->done = 1; + break; + + default: + /* Maybe an error */ +#ifndef _WIN32 + if (LIBUSB_TRANSFER_ERROR == xfer->status) + dev->xfer_errors++; + + if (dev->xfer_errors >= dev->xfer_ctx_num || + LIBUSB_TRANSFER_NO_DEVICE == xfer->status) { +#endif + dev->dev_lost = 1; + rtlsdr_cancel_async(dev); + fprintf(stderr, "cb transfer status: %d, " + "canceling...\n", xfer->status); +#ifndef _WIN32 + } +#endif } +} - return 0; +void +rtlsdr_xfer_ctx_destroy(rtlsdr_xfer_ctx_t *self) +{ + if (self->xfer != NULL) + libusb_free_transfer(self->xfer); + + rtlsdr_xfer_ctx_free_buffer(self); + + free(self); } static int _rtlsdr_free_async_buffers(rtlsdr_dev_t *dev) { unsigned int i; - if (!dev) + if (dev == NULL) return -1; - if (dev->xfer) { - for(i = 0; i < dev->xfer_buf_num; ++i) { - if (dev->xfer[i]) { - libusb_free_transfer(dev->xfer[i]); - } - } + if (dev->xfer_ctx_list != NULL) { + for (i = 0; i < dev->xfer_ctx_num; ++i) + if (dev->xfer_ctx_list[i] != NULL) + rtlsdr_xfer_ctx_destroy(dev->xfer_ctx_list[i]); - free(dev->xfer); - dev->xfer = NULL; - } - - if (dev->xfer_buf) { - for (i = 0; i < dev->xfer_buf_num; ++i) { - if (dev->xfer_buf[i]) { - if (dev->use_zerocopy) { -#if defined (__linux__) && LIBUSB_API_VERSION >= 0x01000105 - libusb_dev_mem_free(dev->devh, - dev->xfer_buf[i], - dev->xfer_buf_len); -#endif - } else { - free(dev->xfer_buf[i]); - } - } - } - - free(dev->xfer_buf); - dev->xfer_buf = NULL; + free(dev->xfer_ctx_list); + dev->xfer_ctx_list = NULL; } return 0; } +static int _rtlsdr_alloc_async_buffers(rtlsdr_dev_t *dev) +{ + unsigned int i; + int ret = -1; + + if (dev == NULL) + goto done; + + if (dev->xfer_ctx_list == NULL) { + /* Lazy allocation of async buffers */ + + if ((dev->xfer_ctx_list = calloc( + dev->xfer_ctx_num, + sizeof(rtlsdr_xfer_ctx_t *))) == NULL) + goto done; + + for (i = 0; i < dev->xfer_ctx_num; ++i) { + dev->xfer_ctx_list[i] = rtlsdr_xfer_ctx_new(dev); + if (dev->xfer_ctx_list[i] == NULL) + goto done; + } + } + + ret = 0; + +done: + if (ret != 0) + _rtlsdr_free_async_buffers(dev); + + return ret; + +} + int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx, uint32_t buf_num, uint32_t buf_len) { @@ -1891,9 +2031,9 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx, dev->cb_ctx = ctx; if (buf_num > 0) - dev->xfer_buf_num = buf_num; + dev->xfer_ctx_num = buf_num; else - dev->xfer_buf_num = DEFAULT_BUF_NUMBER; + dev->xfer_ctx_num = DEFAULT_BUF_NUMBER; if (buf_len > 0 && buf_len % 512 == 0) /* len must be multiple of 512 */ dev->xfer_buf_len = buf_len; @@ -1902,17 +2042,9 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx, _rtlsdr_alloc_async_buffers(dev); - for(i = 0; i < dev->xfer_buf_num; ++i) { - libusb_fill_bulk_transfer(dev->xfer[i], - dev->devh, - 0x81, - dev->xfer_buf[i], - dev->xfer_buf_len, - _libusb_callback, - (void *)dev, - BULK_TIMEOUT); + for(i = 0; i < dev->xfer_ctx_num; ++i) { + r = rtlsdr_xfer_ctx_issue_transfer(dev->xfer_ctx_list[i]); - r = libusb_submit_transfer(dev->xfer[i]); if (r < 0) { fprintf(stderr, "Failed to submit transfer %i\n" "Please increase your allowed " @@ -1938,21 +2070,16 @@ int rtlsdr_read_async(rtlsdr_dev_t *dev, rtlsdr_read_async_cb_t cb, void *ctx, if (RTLSDR_CANCELING == dev->async_status) { next_status = RTLSDR_INACTIVE; - if (!dev->xfer) + if (dev->xfer_ctx_list == NULL) break; - for(i = 0; i < dev->xfer_buf_num; ++i) { - if (!dev->xfer[i]) + for(i = 0; i < dev->xfer_ctx_num; ++i) { + if (dev->xfer_ctx_list[i] == NULL) continue; if (LIBUSB_TRANSFER_CANCELLED != - dev->xfer[i]->status) { - r = libusb_cancel_transfer(dev->xfer[i]); - /* handle events after canceling - * to allow transfer status to - * propagate */ - libusb_handle_events_timeout_completed(dev->ctx, - &zerotv, NULL); + rtlsdr_xfer_ctx_status(dev->xfer_ctx_list[i])) { + r = rtlsdr_xfer_ctx_cancel(dev->xfer_ctx_list[i]); if (r < 0) continue; @@ -2054,4 +2181,4 @@ int rtlsdr_set_gpio(rtlsdr_dev_t *dev, int gpio_pin, int on) rtlsdr_set_gpio_bit(dev, gpio_pin, on); return 1; -} +} \ No newline at end of file From fb18b215667291bdeb85c3497d561c7344222146 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Mon, 19 Dec 2022 16:16:24 +1300 Subject: [PATCH 26/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index a5e5d08..e64d7e7 100644 --- a/README +++ b/README @@ -38,7 +38,7 @@ sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* sudo apt update sudo apt install libusb-1.0-0-dev git cmake -git clone git://github.com/rtlsdrblog/rtl-sdr-blog.git +git clone https://github.com/rtlsdrblog/rtl-sdr-blog.git cd rtl-sdr-blog/ mkdir build cd build From 242043cf0a4c6384d179225e0aa2b1638937d299 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Mon, 19 Dec 2022 16:17:29 +1300 Subject: [PATCH 27/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index e64d7e7..b4bd400 100644 --- a/README +++ b/README @@ -32,7 +32,7 @@ Installation (Linux): If you previously installed librtlsdr-dev via the package manager you should remove this first BEFORE installing these drivers. To completely remove these drivers use the following commands sudo apt purge librtlsdr* -sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* /usr/local/include/rtl-sdr* +sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* /usr/local/include/rtl-sdr* /usr/local/include/rtl_* ***Now install the drivers*** From a879241b993b1bb1957755a4116e4204f2a0736c Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Tue, 20 Dec 2022 00:28:40 +1300 Subject: [PATCH 28/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index b4bd400..1825aa5 100644 --- a/README +++ b/README @@ -38,7 +38,7 @@ sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* sudo apt update sudo apt install libusb-1.0-0-dev git cmake -git clone https://github.com/rtlsdrblog/rtl-sdr-blog.git +git clone https://github.com/rtlsdrblog/rtl-sdr-blog cd rtl-sdr-blog/ mkdir build cd build From 48ea060ae2d443076da1089e35c2d0b9dabd9e34 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Wed, 28 Dec 2022 16:00:09 +1300 Subject: [PATCH 29/45] Fix bias tee flag (needs no arguments) --- src/rtl_tcp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rtl_tcp.c b/src/rtl_tcp.c index 270e9f6..8b8cc60 100644 --- a/src/rtl_tcp.c +++ b/src/rtl_tcp.c @@ -393,7 +393,7 @@ int main(int argc, char **argv) struct sigaction sigact, sigign; #endif - while ((opt = getopt(argc, argv, "a:p:f:g:s:b:d:P:T:D")) != -1) { + while ((opt = getopt(argc, argv, "a:p:f:g:s:b:d:P:TD")) != -1) { switch (opt) { case 'd': dev_index = verbose_device_search(optarg); From a9780ca32be2eb0781ba3f3fc50c252b69728214 Mon Sep 17 00:00:00 2001 From: krakenrf <78108016+krakenrf@users.noreply.github.com> Date: Wed, 10 May 2023 18:09:07 +1200 Subject: [PATCH 30/45] changes for new r828d dongles --- include/tuner_r82xx.h | 2 +- src/tuner_r82xx.c | 90 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 84 insertions(+), 8 deletions(-) diff --git a/include/tuner_r82xx.h b/include/tuner_r82xx.h index f6c206a..cba23b2 100644 --- a/include/tuner_r82xx.h +++ b/include/tuner_r82xx.h @@ -27,7 +27,7 @@ #define R820T_I2C_ADDR 0x34 #define R828D_I2C_ADDR 0x74 -#define R828D_XTAL_FREQ 16000000 +#define R828D_XTAL_FREQ 28800000 //16000000 #define R82XX_CHECK_ADDR 0x00 #define R82XX_CHECK_VAL 0x69 diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c index 8074ee3..05fb6a1 100644 --- a/src/tuner_r82xx.c +++ b/src/tuner_r82xx.c @@ -1097,11 +1097,21 @@ int r82xx_set_bandwidth(struct r82xx_priv *priv, int bw, uint32_t rate) #undef FILT_HP_BW1 #undef FILT_HP_BW2 +// Changes to support new r828d dongle versions int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) { int rc = -1; - uint32_t lo_freq = freq + priv->int_freq; + + // CARL, automatically upconvert to 28.8 MHz if we tune to HF + uint32_t upconvert_freq; + if (freq < MHZ(28.8)) + { + upconvert_freq = freq + MHZ(28.8); + } + + uint32_t lo_freq = upconvert_freq + priv->int_freq; uint8_t air_cable1_in; + uint8_t cable2_in; rc = r82xx_set_mux(priv, lo_freq); if (rc < 0) @@ -1111,16 +1121,82 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) if (rc < 0 || !priv->has_lock) goto err; + // HF -> Cable_2 + // VHF -> Cable_1 + // UHF -> Air_in + /* switch between 'Cable1' and 'Air-In' inputs on sticks with * R828D tuner. We switch at 345 MHz, because that's where the * noise-floor has about the same level with identical LNA - * settings. The original driver used 320 MHz. */ - air_cable1_in = (freq > MHZ(345)) ? 0x00 : 0x60; + * settings. The original driver used 320 MHz. - Modded to switch at 400 MHz */ + + + int band; + if (freq <= MHZ(28.8)) + { + band = 0x10; // HF + } + else if (freq > MHZ(28.8) && freq < MHZ(400)) + { + band = 0x20; + } + else + { + band = 0x30; + } + + + if ((priv->cfg->rafael_chip == CHIP_R828D) && (band != priv->input)) + { + + priv->input = band; + + if (freq > MHZ(400)) + { + //Turn air_in LNA ON + rc = r82xx_write_reg_mask(priv, 0x05, 0x00, 0x20); + } + else + { + // Otherwise turn it off to save power (as it uses a lot of power) + rc = r82xx_write_reg_mask(priv, 0x05, 0x20, 0x20); + } + + // Turn LT OFF to save power + rc = r82xx_write_reg_mask(priv, 0x05, 0x80, 0x80); + + + // Turn open_d off + //rc = r82xx_write_reg_mask(priv, 0x17, 0x00, 0x08); + + // VHF + // Activate Cable_1 input between 28.8 -> 400 MHz. + if (freq > MHZ(28.8) && freq < MHZ(400)) + { + rc = r82xx_write_reg_mask(priv, 0x05, 0x40, 0x40); + // Appears to enhance Cable 1 input by 2dB + rc = r82xx_write_reg_mask(priv, 0x06, 0x04, 0x04); + } + else + { + rc = r82xx_write_reg_mask(priv, 0x05, 0x00, 0x40); + // Appears to enhance Cable 1 input by 2dB (off) + rc = r82xx_write_reg_mask(priv, 0x06, 0x00, 0x04); + } + + + //HF + if (freq < MHZ(28.8)) + { + // Switch in Cable 2 + rc = r82xx_write_reg_mask(priv, 0x06, 0x08, 0x08); + } + else + { + // Switch out Cable 2 + rc = r82xx_write_reg_mask(priv, 0x06, 0x00, 0x08); + } - if ((priv->cfg->rafael_chip == CHIP_R828D) && - (air_cable1_in != priv->input)) { - priv->input = air_cable1_in; - rc = r82xx_write_reg_mask(priv, 0x05, air_cable1_in, 0x60); } err: From d9a7631208c252478d08cdc7edd33846b92a1482 Mon Sep 17 00:00:00 2001 From: krakenrf <78108016+krakenrf@users.noreply.github.com> Date: Wed, 10 May 2023 18:09:25 +1200 Subject: [PATCH 31/45] Update .gitignore --- .gitignore | 246 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) diff --git a/.gitignore b/.gitignore index 5ef0532..15e5837 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,249 @@ CMakeCache.txt */CMakeFiles CMakeFiles *.cmake + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +[Xx]64/ +[Xx]86/ +[Bb]uild/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml + +# TODO: Un-comment the next line if you do not want to checkin +# your web deploy settings because they may include unencrypted +# passwords +#*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Microsoft Azure ApplicationInsights config file +ApplicationInsights.config + +# Windows Store app package directory +AppPackages/ +BundleArtifacts/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# LightSwitch generated files +GeneratedArtifacts/ +ModelManifest.xml + +# Paket dependency manager +.paket/paket.exe + +# FAKE - F# Make +.fake/ \ No newline at end of file From 098721d96b0f3fdb6d313cf2693670a0d55a9281 Mon Sep 17 00:00:00 2001 From: rtlsdrblog <78108016+krakenrf@users.noreply.github.com> Date: Wed, 10 May 2023 18:41:05 +1200 Subject: [PATCH 32/45] Remove unneeded timeout --- src/librtlsdr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/librtlsdr.c b/src/librtlsdr.c index 561fef7..2a0b988 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -40,10 +40,10 @@ #endif /* libusb < 1.0.9 doesn't have libusb_handle_events_timeout_completed */ -#ifndef HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED +/*#ifndef HAVE_LIBUSB_HANDLE_EVENTS_TIMEOUT_COMPLETED #define libusb_handle_events_timeout_completed(ctx, tv, c) \ libusb_handle_events_timeout(ctx, tv) -#endif +#endif*/ /* two raised to the power of n */ #define TWO_POW(n) ((double)(1ULL<<(n))) From 803bfc642067b1c4eb2a44912b81eb46b6e5f43e Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Wed, 10 May 2023 22:54:37 +1200 Subject: [PATCH 33/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 1825aa5..233178c 100644 --- a/README +++ b/README @@ -31,7 +31,7 @@ Installation (Linux): ***NOTE*** If you previously installed librtlsdr-dev via the package manager you should remove this first BEFORE installing these drivers. To completely remove these drivers use the following commands -sudo apt purge librtlsdr* +sudo apt purge ^librtlsdr sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* /usr/local/include/rtl-sdr* /usr/local/include/rtl_* ***Now install the drivers*** From cd236acdc5246d97bc44fffd1dc3935f47e344b5 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Wed, 10 May 2023 22:58:27 +1200 Subject: [PATCH 34/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 233178c..d92f255 100644 --- a/README +++ b/README @@ -32,7 +32,7 @@ Installation (Linux): If you previously installed librtlsdr-dev via the package manager you should remove this first BEFORE installing these drivers. To completely remove these drivers use the following commands sudo apt purge ^librtlsdr -sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* /usr/local/include/rtl-sdr* /usr/local/include/rtl_* +sudo rm -rvf /usr/lib/librtlsdr* /usr/include/rtl-sdr* /usr/local/lib/librtlsdr* /usr/local/include/rtl-sdr* /usr/local/include/rtl_* /usr/local/bin/rtl_* ***Now install the drivers*** From 7f52beefb4dcf0b47d15c935dc1d233c4ded61d7 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Thu, 11 May 2023 00:05:18 +1200 Subject: [PATCH 35/45] Fix freq calculation --- src/tuner_r82xx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c index 05fb6a1..0468cd1 100644 --- a/src/tuner_r82xx.c +++ b/src/tuner_r82xx.c @@ -1103,10 +1103,10 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) int rc = -1; // CARL, automatically upconvert to 28.8 MHz if we tune to HF - uint32_t upconvert_freq; + uint32_t upconvert_freq = freq; if (freq < MHZ(28.8)) { - upconvert_freq = freq + MHZ(28.8); + upconvert_freq = upconvert_freq + MHZ(28.8); } uint32_t lo_freq = upconvert_freq + priv->int_freq; From a72e764bec8974dad5623392d281748a22c3b2a4 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Thu, 11 May 2023 22:45:45 +1200 Subject: [PATCH 36/45] add notch control, tidy up --- src/tuner_r82xx.c | 96 +++++++++++++++++++++++++++++------------------ 1 file changed, 59 insertions(+), 37 deletions(-) diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c index 0468cd1..d7879a0 100644 --- a/src/tuner_r82xx.c +++ b/src/tuner_r82xx.c @@ -33,6 +33,10 @@ #define MHZ(x) ((x)*1000*1000) #define KHZ(x) ((x)*1000) +#define HF 0x10 +#define VHF 0x20 +#define UHF 0x30 + /* * Static constants */ @@ -1102,7 +1106,7 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) { int rc = -1; - // CARL, automatically upconvert to 28.8 MHz if we tune to HF + // Automatically upconvert to 28.8 MHz if we tune to HF so we don't need to set any upconvert offset in the SDR software uint32_t upconvert_freq = freq; if (freq < MHZ(28.8)) { @@ -1121,6 +1125,21 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) if (rc < 0 || !priv->has_lock) goto err; + + // Set open_d notches automatically + if (freq <= MHZ(2.2) + || (freq >= MHZ(85) && freq <= MHZ(112)) // Notch off until 112 because of roll off + || (freq >= MHZ(172) && freq <= MHZ(242))) + { + rc = r82xx_write_reg_mask(priv, 0x17, 0x00, 0x08); // open_d hi_z (notches off) + } + else + { + rc = r82xx_write_reg_mask(priv, 0x17, 0x08, 0x08); // open_d low_z (notches on) + } + if (rc < 0) + goto err; + // HF -> Cable_2 // VHF -> Cable_1 // UHF -> Air_in @@ -1128,65 +1147,40 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) /* switch between 'Cable1' and 'Air-In' inputs on sticks with * R828D tuner. We switch at 345 MHz, because that's where the * noise-floor has about the same level with identical LNA - * settings. The original driver used 320 MHz. - Modded to switch at 400 MHz */ + * settings. The original driver used 320 MHz. - Modded to switch at 300 MHz */ - int band; + // Only switch if there is a band change (to avoid excessive register writes when tuning rapidly) + int band = 0x00; if (freq <= MHZ(28.8)) { - band = 0x10; // HF + band = HF; // HF } - else if (freq > MHZ(28.8) && freq < MHZ(400)) + else if (freq > MHZ(28.8) && freq < MHZ(300)) // VHF Tuner Input { - band = 0x20; + band = VHF; } - else + else // UHF Tuner Input { - band = 0x30; + band = UHF; } if ((priv->cfg->rafael_chip == CHIP_R828D) && (band != priv->input)) { - priv->input = band; - if (freq > MHZ(400)) - { - //Turn air_in LNA ON - rc = r82xx_write_reg_mask(priv, 0x05, 0x00, 0x20); - } - else - { - // Otherwise turn it off to save power (as it uses a lot of power) - rc = r82xx_write_reg_mask(priv, 0x05, 0x20, 0x20); - } - // Turn LT OFF to save power rc = r82xx_write_reg_mask(priv, 0x05, 0x80, 0x80); - + if (rc < 0) + goto err; // Turn open_d off //rc = r82xx_write_reg_mask(priv, 0x17, 0x00, 0x08); - // VHF - // Activate Cable_1 input between 28.8 -> 400 MHz. - if (freq > MHZ(28.8) && freq < MHZ(400)) - { - rc = r82xx_write_reg_mask(priv, 0x05, 0x40, 0x40); - // Appears to enhance Cable 1 input by 2dB - rc = r82xx_write_reg_mask(priv, 0x06, 0x04, 0x04); - } - else - { - rc = r82xx_write_reg_mask(priv, 0x05, 0x00, 0x40); - // Appears to enhance Cable 1 input by 2dB (off) - rc = r82xx_write_reg_mask(priv, 0x06, 0x00, 0x04); - } - //HF - if (freq < MHZ(28.8)) + if (band == HF) //(freq < MHZ(28.8)) { // Switch in Cable 2 rc = r82xx_write_reg_mask(priv, 0x06, 0x08, 0x08); @@ -1197,6 +1191,34 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) rc = r82xx_write_reg_mask(priv, 0x06, 0x00, 0x08); } + // VHF + // Activate Cable_1 input between 28.8 -> 400 MHz. + if (band == VHF) + { + rc = r82xx_write_reg_mask(priv, 0x05, 0x40, 0x40); + // This register setting appears to enhance Cable 1 input by 2dB + rc = r82xx_write_reg_mask(priv, 0x06, 0x04, 0x04); + } + else + { + rc = r82xx_write_reg_mask(priv, 0x05, 0x00, 0x40); + // Turn off the Cable_1 enhancement (off) + rc = r82xx_write_reg_mask(priv, 0x06, 0x00, 0x04); + } + + if (band == UHF) + { + //Turn air_in LNA ON + rc = r82xx_write_reg_mask(priv, 0x05, 0x00, 0x20); + } + else + { + // Otherwise turn it off to save power (as it uses a lot of power) + rc = r82xx_write_reg_mask(priv, 0x05, 0x20, 0x20); + } + + if (rc < 0) + goto err; } err: From c62238d98ace85c421945f35df4a8aeeef343ea9 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Sat, 13 May 2023 21:48:43 +1200 Subject: [PATCH 37/45] temp fix for r828D init fail --- src/tuner_r82xx.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c index d7879a0..4c3b699 100644 --- a/src/tuner_r82xx.c +++ b/src/tuner_r82xx.c @@ -277,9 +277,12 @@ static int r82xx_write(struct r82xx_priv *priv, uint8_t reg, const uint8_t *val, if (rc != size + 1) { fprintf(stderr, "%s: i2c wr failed=%d reg=%02x len=%d\n", __FUNCTION__, rc, reg, size); - if (rc < 0) - return rc; - return -1; + // R828D causes an error on reg 0x0c and 0x10, and this causes the init to fail + // But if we just ignore the errors, eventhing works fine. + // TODO: Look into why 0x0C and 0x10 cause a i2c wr failed=-1 error with the R828D + //if (rc < 0) + // return rc; + //return -1; } reg += size; From 2a568c79488a3a6d038222d246ac24a68cce8186 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Tue, 16 May 2023 14:52:27 +1200 Subject: [PATCH 38/45] revert change, fixed in hardware --- include/tuner_r82xx.h | 2 +- src/tuner_r82xx.c | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/include/tuner_r82xx.h b/include/tuner_r82xx.h index cba23b2..2dffa28 100644 --- a/include/tuner_r82xx.h +++ b/include/tuner_r82xx.h @@ -27,7 +27,7 @@ #define R820T_I2C_ADDR 0x34 #define R828D_I2C_ADDR 0x74 -#define R828D_XTAL_FREQ 28800000 //16000000 +#define R828D_XTAL_FREQ 28800000 //28800000 //16000000 #define R82XX_CHECK_ADDR 0x00 #define R82XX_CHECK_VAL 0x69 diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c index 4c3b699..d7879a0 100644 --- a/src/tuner_r82xx.c +++ b/src/tuner_r82xx.c @@ -277,12 +277,9 @@ static int r82xx_write(struct r82xx_priv *priv, uint8_t reg, const uint8_t *val, if (rc != size + 1) { fprintf(stderr, "%s: i2c wr failed=%d reg=%02x len=%d\n", __FUNCTION__, rc, reg, size); - // R828D causes an error on reg 0x0c and 0x10, and this causes the init to fail - // But if we just ignore the errors, eventhing works fine. - // TODO: Look into why 0x0C and 0x10 cause a i2c wr failed=-1 error with the R828D - //if (rc < 0) - // return rc; - //return -1; + if (rc < 0) + return rc; + return -1; } reg += size; From 7700ec324d4318765b3b7ef48f6634f855dc23c1 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 19 May 2023 00:38:05 +1200 Subject: [PATCH 39/45] various changes tidy up code, add manufacturer/model test for r828d, tuner hack testing --- include/tuner_r82xx.h | 3 + src/librtlsdr.c | 35 ++++++- src/tuner_r82xx.c | 232 +++++++++++++++++++++--------------------- 3 files changed, 153 insertions(+), 117 deletions(-) diff --git a/include/tuner_r82xx.h b/include/tuner_r82xx.h index 2dffa28..8e41ec4 100644 --- a/include/tuner_r82xx.h +++ b/include/tuner_r82xx.h @@ -82,6 +82,9 @@ struct r82xx_priv { uint32_t int_freq; uint8_t fil_cal_code; uint8_t input; + int gain; + int gain_manual_mode; + int gain_sensitivity_mode; int has_lock; int init_done; diff --git a/src/librtlsdr.c b/src/librtlsdr.c index 2a0b988..0e76ce9 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -165,6 +165,8 @@ struct rtlsdr_dev { unsigned int xfer_errors; int force_bt; int force_ds; + char manufact[256]; + char product[256]; }; void rtlsdr_set_gpio_bit(rtlsdr_dev_t *dev, uint8_t gpio, int val); @@ -1204,7 +1206,16 @@ int rtlsdr_set_agc_mode(rtlsdr_dev_t *dev, int on) if (!dev) return -1; - return rtlsdr_demod_write_reg(dev, 0, 0x19, on ? 0x25 : 0x05, 1); + /* testing: + * replaceme the useless RTL AGC function with a function that + implements max LNA gain for sensitivity when on */ + rtlsdr_set_i2c_repeater(dev, 1); + sensitivity_mode_toggle(&dev->r82xx_p, on); + rtlsdr_set_i2c_repeater(dev, 0); + + return 0; + + //return rtlsdr_demod_write_reg(dev, 0, 0x19, on ? 0x25 : 0x05, 1); } int rtlsdr_set_direct_sampling(rtlsdr_dev_t *dev, int on) @@ -1483,6 +1494,16 @@ int rtlsdr_get_index_by_serial(const char *serial) return -3; } +/* Returns true if the manufact_check and product_check strings match what is in the dongles EEPROM */ +int rtlsdr_check_dongle_model(rtlsdr_dev_t *dev, char* manufact_check, char* product_check) { + if ((strcmp(dev->manufact, manufact_check) == 0 && strcmp(dev->product, product_check) == 0)) + { + return 1; + } + + return 0; +} + int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index) { int r; @@ -1609,6 +1630,12 @@ int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index) reg = rtlsdr_i2c_read_reg(dev, R828D_I2C_ADDR, R82XX_CHECK_ADDR); if (reg == R82XX_CHECK_VAL) { fprintf(stderr, "Found Rafael Micro R828D tuner\n"); + + if (rtlsdr_check_dongle_model(dev, "RTLSDRBlog", "Blog V4")) + { + fprintf(stderr, "RTL-SDR Blog V4 Detected\n"); + } + dev->tuner_type = RTLSDR_TUNER_R828D; goto found; } @@ -1642,7 +1669,11 @@ found: switch (dev->tuner_type) { case RTLSDR_TUNER_R828D: - dev->tun_xtal = R828D_XTAL_FREQ; + // If NOT an RTL-SDR Blog V4, set typical R828D 16 MHz freq. Otherwise, keep at 28.8 MHz. + if (!(rtlsdr_check_dongle_model(dev, "RTLSDRBlog", "Blog V4"))) + { + dev->tun_xtal = R828D_XTAL_FREQ; + } /* fall-through */ case RTLSDR_TUNER_R820T: /* disable Zero-IF mode */ diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c index d7879a0..f69e590 100644 --- a/src/tuner_r82xx.c +++ b/src/tuner_r82xx.c @@ -33,9 +33,12 @@ #define MHZ(x) ((x)*1000*1000) #define KHZ(x) ((x)*1000) -#define HF 0x10 -#define VHF 0x20 -#define UHF 0x30 +#define HF 1 +#define VHF 2 +#define UHF 3 + +#define NOTCH_FILTERS_OFF 100 +#define NOTCH_FILTERS_ON 200 /* * Static constants @@ -959,10 +962,12 @@ static const int r82xx_mixer_gain_steps[] = { int r82xx_set_gain(struct r82xx_priv *priv, int set_manual_gain, int gain) { int rc; + priv->gain = gain; + priv->gain_manual_mode = set_manual_gain; if (set_manual_gain) { int i, total_gain = 0; - uint8_t mix_index = 0, lna_index = 0; + uint8_t mix_index = 0, lna_index = 0, vga_index = 0; uint8_t data[4]; /* LNA auto off */ @@ -970,7 +975,7 @@ int r82xx_set_gain(struct r82xx_priv *priv, int set_manual_gain, int gain) if (rc < 0) return rc; - /* Mixer auto off */ + /* Mixer auto off */ rc = r82xx_write_reg_mask(priv, 0x07, 0, 0x10); if (rc < 0) return rc; @@ -980,24 +985,40 @@ int r82xx_set_gain(struct r82xx_priv *priv, int set_manual_gain, int gain) return rc; /* set fixed VGA gain for now (16.3 dB) */ + //rc = r82xx_write_reg_mask(priv, 0x0c, 0x08, 0x9f); rc = r82xx_write_reg_mask(priv, 0x0c, 0x08, 0x9f); //init val 0x08 0x0c works well at 1.7 + if (rc < 0) return rc; - for (i = 0; i < 15; i++) { - if (total_gain >= gain) - break; - - total_gain += r82xx_lna_gain_steps[++lna_index]; - - if (total_gain >= gain) - break; - - total_gain += r82xx_mixer_gain_steps[++mix_index]; + if (priv->gain_sensitivity_mode) + { + mix_index = (int)(gain / 33); + lna_index = 15; } + else + { + for (i = 0; i < 15; i++) { + if (total_gain >= gain) + break; + + total_gain += r82xx_lna_gain_steps[++lna_index]; + //total_gain += r82xx_vga_gain_steps[++vga_index]; + + if (total_gain >= gain) + break; + + total_gain += r82xx_mixer_gain_steps[++mix_index]; + } + } + + fprintf(stdout, "Gain: %i", gain); + fprintf(stdout, "Mix Index: %i", mix_index); + fprintf(stdout, "LNA Index: %i", lna_index); /* set LNA gain */ rc = r82xx_write_reg_mask(priv, 0x05, lna_index, 0x0f); + //rc = r82xx_write_reg_mask(priv, 0x05, 0x0f, 0x0f); if (rc < 0) return rc; @@ -1005,7 +1026,8 @@ int r82xx_set_gain(struct r82xx_priv *priv, int set_manual_gain, int gain) rc = r82xx_write_reg_mask(priv, 0x07, mix_index, 0x0f); if (rc < 0) return rc; - } else { + } + else { /* LNA */ rc = r82xx_write_reg_mask(priv, 0x05, 0, 0x10); if (rc < 0) @@ -1101,21 +1123,39 @@ int r82xx_set_bandwidth(struct r82xx_priv *priv, int bw, uint32_t rate) #undef FILT_HP_BW1 #undef FILT_HP_BW2 -// Changes to support new r828d dongle versions +int sensitivity_mode_toggle(struct r82xx_priv *priv, int toggle) +{ + int rc; + + if (toggle) + { + //fprintf(stdout, "TOGGLE ON"); + priv->gain_sensitivity_mode = 1; + r82xx_set_gain(priv, priv->gain_manual_mode, priv->gain); + //rc = r82xx_write_reg_mask(priv, 0x06, 0x10, 0x10); + } + else + { + priv->gain_sensitivity_mode = 0; + //fprintf(stdout, "TOGGLE OFF"); + r82xx_set_gain(priv, priv->gain_manual_mode, priv->gain); + //rc = r82xx_write_reg_mask(priv, 0x06, 0x00, 0x10); + } + + return rc; +} + int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) { int rc = -1; + int is_rtlsdr_blog_v4 = rtlsdr_check_dongle_model(priv->rtl_dev, "RTLSDRBlog", "Blog V4"); - // Automatically upconvert to 28.8 MHz if we tune to HF so we don't need to set any upconvert offset in the SDR software - uint32_t upconvert_freq = freq; - if (freq < MHZ(28.8)) - { - upconvert_freq = upconvert_freq + MHZ(28.8); - } + /* if it's an RTL-SDR Blog V4, automatically upconvert by 28.8 MHz if we tune to HF + * so that we don't need to manually set any upconvert offset in the SDR software */ + uint32_t upconvert_freq = is_rtlsdr_blog_v4 ? ((freq < MHZ(28.8)) ? (freq + MHZ(28.8)) : freq) : freq; uint32_t lo_freq = upconvert_freq + priv->int_freq; uint8_t air_cable1_in; - uint8_t cable2_in; rc = r82xx_set_mux(priv, lo_freq); if (rc < 0) @@ -1125,101 +1165,63 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) if (rc < 0 || !priv->has_lock) goto err; - - // Set open_d notches automatically - if (freq <= MHZ(2.2) - || (freq >= MHZ(85) && freq <= MHZ(112)) // Notch off until 112 because of roll off - || (freq >= MHZ(172) && freq <= MHZ(242))) + if (is_rtlsdr_blog_v4) { - rc = r82xx_write_reg_mask(priv, 0x17, 0x00, 0x08); // open_d hi_z (notches off) - } - else - { - rc = r82xx_write_reg_mask(priv, 0x17, 0x08, 0x08); // open_d low_z (notches on) - } - if (rc < 0) - goto err; - - // HF -> Cable_2 - // VHF -> Cable_1 - // UHF -> Air_in - - /* switch between 'Cable1' and 'Air-In' inputs on sticks with - * R828D tuner. We switch at 345 MHz, because that's where the - * noise-floor has about the same level with identical LNA - * settings. The original driver used 320 MHz. - Modded to switch at 300 MHz */ - - - // Only switch if there is a band change (to avoid excessive register writes when tuning rapidly) - int band = 0x00; - if (freq <= MHZ(28.8)) - { - band = HF; // HF - } - else if (freq > MHZ(28.8) && freq < MHZ(300)) // VHF Tuner Input - { - band = VHF; - } - else // UHF Tuner Input - { - band = UHF; - } - - - if ((priv->cfg->rafael_chip == CHIP_R828D) && (band != priv->input)) - { - priv->input = band; - - // Turn LT OFF to save power - rc = r82xx_write_reg_mask(priv, 0x05, 0x80, 0x80); - if (rc < 0) - goto err; - - // Turn open_d off - //rc = r82xx_write_reg_mask(priv, 0x17, 0x00, 0x08); - - - //HF - if (band == HF) //(freq < MHZ(28.8)) - { - // Switch in Cable 2 - rc = r82xx_write_reg_mask(priv, 0x06, 0x08, 0x08); - } - else - { - // Switch out Cable 2 - rc = r82xx_write_reg_mask(priv, 0x06, 0x00, 0x08); - } - - // VHF - // Activate Cable_1 input between 28.8 -> 400 MHz. - if (band == VHF) - { - rc = r82xx_write_reg_mask(priv, 0x05, 0x40, 0x40); - // This register setting appears to enhance Cable 1 input by 2dB - rc = r82xx_write_reg_mask(priv, 0x06, 0x04, 0x04); - } - else - { - rc = r82xx_write_reg_mask(priv, 0x05, 0x00, 0x40); - // Turn off the Cable_1 enhancement (off) - rc = r82xx_write_reg_mask(priv, 0x06, 0x00, 0x04); - } - - if (band == UHF) - { - //Turn air_in LNA ON - rc = r82xx_write_reg_mask(priv, 0x05, 0x00, 0x20); - } - else - { - // Otherwise turn it off to save power (as it uses a lot of power) - rc = r82xx_write_reg_mask(priv, 0x05, 0x20, 0x20); - } + /* determine if notch filters should be on or off + * notches are turned OFF when tuned within the notch band + * and ON when tuned outside the notch band. + */ + uint8_t open_d = (freq <= MHZ(2.2) || (freq >= MHZ(85) && freq <= MHZ(112)) || (freq >= MHZ(172) && freq <= MHZ(242))) ? 0x00 : 0x08; + rc = r82xx_write_reg_mask(priv, 0x17, open_d, 0x08); if (rc < 0) - goto err; + return rc; + + /* select tuner band based on frequency + * and only switch if there is a band change + *(to avoid excessive register writes when tuning rapidly) */ + uint8_t band = (freq <= MHZ(28.8)) ? HF : ((freq > MHZ(28.8) && freq < MHZ(300)) ? VHF : UHF); + + /* switch between tuner inputs on the RTL-SDR Blog V4 */ + if (band != priv->input) + { + priv->input = band; + + /* activate cable 2 (HF input) */ + uint8_t cable_2_in = (band == HF) ? 0x08 : 0x00; + rc = r82xx_write_reg_mask(priv, 0x06, cable_2_in, 0x08); + + /* activate cable 1 (VHF input) */ + uint8_t cable_1_in = (band == VHF) ? 0x40 : 0x00; + rc = r82xx_write_reg_mask(priv, 0x05, cable_1_in, 0x40); + + /* this register appears to boost cable 1 SNR slightly */ + //uint8_t cable_1_enhance = (band == VHF) ? 0x04 : 0x00; + //rc = r82xx_write_reg_mask(priv, 0x06, cable_1_enhance, 0x04); + + /* activate air_in (UHF input) */ + uint8_t air_in = (band == UHF) ? 0x00 : 0x20; + rc = r82xx_write_reg_mask(priv, 0x05, air_in, 0x20); + + if (rc < 0) + goto err; + } } + else /* Standard R828D dongle*/ + { + /* switch between 'Cable1' and 'Air-In' inputs on sticks with + * R828D tuner. We switch at 345 MHz, because that's where the + * noise-floor has about the same level with identical LNA + * settings. The original driver used 320 MHz. */ + air_cable1_in = (freq > MHZ(345)) ? 0x00 : 0x60; + + if ((priv->cfg->rafael_chip == CHIP_R828D) && + (air_cable1_in != priv->input)) { + priv->input = air_cable1_in; + rc = r82xx_write_reg_mask(priv, 0x05, air_cable1_in, 0x60); + } + } + err: if (rc < 0) From b8be1be9374c5b7026aaa80dbf3c3441e002bb08 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Fri, 19 May 2023 01:38:38 +1200 Subject: [PATCH 40/45] add missing code + make standard r828d work --- include/tuner_r82xx.h | 2 +- src/librtlsdr.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/tuner_r82xx.h b/include/tuner_r82xx.h index 8e41ec4..da58cf3 100644 --- a/include/tuner_r82xx.h +++ b/include/tuner_r82xx.h @@ -27,7 +27,7 @@ #define R820T_I2C_ADDR 0x34 #define R828D_I2C_ADDR 0x74 -#define R828D_XTAL_FREQ 28800000 //28800000 //16000000 +#define R828D_XTAL_FREQ 16000000 #define R82XX_CHECK_ADDR 0x00 #define R82XX_CHECK_VAL 0x69 diff --git a/src/librtlsdr.c b/src/librtlsdr.c index 0e76ce9..2b76fb0 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -1603,6 +1603,9 @@ int rtlsdr_open(rtlsdr_dev_t **out_dev, uint32_t index) rtlsdr_init_baseband(dev); dev->dev_lost = 0; + /* Get device manufacturer and product id */ + r = rtlsdr_get_usb_strings(dev, dev->manufact, dev->product, NULL); + /* Probe tuners */ rtlsdr_set_i2c_repeater(dev, 1); @@ -1672,6 +1675,7 @@ found: // If NOT an RTL-SDR Blog V4, set typical R828D 16 MHz freq. Otherwise, keep at 28.8 MHz. if (!(rtlsdr_check_dongle_model(dev, "RTLSDRBlog", "Blog V4"))) { + fprintf(stdout, "setting 16mhz"); dev->tun_xtal = R828D_XTAL_FREQ; } /* fall-through */ From 70805d02eb32a3d0e5e6a5e48b589d6c2f3a498c Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Thu, 8 Jun 2023 22:20:41 +1200 Subject: [PATCH 41/45] minor changes to make testing easier --- src/librtlsdr.c | 12 +++++++----- src/tuner_r82xx.c | 28 +++++++++++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/librtlsdr.c b/src/librtlsdr.c index 2b76fb0..c7c8ffe 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -1193,6 +1193,7 @@ uint32_t rtlsdr_get_sample_rate(rtlsdr_dev_t *dev) return dev->rate; } +/* Used to test any register setting with a toggle */ int rtlsdr_set_testmode(rtlsdr_dev_t *dev, int on) { if (!dev) @@ -1209,13 +1210,14 @@ int rtlsdr_set_agc_mode(rtlsdr_dev_t *dev, int on) /* testing: * replaceme the useless RTL AGC function with a function that implements max LNA gain for sensitivity when on */ - rtlsdr_set_i2c_repeater(dev, 1); - sensitivity_mode_toggle(&dev->r82xx_p, on); - rtlsdr_set_i2c_repeater(dev, 0); + //rtlsdr_set_i2c_repeater(dev, 1); + //sensitivity_mode_toggle(&dev->r82xx_p, on); + //notch_toggle(&dev->r82xx_p, on); + //rtlsdr_set_i2c_repeater(dev, 0); - return 0; + //return 0; - //return rtlsdr_demod_write_reg(dev, 0, 0x19, on ? 0x25 : 0x05, 1); + return rtlsdr_demod_write_reg(dev, 0, 0x19, on ? 0x25 : 0x05, 1); } int rtlsdr_set_direct_sampling(rtlsdr_dev_t *dev, int on) diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c index f69e590..c912f11 100644 --- a/src/tuner_r82xx.c +++ b/src/tuner_r82xx.c @@ -377,9 +377,9 @@ static int r82xx_set_mux(struct r82xx_priv *priv, uint32_t freq) range = &freq_ranges[i]; /* Open Drain */ - rc = r82xx_write_reg_mask(priv, 0x17, range->open_d, 0x08); - if (rc < 0) - return rc; + //rc = r82xx_write_reg_mask(priv, 0x17, range->open_d, 0x08); + //if (rc < 0) + // return rc; /* RF_MUX,Polymux */ rc = r82xx_write_reg_mask(priv, 0x1a, range->rf_mux_ploy, 0xc3); @@ -677,7 +677,7 @@ static int r82xx_sysfreq_sel(struct r82xx_priv *priv, uint32_t freq, return rc; // RTLSDRBLOG. Improve L-band performance by setting PLL drop out to 2.0v - div_buf_cur = 0xa0; + div_buf_cur = 0xa0; rc = r82xx_write_reg_mask(priv, 0x17, div_buf_cur, 0x30); if (rc < 0) return rc; @@ -1145,6 +1145,24 @@ int sensitivity_mode_toggle(struct r82xx_priv *priv, int toggle) return rc; } +int notch_toggle(struct r82xx_priv *priv, int toggle) +{ + int rc; + + if (toggle) + { + //fprintf(stdout, "TOGGLE ON"); + rc = r82xx_write_reg_mask(priv, 0x17, 0x08, 0x08); + } + else + { + //fprintf(stdout, "TOGGLE OFF"); + rc = r82xx_write_reg_mask(priv, 0x17, 0x00, 0x08); + } + + return rc; +} + int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) { int rc = -1; @@ -1180,7 +1198,7 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) /* select tuner band based on frequency * and only switch if there is a band change *(to avoid excessive register writes when tuning rapidly) */ - uint8_t band = (freq <= MHZ(28.8)) ? HF : ((freq > MHZ(28.8) && freq < MHZ(300)) ? VHF : UHF); + uint8_t band = (freq <= MHZ(28.8)) ? HF : ((freq > MHZ(28.8) && freq < MHZ(250)) ? VHF : UHF); /* switch between tuner inputs on the RTL-SDR Blog V4 */ if (band != priv->input) From 2ed800b05a86844f03b78e4242a6ee2a6709d18a Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Thu, 8 Jun 2023 22:25:17 +1200 Subject: [PATCH 42/45] Update README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index d92f255..2b4e61e 100644 --- a/README +++ b/README @@ -18,7 +18,7 @@ Modified RTL-SDR Blog Version 5) Hack to force the bias tee to always be on by setting the unused IR endpoint bit to 0 in the EEPROM. Example to force the BT to be always ON "rtl_eeprom -b y", to remove forced BT "rtl_eeprom -b n" 6) Hack to force direct sampling to be always on by setting the unused remote-enabled bit to 1 in the EEPROM. Example to force direct samping always "rtl_eeprom -q y". To remove forced direct sampling "rtl_eeprom -q n" 7) Repurposed "offset tuning" to toggle bias tee ON/OFF. We can now use the "offset tuning" button in SDR# and other programs to toggle the bias tee if there is no specific button in the GUI. -8) Windows released are linked against libusb 1.0.22 which apparently fixes issues for modern Ryzen motherboards. +8) Support for future R828D based dongles. BIAS TEE NOTE: Always take care that you do not enable the bias tee when the device is connected to a short circuited antenna unless there is an inline LNA. However. if you did by accident, don't worry as the circuit is dually protected with a self-resetting thermal fuse and built in protection on the LDO. Just try not to short it out for days at a time, otherwise you could eventually degrade the thermal fuse. From ba387da7146f9f4e964c1ecf1ede928add965dc2 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Mon, 21 Aug 2023 15:16:24 +1200 Subject: [PATCH 43/45] fix clang compiler issue, fix compiler warnings, tidy up --- include/tuner_r82xx.h | 2 ++ src/librtlsdr.c | 6 +++--- src/tuner_r82xx.c | 32 ++++++++++++++++++++------------ 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/include/tuner_r82xx.h b/include/tuner_r82xx.h index da58cf3..8bbf605 100644 --- a/include/tuner_r82xx.h +++ b/include/tuner_r82xx.h @@ -120,4 +120,6 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq); int r82xx_set_gain(struct r82xx_priv *priv, int set_manual_gain, int gain); int r82xx_set_bandwidth(struct r82xx_priv *priv, int bandwidth, uint32_t rate); +int rtlsdr_check_dongle_model(void *dev, char* manufact_check, char* product_check); + #endif diff --git a/src/librtlsdr.c b/src/librtlsdr.c index c7c8ffe..feb1ed0 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -1497,8 +1497,8 @@ int rtlsdr_get_index_by_serial(const char *serial) } /* Returns true if the manufact_check and product_check strings match what is in the dongles EEPROM */ -int rtlsdr_check_dongle_model(rtlsdr_dev_t *dev, char* manufact_check, char* product_check) { - if ((strcmp(dev->manufact, manufact_check) == 0 && strcmp(dev->product, product_check) == 0)) +int rtlsdr_check_dongle_model(void *dev, char *manufact_check, char *product_check) { + if ((strcmp(((rtlsdr_dev_t *)dev)->manufact, manufact_check) == 0 && strcmp(((rtlsdr_dev_t *)dev)->product, product_check) == 0)) { return 1; } @@ -2218,4 +2218,4 @@ int rtlsdr_set_gpio(rtlsdr_dev_t *dev, int gpio_pin, int on) rtlsdr_set_gpio_bit(dev, gpio_pin, on); return 1; -} \ No newline at end of file +} diff --git a/src/tuner_r82xx.c b/src/tuner_r82xx.c index c912f11..ddff696 100644 --- a/src/tuner_r82xx.c +++ b/src/tuner_r82xx.c @@ -1131,14 +1131,14 @@ int sensitivity_mode_toggle(struct r82xx_priv *priv, int toggle) { //fprintf(stdout, "TOGGLE ON"); priv->gain_sensitivity_mode = 1; - r82xx_set_gain(priv, priv->gain_manual_mode, priv->gain); + rc = r82xx_set_gain(priv, priv->gain_manual_mode, priv->gain); //rc = r82xx_write_reg_mask(priv, 0x06, 0x10, 0x10); } else { priv->gain_sensitivity_mode = 0; //fprintf(stdout, "TOGGLE OFF"); - r82xx_set_gain(priv, priv->gain_manual_mode, priv->gain); + rc = r82xx_set_gain(priv, priv->gain_manual_mode, priv->gain); //rc = r82xx_write_reg_mask(priv, 0x06, 0x00, 0x10); } @@ -1166,14 +1166,22 @@ int notch_toggle(struct r82xx_priv *priv, int toggle) int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) { int rc = -1; - int is_rtlsdr_blog_v4 = rtlsdr_check_dongle_model(priv->rtl_dev, "RTLSDRBlog", "Blog V4"); + int is_rtlsdr_blog_v4; + uint32_t upconvert_freq; + uint32_t lo_freq; + uint8_t air_cable1_in; + uint8_t open_d; + uint8_t band; + uint8_t cable_2_in; + uint8_t cable_1_in; + uint8_t air_in; + + is_rtlsdr_blog_v4 = rtlsdr_check_dongle_model(priv->rtl_dev, "RTLSDRBlog", "Blog V4"); /* if it's an RTL-SDR Blog V4, automatically upconvert by 28.8 MHz if we tune to HF * so that we don't need to manually set any upconvert offset in the SDR software */ - uint32_t upconvert_freq = is_rtlsdr_blog_v4 ? ((freq < MHZ(28.8)) ? (freq + MHZ(28.8)) : freq) : freq; - - uint32_t lo_freq = upconvert_freq + priv->int_freq; - uint8_t air_cable1_in; + upconvert_freq = is_rtlsdr_blog_v4 ? ((freq < MHZ(28.8)) ? (freq + MHZ(28.8)) : freq) : freq; + lo_freq = upconvert_freq + priv->int_freq; rc = r82xx_set_mux(priv, lo_freq); if (rc < 0) @@ -1189,7 +1197,7 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) * notches are turned OFF when tuned within the notch band * and ON when tuned outside the notch band. */ - uint8_t open_d = (freq <= MHZ(2.2) || (freq >= MHZ(85) && freq <= MHZ(112)) || (freq >= MHZ(172) && freq <= MHZ(242))) ? 0x00 : 0x08; + open_d = (freq <= MHZ(2.2) || (freq >= MHZ(85) && freq <= MHZ(112)) || (freq >= MHZ(172) && freq <= MHZ(242))) ? 0x00 : 0x08; rc = r82xx_write_reg_mask(priv, 0x17, open_d, 0x08); if (rc < 0) @@ -1198,7 +1206,7 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) /* select tuner band based on frequency * and only switch if there is a band change *(to avoid excessive register writes when tuning rapidly) */ - uint8_t band = (freq <= MHZ(28.8)) ? HF : ((freq > MHZ(28.8) && freq < MHZ(250)) ? VHF : UHF); + band = (freq <= MHZ(28.8)) ? HF : ((freq > MHZ(28.8) && freq < MHZ(250)) ? VHF : UHF); /* switch between tuner inputs on the RTL-SDR Blog V4 */ if (band != priv->input) @@ -1206,11 +1214,11 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) priv->input = band; /* activate cable 2 (HF input) */ - uint8_t cable_2_in = (band == HF) ? 0x08 : 0x00; + cable_2_in = (band == HF) ? 0x08 : 0x00; rc = r82xx_write_reg_mask(priv, 0x06, cable_2_in, 0x08); /* activate cable 1 (VHF input) */ - uint8_t cable_1_in = (band == VHF) ? 0x40 : 0x00; + cable_1_in = (band == VHF) ? 0x40 : 0x00; rc = r82xx_write_reg_mask(priv, 0x05, cable_1_in, 0x40); /* this register appears to boost cable 1 SNR slightly */ @@ -1218,7 +1226,7 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq) //rc = r82xx_write_reg_mask(priv, 0x06, cable_1_enhance, 0x04); /* activate air_in (UHF input) */ - uint8_t air_in = (band == UHF) ? 0x00 : 0x20; + air_in = (band == UHF) ? 0x00 : 0x20; rc = r82xx_write_reg_mask(priv, 0x05, air_in, 0x20); if (rc < 0) From 936fd5135827591c875819b1922791435fa593a7 Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Wed, 23 Aug 2023 15:40:02 +1200 Subject: [PATCH 44/45] remove debug output --- src/librtlsdr.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/librtlsdr.c b/src/librtlsdr.c index feb1ed0..e5440f8 100644 --- a/src/librtlsdr.c +++ b/src/librtlsdr.c @@ -1675,9 +1675,7 @@ found: switch (dev->tuner_type) { case RTLSDR_TUNER_R828D: // If NOT an RTL-SDR Blog V4, set typical R828D 16 MHz freq. Otherwise, keep at 28.8 MHz. - if (!(rtlsdr_check_dongle_model(dev, "RTLSDRBlog", "Blog V4"))) - { - fprintf(stdout, "setting 16mhz"); + if (!(rtlsdr_check_dongle_model(dev, "RTLSDRBlog", "Blog V4"))) { dev->tun_xtal = R828D_XTAL_FREQ; } /* fall-through */ From d0dd9837ad2f1eb75f85b125a39367956f74217f Mon Sep 17 00:00:00 2001 From: rtlsdrblog Date: Wed, 23 Aug 2023 15:44:28 +1200 Subject: [PATCH 45/45] align with osmocom changes --- include/rtlsdr_i2c.h | 1 + include/tuner_r82xx.h | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/include/rtlsdr_i2c.h b/include/rtlsdr_i2c.h index 7676689..5d144c2 100644 --- a/include/rtlsdr_i2c.h +++ b/include/rtlsdr_i2c.h @@ -1,6 +1,7 @@ #ifndef __I2C_H #define __I2C_H +int rtlsdr_check_dongle_model(void *dev, char* manufact_check, char* product_check); uint32_t rtlsdr_get_tuner_clock(void *dev); int rtlsdr_i2c_write_fn(void *dev, uint8_t addr, uint8_t *buf, int len); int rtlsdr_i2c_read_fn(void *dev, uint8_t addr, uint8_t *buf, int len); diff --git a/include/tuner_r82xx.h b/include/tuner_r82xx.h index 8bbf605..da58cf3 100644 --- a/include/tuner_r82xx.h +++ b/include/tuner_r82xx.h @@ -120,6 +120,4 @@ int r82xx_set_freq(struct r82xx_priv *priv, uint32_t freq); int r82xx_set_gain(struct r82xx_priv *priv, int set_manual_gain, int gain); int r82xx_set_bandwidth(struct r82xx_priv *priv, int bandwidth, uint32_t rate); -int rtlsdr_check_dongle_model(void *dev, char* manufact_check, char* product_check); - #endif