[PATCH 1/2] rtl_eeprom: Add -x to store exact xtal frequency in Hz.

Andreas Seltenreich andreas+git at gate450.dyndns.org
Wed May 29 11:29:06 UTC 2013


Stored in the last four bytes of the eeprom in network byte order.
---
 src/rtl_eeprom.c |   17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/rtl_eeprom.c b/src/rtl_eeprom.c
index 35191de..51024d6 100644
--- a/src/rtl_eeprom.c
+++ b/src/rtl_eeprom.c
@@ -23,8 +23,10 @@
 
 #ifndef _WIN32
 #include <unistd.h>
+#include <arpa/inet.h>
 #else
 #include <Windows.h>
+#include <WinSock2.h>
 #include "getopt/getopt.h"
 #endif
 
@@ -84,6 +86,7 @@ void usage(void)
 		"\t[   terratec_plus\tTerratec T Stick+ (DVB-T/DAB)]\n"
 		"\t[-w <filename> write dumped file to device]\n"
 		"\t[-r <filename> dump EEPROM to file]\n"
+		"\t[-x <Hz> store calibrated XTAL frequency]\n"
 		"\t[-h display this help text]\n"
 		"\nUse on your own risk, especially -w!\n");
 	exit(1);
@@ -262,9 +265,10 @@ int main(int argc, char **argv)
 	int default_config = 0;
 	int change = 0;
 	int ir_endpoint = 0;
+	uint32_t xtal_freq = 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:i:g:w:r:x:h?")) != -1) {
 		switch (opt) {
 		case 'd':
 			dev_index = atoi(optarg);
@@ -306,6 +310,9 @@ int main(int argc, char **argv)
 		case 'r':
 			filename = optarg;
 			break;
+		case 'x':
+			xtal_freq = htonl(atol(optarg));
+			break;
 		default:
 			usage();
 			break;
@@ -347,6 +354,14 @@ int main(int argc, char **argv)
 	if (r < 0)
 		return -1;
 
+	if(xtal_freq) {
+	  	r = rtlsdr_write_eeprom(dev, (void*)&xtal_freq, EEPROM_SIZE-4, 4);
+		if (r < 0)
+		  	fprintf(stderr, "Error while writing XTAL frequency to EEPROM: %i\n", r);
+		else
+		  	fprintf(stderr, "XTAL frequency successfully written.\n");
+	}
+
 	fprintf(stderr, "Current configuration:\n");
 	parse_eeprom_to_conf(&conf, buf);
 	dump_config(&conf);
-- 
1.7.10.4






More information about the osmocom-sdr mailing list