1 | Private Sub cmd_Upload_Click()
|
2 | Dim tmp As Integer
|
3 |
|
4 | If FileExists(txt_File) = False Then
|
5 | Add_Item "Datei: " & txt_File & " existiert nicht"
|
6 | Exit Sub
|
7 | End If
|
8 |
|
9 | On Error GoTo Port_error
|
10 | With MSComm1
|
11 | .CommPort = Combo1
|
12 | .Handshaking = 2 - comRTS
|
13 | .RThreshold = 1
|
14 | .RTSEnable = True
|
15 | .Settings = "57600,n,8,1"
|
16 | .SThreshold = 1
|
17 | .PortOpen = True
|
18 | End With
|
19 | On Error GoTo 0
|
20 |
|
21 | Dim data As String
|
22 | Dim block As Byte
|
23 | Dim block_gesamt As Byte
|
24 | Dim i As Integer
|
25 | Dim ii As Single
|
26 | Dim ReadByte As String
|
27 | Dim Retry As Byte
|
28 |
|
29 | Const Nak = &H15
|
30 | Const Ack = &H6
|
31 | Const Can = &H18
|
32 |
|
33 | Read_File_to_Array (txt_File)
|
34 |
|
35 | Add_Item "Chr(128) senden..."
|
36 |
|
37 | For i = 600 To 1 Step -1
|
38 | MSComm1.Output = Chr(123) ' Initbyte senden
|
39 |
|
40 | For ii = 1 To 1000
|
41 | ReadByte = MSComm1.Input
|
42 | If ReadByte = Chr(123) Then GoTo got_123
|
43 | Next ii
|
44 |
|
45 | If i = 1 Then
|
46 | Add_Item "Reset nicht erkannt!"
|
47 | GoTo ende:
|
48 | End If
|
49 | Next i
|
50 |
|
51 | got_123:
|
52 | ReadByte = "" ' Buffer löschen
|
53 | Add_Item "Chr(128) empfangen"
|
54 |
|
55 | For ii = 1 To 100000
|
56 | ReadByte = MSComm1.Input
|
57 | If ReadByte = Chr(Nak) Then GoTo got_Nak
|
58 | Next ii
|
59 | GoTo ende
|
60 |
|
61 | got_Nak:
|
62 | block_gesamt = UBound(B) / 128
|
63 |
|
64 | Block_nochmal:
|
65 | For i = 1 To UBound(B) Step 128
|
66 | block = block + 1
|
67 |
|
68 | data = ""
|
69 | Bcsum2 = 1
|
70 | Bcsum1 = 255 - block ' Komplement
|
71 | Bcsum2 = Bcsum2 + block
|
72 | ueberlauf
|
73 | Bcsum2 = Bcsum2 + Bcsum1
|
74 | ueberlauf
|
75 |
|
76 | For ii = i To i + 127
|
77 | data = data & Chr(B(ii))
|
78 | Bcsum2 = Bcsum2 + B(ii)
|
79 | ueberlauf
|
80 | Next ii
|
81 |
|
82 | Add_Item "sende 'Start Of Header-Byte' Chr(1)"
|
83 | MSComm1.Output = Chr(1) 'send Start Of Header
|
84 |
|
85 | Add_Item "sende Blocknummer: " & Str(block)
|
86 | MSComm1.Output = Chr(block)
|
87 |
|
88 | Add_Item "sende 1. Checksummen-Byte:" & Str(Bcsum1)
|
89 | MSComm1.Output = Chr(Bcsum1)
|
90 |
|
91 | Add_Item "sende Datenblock (128Byte)"
|
92 | MSComm1.Output = data
|
93 |
|
94 | Add_Item "sende 2. Checksummen-Byte:" & Str(Bcsum2)
|
95 | MSComm1.Output = Chr(Bcsum2) ' Bcsum2
|
96 |
|
97 | For ii = 1 To 100000
|
98 | ReadByte = MSComm1.Input
|
99 |
|
100 | If ReadByte = Chr(Ack) Then
|
101 | Add_Item "Ack :)"
|
102 | Exit For ' nächster Block
|
103 | End If
|
104 |
|
105 | If ReadByte = Chr(Nak) Then
|
106 | Add_Item "Nak :("
|
107 | If Retry = 10 Then GoTo Abort
|
108 | Retry = Retry + 1 ' Block noch mal
|
109 | block = block - 1
|
110 | GoTo Block_nochmal
|
111 | End If
|
112 | If ii = 100000 Then GoTo Abort ' fehler!!
|
113 | Next ii
|
114 |
|
115 | Next i
|
116 | Add_Item "sende 'End of transmitted'"
|
117 | MSComm1.Output = Chr(4) ' EOT (End of transmitted)
|
118 |
|
119 | Add_Item "Erfolgreich geflasht!"
|
120 | GoTo ende
|
121 | Exit Sub
|
122 | '--------------------------------------------------------------------------
|
123 | Abort:
|
124 | MSComm1.Output = Chr(Can) ' abbruch senden
|
125 | Add_Item "Retry error!"
|
126 |
|
127 | ende:
|
128 | cmd_Upload.Enabled = True
|
129 | cmd_Search_File.Enabled = True
|
130 | lbl_info.Visible = False
|
131 | MSComm1.PortOpen = 0
|
132 | Exit Sub
|
133 |
|
134 | Port_error:
|
135 | MsgBox "Fehler beim öffnen des COM-Ports"
|
136 | End Sub
|
137 |
|
138 | Public Sub ueberlauf()
|
139 | If Bcsum2 > 255 Then Bcsum2 = Bcsum2 - 256 ' Überlauf von Byte
|
140 | End Sub
|