aboutsummaryrefslogtreecommitdiff
path: root/src/download.c
diff options
context:
space:
mode:
authorPaul Kocialkowski2016-02-03 21:06:23 +0100
committerPaul Kocialkowski2016-02-03 21:06:23 +0100
commitd58ef632fb361620b59ec2886bf1d03f7a9c0799 (patch)
tree1108f8ad6f3abc63a96a32ae0bd5b37f3138539e /src/download.c
parent331ba82a08867b1a93b6d8178958df5068e6029f (diff)
Async write requests for bigger transfer sizes
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
Diffstat (limited to 'src/download.c')
-rw-r--r--src/download.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/download.c b/src/download.c
index b810a91..21df17d 100644
--- a/src/download.c
+++ b/src/download.c
@@ -195,6 +195,32 @@ int download_ready_read(struct context *context, off_t address, size_t length)
return 0;
}
+int download_write_async(struct context *context, void *buffer, size_t length)
+{
+ struct download_write_async_request request;
+ struct download_response response;
+ int rc;
+
+ memset(&request, 0, sizeof(request));
+ request.command = DOWNLOAD_WRITE_ASYNC;
+ request.total_length = htole32(length);
+ request.length = htole32(length);
+
+ rc = hdlc_send(context, &request, sizeof(request));
+ if (rc < 0)
+ return -1;
+
+ rc = download_response(context);
+ if (rc < 0)
+ return -1;
+
+ rc = usb_send(context, buffer, length);
+ if (rc < 0)
+ return -1;
+
+ return 0;
+}
+
int download_reset(struct context *context)
{
int rc;