diff options
| author | Amaury Pouly <amaury.pouly@gmail.com> | 2016-08-02 15:37:30 +0100 |
|---|---|---|
| committer | Amaury Pouly <amaury.pouly@gmail.com> | 2017-01-24 15:25:14 +0100 |
| commit | a36694eb4a1905ec45593ceff2fc20d7eff7c8d8 (patch) | |
| tree | 8f52469d15940a2df599e5f0f97e73d4fecc1e3f /utils/hwstub/lib | |
| parent | 56340f4cd0a6ab318a52d2a62ded36aad2946e1d (diff) | |
| download | rockbox-a36694eb4a1905ec45593ceff2fc20d7eff7c8d8.zip rockbox-a36694eb4a1905ec45593ceff2fc20d7eff7c8d8.tar.gz rockbox-a36694eb4a1905ec45593ceff2fc20d7eff7c8d8.tar.bz2 rockbox-a36694eb4a1905ec45593ceff2fc20d7eff7c8d8.tar.xz | |
hwstub: implement EXEC command over net
Apparently I completely forgot to implement it so using hwstub over net would
just fail all EXEC commands :-s
Change-Id: I0d0506cbbce9b86c9a4f19036dacc922d1e51338
Diffstat (limited to 'utils/hwstub/lib')
| -rw-r--r-- | utils/hwstub/lib/hwstub_net.cpp | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/utils/hwstub/lib/hwstub_net.cpp b/utils/hwstub/lib/hwstub_net.cpp index 7b62abd..ddafea6 100644 --- a/utils/hwstub/lib/hwstub_net.cpp +++ b/utils/hwstub/lib/hwstub_net.cpp @@ -714,9 +714,25 @@ error handle::get_dev_log(void *buf, size_t& buf_sz) error handle::exec_dev(uint32_t addr, uint16_t flags) { - (void) addr; - (void) flags; - return error::DUMMY; + std::shared_ptr<hwstub::context> hctx = get_device()->get_context(); + if(!hctx) + return error::NO_CONTEXT; + + context *ctx = dynamic_cast<context*>(hctx.get()); + ctx->debug() << "[net::handle] --> EXEC(" << m_handle_id << ",0x" << std::hex + << addr << ", 0x" << std::hex << flags << ")\n"; + uint32_t args[HWSTUB_NET_ARGS] = {0}; + args[0] = m_handle_id; + args[1] = addr; + args[2] = flags; + error err = ctx->send_cmd(HWSERVER_EXEC, args, nullptr, 0, nullptr, nullptr); + if(err != error::SUCCESS) + { + ctx->debug() << "[net::handle] <-- EXEC failed: " << error_string(err) << "\n"; + return err; + } + ctx->debug() << "[net::handle] <-- EXEC\n"; + return error::SUCCESS; } error handle::status() const @@ -1200,6 +1216,33 @@ error server::handle_cmd(client_state *state, uint32_t cmd, uint32_t args[HWSTUB debug() << "[net::srv::cmd] <-- WRITE\n"; return error::SUCCESS; } + /* HWSERVER_EXEC */ + else if(cmd == HWSERVER_EXEC) + { + uint32_t hid = args[0]; + uint32_t addr = args[1]; + uint32_t flags = args[2]; + debug() << "[net::srv::cmd] --> EXEC(" << hid << ",0x" << std::hex << addr << "," + << "0x" << std::hex << flags << ")\n"; + /* check ID is valid */ + auto it = state->handle_map.find(hid); + if(it == state->handle_map.end()) + { + debug() << "[net::srv::cmd] unknown handle ID\n"; + debug() << "[net::srv::cmd] <-- EXEC (error)\n"; + return error::ERROR; + } + /* exec */ + error err = it->second->exec(addr, flags); + if(err != error::SUCCESS) + { + debug() << "[net::srv::cmd] cannot write: " << error_string(err) << "\n"; + debug() << "[net::srv::cmd] <-- EXEC (error)\n"; + return err; + } + debug() << "[net::srv::cmd] <-- EXEC\n"; + return error::SUCCESS; + } else { debug() << "[net::srv::cmd] <-> unknown cmd (0x" << std::hex << cmd << ")\n"; |