diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2013-07-16 19:29:42 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2013-07-16 19:29:42 +0200 |
commit | e5de5e09c1ca6788d155393af0d906a9402ea7bc (patch) | |
tree | 14aa5a0d78ae96d233bdffe96e3207ba27a4631e /utils/hwstub/lib | |
parent | 5ba7e2ca72412a4e58a76f43738f6309b533e03f (diff) | |
download | rockbox-e5de5e09c1ca6788d155393af0d906a9402ea7bc.tar.gz rockbox-e5de5e09c1ca6788d155393af0d906a9402ea7bc.zip |
hwstub: enhance exit protocol and implement on stmp
Rename STOP command to EXIT, introduce ATEXIT, this gives better
control over the exit of the stub. Add stmp implementation.
Change-Id: I45442c8b88b9330d12ef439417ca5ffa1520477a
Diffstat (limited to 'utils/hwstub/lib')
-rw-r--r-- | utils/hwstub/lib/hwstub.c | 21 | ||||
-rw-r--r-- | utils/hwstub/lib/hwstub.h | 5 |
2 files changed, 14 insertions, 12 deletions
diff --git a/utils/hwstub/lib/hwstub.c b/utils/hwstub/lib/hwstub.c index 92010e710b..41842fb181 100644 --- a/utils/hwstub/lib/hwstub.c +++ b/utils/hwstub/lib/hwstub.c | |||
@@ -158,17 +158,18 @@ const char *hwstub_get_rev_string(struct usb_resp_info_stmp_t *stmp) | |||
158 | } | 158 | } |
159 | } | 159 | } |
160 | 160 | ||
161 | int hwstub_aes_otp(struct hwstub_device_t *dev, void *buf, size_t sz, uint16_t param) | 161 | int hwstub_atexit(struct hwstub_device_t *dev, int method) |
162 | { | 162 | { |
163 | int ret = libusb_control_transfer(dev->handle, | 163 | return libusb_control_transfer(dev->handle, |
164 | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_DEVICE | | ||
165 | LIBUSB_ENDPOINT_OUT, HWSTUB_ATEXIT, 0, method, NULL, 0, | ||
166 | 1000); | ||
167 | } | ||
168 | |||
169 | int hwstub_exit(struct hwstub_device_t *dev) | ||
170 | { | ||
171 | return libusb_control_transfer(dev->handle, | ||
164 | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_DEVICE | | 172 | LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_DEVICE | |
165 | LIBUSB_ENDPOINT_OUT, HWSTUB_AES_OTP, param, 0, buf, sz, | 173 | LIBUSB_ENDPOINT_OUT, HWSTUB_EXIT, 0, 0, NULL, 0, |
166 | 1000); | 174 | 1000); |
167 | if(ret <0 || (unsigned)ret != sz) | ||
168 | return -1; | ||
169 | int xfer; | ||
170 | ret = libusb_interrupt_transfer(dev->handle, dev->int_in, buf, sz, &xfer, 1000); | ||
171 | if(ret < 0 || (unsigned)xfer != sz) | ||
172 | return -1; | ||
173 | return ret; | ||
174 | } | 175 | } |
diff --git a/utils/hwstub/lib/hwstub.h b/utils/hwstub/lib/hwstub.h index ed058dfa3b..f89bce5de9 100644 --- a/utils/hwstub/lib/hwstub.h +++ b/utils/hwstub/lib/hwstub.h | |||
@@ -57,8 +57,9 @@ int hwstub_rw_mem(struct hwstub_device_t *dev, int read, uint32_t addr, void *bu | |||
57 | /* Returns <0 on error */ | 57 | /* Returns <0 on error */ |
58 | int hwstub_call(struct hwstub_device_t *dev, uint32_t addr); | 58 | int hwstub_call(struct hwstub_device_t *dev, uint32_t addr); |
59 | int hwstub_jump(struct hwstub_device_t *dev, uint32_t addr); | 59 | int hwstub_jump(struct hwstub_device_t *dev, uint32_t addr); |
60 | /* Returns <0 on error. The size must be a multiple of 16. */ | 60 | /* Returns <0 on error */ |
61 | int hwstub_aes_otp(struct hwstub_device_t *dev, void *buf, size_t sz, uint16_t param); | 61 | int hwstub_atexit(struct hwstub_device_t *dev, int action); |
62 | int hwstub_exit(struct hwstub_device_t *dev); | ||
62 | 63 | ||
63 | const char *hwstub_get_product_string(struct usb_resp_info_stmp_t *stmp); | 64 | const char *hwstub_get_product_string(struct usb_resp_info_stmp_t *stmp); |
64 | const char *hwstub_get_rev_string(struct usb_resp_info_stmp_t *stmp); | 65 | const char *hwstub_get_rev_string(struct usb_resp_info_stmp_t *stmp); |