diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2013-07-13 17:38:34 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2013-07-13 17:47:01 +0200 |
commit | f617da0552c95202807c5e41c70bc78a3189378e (patch) | |
tree | bcb5c16a82515465661430d90eede48000918700 /utils/hwstub/tools | |
parent | 140783ef66eef379feedcfef5403c5729d38936a (diff) | |
download | rockbox-f617da0552c95202807c5e41c70bc78a3189378e.tar.gz rockbox-f617da0552c95202807c5e41c70bc78a3189378e.zip |
hwstub: enhance protocol with more functions
Change-Id: I7944249c2f7ea3e180e7b79ee8ae402d1d0742d3
Diffstat (limited to 'utils/hwstub/tools')
-rw-r--r-- | utils/hwstub/tools/hwstub_shell.cpp | 86 | ||||
-rw-r--r-- | utils/hwstub/tools/init.lua | 9 |
2 files changed, 40 insertions, 55 deletions
diff --git a/utils/hwstub/tools/hwstub_shell.cpp b/utils/hwstub/tools/hwstub_shell.cpp index 58147319e0..69e580f88e 100644 --- a/utils/hwstub/tools/hwstub_shell.cpp +++ b/utils/hwstub/tools/hwstub_shell.cpp | |||
@@ -41,6 +41,7 @@ struct hwstub_device_t g_hwdev; | |||
41 | struct usb_resp_info_version_t g_hwdev_ver; | 41 | struct usb_resp_info_version_t g_hwdev_ver; |
42 | struct usb_resp_info_layout_t g_hwdev_layout; | 42 | struct usb_resp_info_layout_t g_hwdev_layout; |
43 | struct usb_resp_info_features_t g_hwdev_features; | 43 | struct usb_resp_info_features_t g_hwdev_features; |
44 | struct usb_resp_info_target_t g_hwdev_target; | ||
44 | struct usb_resp_info_stmp_t g_hwdev_stmp; | 45 | struct usb_resp_info_stmp_t g_hwdev_stmp; |
45 | lua_State *g_lua; | 46 | lua_State *g_lua; |
46 | 47 | ||
@@ -253,12 +254,22 @@ bool my_lua_import_hwstub() | |||
253 | lua_setfield(g_lua, -2, "ocram"); | 254 | lua_setfield(g_lua, -2, "ocram"); |
254 | lua_setfield(g_lua, -2, "layout"); | 255 | lua_setfield(g_lua, -2, "layout"); |
255 | 256 | ||
256 | lua_newtable(g_lua); // stmp | 257 | lua_newtable(g_lua); // target |
257 | lua_pushinteger(g_lua, g_hwdev_stmp.chipid); | 258 | lua_pushstring(g_lua, g_hwdev_target.name); |
258 | lua_setfield(g_lua, -2, "chipid"); | 259 | lua_setfield(g_lua, -2, "name"); |
259 | lua_pushinteger(g_lua, g_hwdev_stmp.rev); | 260 | lua_pushinteger(g_lua, g_hwdev_target.id); |
260 | lua_setfield(g_lua, -2, "rev"); | 261 | lua_setfield(g_lua, -2, "id"); |
261 | lua_setfield(g_lua, -2, "stmp"); | 262 | lua_setfield(g_lua, -2, "target"); |
263 | |||
264 | if(g_hwdev_target.id == HWSTUB_TARGET_STMP) | ||
265 | { | ||
266 | lua_newtable(g_lua); // stmp | ||
267 | lua_pushinteger(g_lua, g_hwdev_stmp.chipid); | ||
268 | lua_setfield(g_lua, -2, "chipid"); | ||
269 | lua_pushinteger(g_lua, g_hwdev_stmp.rev); | ||
270 | lua_setfield(g_lua, -2, "rev"); | ||
271 | lua_setfield(g_lua, -2, "stmp"); | ||
272 | } | ||
262 | 273 | ||
263 | lua_newtable(g_lua); // features | 274 | lua_newtable(g_lua); // features |
264 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_LOG)); | 275 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_LOG)); |
@@ -269,8 +280,6 @@ bool my_lua_import_hwstub() | |||
269 | lua_setfield(g_lua, -2, "call"); | 280 | lua_setfield(g_lua, -2, "call"); |
270 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_JUMP)); | 281 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_JUMP)); |
271 | lua_setfield(g_lua, -2, "jump"); | 282 | lua_setfield(g_lua, -2, "jump"); |
272 | lua_pushboolean(g_lua, !!(g_hwdev_features.feature_mask & HWSTUB_FEATURE_AES_OTP)); | ||
273 | lua_setfield(g_lua, -2, "aes_otp"); | ||
274 | lua_setfield(g_lua, -2, "features"); | 283 | lua_setfield(g_lua, -2, "features"); |
275 | 284 | ||
276 | lua_pushlightuserdata(g_lua, (void *)&hw_read8); | 285 | lua_pushlightuserdata(g_lua, (void *)&hw_read8); |
@@ -751,14 +760,25 @@ int main(int argc, char **argv) | |||
751 | goto Lerr; | 760 | goto Lerr; |
752 | } | 761 | } |
753 | 762 | ||
754 | // get STMP specific information | 763 | // get target |
755 | ret = hwstub_get_info(&g_hwdev, HWSTUB_INFO_STMP, &g_hwdev_stmp, sizeof(g_hwdev_stmp)); | 764 | ret = hwstub_get_info(&g_hwdev, HWSTUB_INFO_TARGET, &g_hwdev_target, sizeof(g_hwdev_target)); |
756 | if(ret != sizeof(g_hwdev_stmp)) | 765 | if(ret != sizeof(g_hwdev_target)) |
757 | { | 766 | { |
758 | printf("Cannot get stmp: %d\n", ret); | 767 | printf("Cannot get target: %d\n", ret); |
759 | goto Lerr; | 768 | goto Lerr; |
760 | } | 769 | } |
761 | 770 | ||
771 | // get STMP specific information | ||
772 | if(g_hwdev_target.id == HWSTUB_TARGET_STMP) | ||
773 | { | ||
774 | ret = hwstub_get_info(&g_hwdev, HWSTUB_INFO_STMP, &g_hwdev_stmp, sizeof(g_hwdev_stmp)); | ||
775 | if(ret != sizeof(g_hwdev_stmp)) | ||
776 | { | ||
777 | printf("Cannot get stmp: %d\n", ret); | ||
778 | goto Lerr; | ||
779 | } | ||
780 | } | ||
781 | |||
762 | // dump ROM | 782 | // dump ROM |
763 | if(!g_quiet) | 783 | if(!g_quiet) |
764 | { | 784 | { |
@@ -776,48 +796,6 @@ int main(int argc, char **argv) | |||
776 | fclose(f); | 796 | fclose(f); |
777 | } | 797 | } |
778 | 798 | ||
779 | // test DCP | ||
780 | #if 0 | ||
781 | if(!g_quiet) | ||
782 | { | ||
783 | struct | ||
784 | { | ||
785 | uint8_t iv[16]; | ||
786 | uint8_t data[16]; | ||
787 | } __attribute__((packed)) dcp_test; | ||
788 | |||
789 | for(int i = 0; i < 16; i++) | ||
790 | dcp_test.iv[i] = rand(); | ||
791 | for(int i = 0; i < 16; i++) | ||
792 | dcp_test.data[i] = rand(); | ||
793 | printf("DCP\n"); | ||
794 | printf(" IN\n"); | ||
795 | printf(" IV:"); | ||
796 | for(int i = 0; i < 16; i++) | ||
797 | printf(" %02x", dcp_test.iv[i]); | ||
798 | printf("\n"); | ||
799 | printf(" IV:"); | ||
800 | for(int i = 0; i < 16; i++) | ||
801 | printf(" %02x", dcp_test.data[i]); | ||
802 | printf("\n"); | ||
803 | |||
804 | if(!hwstub_aes_otp(&g_hwdev, &dcp_test, sizeof(dcp_test), HWSTUB_AES_OTP_ENCRYPT)) | ||
805 | { | ||
806 | printf(" OUT\n"); | ||
807 | printf(" IV:"); | ||
808 | for(int i = 0; i < 16; i++) | ||
809 | printf(" %02x", dcp_test.iv[i]); | ||
810 | printf("\n"); | ||
811 | printf(" IV:"); | ||
812 | for(int i = 0; i < 16; i++) | ||
813 | printf(" %02x", dcp_test.data[i]); | ||
814 | printf("\n"); | ||
815 | } | ||
816 | else | ||
817 | printf("DCP error!\n"); | ||
818 | } | ||
819 | #endif | ||
820 | |||
821 | /** Init lua */ | 799 | /** Init lua */ |
822 | 800 | ||
823 | // create lua state | 801 | // create lua state |
diff --git a/utils/hwstub/tools/init.lua b/utils/hwstub/tools/init.lua index 142c77e20a..97d393dab1 100644 --- a/utils/hwstub/tools/init.lua +++ b/utils/hwstub/tools/init.lua | |||
@@ -40,6 +40,7 @@ do | |||
40 | h:add("It contains some information about the device and the following methods."); | 40 | h:add("It contains some information about the device and the following methods."); |
41 | h:add("* read8/16/32(a) reads a 8/16/32-bit integer at address a"); | 41 | h:add("* read8/16/32(a) reads a 8/16/32-bit integer at address a"); |
42 | h:add("* write8/16/32(a, v) writes the 8/16/32-bit integer v at address a"); | 42 | h:add("* write8/16/32(a, v) writes the 8/16/32-bit integer v at address a"); |
43 | h:add("* print_log() prints the device log"); | ||
43 | 44 | ||
44 | h = HELP:create_topic("HW"); | 45 | h = HELP:create_topic("HW"); |
45 | h:add("This variable redirects to the current soc under hwstub.soc and should be changed by calling hwstub:soc:select only."); | 46 | h:add("This variable redirects to the current soc under hwstub.soc and should be changed by calling hwstub:soc:select only."); |
@@ -70,6 +71,13 @@ if not hwstub.options.quiet then | |||
70 | print(" device") | 71 | print(" device") |
71 | print(" version: " .. string.format("%d.%d.%d", hwstub.dev.version.major, | 72 | print(" version: " .. string.format("%d.%d.%d", hwstub.dev.version.major, |
72 | hwstub.dev.version.minor, hwstub.dev.version.revision)) | 73 | hwstub.dev.version.minor, hwstub.dev.version.revision)) |
74 | print(" target") | ||
75 | local id_str = string.char(bit32.extract(hwstub.dev.target.id, 0, 8), | ||
76 | bit32.extract(hwstub.dev.target.id, 8, 8), | ||
77 | bit32.extract(hwstub.dev.target.id, 16, 8), | ||
78 | bit32.extract(hwstub.dev.target.id, 24, 8)) | ||
79 | print(" id: " .. string.format("%#x (%s)", hwstub.dev.target.id, id_str)) | ||
80 | print(" name: " .. hwstub.dev.target.name) | ||
73 | print(" layout") | 81 | print(" layout") |
74 | print(" on-chip ram") | 82 | print(" on-chip ram") |
75 | print(" code: " .. string.format("%#x bytes @ %#x", | 83 | print(" code: " .. string.format("%#x bytes @ %#x", |
@@ -83,7 +91,6 @@ if not hwstub.options.quiet then | |||
83 | print(" mem: " .. tostring(hwstub.dev.features.mem)) | 91 | print(" mem: " .. tostring(hwstub.dev.features.mem)) |
84 | print(" call: " .. tostring(hwstub.dev.features.call)) | 92 | print(" call: " .. tostring(hwstub.dev.features.call)) |
85 | print(" jump: " .. tostring(hwstub.dev.features.jump)) | 93 | print(" jump: " .. tostring(hwstub.dev.features.jump)) |
86 | print(" aes_otp: " .. tostring(hwstub.dev.features.aes_otp)) | ||
87 | end | 94 | end |
88 | 95 | ||
89 | -- | 96 | -- |