X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/proxmark3-svn/blobdiff_plain/79a73ab2d1a63fdf75d42774e160a9335d893416..72622d6429ebd62f6e416356aeda565956352aed:/armsrc/cmd.c diff --git a/armsrc/cmd.c b/armsrc/cmd.c index ff5c4f81..71202522 100644 --- a/armsrc/cmd.c +++ b/armsrc/cmd.c @@ -31,45 +31,56 @@ */ #include "cmd.h" -#include "string.h" -#include "util.h" -#include "proxmark3.h" -//static UsbCommand txcmd; +#include +#include +#include +#include "common.h" +#include "usb_cmd.h" +#include "usb_cdc.h" + bool cmd_receive(UsbCommand* cmd) { - - // Check if there is a usb packet available - if (!usb_poll()) return false; - - // Try to retrieve the available command frame - size_t rxlen = usb_read((byte_t*)cmd,sizeof(UsbCommand)); - // Check if the transfer was complete - if (rxlen != sizeof(UsbCommand)) return false; - - // Received command successfully - return true; + // Check if there is a usb packet available + if (!usb_poll()) + return false; + + // Try to retrieve the available command frame + size_t rxlen = usb_read((uint8_t*)cmd, sizeof(UsbCommand)); + + // Check if the transfer was complete + if (rxlen != sizeof(UsbCommand)) + return false; + + // Received command successfully + return true; } + bool cmd_send(uint32_t cmd, uint32_t arg0, uint32_t arg1, uint32_t arg2, void* data, size_t len) { - UsbCommand txcmd; + UsbCommand txcmd; - // Compose the outgoing command frame - txcmd.cmd = cmd; - txcmd.arg[0] = arg0; - txcmd.arg[1] = arg1; - txcmd.arg[2] = arg2; + for (size_t i = 0; i < sizeof(UsbCommand); i++) { + ((uint8_t*)&txcmd)[i] = 0x00; + } - // Add the (optional) content to the frame, with a maximum size of USB_CMD_DATA_SIZE - if (data && len) { - memcpy(txcmd.d.asBytes,(byte_t*)data,MIN(len,USB_CMD_DATA_SIZE)); - } - - // Send frame and make sure all bytes are transmitted - if (usb_write((byte_t*)&txcmd,sizeof(UsbCommand)) != 0) return false; - - return true; -} + // Compose the outgoing command frame + txcmd.cmd = cmd; + txcmd.arg[0] = arg0; + txcmd.arg[1] = arg1; + txcmd.arg[2] = arg2; + // Add the (optional) content to the frame, with a maximum size of USB_CMD_DATA_SIZE + if (data && len) { + len = MIN(len, USB_CMD_DATA_SIZE); + for (size_t i = 0; i < len; i++) { + txcmd.d.asBytes[i] = ((uint8_t*)data)[i]; + } + } + // Send frame and make sure all bytes are transmitted + if (usb_write((uint8_t*)&txcmd, sizeof(UsbCommand)) != 0) return false; + + return true; +}