summaryrefslogtreecommitdiff
path: root/utils/hwstub/tools/hwstub_shell.cpp
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2013-07-13 17:38:34 +0200
committerAmaury Pouly <amaury.pouly@gmail.com>2013-07-13 17:47:01 +0200
commitf617da0552c95202807c5e41c70bc78a3189378e (patch)
treebcb5c16a82515465661430d90eede48000918700 /utils/hwstub/tools/hwstub_shell.cpp
parent140783ef66eef379feedcfef5403c5729d38936a (diff)
downloadrockbox-f617da0552c95202807c5e41c70bc78a3189378e.tar.gz
rockbox-f617da0552c95202807c5e41c70bc78a3189378e.zip
hwstub: enhance protocol with more functions
Change-Id: I7944249c2f7ea3e180e7b79ee8ae402d1d0742d3
Diffstat (limited to 'utils/hwstub/tools/hwstub_shell.cpp')
-rw-r--r--utils/hwstub/tools/hwstub_shell.cpp86
1 files changed, 32 insertions, 54 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;
41struct usb_resp_info_version_t g_hwdev_ver; 41struct usb_resp_info_version_t g_hwdev_ver;
42struct usb_resp_info_layout_t g_hwdev_layout; 42struct usb_resp_info_layout_t g_hwdev_layout;
43struct usb_resp_info_features_t g_hwdev_features; 43struct usb_resp_info_features_t g_hwdev_features;
44struct usb_resp_info_target_t g_hwdev_target;
44struct usb_resp_info_stmp_t g_hwdev_stmp; 45struct usb_resp_info_stmp_t g_hwdev_stmp;
45lua_State *g_lua; 46lua_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