⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ufstool.asm

📁 这可是一个重量级工具
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	invoke UpdateWindow,hWindow 
	
	.WHILE TRUE
		invoke GetMessage,ADDR msg,NULL,0,0
		.BREAK .IF (!eax)
		invoke TranslateMessage,ADDR msg
		invoke DispatchMessage,ADDR msg
	.ENDW
	
	mov     eax,msg.wParam
	ret
WinMain endp

MainDlgFunc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
	LOCAL i:DWord
	LOCAL j:DWord
	LOCAL SN_Extension:DWord
	LOCAL BytesWriten:DWord
	LOCAL FTDI_SN:DWORD
	LOCAL EEP_SN:DWORD
	
	.IF uMsg==WM_INITDIALOG
		push	hWnd
		pop	hWindow
		invoke CheckDlgButton,hWindow,IDC_CHK_EEPROM,BST_CHECKED
		invoke  SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_ADDSTRING,NULL,addr szFwV2_5
		invoke  SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_ADDSTRING,NULL,addr szFwV2_6
		invoke  SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_SETCURSEL,1,0
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo1
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo2
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo3
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo5
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo6
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo7
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo8
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szDasher
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo9
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo10
		invoke  SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo11
		;invoke  GetDlgItem,hWindow,IDC_CHK_HWK
		;invoke  EnableWindow,eax,TRUE
		xor	ecx,ecx
		mov	ftHandle,ecx
		mov	FuseBits,ecx
		mov	dword_40D7A4,ecx
