ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
3 мая
1201893 Топик полностью
Гyдвин, волшебник (21.04.2022 22:30, просмотров: 276) ответил AlexBi на Мне надо ID уникальный в каждую прошивать. Видимо простого решения нет. NDA не вариант, масштаб не тот, да и мегавин вроде как официально отказался работать с РФ
Я недавно тут описывал способ для CH579 с аналогичными проблемами, свойственными практически всем китайцам. Берем AutoIt и рулим как угодно штатным оконным приложением, создав в результате *.EXE файл... 
#Include <GuiTab.au3>
#include <Constants.au3>
#include <GUIConstantsEx.au3>

Global $ver = "Programmer SimCon S3"

Global $iPID,$tmpd,$hWnd

_Main()

Func _Main()
	Local  $idExit, $iMsg
   	TraySetState(2)

	$hWnd = WinGetHandle($ver)
    If not @error Then
        MsgBox($MB_SYSTEMMODAL, "", "Программатор уже запущен !")
        Exit
    EndIf


	GUICreate($ver, 310, 80)
	GUICtrlCreateLabel("Вставьте метку в слот программатора...", 10, 10)
	$varOK  = GUICtrlCreateLabel("Прошито : 0", 10, 30)
	$varErr = GUICtrlCreateLabel("Ошибок  : 0", 10, 50)
	$idExit = GUICtrlCreateButton("Выход", 250, 50, 50, 20)

    ;GUISetState() ; display the GUI
    _StartWCH()   ; запущаем всю требуху
	GUISetState() ; display the GUI
	;TraySetState(2)
    ;WinActivate ( $ver ) ; возвращаем фокус окну программатора

	$BegOK=ControlGetText($hWnd,'','[CLASS:Edit; INSTANCE:4]')
	$BegErr=ControlGetText($hWnd,'','[CLASS:Edit; INSTANCE:5]')

    Do
		$iMsg = GUIGetMsg()
		Select
			Case $iMsg = $idExit
				;MsgBox($MB_SYSTEMMODAL, "You clicked on", "Exit")
			Case $iMsg = $GUI_EVENT_CLOSE
				;MsgBox($MB_SYSTEMMODAL, "You clicked on", "Close")
		 EndSelect

    $CurrOK=ControlGetText($hWnd,'','[CLASS:Edit; INSTANCE:4]') ; читаем содержимое поля "Succ"
    $CurrErr=ControlGetText($hWnd,'','[CLASS:Edit; INSTANCE:5]'); читаем содержимое поля "Failure"

    If $CurrOK <> $BegOK Then
      GUICtrlSetData($varOK, "Прошито : " & $CurrOK)
	  $BegOK = $CurrOK
    EndIf
    If $CurrErr <> $BegErr Then
      GUICtrlSetData($varErr, "Ошибок  : " & $CurrErr)
	  $BegErr = $CurrErr
      MsgBox($MB_SYSTEMMODAL, "", "Ошибка программирования !")
	EndIf
    Sleep(10);
   Until $iMsg = $GUI_EVENT_CLOSE Or $iMsg = $idExit
  ; MsgBox(4096, 'Сообщение', 'завершаем работу скрипта')
    ProcessClose($iPID)
    DirRemove ( $tmpd,1) ; удаляем временную папку со всем содержимым
EndFunc   ;==>_Main




Func _StartWCH()

   WinClose("WCHISPTool(V2.90)") ; на всякий случай гасим просесс WCHISPTool, если он имеется в памяти

   $tmpd  = @TempDir & "\tmp7e456" ; здесь имя папки в системной "Temp", куда на время программирования заливаются вся требуха WCH

   DirRemove ( $tmpd,1) ;  На всякий случай чистим временную папку
   DirCreate ($tmpd)
   FileSetAttrib($tmpd, "+H")
   DirCreate ($tmpd & "\ChipType")
   FileSetAttrib($tmpd & "\ChipType", "+H")

   FileInstall("ChipType\typeall.wcfg", $tmpd & '\ChipType\typeall.wcfg')
   ;***********************  здесь файл прошивки, который вставляется в *.exe скрипта
   FileInstall("fw.hex", $tmpd & '\1.hex')
   FileSetAttrib($tmpd& "\*.hex", "+H")
   ;********************************************************************
   FileInstall("WCHISPTool.exe", $tmpd & "\1.tmp")
   FileInstall("WCH55xISPDLL.dll", @SystemDir & "\WCH55xISPDLL.dll",0) ; если DLL уже существует в системном каталоге, то не переписывается


	; Записывает в реестр путь к  HEX файлу
   RegWrite("HKEY_CURRENT_USER\Software\WCH\WCHISPTool\AppPara", "LastHexFile", "REG_MULTI_SZ", $tmpd & "\1.hex")

   ;$iPID = Run($tmpd & "\1.tmp", '', @SW_SHOWDEFAULT)                          ; запускаем приложение
    $iPID = Run($tmpd & "\1.tmp", '', @SW_DISABLE)                              ; запускаем приложение в невидимом режиме

    $hWnd = WinWaitActive ('WCHISPTool(V2.90)', '', 5)                         ; ждем запуск окна 5 сек

	$hSysTab = ControlGetHandle($hWnd,"","[CLASS:SysTabControl32; INSTANCE:1]") ; выбираем TabControl
    _GUICtrlTab_ClickTab($hSysTab, 3)                                           ; выбираем вкладку CH57x
	ControlClick($hWnd, '', '[CLASS:Button; INSTANCE:155]', 'main', 1)          ; взводим галку автопрограммирования
	ControlClick($hWnd, '', '[CLASS:Button; INSTANCE:61]', 'main', 1)           ; взводим галку стирания dataflash
   ; Sleep(400)

EndFunc