summaryrefslogtreecommitdiff
path: root/apps/plugins/helloworld.lua
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2016-05-02 21:37:38 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2016-05-28 17:18:32 +0200
commit643c0a1e0e80ee6010353201792ba6e2be7e1ced (patch)
tree0b039050be720483935978575f77351db143463f /apps/plugins/helloworld.lua
parent423c64770c04a62e34775c37a7e09a60f6ccbc4c (diff)
downloadrockbox-643c0a1e0e80ee6010353201792ba6e2be7e1ced.zip
rockbox-643c0a1e0e80ee6010353201792ba6e2be7e1ced.tar.gz
rockbox-643c0a1e0e80ee6010353201792ba6e2be7e1ced.tar.bz2
rockbox-643c0a1e0e80ee6010353201792ba6e2be7e1ced.tar.xz
imx233: simplify timrot API
The old timrot setup API was very low-level and unfriendly. The new one makes in easier to select the frequency source. Use to simplify timer and kernel timer code. Change-Id: Iffcdf11c00e925be9ec8d9a4efc74b197b6bd2aa
Diffstat (limited to 'apps/plugins/helloworld.lua')
0 files changed, 0 insertions, 0 deletions
d("Vendor specific: ", "%.32s\n", devinfo->vendor_specific);
+}
+
+typedef void (*dpcc_print_func_t)(void *buffer, int buf_size);
+
struct dpcc_prop_t
{
char *user_name;
char name[7];
- uint8_t cdb1;
+ uint8_t cdb1; // flags: bit 0 means size flag (means size in paragraph)
int size;
+ dpcc_print_func_t print_func;
};
struct dpcc_prop_t dpcc_prop_list[] =
{
- { "dev_info", "DEVINFO", 0, 0x80 },
+ { "dev_info", "DEVINFO", 0, 0x80, dpcc_print_devinfo },
/* there are more but they are very obscure */
};
@@ -534,7 +565,7 @@ int do_dpcc_cmd(uint32_t cmd, struct dpcc_prop_t *prop, void *buffer, int *buffe
cdb[2] = cmd;
if(cmd == 0)
{
- strncpy((char *)(cdb + 3), prop->name, 7); // warning: erase cdb[10] !
+ memcpy((char *)(cdb + 3), prop->name, 7);
cdb[1] = prop->cdb1;
if(prop->cdb1 & 1)
cdb[10] = (*buffer_size + 15) / 16;
@@ -575,7 +606,7 @@ int get_dpcc_prop(int argc, char **argv)
for(unsigned i = 0; i < NR_DPCC_PROPS; i++)
if(strcmp(dpcc_prop_list[i].user_name, argv[0]) == 0)
prop = dpcc_prop_list[i];
- if(prop.user_name[0] == 0)
+ if(prop.user_name == 0)
{
cprintf(GREY, "Unknown property '%s'\n", argv[0]);
return 1;
@@ -641,7 +672,35 @@ int get_dev_info(int argc, char **argv)
(void )argv;
uint8_t cdb[12] = {0xfc, 0, 0x20, 'd', 'b', 'm', 'n', 0, 0x80, 0, 0, 0};
- char *buffer = malloc(0x81);
+ char *buffer = malloc(0x80);
+ int buffer_size = 0x80;
+ uint8_t sense[32];
+ int sense_size = 32;
+
+ int ret = do_scsi(cdb, 12, DO_READ, sense, &sense_size, buffer, &buffer_size);
+ if(ret < 0)
+ return ret;
+ ret = do_sense_analysis(ret, sense, sense_size);
+ if(ret)
+ {
+ cprintf(GREY, "An error occured during request\n");
+ return ret;
+ }
+ buffer[buffer_size] = 0;
+ cprintf_field("Raw device info:", "\n");
+ print_hex(buffer, buffer_size);
+ // the 16 first bytes are 'DEVINFO', 0x80, followed by zeroes
+ dpcc_print_devinfo(buffer + 16, buffer_size - 16);
+ return 0;
+}
+
+int get_dhp(int argc, char **argv)
+{
+ (void) argc;
+ (void )argv;
+ uint8_t cdb[12] = {0xfc, 0, 'D', 'd', 'h', 'p', 0, 0, 0, 0, 0, 0};
+
+ char *buffer = malloc(0x80);
int buffer_size = 0x80;
uint8_t sense[32];
int sense_size = 32;
@@ -651,9 +710,12 @@ int get_dev_info(int argc, char **argv)
return ret;
ret = do_sense_analysis(ret, sense, sense_size);
if(ret)
+ {
+ cprintf(GREY, "An error occured during request\n");
return ret;
+ }
buffer[buffer_size] = 0;
- cprintf_field("Device Info:", "\n");
+ cprintf_field("Destination/Headphones:", "\n");
print_hex(buffer, buffer_size);
return 0;
}
@@ -839,6 +901,7 @@ struct cmd_t cmd_list[] =
{ "get_dpcc_prop", "Get DPCC property", get_dpcc_prop },
{ "get_user_time", "Get user time", get_user_time },
{ "get_dev_info", "Get device info", get_dev_info },
+ { "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 },
};