From 2de059e0cc787e9423015a9616b059d18d20e8d0 Mon Sep 17 00:00:00 2001 From: Razvalyaev Date: Thu, 11 Sep 2025 16:58:24 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B2=D0=BA=D0=BB=D0=B0=D0=B4=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20userfriendly=20=D0=B1=D1=83=D1=82=D0=B0,=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20crc=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=D0=B0=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0=20=D0=B8=20?= =?UTF-8?q?=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE=D1=81=D0=B2=D1=8F=D0=B7?= =?UTF-8?q?=D0=B8=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- botterm/.vs/botterm/v16/.suo | Bin 63488 -> 67072 bytes botterm/botterm/CanInterface.cs | 159 +++++++++++++-- botterm/botterm/LowLevelBoot.cs | 92 ++++----- botterm/botterm/Program.cs | 187 +++++++++++++++--- botterm/botterm/UserFriendlyBoot.cs | 140 +++++++++++++ botterm/botterm/bin/Debug/botterm.exe | Bin 17920 -> 27648 bytes botterm/botterm/bin/Debug/botterm.pdb | Bin 52736 -> 65024 bytes botterm/botterm/botterm.csproj | 1 + .../botterm.csproj.AssemblyReference.cache | Bin 11 -> 1623 bytes .../botterm.csproj.CoreCompileInputs.cache | 2 +- botterm/botterm/obj/Debug/botterm.exe | Bin 17920 -> 27648 bytes botterm/botterm/obj/Debug/botterm.pdb | Bin 52736 -> 65024 bytes 12 files changed, 488 insertions(+), 93 deletions(-) create mode 100644 botterm/botterm/UserFriendlyBoot.cs diff --git a/botterm/.vs/botterm/v16/.suo b/botterm/.vs/botterm/v16/.suo index f5ecd227e48b0ccac1543e36d068e8a3a2b98dd0..f6a0c2459c7c3dd90cb70c66ea0c136816708c95 100644 GIT binary patch delta 5006 zcmeHL4OElY8UAieFhCOiLP!DmFN-dLgoONb*b_peDj@%sTBjfhTURhD2^G*L?%2+C zZH2t8?Y4G0q3zk(ahrVS46WFHf-S>!idNg%xs5v4wXU=3fitng?7bneQLwH%$J4X3 z-kj&V?|t9<-Fx5P@1A%r&hb3S?^1%&ES5(zObWv=a}d{jJ|A`rK}18L(6G0DBk}T@ zCFZ(UMlv$bkW3VC1<=9kAeUi+=N3GT3>&o1DG`Z~5+HC1AH>9F3C3{1!Q`Bze13pU zMUhA+ArcU=h%^M{)2(TnLI{x;f!oL3eOEx5jD0wQZju<_1vk3}Ey4tGWq>;$dow+H zcYT(;5C;~7H6Sbw^dJ`~MO8ScM${mnVzXTEAQJU-+vo&ZQxdhG&Uc!D zFT!Npr(wI0$`Qj==@K!MgLD)kIF0N8SNt+DL-SM|!WTS)gXJ)pP$Hu78XqD8r`$s> z!Gye8NW=R2N}qu1E;o4xCh++LxDv}nS`^j{u`Cigk~$)5k(45^fv@B+ z6eWKX(&qJu30*T5xxuwX)T#b?`0##?*6etUh_^eIC!lYNX@!^$cLkArHpueIoaE2o zlDWyBVB(%~5zTE{27=p>_rR4=9>NYkg##XffvNNos63zqXSRnt1rr%=@+7!2 z-GU#Wkk3xW%$+_#T*#(ZB&lw{~iH416P4vNC4Vi_0^Ny~(xYO~Jd^1u-_A=6>JtO5>83c#Z%f}%tXNq`B3 zo5;X5-yKNlL_wPNG%aWkinO%kxSNDjKo#&$ zu%*2PY5~814uYsbVHKkKrWfzWaUJ3T#0mucT&+aFy7Vq@)keQ1zDK|ll?A&Kl7Xuh z3aLi8@^pUw0S7E}$Cg0Z0WIu`ExVyt^TNIQAu*vwq&XXSO@Wpzfg#C4@EAN|%G??d z`d~|>dvCpyMA__34X$SAYG=zjqc%?qQ3aQll;SLcpr+X)e^}>ZThE(zEVkV9;OY-# zTdy2`9BF>uxxs-?QdhPky*~TM*~bPFnt>$?4Paha3VBOq z;JGiwYjg^fxacfC)%ksjGTMUH4EA5XkAQPmLZvyEHJd%3xyc-*6Wrc2magzaEk7Kd z$~Z&rh4riMhf#|Ju31LOID4!}!wYpmp}xp?XI*fEBHqtE+DE)3T5oHaR>sb3V2TkB zA+;87SIta26c#72`yL-lg0aPkP_gm5z^#i0ed`mz6`H+kKZYu$6wD4j@Ey@m<4__k zhpi3;sCj(g9MT|qI0xTbyzll~70U#W(Pm}&&H)00OLwrgitiA(?0lJRYFj~|&;D&t zek+1C*VReEQ}+xGc7MU6u$;pzg8KE@a8)UR`c5HRpv)$jh9Z^KSfp3!Op7ck<08u< zd>F0ydc9t2DAdp^AA@fF25>4fm~%L9j+qch=fy#vMX6qfpNmhiZf5CC28}k)W>+=X z>>4rqs09?-w@;v2;T&?yEO&cDv zueCL|0~yJM<-IS!w$nR_5EOktCutY3+#_cGojSfPKVREuH<(n74Gn8lI<*EBX>8Q0 zG#aBp-J~(9b(+BOD_~2nZpMM{i>pNyiUTTG91dqrV=GBo<8V6d8(LQW$3oaMvQ$<^ zZSHRht_^#77qR}xZ@Q(wJ{dDDqR$MDUSComx4#h$IuP^E>mnH!jU_G{C69ooXXk%m zZaBU#6VxNoaJt_WL+g2vm%G9?T_Upgw3L z9Z+zvCe;O7e*Ms=!?IZo9W=-JS^fGL^=Fj5 z&E6b{Zc{N~p#IIT!NVg7z>WF@4fIIx(|!f~;;5873WYf}@ZO09>ERvceb$BQH!gI& z^kGT5oVWVNws($%Z*F;Y_}wec&QpU7UJT>lfdgV;-7$K{!9@M@Gum}(U delta 4504 zcmc&$3s98T75?wf?y|^_?85R;whClLR94w#mt6?r^0KJBmc@jORKsIY>jNVH+NjW7 zJ0@ciTiHEP!c5y}jML7vR^kfS8QX59Z8}jznkdF-f_+Xhna0k@OiV}UIqNQNiSZGV z$({ZFbMCo!?|;s@=kdGtNnAI=Ix|uj7cvwa7mZUMF+MRdK`ZPH>v868m3a8gGpi!B zd!9}DCqSvtNdJP9e7F^sR6-&;l?G8& zVA}$uGXs1qQb~Z1Kq?>>B4QBni0`_s-;RhxhTfCzwpL1)AyW;v^G#roDpKfd8%k;r zs}WBioTL+Rid$loRg zN2rm+N8uV7Lx#>lpqKs1&|bl9HNifK;I30C$xxD!ec=eSZ&d_2^U-W%hp07_gNCqgWEYit4~!y$pBsiia_Slf{9<=mgga37_~N$48Q>q&W^a{K9<5_0EJtZ^*sv zC(;p9Et9mpeOIC0lxfa16={pjMcGfm;0fb%ySWfyBH})FWNfnDy#*gZad9!DAbtN-a8%4#2B9>?r%tt{v2xsBXbZaLS&ZR56Zi}AATIB(*rkv1YWa@+A)h5ObcP518>xn!=@FA+Hr zrSwkzw{V~VKf0tyhFqJVR{3fQ>{&VjF|G9Ty;$e}8TPaCYu z{uKVUveU--Dv$7ogL0xY(ESjrSTHBF8xv2R`0jw;_rz%w;1FJ5E^jx%jc88`J(`>Q2vD`R!u2~!D^ zXz>KF4rUw?bC@(4C$GSc++8dj#&VrZ29C#_ps10^sqNG7Xo~&yj&e5`;UV>{QlK{Z z5alh&U*70M98LD-ddFsQow%hnyRak&qD%jiXF)mnl0y7g;wHm{x9y{xgQbNM{ol`= z{$y_54&-ll-JIxsvga7_xog(_Gk(vfe|R2wXkSqUWu*pBg~gL8$|~^)84o)%v4ks; zzkdZwoUCBDl{6rflrOJ=(GH_`cZHL|`xW{8cjTVx&WH=2JU+3SzOCSyO|g(!{WJ)+ zGwh6aXw8Sb_oKC?(i0g2_b#bb!owDda8d||7watV$$pkuygRa;Jev)-%&P>tzi%Oe zm*Kxh3kvRekKuuP^y-?sRiJ3t3$Df)P}g<|EbSk|=w20AI#f`lmPBmF#H5rw55tXf zQ7VBwxKi7Z?)4pY3F)DwdMf`=#XdRoUsUYr<1e(>LzOg99^6C)UmX%A%d;1Y_BOH2 zE{Yqsu5Vl4hF`7eP+WTYD~cN{{G%iD5iff*Nn$c|e07Pw4nF>u31p{!j7fhGUOV;d zqutRAINmoO^Em7>_z&20RRQWh&O+2FYth%iu>qL~P!7yGV(H;wcmGQ0zG8zn2X@EZ zEn|=QVsRJ6VKJUXik*&I89abn=%bHyDxk&w8dY(2yRva|b+*q%JQzoxJ8{m%;L6~R z$QJAtRQXBXJ(wpM{WtdXcL(!4Ln>HseqMOJxN*BZw*f3eaj^T61}e^mgKKCBy9_-; zO>7&S9;yj%#Qw3B+X&HX6JY;^)$pqesl1l+3_k&uVHGSKj`zBTxAVceg>SlnA0K1} zR???OUV~r0(+d69OmOtlG30*+)gwK3yv2?}{YVR_FPdP})i>im=PNv-_!qRr+kGXT zDL>~W@VzJE$>Z{%hrZU{js4>by5@b_cG+~h=KtL}d9&hdBz*6KWB0uGTQNp$QI<(( zG-NL~7Ze*i+8GD#k$iAnpO8|o;9%)!p1gJlFNh|G2hHI7TRO1wiBhU1E=aMh?!C%1 z40@_9{T2yxF_zo)J1HwzI<5ANMPt#lo44MmH#F!Qo3$pp*`PHTjm_E|gT7H)Z^+Tx z>kWpc2BUtmc~8yhS06S(y~+U-n^s0H^*fgyavyzAXNG2EcpxLet+w3BMz`9Zjb)`7 zn1!j3teEq_42)N3DE+$C3%}{q`-0*W8mRYj$2e&DNbDkckjYD7_w{jfM?o0ICDNt- VkWAwfdw;;b9}AW{{i@@y66A^ diff --git a/botterm/botterm/CanInterface.cs b/botterm/botterm/CanInterface.cs index 3e66893..c76873d 100644 --- a/botterm/botterm/CanInterface.cs +++ b/botterm/botterm/CanInterface.cs @@ -21,6 +21,11 @@ namespace BootloaderGUI public const uint SLCAN_MODE_NORMAL = 0x01; public const uint SLCAN_MODE_LISTENONLY = 0x02; + private const byte SLCAN_PURGE_TX_ABORT = 0x01; + private const byte SLCAN_PURGE_RX_ABORT = 0x02; + private const byte SLCAN_PURGE_TX_CLEAR = 0x04; + private const byte SLCAN_PURGE_RX_CLEAR = 0x08; + [StructLayout(LayoutKind.Sequential, Pack = 1)] private struct SLCAN_MESSAGE { @@ -58,6 +63,19 @@ namespace BootloaderGUI [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall)] private static extern bool SlCan_DeviceEnaRec(IntPtr hDevice, byte bValue); + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall)] + private static extern bool SlCan_DeviceReadMessages( + IntPtr hDevice, + uint dwTimeout, // таймаут в мс + [Out] SLCAN_MESSAGE[] pMsg, // буфер для сообщений + uint dwCount, // размер буфера + out uint pdwRead // количество реально прочитанных + ); + + [DllImport(DLL_NAME, CallingConvention = CallingConvention.StdCall)] + private static extern bool SlCan_DevicePurge(IntPtr hDevice, byte bValue); + + [StructLayout(LayoutKind.Sequential, Pack = 1)] private struct SLCAN_STATE { @@ -104,7 +122,7 @@ namespace BootloaderGUI } } - public bool ConnectFirstDevice(out string statusText) + public bool ConnectFirstDevice(ushort bitrateCode, out string statusText) { statusText = ""; @@ -139,17 +157,9 @@ namespace BootloaderGUI hDevice = dev; - // Включаем приём сообщений SlCan_DeviceEnaRec(hDevice, 1); - // Получаем состояние шины (если у тебя есть функция SlCan_DeviceGetState) - SLCAN_STATE state; - if (!SlCan_DeviceGetState(hDevice, out state)) - { - statusText = "Failed to read bus state"; - } - - // Перевести устройство в конфиг-режим + // CONFIG mode if (!SlCan_DeviceSetMode(hDevice, SLCAN_MODE_CONFIG)) { MessageBox.Show("Failed to set CAN mode", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -157,16 +167,16 @@ namespace BootloaderGUI return false; } + // Выбранный битрейт SLCAN_BITRATE br = new SLCAN_BITRATE { - BRP = SLCAN_BR_CIA_250K, + BRP = bitrateCode, TSEG1 = 0, TSEG2 = 0, SJW = 0, SAM = 0 }; - // Установить скорость CAN if (!SlCan_DeviceSetBitRate(hDevice, ref br)) { MessageBox.Show("Failed to set CAN speed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -174,7 +184,6 @@ namespace BootloaderGUI return false; } - // Перевести устройство в нормальный режим if (!SlCan_DeviceSetMode(hDevice, SLCAN_MODE_NORMAL)) { MessageBox.Show("Failed to set CAN mode", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -182,14 +191,68 @@ namespace BootloaderGUI return false; } - statusText = $"Connected to device 0 (devices: {count})"; + statusText = $"Connected to device 0 (devices: {count}) at {bitrateCode}"; return true; } - - public bool SendCmd(byte cmd) + public static class CanSpeedDialog { + public static ushort? ShowDialog() + { + Form dlg = new Form() + { + Text = "Select CAN Speed", + Width = 250, + Height = 150, + FormBorderStyle = FormBorderStyle.FixedDialog, + StartPosition = FormStartPosition.CenterParent, + MaximizeBox = false, + MinimizeBox = false + }; + + ComboBox combo = new ComboBox() + { + Left = 10, + Top = 10, + Width = 200, + DropDownStyle = ComboBoxStyle.DropDownList + }; + + // Заполняем скорости + combo.Items.Add(new { Text = "1000K", Value = CanInterface.SLCAN_BR_CIA_1000K }); + combo.Items.Add(new { Text = "800K", Value = CanInterface.SLCAN_BR_CIA_800K }); + combo.Items.Add(new { Text = "500K", Value = CanInterface.SLCAN_BR_CIA_500K }); + combo.Items.Add(new { Text = "250K", Value = CanInterface.SLCAN_BR_CIA_250K }); + combo.Items.Add(new { Text = "125K", Value = CanInterface.SLCAN_BR_CIA_125K }); + combo.DisplayMember = "Text"; + combo.SelectedIndex = 3; // по умолчанию 250K + + Button ok = new Button() { Text = "OK", Left = 10, Top = 50, Width = 80, DialogResult = DialogResult.OK }; + Button cancel = new Button() { Text = "Cancel", Left = 100, Top = 50, Width = 80, DialogResult = DialogResult.Cancel }; + + dlg.Controls.Add(combo); + dlg.Controls.Add(ok); + dlg.Controls.Add(cancel); + dlg.AcceptButton = ok; + dlg.CancelButton = cancel; + + if (dlg.ShowDialog() == DialogResult.OK) + { + dynamic selected = combo.SelectedItem; + return (ushort)selected.Value; + } + return null; + } + } + + + + public bool SendCmd(byte cmd, out UInt16 error) + { + error = 0; if (hDevice == IntPtr.Zero) return false; + + // Формируем сообщение SLCAN_MESSAGE msg = new SLCAN_MESSAGE { Info = 0, @@ -199,9 +262,26 @@ namespace BootloaderGUI }; msg.Data[0] = cmd; - return SlCan_DeviceWriteMessages(hDevice, new SLCAN_MESSAGE[] { msg }, 1, out _); + if (!SlCan_DeviceWriteMessages(hDevice, new SLCAN_MESSAGE[] { msg }, 1, out _)) + return false; + + // Таймаут: 10с для ERASE, 1с для остальных + uint timeout = (cmd == BootloaderCommands.ERASE) ? 10000u : 1000u; + + if(cmd != BootloaderCommands.JUMP) + { + return WaitForResponse(timeout, out error); + } + else + { + return true; + } } + + + + public bool SendData(byte[] data) { if (hDevice == IntPtr.Zero) return false; @@ -222,10 +302,55 @@ namespace BootloaderGUI if (!SlCan_DeviceWriteMessages(hDevice, new SLCAN_MESSAGE[] { msg }, 1, out _)) return false; + + } return true; } + + + public bool WaitForResponse(uint timeoutMs, out UInt16 error) + { + error = 0; + + // 1) Очистим RX буфер у устройства + try + { + // SLCAN_PURGE_RX_CLEAR определён в заголовке + SlCan_DevicePurge(hDevice, SLCAN_PURGE_RX_CLEAR); + } + catch + { + // если purge не доступен/ошибка — можно продолжить, но логировать + } + + // 2) Ждём один свежий пакет (блокирующе, с таймаутом) + SLCAN_MESSAGE[] buffer = new SLCAN_MESSAGE[1]; + buffer[0].Data = new byte[8]; + + if (SlCan_DeviceReadMessages(hDevice, timeoutMs, buffer, 1, out uint read)) + { + if (read > 0) + { + byte[] response = buffer[0].Data; + if (response[0] == 0) + { + return true; + } + else + { + error = (UInt16)((response[1] << 8) | response[2]); + return false; + } + } + } + + error = 0xFFFF; // таймаут / ничего не пришло + return false; + } + + public void Disconnect() { if (hDevice != IntPtr.Zero) diff --git a/botterm/botterm/LowLevelBoot.cs b/botterm/botterm/LowLevelBoot.cs index 3c0892b..7b66c82 100644 --- a/botterm/botterm/LowLevelBoot.cs +++ b/botterm/botterm/LowLevelBoot.cs @@ -11,7 +11,7 @@ namespace BootloaderGUI public TabPage Tab { get; private set; } private Label lblStatus; - private Button btnSelect, btnErase, btnReceive, btnWrite, btnVerify, btnJump, btnConnect; + private Button btnErase, btnReceive, btnWrite, btnVerify, btnJump; private Button btnReset, btnGoBoot; private NumericUpDown numPage; private ProgressBar progressBar; @@ -22,20 +22,20 @@ namespace BootloaderGUI // Сюда нужно передавать делегаты или интерфейс для CAN private Func readFirmware; private Func sendCmdSync; - private Action sendReceivePage; + private Action sendPage; public LowLevelBootloaderTab( Func readFirmwareDelegate, Func sendCmdSyncDelegate, - Action sendReceivePageDelegate, + Action sendPageDelegate, Label statusLabel, - Action connectCANDelegate) + ProgressBar progrBar) { readFirmware = readFirmwareDelegate; sendCmdSync = sendCmdSyncDelegate; - sendReceivePage = sendReceivePageDelegate; + sendPage = sendPageDelegate; lblStatus = statusLabel; - connectAction = connectCANDelegate; + progressBar = progrBar; InitializeUI(); } @@ -49,73 +49,67 @@ namespace BootloaderGUI int hBtn = 30; int gap = 10; - lblStatus = new Label() { Top = top, Left = left, Width = 520, Text = "Select firmware file" }; - Tab.Controls.Add(lblStatus); + // Подпись для выбора страницы прошивки + Label lblPage = new Label() + { + Top = top, + Left = left, + Width = 130, + Height = 20, + Text = "Page of firmware to send" + }; - top += 30; - btnSelect = new Button() { Top = top, Left = left, Width = wBtn, Text = "Select Firmware" }; - btnConnect = new Button() { Top = top, Left = left + wBtn + gap, Width = wBtn, Text = "Connect CAN" }; - Tab.Controls.AddRange(new Control[] { btnSelect, btnConnect }); - - top += hBtn + gap; - numPage = new NumericUpDown() { Top = top, Left = left, Width = 120, Minimum = 0, Maximum = 0 }; + // NumericUpDown для выбора страницы + numPage = new NumericUpDown() + { + Top = top, + Left = left + lblPage.Width, // немного справа от подписи + Width = 120, + Minimum = 0, + Maximum = 0 + }; Tab.Controls.Add(numPage); + Tab.Controls.Add(lblPage); + top += numPage.Height + gap; - btnErase = new Button() { Top = top, Left = left, Width = wBtn, Text = "ERASE" }; - btnReceive = new Button() { Top = top, Left = left + wBtn + gap, Width = wBtn, Text = "RECEIVE Page" }; + btnErase = new Button() { Top = top, Left = left, Width = wBtn, Text = "ERASE Firmware" }; + btnReceive = new Button() { Top = top, Left = left + wBtn + gap, Width = wBtn, Text = "SEND Page" }; Tab.Controls.AddRange(new Control[] { btnErase, btnReceive }); top += hBtn + gap; - btnWrite = new Button() { Top = top, Left = left, Width = wBtn, Text = "WRITE" }; - btnVerify = new Button() { Top = top, Left = left + wBtn + gap, Width = wBtn, Text = "VERIFY" }; + btnWrite = new Button() { Top = top, Left = left, Width = wBtn, Text = "WRITE Page" }; + btnVerify = new Button() { Top = top, Left = left + wBtn + gap, Width = wBtn, Text = "VERIFY Firmware" }; Tab.Controls.AddRange(new Control[] { btnWrite, btnVerify }); top += hBtn + gap; - btnJump = new Button() { Top = top, Left = left, Width = wBtn, Text = "JUMP" }; - btnReset = new Button() { Top = top, Left = left + wBtn + gap, Width = wBtn, Text = "RESET" }; - btnGoBoot = new Button() { Top = top + hBtn + gap, Left = left, Width = wBtn, Text = "GO TO BOOT" }; + btnJump = new Button() { Top = top, Left = left, Width = wBtn, Text = "JUMP to App" }; + btnGoBoot = new Button() { Top = top + hBtn + gap, Left = left, Width = wBtn, Text = "JUMP to Boot" }; + btnReset = new Button() { Top = top, Left = left + wBtn + gap, Width = wBtn, Text = "RESET MCU" }; Tab.Controls.AddRange(new Control[] { btnJump, btnReset, btnGoBoot }); - top += 2 * hBtn + 2 * gap; - progressBar = new ProgressBar() { Top = top, Left = left, Width = 520, Height = 22 }; - Tab.Controls.Add(progressBar); - // события - btnSelect.Click += (s, e) => - { - int pageMax = readFirmware(); - numPage.Maximum = pageMax; - }; - btnConnect.Click += (s, e) => connectAction?.Invoke(); btnErase.Click += (s, e) => sendCmdSync(BootloaderCommands.ERASE); - btnReceive.Click += (s, e) => sendReceivePage((int)numPage.Value); + btnReceive.Click += (s, e) => sendPage((int)numPage.Value); btnWrite.Click += (s, e) => sendCmdSync(BootloaderCommands.WRITE); btnVerify.Click += (s, e) => sendCmdSync(BootloaderCommands.VERIFY); btnJump.Click += (s, e) => sendCmdSync(BootloaderCommands.JUMP); btnReset.Click += (s, e) => sendCmdSync(BootloaderCommands.RESET); btnGoBoot.Click += (s, e) => sendCmdSync(BootloaderCommands.GO_TO_BOOT); - } - - // Методы обновления UI из MainForm - public void UpdateStatus(string text) + public void SetMaxPage(int max) { - if (Tab.InvokeRequired) - Tab.Invoke(new Action(() => lblStatus.Text = text)); + if (numPage.InvokeRequired) + { + numPage.Invoke(new Action(() => numPage.Maximum = max)); + } else - lblStatus.Text = text; + { + numPage.Maximum = max; + } } - public void UpdateProgress(int percent) - { - if (percent < 0) percent = 0; - if (percent > 100) percent = 100; - if (Tab.InvokeRequired) - Tab.Invoke(new Action(() => progressBar.Value = percent)); - else - progressBar.Value = percent; - } + } } diff --git a/botterm/botterm/Program.cs b/botterm/botterm/Program.cs index 1323527..69e265c 100644 --- a/botterm/botterm/Program.cs +++ b/botterm/botterm/Program.cs @@ -21,10 +21,11 @@ namespace BootloaderGUI public class MainForm : Form { // UI + private BootloaderTab regTab; private LowLevelBootloaderTab llTab; private Label lblStatus; private ProgressBar progressBar; - + private Button btnSelect, btnConnect; // CAN SETTINGS private CanInterface can; @@ -41,14 +42,24 @@ namespace BootloaderGUI InitializeUI(); can = new CanInterface(); + + regTab = new BootloaderTab( + readFirmwareDelegate: ReadFirmware, + sendCmdSyncDelegate: SendCmdSync, + sendPageDelegate: SendPage, + progrBar: progressBar + ); + tabControl.TabPages.Add(regTab.Tab); + llTab = new LowLevelBootloaderTab( readFirmwareDelegate: ReadFirmware, sendCmdSyncDelegate: SendCmdSync, - sendReceivePageDelegate: SendReceivePage, + sendPageDelegate: SendPage, statusLabel: lblStatus, - connectCANDelegate: ConnectCan + progrBar: progressBar ); tabControl.TabPages.Add(llTab.Tab); + } @@ -71,20 +82,59 @@ namespace BootloaderGUI }; this.Controls.Add(lblStatus); - // создаём TabControl + // Кнопки Select Firmware и Connect CAN + btnSelect = new Button() + { + Top = lblStatus.Bottom + 10, + Left = 10, + Width = 200, + Text = "Select Firmware" + }; + btnSelect.Click += (s, e) => + { + int pageMax = ReadFirmware(); + UpdateStatusOnUI($"File loaded. Total pages: {pageMax + 1}"); + llTab?.SetMaxPage(pageMax); // <-- обновляем numPage + regTab?.SetMaxPage(pageMax); // <-- обновляем numPage + }; + + btnConnect = new Button() + { + Top = lblStatus.Bottom + 10, + Left = btnSelect.Right + 10, + Width = 200, + Text = "Connect CAN" + }; + btnConnect.Click += (s, e) => + { + ushort? bitrate = CanInterface.CanSpeedDialog.ShowDialog(); + if (bitrate == null) return; + + string status; + if (can.ConnectFirstDevice(bitrate.Value, out status)) + lblStatus.Text = status; + else + lblStatus.Text = "Connect failed"; + }; + + + this.Controls.Add(btnSelect); + this.Controls.Add(btnConnect); + + // создаём TabControl ниже кнопок tabControl = new TabControl() { - Top = 40, + Top = btnSelect.Bottom + 10, Left = 10, Width = 480, - Height = 300 // уменьшаем, чтобы помещался ProgressBar снизу + Height = 260 }; this.Controls.Add(tabControl); - // создаём ProgressBar под вкладками + // ProgressBar под вкладками progressBar = new ProgressBar() { - Top = tabControl.Bottom + 10, // сразу под TabControl + Top = tabControl.Bottom + 10, Left = 10, Width = 480, Height = 22, @@ -108,17 +158,45 @@ namespace BootloaderGUI private void ConnectCan() { - if (can.ConnectFirstDevice(out string status)) + using (var dlg = new Form()) { - lblStatus.Text = status; - } - else - { - MessageBox.Show(status, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - lblStatus.Text = status; + dlg.Text = "Select CAN Speed"; + dlg.Width = 300; + dlg.Height = 200; + var combo = new ComboBox() { Left = 20, Top = 20, Width = 200 }; + combo.Items.AddRange(new object[] + { + new { Text="1000K", Value=CanInterface.SLCAN_BR_CIA_1000K }, + new { Text="800K", Value=CanInterface.SLCAN_BR_CIA_800K }, + new { Text="500K", Value=CanInterface.SLCAN_BR_CIA_500K }, + new { Text="250K", Value=CanInterface.SLCAN_BR_CIA_250K }, + new { Text="125K", Value=CanInterface.SLCAN_BR_CIA_125K }, + }); + combo.DisplayMember = "Text"; + combo.ValueMember = "Value"; + combo.SelectedIndex = 3; // по умолчанию 250K + + var ok = new Button() { Text = "OK", Left = 20, Top = 60, DialogResult = DialogResult.OK }; + dlg.Controls.Add(combo); + dlg.Controls.Add(ok); + dlg.AcceptButton = ok; + + if (dlg.ShowDialog() == DialogResult.OK) + { + ushort bitrate = (ushort)((dynamic)combo.SelectedItem).Value; + + if (can.ConnectFirstDevice(bitrate, out string status)) + lblStatus.Text = status; + else + { + MessageBox.Show(status, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + lblStatus.Text = status; + } + } } } + private int ReadFirmware() { int page_max = 0; @@ -140,8 +218,11 @@ namespace BootloaderGUI } - private void SendReceivePage(int pageNum) + private void SendPage(int pageNum) { + uint timeout = 1000u; + UInt16 error = 0; + try { if (fwData == null) return; @@ -158,12 +239,13 @@ namespace BootloaderGUI } // CRC32 (можно оставить заглушкой, как у тебя) - uint crc = 123; - byte[] crcBE = new byte[4]; - crcBE[0] = (byte)((crc >> 24) & 0xFF); - crcBE[1] = (byte)((crc >> 16) & 0xFF); - crcBE[2] = (byte)((crc >> 8) & 0xFF); - crcBE[3] = (byte)(crc & 0xFF); + uint crc = CRC32Calculator.Compute(page); + byte[] crcBE = new byte[4] { + (byte)((crc >> 24) & 0xFF), + (byte)((crc >> 16) & 0xFF), + (byte)((crc >> 8) & 0xFF), + (byte)(crc & 0xFF) + }; byte[] full = new byte[BootloaderCommands.PAGE_SIZE + 4]; Array.Copy(page, 0, full, 0, BootloaderCommands.PAGE_SIZE); @@ -201,7 +283,21 @@ namespace BootloaderGUI } UpdateProgressOnUI(100); - UpdateStatusOnUI($"Page {pageNum} sent (RECEIVE)"); + + + if(can.WaitForResponse(timeout, out error)) + { + UpdateStatusOnUI($"Page {pageNum} sent (RECEIVE)"); + } + else + { + if (error == 0xFFFF) + MessageBox.Show($"Error during sending: timed out", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + else + MessageBox.Show($"Error during sending, error code: 0x{error:X4}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + } catch (Exception ex) { @@ -211,17 +307,28 @@ namespace BootloaderGUI private bool SendCmdSync(byte cmd) { - if (can == null || !can.SendCmd(cmd)) + if (can == null) { - MessageBox.Show("CAN device not connected or send failed", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + MessageBox.Show("CAN device not connected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } - UpdateStatusOnUI($"Command 0x{cmd:X2} sent"); + if (!can.SendCmd(cmd, out UInt16 error)) + { + if (error == 0xFFFF) + MessageBox.Show($"Command 0x{cmd:X2} timed out", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + else + MessageBox.Show($"Command 0x{cmd:X2} failed, error code: 0x{error:X4}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); + + return false; + } + + UpdateStatusOnUI($"Command 0x{cmd:X2} sent successfully"); return true; } + private void UpdateStatusOnUI(string text) { if (this.InvokeRequired) @@ -242,4 +349,32 @@ namespace BootloaderGUI } } + + public static class CRC32Calculator + { + private const uint Polynomial = 0x04C11DB7; + + public static uint Compute(byte[] data) + { + uint crc = 0xFFFFFFFF; + + foreach (byte b in data) + { + crc ^= (uint)(b << 24); + for (int i = 0; i < 8; i++) + { + if ((crc & 0x80000000) != 0) + crc = (crc << 1) ^ Polynomial; + else + crc <<= 1; + } + } + + return crc ^ 0xFFFFFFFF; + } + } + + } + + diff --git a/botterm/botterm/UserFriendlyBoot.cs b/botterm/botterm/UserFriendlyBoot.cs new file mode 100644 index 0000000..b8e966c --- /dev/null +++ b/botterm/botterm/UserFriendlyBoot.cs @@ -0,0 +1,140 @@ +using System; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace BootloaderGUI +{ + public class BootloaderTab + { + public TabPage Tab { get; private set; } + + private Label lblStatus; // Локальный label для статуса + private Button btnFirmware, btnGoBoot, btnReset; + private ProgressBar progressBar; + + private Func readFirmware; + private Func sendCmdSync; + private Action sendPage; + private int totalPages; + public BootloaderTab( + Func readFirmwareDelegate, + Func sendCmdSyncDelegate, + Action sendPageDelegate, + ProgressBar progrBar) // убрали внешний statusLabel + { + readFirmware = readFirmwareDelegate; + sendCmdSync = sendCmdSyncDelegate; + sendPage = sendPageDelegate; + progressBar = progrBar; + InitializeUI(); + } + + private void InitializeUI() + { + Tab = new TabPage("Bootloader"); + + int left = 10; + int top = 10; + int wBtn = 200; + int hBtn = 30; + int gap = 10; + + // Создаём локальный label для статуса + lblStatus = new Label() + { + Top = top, + Left = left, + Width = 400, + Height = 25, + Text = "Ready" + }; + Tab.Controls.Add(lblStatus); + + top += lblStatus.Height + gap; + + // Кнопка "Firmware" - автоматическая прошивка + btnFirmware = new Button() { Top = top, Left = left, Width = wBtn, Height = hBtn, Text = "Firmware" }; + btnFirmware.Click += async (s, e) => await FlashFirmwareAsync(); + + // Кнопка "Go To Boot" + btnGoBoot = new Button() { Top = top, Left = left + wBtn + gap, Width = wBtn, Height = hBtn, Text = "Go To Boot" }; + btnGoBoot.Click += (s, e) => sendCmdSync(BootloaderCommands.GO_TO_BOOT); + + top += hBtn + gap; + + // Кнопка "Go To App" + Button btnGoApp = new Button() { Top = top, Left = left, Width = wBtn, Height = hBtn, Text = "Go To App" }; + btnGoApp.Click += (s, e) => + { + UpdateStatus("Jumping to app..."); + sendCmdSync(BootloaderCommands.JUMP); + }; + + // Кнопка "Reset" + btnReset = new Button() { Top = top, Left = left + wBtn + gap, Width = wBtn, Height = hBtn, Text = "Reset" }; + btnReset.Click += (s, e) => sendCmdSync(BootloaderCommands.RESET); + + Tab.Controls.AddRange(new Control[] { btnFirmware, btnGoBoot, btnGoApp, btnReset }); + } + + + private async Task FlashFirmwareAsync() + { + if(totalPages <= 0) + { + UpdateStatus("No Firmware Selected"); + return; + } + + UpdateStatus("Erasing..."); + await Task.Delay(5); // небольшая пауза для UI + if (!sendCmdSync(BootloaderCommands.ERASE)) + { + UpdateStatus("Erase failed"); + return; + } + + await Task.Delay(5); // небольшая пауза для UI + for (int page = 0; page < totalPages; page++) + { + UpdateStatus($"Sending page {page + 1}/{totalPages}"); + sendPage(page); + + UpdateStatus($"Writing page {page + 1}/{totalPages}"); + if (!sendCmdSync(BootloaderCommands.WRITE)) + { + UpdateStatus($"Write failed on page {page}"); + return; + } + + await Task.Delay(5); // небольшая пауза для UI + } + + UpdateStatus("Verifying..."); + await Task.Delay(5); // небольшая пауза для UI + if (!sendCmdSync(BootloaderCommands.VERIFY)) + { + UpdateStatus("Verify failed"); + return; + } + + UpdateStatus("Jumping to app..."); + await Task.Delay(5); // небольшая пауза для UI + sendCmdSync(BootloaderCommands.JUMP); + } + + // Локальный метод для обновления статуса + private void UpdateStatus(string text) + { + if (lblStatus.InvokeRequired) + lblStatus.Invoke(new Action(() => lblStatus.Text = text)); + else + lblStatus.Text = text; + } + + public void SetMaxPage(int max) + { + totalPages = max + 1; + } + } +} diff --git a/botterm/botterm/bin/Debug/botterm.exe b/botterm/botterm/bin/Debug/botterm.exe index cbcbe8d1279f1efc2e854ad2db13b6d0bb12dd32..29cf30cf069e25d3852554db2095e8e698f2fb28 100644 GIT binary patch literal 27648 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 literal 17920 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 diff --git a/botterm/botterm/bin/Debug/botterm.pdb b/botterm/botterm/bin/Debug/botterm.pdb index 941cf8afa93eccfa49007e40f7f8d81328ac5fea..5902e853b313554b31dd990352494816d989c46c 100644 GIT binary patch literal 65024 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 literal 52736 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 + ResXFileCodeGenerator Resources.Designer.cs diff --git a/botterm/botterm/obj/Debug/botterm.csproj.AssemblyReference.cache b/botterm/botterm/obj/Debug/botterm.csproj.AssemblyReference.cache index f5e894aea93a73e58fa9d4feab241bc197ee1a40..1228a24771f4934fb130b98dc1bd273a04565ada 100644 GIT binary patch literal 1623 zcmcJPKT88a5XEmh5ql9*T&c|xP4Hi*XATP!BqwOGAe+0%Wp)3=*(H~Jj(j%1inVtl zT5g(Y1_lP+kH>p6zMU2sV+To+FqvJ8M|3qxljcf;PmkA^=OAncflv4r~hp=_H(b3+;5Nie9#}9 zUM1|6M8DYh04A=!pj3Y`nm;J}5yx0jV%*6fc{d6Oqjdo5m9st$rAVOuBE+*|A#oY! zs7N?|6Y^tDG^B5&2(Z*{W59;E7d0se%0}5bPC?q52?Ty0!VbYOlx93DTe-&b+@aZ_ TEF~pN_ei1{C9O&35TXd*LOcYs literal 11 QcmeZu3JP{+WMlvW01Ze1dH?_b diff --git a/botterm/botterm/obj/Debug/botterm.csproj.CoreCompileInputs.cache b/botterm/botterm/obj/Debug/botterm.csproj.CoreCompileInputs.cache index 1e128e0..e30f43b 100644 --- a/botterm/botterm/obj/Debug/botterm.csproj.CoreCompileInputs.cache +++ b/botterm/botterm/obj/Debug/botterm.csproj.CoreCompileInputs.cache @@ -1 +1 @@ -bc27571c42487534b7297bfdef2c705a3d0dd908 +6e4f7064cd453f33ddf5825a7ce97a1c149aef21 diff --git a/botterm/botterm/obj/Debug/botterm.exe b/botterm/botterm/obj/Debug/botterm.exe index cbcbe8d1279f1efc2e854ad2db13b6d0bb12dd32..29cf30cf069e25d3852554db2095e8e698f2fb28 100644 GIT binary patch literal 27648 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 literal 17920 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 diff --git a/botterm/botterm/obj/Debug/botterm.pdb b/botterm/botterm/obj/Debug/botterm.pdb index 941cf8afa93eccfa49007e40f7f8d81328ac5fea..5902e853b313554b31dd990352494816d989c46c 100644 GIT binary patch literal 65024 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 literal 52736 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