#include #include "debug.h" #include "stringutils.h" #include "vectorutils.h" #include "args.h" // send wav_message: // prun tstdevio -d WAV1: -c 0x1d000c bool dev_ioctl(std::string& devname, DWORD code, const ByteVector& request, ByteVector& reply) { HANDLE hDev= CreateFile(ToTString(devname).c_str(), 0xc0000000, 3, NULL, 3, 4, NULL); if (hDev==NULL || hDev==INVALID_HANDLE_VALUE) { error("opendev"); return false; } DWORD nReturned=0; if (!DeviceIoControl(hDev, code, request.empty()?NULL:(void*)vectorptr(request), request.size(), reply.empty()?NULL:(void*)vectorptr(reply), reply.size(), &nReturned, NULL)) { error("DeviceIoControl(%08lx, %d->%d), ret=%d", code, request.size(), reply.size(), nReturned); CloseHandle(hDev); return false; } debug("nret=%d : %s\n", nReturned, hexdump(reply).c_str()); if (nReturned4) BV_AppendDword(request, val); else if (arg.size()>2) BV_AppendWord(request, val); else BV_AppendByte(request, val); } } reply.resize(replysize); debug("sending %s %08lx %s\n", devname.c_str(), code, hexdump(request).c_str()); debug("expecting %d bytes reply\n", replysize); if (!dev_ioctl(devname, code, request, reply)) { debug("error in ioctl\n"); } debug("got %d bytes reply\n", reply.size()); debug("request: %s\n", hexdump(request).c_str()); debug("reply : %s\n", hexdump(reply).c_str()); debug("\n"); return 0; }