Модуль "P2KApi" (часть 50) - TP2KAPI.USB_ReadDataEx
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
от 07 декабря 2007 г.
function TP2KAPI.USB_ReadDataEx(Buf: Pointer; var SSize: Dword; Mode: byte; TimeOut: LongInt): boolean; var ovr: OVERLAPPED; PBuf, pOvr,pSize, pRBuf:pointer; packet_buf:array[0..4095]of byte; result_buf:array[0..4100]of byte; xRez: integer; Size:dword;
begin
xRez:= 0;
result:= false;
//pBuf:=@packet_buf;
//pRBuf:=@result_buf;
pBuf:=Buf;
pRBuf:=@result_buf[0];
pOvr:=@ovr;
Size:=SSize;
PSize:=@Size;
asm
push ecx
push edx
push ebx
push esi
push edi
push 0
push 0
push 1
push 0
call CreateEventA
cmp eax, 0
jnz @@event_ok
// push offset msg_usb_event_fail
// call logstat
mov eax, 0
mov xRez, 0
jmp @@exit
@@event_ok:
mov ovr.hEvent, eax
push ovr.hEvent
call ResetEvent
cmp eax, 0
jnz @@reset_ok
push ovr.hEvent
call CloseHandle
// push offset msg_usb_reset_fail
// call logstat
mov eax, 0
mov xRez, 0
jmp @@exit
@@reset_ok:
mov edi, pBuf
mov al, Mode
stosb
mov eax, Size
stosd
push pOvr
push 0
push 1005h
push pRBuf
push 5
push pBuf
push 8000201Ch
push HDev
call DeviceIOControl
push TimeOut
push ovr.hEvent
call WaitForSingleObject
cmp eax, 0
jz @@wait_ok
push HDev
call CancelIo
push ovr.hEvent
call CloseHandle
// push offset msg_usb_wait_fail
// call logstat
mov eax, 0
mov xRez, 0
jmp @@exit
@@wait_ok:
push 0
push pSize
push pOvr
push HDev
call GetOverlappedResult
cmp eax, 0
jnz @@devio_ok
push HDev
call CancelIo
push ovr.hEvent
call CloseHandle
// push offset msg_usb_result_fail
// call logstat
mov eax, 0
mov xRez, 0
jmp @@exit
@@devio_ok:
mov ecx, Size
cmp ecx, 4
jnb @@size_ok
push ovr.hEvent
call CloseHandle
// push offset msg_usb_size_fail
// call logstat
mov eax, 0
mov xRez, 0
jmp @@exit
@@size_ok:
sub ecx, 4
mov Size, ecx
mov esi, pRBuf
add esi, 4
mov edi, Buf
rep movsb
push ovr.hEvent
call CloseHandle
// push offset msg_usb_read_ok
// call logstat
mov eax, 1
mov xRez, 1
@@exit:
pop edi
pop esi
pop ebx
pop edx
pop ecx
end;
SSize:=Size;
result:= boolean(xRez);
//Logger(Format('End of USB_ReadDataEx .... xRez = %d, result = %s',[xRez, BoolToStr(result, true)]));
end;
Еще записи по теме
- Модуль "Сообщения" (часть 12) - GetSMSProfile
- Модуль "АТ-команды" (часть 4) - определение переменных и типов данных
- Модуль "P2KFileManager" (часть 23) - ClearElements
- Модуль "Flash Rainbow POG" (часть 18) - RemoveRSA
- Модуль "Мое меню" (часть 16) - EditWebShortCuts
- Языковой Модуль (часть 5)
- Модуль "Пункты меню" (часть 6) - SaveFileHeader