@@:	invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_RESETCONTENT,NULL,NULL 
		invoke FT_ListDevices,addr FTDeviceCount,NULL,FT_LIST_NUMBER_ONLY
		.if (EAX)
			xor eax,eax
			.if (ftHandle != eax)
				push ftHandle
				mov ftHandle,eax
				call FT_Close
          .endif
         invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szConnect 
			invoke GetDlgItem,hWindow,IDC_BTN_Connect
			invoke EnableWindow,eax,FALSE
			invoke MessageBox,hWindow,addr szFT_ListDevices,addr szError,MB_OK or MB_ICONERROR
		.else
			mov i,eax
			mov j,eax
			mov eax,FTDeviceCount
			.if (eax <= 0)
				xor eax,eax
				.if (ftHandle != eax)
					push ftHandle
					mov ftHandle,eax
					call  FT_Close 
				.endif
         	invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szConnect 
				invoke GetDlgItem,hWindow,IDC_BTN_Connect
				invoke EnableWindow,eax,FALSE
				invoke MessageBox,hWindow,addr szUfxNotFound,addr szAttention,MB_OK or MB_ICONINFORMATION 
			.else
				.REPEAT
					xor eax,eax
					mov ecx,50h
					mov edi,offset FTDeviceStrSN
					rep stosb
					invoke FT_ListDevices,i,addr FTDeviceStrSN,FT_LIST_BY_INDEX or FT_OPEN_BY_SERIAL_NUMBER
					.if (!EAX)
						invoke FT_ListDevices,i,addr FTDeviceStrDES,FT_LIST_BY_INDEX or FT_OPEN_BY_DESCRIPTION
						.if (!EAX)
							mov eax,i
							inc eax
							invoke wsprintf,addr TempString ,addr szDesSN,eax,addr FTDeviceStrDES,addr FTDeviceStrSN
							invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_ADDSTRING,NULL,addr TempString 
							inc j
						.endif
					.endif
					inc i
					mov eax,i
				.UNTIL (eax >= FTDeviceCount)
				.if (j > 0)
					invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_SETCURSEL,0,NULL
					invoke GetDlgItem,hWindow,IDC_BTN_Connect
					invoke EnableWindow,eax,TRUE
				.endif
			.endif
		.endif
	.ELSEIF uMsg==WM_COMMAND
		mov	eax,wParam
		and	eax,0FFFFh
		.if (eax == IDC_BTN_Close)
			invoke SendMessage,hWindow,WM_CLOSE ,NULL,NULL
		.elseif (eax == IDC_BTN_Refresh)
			jmp @B
		.elseif (eax == IDC_BTN_Connect)
			mov eax,ftHandle
			.if (EAX)
		Init:	
				invoke  FT_Close,ftHandle
				.if (!EAX)
					mov ftHandle,eax
					invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szConnect
					invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING ,0,addr szDeviceClosed
					invoke SendDlgItemMessage,hWindow,IDC_EDT_SN ,EM_SETSEL,0,-1
					invoke SendDlgItemMessage,hWindow,IDC_LST_Info,WM_CLEAR,0,0
				.endif
			.else
				invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_RESETCONTENT,0,0
				invoke SendDlgItemMessage,hWindow,IDC_EDT_SN,EM_SETSEL,0,-1
				invoke SendDlgItemMessage,hWindow,IDC_EDT_SN,WM_CLEAR,0,0
				invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,EM_SETSEL,0,-1
				invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,WM_CLEAR,0,0
				invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_GETCURSEL,0,0
				mov	FTDeviceCount,eax
				xor	eax,eax
				mov	ecx,50h
				mov	edi,offset FTDeviceStrSN
				rep stosb
				invoke	FT_ListDevices,FTDeviceCount,addr FTDeviceStrSN,FT_LIST_BY_INDEX or FT_OPEN_BY_SERIAL_NUMBER
				or		eax,eax
				jnz	Init
				invoke	FT_ListDevices,FTDeviceCount,addr FTDeviceStrDES,FT_LIST_BY_INDEX or FT_OPEN_BY_DESCRIPTION	
				or		eax,eax
				jnz	Init
				invoke	FT_OpenEx,addr FTDeviceStrSN,FT_OPEN_BY_SERIAL_NUMBER,addr ftHandle
				.if (EAX)
					invoke	FT_OpenEx,addr FTDeviceStrDES,FT_OPEN_BY_DESCRIPTION,addr ftHandle
					.if (EAX)
						invoke	MessageBox,hWindow,addr szCanNotOpen,addr szError,MB_OK or MB_ICONERROR
						jmp Init 
					.endif	
				.endif
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo1
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo2
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo3
				mov dword ptr TempString ,2D2D2Dh
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString 
				invoke	wsprintf,addr TempString ,addr szSNOpened,addr FTDeviceStrDES,addr FTDeviceStrSN
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString 
				lea eax,FTDeviceStrSN
				call	Str2Int
				invoke	CheckBoxType,eax
				.if (eax == BalckListBox)
					lea eax,szBlackListSN	
				.elseif (eax == Tornado1Box)
					lea eax,szTornado1
				.elseif (eax == Tornado2Box)
					lea eax,szTornado2
				.elseif (eax == TwisterBox)
					lea eax,szTwister
				.elseif (eax == NBoxBox)
					lea eax,szNBox
				.elseif (eax == PowFlasherBox)
					lea eax,szPowFlasher
				.elseif (eax == SFlasherBox)
					lea eax,szSFlasher
				.else
					lea eax,szUnknownBox
				.endif
				invoke	wsprintf,addr TempString ,addr szManufacturer,eax
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString 
				invoke	FT_ResetDevice,ftHandle
				or		eax,eax
				jnz 	Connected
				invoke	FT_SetTimeouts,ftHandle,2710h,2710h
				or		eax,eax
				jnz 	Connected
				invoke	FT_ResetDevice,ftHandle
				or 	eax,eax
				jnz 	Connected
				invoke	FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
				or 	eax,eax
				jnz 	Connected
				invoke	FT_SetUSBParameters,ftHandle,8000h,8000h
				or 	eax,eax
				jnz 	Connected
				invoke	FT_SetEventNotification,ftHandle,FT_EVENT_RXCHAR,NULL
				or 	eax,eax
				jnz 	Connected
				lea	eax,FTDeviceStrSN
				call	Str2Int
				lea	edi,dword_40D504
				mov	[edi+0Ch],eax
				mov	byte ptr [edi+0Fh],6
				lea	edi,SHABuffer1
				mov	[edi],eax
				invoke	FT_SetDataCharacteristics,ftHandle,FT_DATA_BITS_8,FT_STOP_BITS_1,FT_PARITY_NONE
				or 	eax,eax
				jnz 	Connected
				invoke	FT_SetFlowControl,ftHandle,FT_FLOW_NONE,11h,13h
				or 	eax,eax
				jnz 	Connected
				invoke	FT_SetDivisor,ftHandle,4138h
				or 	eax,eax
				jnz 	Connected
				invoke	FT_ClrDtr,ftHandle
				or 	eax,eax
				jnz 	Connected
				invoke	FT_ClrRts,ftHandle
				or 	eax,eax
				jnz 	Connected
				invoke	FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
				or 		eax,eax
				jnz 	Connected
				invoke	Sleep,64h
				invoke	FT_SetRts,ftHandle
				or 	eax,eax
				jnz 	Connected
				invoke	Sleep,0C8h
				invoke	FT_ClrRts,ftHandle
				or 	eax,eax
				jnz 	Connected
				invoke	FT_SetRts,ftHandle
				or 	eax,eax
				jnz 	Connected
				invoke	FT_SetDtr,ftHandle
				or 	eax,eax
				jnz 	Connected
				xor	edi,edi
				lea	eax,FTInBuf
				mov	[eax],edi
				lea	eax,FTOutBuf
				mov	dword ptr [eax],3Fh ;Enter to BOOT
				.REPEAT
					invoke	FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
					invoke	FT_Write,ftHandle,addr FTOutBuf,1,addr BytesWriten
					invoke	ReadBox,addr FTInBuf,2,10
					cmp 	eax,2
					jz 	@F
					inc	edi
				.UNTIL (edi > 10)
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szCantIntoBoot
				invoke	MessageBox,hWindow,addr szNotCompatDevice,addr szError,MB_OK or MB_ICONERROR
				jmp	Init
			@@:
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				movzx	ebx,byte ptr [esi+1]
				invoke	wsprintf,addr TempString ,addr szInToBoot,eax,ebx
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString 
				invoke 	SetDlgItemText,hWindow,IDC_EDT_SN,addr FTDeviceStrSN
				invoke 	SetDlgItemText,hWindow,IDC_EDT_EnterSN,addr FTDeviceStrSN
				lea	edi,dword_40D504
				lea	esi,FTInBuf
				mov	ax,[esi]
				mov	[edi+4],ax
				lea	edi,FTOutBuf
				mov	byte ptr [edi],56h
				invoke	WriteThenRead,1,40h,100,1
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr FTInBuf
				lea	edi,FTOutBuf
				mov	byte ptr [edi],41h
				invoke	WriteThenRead,1,40h,100,1
				lea	esi,FTInBuf
				mov	al,[esi]
				.if (al == 0FFh)
					invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szFirmCleared
					mov	FirmwareCleared,1
				.else
					invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr FTInBuf
					mov	FirmwareCleared,0	
				.endif
				lea	edi,FTOutBuf
				mov	word ptr [edi],1D55h	;Get Features
				invoke	WriteThenRead,2,3,100,0
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi+1]
				mov	ah,[esi]
				invoke	wsprintf,addr TempString ,addr szFeatures,eax
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString 
				lea	edi,FTOutBuf
				mov	word ptr [edi],1F55h	;Get 1F Section
				invoke	WriteThenRead,2,3,100,0
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi+1]
				mov	ah,[esi]
				invoke	wsprintf,addr TempString ,addr szSection,eax
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString 
				lea	edi,FTOutBuf
				mov	word ptr [edi],1C55h	;Get EEProm_SN_extension
				invoke	WriteThenRead,2,3,100,0
				lea	esi,FTInBuf
				movzx	ecx,byte ptr [esi+1]
				mov	ch,[esi]
				push  ecx
				lea	edi,FTOutBuf
				mov	byte ptr [edi],54h	;Get EEProm_SN
				invoke	WriteThenRead,1,3,100,0
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi+1]
				mov	ah,[esi]
				push	eax
				invoke	wsprintf,addr TempString ,addr szEEPromSN,eax,eax,ecx
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString 
				pop	ecx
				pop	eax
				imul	eax,0FDE8h
				add	eax,ecx
				invoke	wsprintf,addr TempString ,addr szEESN,eax,eax
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString 
				lea	edi,FTOutBuf
				mov	byte ptr [edi],53h	;Get FuseBits
				invoke	WriteThenRead,1,10,50,0
				lea	esi,FTInBuf
				mov	eax,[esi]
				and	eax,0FFFFFFh
				mov	FuseBits,eax
				movzx	eax,byte ptr [esi]
				movzx	ebx,byte ptr [esi+1]
				movzx	ecx,byte ptr [esi+2]
				lea	edi,dword_40D504
				mov	[edi+6],al
				mov	[edi+7],bl
				mov	[edi+8],cl
				invoke	wsprintf,addr TempString ,addr szFuseBits,eax,ebx,ecx
				invoke	SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString 
				lea	edi,FTOutBuf
				mov	word ptr [edi],1042h
				invoke	FT_Write,ftHandle,edi,2,addr BytesWriten
				invoke	Sleep,8
				invoke	FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
				invoke	FT_SetDivisor,ftHandle,50001Ah
				invoke	Sleep,32h
				invoke	WriteThenRead,7,1,20,1
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				cmp	al,3Eh	;'>'
				jz		@F
				lea	edi,FTOutBuf
				mov	dword ptr [edi],1F1D1D4Ch
				mov	dword ptr [edi+4],980D02h
				invoke	WriteThenRead,7,1,20,1
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				cmp	al,3Eh
				jz		@F
				lea	edi,FTOutBuf
				mov	dword ptr [edi],283EDC4Ch
				mov	dword ptr [edi+4],470D6Ah
				invoke	WriteThenRead,7,1,20,1
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				cmp	al,3Eh
				jz		@F
				lea	edi,FTOutBuf
				mov	dword ptr [edi],283EDC4Ch
				mov	dword ptr [edi+4],480C6Ah
				invoke	WriteThenRead,7,1,20,1
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				cmp	al,3Eh
				jz		@F
				lea	edi,FTOutBuf
				mov	dword ptr [edi],6D43D94Ch
				mov	dword ptr [edi+4],510224h
				invoke	WriteThenRead,7,1,20,1
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				cmp	al,3Eh
				jz		@F
				lea	edi,FTOutBuf
				mov	dword ptr [edi],6D43D94Ch
				mov	dword ptr [edi+4],520124h
				invoke	WriteThenRead,7,1,20,1
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				cmp	al,3Eh
				jz		@F
				lea	edi,FTOutBuf
				mov	dword ptr [edi],91EF8C4Ch
				mov	dword ptr [edi+4],0FD06F1h
				invoke	WriteThenRead,7,1,20,1
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				cmp	al,3Eh
				jz		@F
				lea	edi,FTOutBuf
				mov	dword ptr [edi],91EF8C4Ch
				mov	dword ptr [edi+4],0FE05F1h
				invoke	WriteThenRead,7,1,20,1
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				cmp	al,3Eh
				jz		@F
				lea	edi,FTOutBuf
				mov	dword ptr [edi],4152454Ch
				mov	dword ptr [edi+4],0D30154h
				invoke	WriteThenRead,7,1,20,1
				lea	esi,FTInBuf
				movzx	eax,byte ptr [esi]
				cmp	al,3Eh
				jz		@F
				lea	edi,FTOutBuf
				mov	dword ptr [edi],4152454Ch

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -