mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-11-09 21:22:39 -05:00
nwztools/scsitool: various improvements
The tool now provides more useful information for developers when the device is not supported. Is also has a new verb "help_us" that also prints all this information (notably the device info and model ID). Change-Id: I04baec8fff23eb83a0408add6296b5d42e9aa8e7
This commit is contained in:
parent
698779e3e8
commit
d9da4833a7
1 changed files with 55 additions and 19 deletions
|
|
@ -41,6 +41,8 @@ const char *g_force_series = NULL;
|
|||
char *g_out_prefix = NULL;
|
||||
rb_scsi_device_t g_dev;
|
||||
|
||||
void help_us(bool unsupported, unsigned long model_id);
|
||||
|
||||
static void print_hex(void *_buffer, int buffer_size)
|
||||
{
|
||||
uint8_t *buffer = _buffer;
|
||||
|
|
@ -297,6 +299,28 @@ int get_dnk_prop(int argc, char **argv)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* get the model DID: code stolen from get_dnk_prop */
|
||||
int get_model_id(unsigned long *model_id)
|
||||
{
|
||||
uint8_t mid_buf[4];
|
||||
int mid_buf_size = sizeof(mid_buf);
|
||||
int ret = do_dnk_cmd(true, 0x23, 9, 0, mid_buf, &mid_buf_size);
|
||||
if(ret)
|
||||
{
|
||||
cprintf(RED, "Cannot get model ID from device: %d\n", ret);
|
||||
cprintf(RED, "You device is most likely not compatible with this tool.\n");
|
||||
return 2;
|
||||
}
|
||||
if(mid_buf_size != sizeof(mid_buf))
|
||||
{
|
||||
cprintf(RED, "Cannot get model ID from device: device didn't send the expected amount of data\n");
|
||||
cprintf(RED, "You device is most likely not compatible with this tool.\n");
|
||||
return 3;
|
||||
}
|
||||
*model_id = get_big_endian32(&mid_buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int get_model_and_series(int *model_index, int *series_index)
|
||||
{
|
||||
/* if the user forced the series, simply match by name, special for '?' which
|
||||
|
|
@ -322,28 +346,17 @@ int get_model_and_series(int *model_index, int *series_index)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* we need to get the model ID: code stolen from get_dnk_prop */
|
||||
uint8_t mid_buf[4];
|
||||
int mid_buf_size = sizeof(mid_buf);
|
||||
int ret = do_dnk_cmd(true, 0x23, 9, 0, mid_buf, &mid_buf_size);
|
||||
if(ret)
|
||||
{
|
||||
cprintf(RED, "Cannot get model ID from device: %d\n", ret);
|
||||
return 2;
|
||||
}
|
||||
if(mid_buf_size != sizeof(mid_buf))
|
||||
{
|
||||
cprintf(RED, "Cannot get model ID from device: device didn't send the expected amount of data\n");
|
||||
return 3;
|
||||
}
|
||||
unsigned long model_id = get_big_endian32(&mid_buf);
|
||||
/* we need to get the model ID */
|
||||
unsigned long model_id;
|
||||
if(get_model_id(&model_id))
|
||||
return 1;
|
||||
*model_index = -1;
|
||||
for(int i = 0; i < NWZ_MODEL_COUNT; i++)
|
||||
if(nwz_model[i].mid == model_id)
|
||||
*model_index = i;
|
||||
if(*model_index == -1)
|
||||
{
|
||||
cprintf(RED, "Your device is not supported. Please contact developers.\n");
|
||||
help_us(true, model_id);
|
||||
return 3;
|
||||
}
|
||||
*series_index = -1;
|
||||
|
|
@ -353,7 +366,7 @@ int get_model_and_series(int *model_index, int *series_index)
|
|||
*series_index = i;
|
||||
if(*series_index == -1)
|
||||
{
|
||||
printf("Your device is not supported. Please contact developers.\n");
|
||||
help_us(true, model_id);
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
|
@ -812,6 +825,8 @@ int do_dest(int argc, char **argv)
|
|||
/* get model/series */
|
||||
int model_index, series_index;
|
||||
int ret = get_model_and_series(&model_index, &series_index);
|
||||
if(ret)
|
||||
return ret;
|
||||
int shp_index = NWZ_NVP_INVALID;
|
||||
if(nwz_series[series_index].nvp_index)
|
||||
shp_index = (*nwz_series[series_index].nvp_index)[NWZ_NVP_SHP];
|
||||
|
|
@ -843,9 +858,9 @@ int do_dest(int argc, char **argv)
|
|||
for(size_t i = 0; i < DEST_COUNT; i++)
|
||||
if(dst == g_dest_list[i].dest)
|
||||
dst_name = g_dest_list[i].name;
|
||||
printf("Destination: %s (%lx)\n", dst_name, dst);
|
||||
cprintf_field("Destination: ", "%s (%lx)\n", dst_name, dst);
|
||||
unsigned long sps = get_little_endian32(shp + 4);
|
||||
printf("Sound pressure: %lu (%s)\n", sps, sps == 0 ? "off" : "on");
|
||||
cprintf_field("Sound pressure: ", "%lu (%s)\n", sps, sps == 0 ? "off" : "on");
|
||||
free(shp);
|
||||
}
|
||||
/* set */
|
||||
|
|
@ -905,6 +920,15 @@ int do_dest(int argc, char **argv)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int do_help_us(int argc, char **argv)
|
||||
{
|
||||
unsigned long model_id;
|
||||
if(get_model_id(&model_id))
|
||||
return 1;
|
||||
help_us(false, model_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
typedef int (*cmd_fn_t)(int argc, char **argv);
|
||||
|
||||
struct cmd_t
|
||||
|
|
@ -925,6 +949,7 @@ struct cmd_t cmd_list[] =
|
|||
{ "get_dhp", "Get destination headphones", get_dhp },
|
||||
{ "do_fw_upgrade", "Do a firmware upgrade", do_fw_upgrade },
|
||||
{ "dest_tool", "Get/Set destination and sound pressure regulation", do_dest },
|
||||
{ "help_us", "Provide useful information for developers to help us", do_help_us },
|
||||
};
|
||||
|
||||
#define NR_CMDS (sizeof(cmd_list) / sizeof(cmd_list[0]))
|
||||
|
|
@ -953,6 +978,17 @@ static void usage(void)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
void help_us(bool unsupported, unsigned long model_id)
|
||||
{
|
||||
if(unsupported)
|
||||
cprintf(RED, "Your device is not supported yet.\n");
|
||||
cprintf(RED, "Please contact developers and send them the information below.\n");
|
||||
cprintf(RED, "See https://www.rockbox.org/wiki/SonyNWDestTool#ReportDevice\n");
|
||||
cprintf(BLUE, "-------------------[ Paste information below ]-------------------\n");
|
||||
cprintf_field("Model ID: ", "%#lx\n", model_id);
|
||||
get_dev_info(0, NULL);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
while(1)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue