fastboot: Add 'stage' command
(cherry-picked from internal nyc-iot-dev to AOSP) New user-level command usage: * fastboot stage <infile> Sends the contents of <infile> to the device to stage for use in the next command. This enables OEM commands to use data downloaded from host to device. Bug: 35811075 Test: Manual test on imx6ul Change-Id: I483a18f9f4205d3289ee524656b9d741b16e9fe6 (cherry-picked from commit 001c75c6c0fe6a70a1db2a65253ab3c43ec17d46)
This commit is contained in:
parent
5fe07acd07
commit
98cc283168
3 changed files with 23 additions and 0 deletions
|
@ -332,6 +332,15 @@ void fb_queue_download(const char *name, void *data, uint32_t size)
|
|||
a->msg = mkmsg("downloading '%s'", name);
|
||||
}
|
||||
|
||||
void fb_queue_download_fd(const char *name, int fd, uint32_t sz)
|
||||
{
|
||||
Action *a;
|
||||
a = queue_action(OP_DOWNLOAD_FD, "");
|
||||
a->fd = fd;
|
||||
a->size = sz;
|
||||
a->msg = mkmsg("sending '%s' (%d KB)", name, sz / 1024);
|
||||
}
|
||||
|
||||
void fb_queue_notice(const char *notice)
|
||||
{
|
||||
Action *a = queue_action(OP_NOTICE, "");
|
||||
|
|
|
@ -371,6 +371,10 @@ static void usage() {
|
|||
" continue Continue with autoboot.\n"
|
||||
" reboot [bootloader|emergency] Reboot device [into bootloader or emergency mode].\n"
|
||||
" reboot-bootloader Reboot device into bootloader.\n"
|
||||
" oem <parameter1> ... <parameterN> Executes oem specific command.\n"
|
||||
" stage <infile> Sends contents of <infile> to stage for\n"
|
||||
" the next command. Supported only on\n"
|
||||
" Android Things devices.\n"
|
||||
" help Show this help message.\n"
|
||||
"\n"
|
||||
"options:\n"
|
||||
|
@ -1806,6 +1810,15 @@ int main(int argc, char **argv)
|
|||
}
|
||||
fb_set_active(slot.c_str());
|
||||
skip(2);
|
||||
} else if(!strcmp(*argv, "stage")) {
|
||||
require(2);
|
||||
std::string infile(argv[1]);
|
||||
skip(2);
|
||||
struct fastboot_buffer buf;
|
||||
if (!load_buf(transport, infile.c_str(), &buf) || buf.type != FB_BUFFER_FD) {
|
||||
die("cannot load '%s'", infile.c_str());
|
||||
}
|
||||
fb_queue_download_fd(infile.c_str(), buf.fd, buf.sz);
|
||||
} else if(!strcmp(*argv, "oem")) {
|
||||
argc = do_oem_command(argc, argv);
|
||||
} else if(!strcmp(*argv, "flashing")) {
|
||||
|
|
|
@ -64,6 +64,7 @@ void fb_queue_query_save(const char *var, char *dest, uint32_t dest_size);
|
|||
void fb_queue_reboot(void);
|
||||
void fb_queue_command(const char *cmd, const char *msg);
|
||||
void fb_queue_download(const char *name, void *data, uint32_t size);
|
||||
void fb_queue_download_fd(const char *name, int fd, uint32_t sz);
|
||||
void fb_queue_notice(const char *notice);
|
||||
void fb_queue_wait_for_disconnect(void);
|
||||
int64_t fb_execute_queue(Transport* transport);
|
||||
|
|
Loading…
Reference in a new issue