@@ -112,6 +112,33 @@ def read_response(len, timeout:)
112
112
end
113
113
end
114
114
115
+ def spinner ( addr , top , start , code : nil , length : 80 )
116
+ xs = addr * length / top
117
+ spaces = length - xs
118
+ print "["
119
+ print ( "X" * xs )
120
+ print ( " " * spaces )
121
+ print "] #{ code ? "#{ code } " : "" } #{ "/-\\ |" [ ( Time . now - start ) . to_i % 4 ] } #{ addr . to_s . reverse . scan ( /\d {3}|.+/ ) . join ( "," ) . reverse . rjust ( 9 ) } \r "
122
+ STDOUT . flush
123
+ end
124
+
125
+ def usage
126
+ puts "usage:"
127
+ puts " ruby #$0 dump"
128
+ puts " dumps 4MiB of flash to 'flash-contents.bin'"
129
+ puts " ruby #$0 write FILE"
130
+ puts " writes FILE to flash. it should probably be a multiple of 4096 bytes long."
131
+ puts " ruby #$0 verify FILE"
132
+ puts " verifies FILE in flash"
133
+ exit 1
134
+ end
135
+
136
+ REQ_RES_SIZE = 256
137
+
138
+ if ARGV . length == 0 || !%w( dump write verify ) . include? ( ARGV [ 0 ] )
139
+ usage
140
+ end
141
+
115
142
arduino = RTD266xArduino . new
116
143
retries = 5
117
144
puts "connecting ..."
@@ -135,38 +162,30 @@ def read_response(len, timeout:)
135
162
136
163
cmd = ARGV . shift
137
164
138
- def spinner ( addr , top , start , code : nil , length : 80 )
139
- xs = addr * length / top
140
- spaces = length - xs
141
- print "["
142
- print ( "X" * xs )
143
- print ( " " * spaces )
144
- print "] #{ code ? "#{ code } " : "" } #{ "/-\\ |" [ ( Time . now - start ) . to_i % 4 ] } #{ addr . to_s . reverse . scan ( /\d {3}|.+/ ) . join ( "," ) . reverse . rjust ( 9 ) } \r "
145
- STDOUT . flush
146
- end
147
-
148
165
if cmd == "dump"
149
- puts "dumping 4MiB of flash in 512 byte increments"
166
+ usage if ARGV . any?
167
+
168
+ puts "dumping 4MiB of flash in #{ REQ_RES_SIZE } byte increments"
150
169
f = File . open ( "flash-contents.bin" , "wb" )
151
170
addr = 0
152
171
top = 4 * 1024 * 1024
153
172
start = Time . now
154
173
while addr < top
155
174
spinner ( addr , top , start )
156
- segment = arduino . read_segment ( addr , 512 )
175
+ segment = arduino . read_segment ( addr , REQ_RES_SIZE )
157
176
f . write ( segment )
158
- addr += 512
177
+ addr += REQ_RES_SIZE
159
178
end
160
179
spinner ( addr , top , start )
161
180
print "\n "
162
181
f . close
163
182
164
183
elsif cmd == "write"
165
184
file = ARGV . shift
166
- raise "specify a filename" unless file
185
+ usage if ARGV . any? || ! file
167
186
168
187
content = File . open ( file , "rb" , &:read )
169
- puts "writing #{ content . length } bytes to flash in 256 byte increments"
188
+ puts "writing #{ content . length } bytes to flash in #{ REQ_RES_SIZE } byte increments"
170
189
171
190
addr = 0
172
191
start = Time . now
@@ -176,30 +195,33 @@ def spinner(addr, top, start, code: nil, length: 80)
176
195
arduino . erase_sector_containing ( addr )
177
196
end
178
197
spinner ( addr , content . length , start , code : 'W' )
179
- arduino . write_data ( addr , content [ addr ...addr +256 ] )
180
- addr += 256
198
+ arduino . write_data ( addr , content [ addr ...addr +REQ_RES_SIZE ] )
199
+ addr += REQ_RES_SIZE
181
200
end
182
201
spinner ( addr , content . length , start )
183
202
print "\n "
184
203
185
204
elsif cmd == "verify"
186
205
file = ARGV . shift
187
- raise "specify a filename" unless file
206
+ usage if ARGV . any? || ! file
188
207
189
208
content = File . open ( file , "rb" , &:read )
190
- puts "verifying #{ content . length } bytes in flash in 512 byte"
209
+ puts "verifying #{ content . length } bytes in flash in #{ REQ_RES_SIZE } byte increments "
191
210
192
211
addr = 0
193
212
start = Time . now
213
+ errors = false
194
214
while addr < content . length
195
215
spinner ( addr , content . length , start )
196
- segment = arduino . read_segment ( addr , 512 )
197
- if segment != content [ addr ...addr +512 ]
216
+ segment = arduino . read_segment ( addr , REQ_RES_SIZE )
217
+ if segment != content [ addr ...addr +REQ_RES_SIZE ]
198
218
print "\n "
199
- puts "verify error in bytes #{ addr } ...#{ addr +512 } "
219
+ errors = true
220
+ puts "verify error in bytes #{ addr } ...#{ addr +REQ_RES_SIZE } "
200
221
end
201
- addr += 512
222
+ addr += REQ_RES_SIZE
202
223
end
203
224
spinner ( addr , content . length , start )
204
225
print "\n "
226
+ exit 2 if errors
205
227
end
0 commit comments