@ -43,8 +43,8 @@ typedef struct rtlsdr_config {
char product [ MAX_STR_SIZE ] ;
char product [ MAX_STR_SIZE ] ;
char serial [ MAX_STR_SIZE ] ;
char serial [ MAX_STR_SIZE ] ;
int have_serial ;
int have_serial ;
int enable_ir ;
int enable_bt ;
int remote_wakeup ;
int direct_sampling_on ;
} rtlsdr_config_t ;
} rtlsdr_config_t ;
void dump_config ( rtlsdr_config_t * conf )
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: \t \t %s \n " , conf - > serial ) ;
fprintf ( stderr , " Serial number enabled: \t " ) ;
fprintf ( stderr , " Serial number enabled: \t " ) ;
fprintf ( stderr , conf - > have_serial ? " yes \n " : " no \n " ) ;
fprintf ( stderr , conf - > have_serial ? " yes \n " : " no \n " ) ;
fprintf ( stderr , " IR endpoint enabled :\t " ) ;
fprintf ( stderr , " Bias-T Always ON :\t " ) ;
fprintf ( stderr , conf - > enable_ir ? " yes \n " : " no \n " ) ;
fprintf ( stderr , conf - > enable_bt ? " no \n " : " yes \n " ) ; // 0 is ON for this
fprintf ( stderr , " Remote wakeup enabled :\t " ) ;
fprintf ( stderr , " Direct Sampling Always ON :\t " ) ;
fprintf ( stderr , conf - > remote_wakeup ? " yes \n " : " no \n " ) ;
fprintf ( stderr , conf - > direct_sampling_on ? " yes \n " : " no \n " ) ;
fprintf ( stderr , " __________________________________________ \n " ) ;
fprintf ( stderr , " __________________________________________ \n " ) ;
}
}
@ -74,7 +74,8 @@ void usage(void)
" \t [-m <str> set manufacturer string] \n "
" \t [-m <str> set manufacturer string] \n "
" \t [-p <str> set product string] \n "
" \t [-p <str> set product string] \n "
" \t [-s <str> set serial number string] \n "
" \t [-s <str> 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 <conf> generate default config and write to device] \n "
" \t [-g <conf> generate default config and write to device] \n "
" \t [ <conf> can be one of:] \n "
" \t [ <conf> can be one of:] \n "
" \t [ realtek \t \t Realtek default (as without EEPROM)] \n "
" \t [ realtek \t \t Realtek 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 - > vendor_id = dat [ 2 ] | ( dat [ 3 ] < < 8 ) ;
conf - > product_id = dat [ 4 ] | ( dat [ 5 ] < < 8 ) ;
conf - > product_id = dat [ 4 ] | ( dat [ 5 ] < < 8 ) ;
conf - > have_serial = ( dat [ 6 ] = = 0xa5 ) ? 1 : 0 ;
conf - > have_serial = ( dat [ 6 ] = = 0xa5 ) ? 1 : 0 ;
conf - > remote_wakeup = ( dat [ 7 ] & 0x01 ) ? 1 : 0 ;
conf - > direct_sampling_on = ( dat [ 7 ] & 0x01 ) ? 1 : 0 ;
conf - > enable_ir = ( dat [ 7 ] & 0x02 ) ? 1 : 0 ;
conf - > enable_bt = ( dat [ 7 ] & 0x02 ) ? 1 : 0 ;
pos = get_string_descriptor ( STR_OFFSET , dat , conf - > manufacturer ) ;
pos = get_string_descriptor ( STR_OFFSET , dat , conf - > manufacturer ) ;
pos = get_string_descriptor ( pos , dat , conf - > product ) ;
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 [ 5 ] = ( conf - > product_id > > 8 ) & 0xff ;
dat [ 6 ] = conf - > have_serial ? 0xa5 : 0x00 ;
dat [ 6 ] = conf - > have_serial ? 0xa5 : 0x00 ;
dat [ 7 ] = 0x14 ;
dat [ 7 ] = 0x14 ;
dat [ 7 ] | = conf - > remote_wakeup ? 0x01 : 0x00 ;
dat [ 7 ] | = conf - > direct_sampling_on ? 0x01 : 0x00 ;
dat [ 7 ] | = conf - > enable_ir ? 0x02 : 0x00 ;
dat [ 7 ] | = conf - > enable_bt ? 0x02 : 0x00 ;
dat [ 8 ] = 0x02 ;
dat [ 8 ] = 0x02 ;
pos = set_string_descriptor ( STR_OFFSET , dat , conf - > manufacturer ) ;
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 - > product , " RTL2832U DVB-T " ) ;
strcpy ( conf - > serial , " 0 " ) ;
strcpy ( conf - > serial , " 0 " ) ;
conf - > have_serial = 1 ;
conf - > have_serial = 1 ;
conf - > enable_ir = 0 ;
conf - > enable_bt = 0 ;
conf - > remote_wakeup = 1 ;
conf - > direct_sampling_on = 1 ;
break ;
break ;
case REALTEK_EEPROM :
case REALTEK_EEPROM :
fprintf ( stderr , " Realtek default OEM with EEPROM \n " ) ;
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 - > product , " RTL2838UHIDIR " ) ;
strcpy ( conf - > serial , " 00000001 " ) ;
strcpy ( conf - > serial , " 00000001 " ) ;
conf - > have_serial = 1 ;
conf - > have_serial = 1 ;
conf - > enable_ir = 1 ;
conf - > enable_bt = 1 ;
conf - > remote_wakeup = 0 ;
conf - > direct_sampling_on = 0 ;
break ;
break ;
case TERRATEC_NOXON :
case TERRATEC_NOXON :
fprintf ( stderr , " Terratec NOXON DAB Stick \n " ) ;
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 - > product , " DAB Stick " ) ;
strcpy ( conf - > serial , " 0 " ) ;
strcpy ( conf - > serial , " 0 " ) ;
conf - > have_serial = 1 ;
conf - > have_serial = 1 ;
conf - > enable_ir = 0 ;
conf - > enable_bt = 0 ;
conf - > remote_wakeup = 1 ;
conf - > direct_sampling_on = 1 ;
break ;
break ;
case TERRATEC_T_BLACK :
case TERRATEC_T_BLACK :
fprintf ( stderr , " Terratec T Stick Black \n " ) ;
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 - > product , " RTL2838UHIDIR " ) ;
strcpy ( conf - > serial , " 00000001 " ) ;
strcpy ( conf - > serial , " 00000001 " ) ;
conf - > have_serial = 1 ;
conf - > have_serial = 1 ;
conf - > enable_ir = 1 ;
conf - > enable_bt = 1 ;
conf - > remote_wakeup = 0 ;
conf - > direct_sampling_on = 0 ;
break ;
break ;
case TERRATEC_T_PLUS :
case TERRATEC_T_PLUS :
fprintf ( stderr , " Terratec ran T Stick+ \n " ) ;
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 - > product , " RTL2838UHIDIR " ) ;
strcpy ( conf - > serial , " 00000001 " ) ;
strcpy ( conf - > serial , " 00000001 " ) ;
conf - > have_serial = 1 ;
conf - > have_serial = 1 ;
conf - > enable_ir = 1 ;
conf - > enable_bt = 1 ;
conf - > remote_wakeup = 0 ;
conf - > direct_sampling_on = 0 ;
break ;
break ;
default :
default :
break ;
break ;
@ -261,10 +262,11 @@ int main(int argc, char **argv)
int flash_file = 0 ;
int flash_file = 0 ;
int default_config = 0 ;
int default_config = 0 ;
int change = 0 ;
int change = 0 ;
int ir_endpoint = 0 ;
int enable_bt = 0 ;
int direct_sampling_on = 0 ;
char ch ;
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 ) {
switch ( opt ) {
case ' d ' :
case ' d ' :
dev_index = atoi ( optarg ) ;
dev_index = atoi ( optarg ) ;
@ -281,8 +283,30 @@ int main(int argc, char **argv)
serial_str = optarg ;
serial_str = optarg ;
change = 1 ;
change = 1 ;
break ;
break ;
case ' i ' :
case ' b ' :
ir_endpoint = ( atoi ( optarg ) > 0 ) ? 1 : - 1 ;
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 ;
change = 1 ;
break ;
break ;
case ' g ' :
case ' g ' :
@ -380,8 +404,11 @@ int main(int argc, char **argv)
strncpy ( ( char * ) & conf . serial , serial_str , MAX_STR_SIZE ) ;
strncpy ( ( char * ) & conf . serial , serial_str , MAX_STR_SIZE ) ;
}
}
if ( ir_endpoint ! = 0 )
if ( enable_bt ! = 0 )
conf . enable_ir = ( ir_endpoint > 0 ) ? 1 : 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 )
if ( ! change )
goto exit ;
goto exit ;