svi 0.2.9 → 0.3.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NWVjYWE1YWM1NzM3N2YwZjk1YThiMzc1Y2MzZmM3M2JmZjczOGZiNQ==
4
+ ZDRlYzA0ZTM0NTE1ZmU2OTZjODIzMzkwZTVmM2RiNGU3MWUxMzg1Ng==
5
5
  data.tar.gz: !binary |-
6
- MWExMTI5YzYzMWNmMTc5YjgwMmQ5MjE4Mjc0MGVmZWQzYWY1MTU5Ng==
6
+ YWJiNDJiY2QwNDkwNDVmNDg1N2ExOTVhZmQ5MzEyNmI1MzQ5M2JkZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ODE3Njg4Y2M3ZjBjZmUzYTMxZTRlYmU4YmJhZDI0ZTg0Yjg3ZWI0NzAxMDE0
10
- NTcyNjIyMjI4NmU4NjkwODM4NGFlYjJlYTg1MTljNDk0MDExZmFlMmU0ZDIw
11
- NjEyNzMxNjBiMGVjMjRhZjM0ZDgyZTc3YzYzNjlhOTg5YTljMjM=
9
+ YjY0YmU3OGM0NTM2ZGJhMzNkMWZiMDg5NDAxZDI2ZWJiNzkyMGQ4MjRiYWVl
10
+ MTE4YTZhZGY0ODdiMzFjN2QyODYxNTk1NzIwMzA2OGVkOTA0NGFjYWNiNGI3
11
+ OTFjMGQxNzY2ODVlMWY2Y2I0MzdhNzVlMDdkNTVmNWM0YTU4N2U=
12
12
  data.tar.gz: !binary |-
13
- NjM3MTRiMDY3ZDM1ZjRhNWNmM2MyNGVmYTgzZTM5M2E0NDU0YTliMDUzMjBl
14
- YWE2MTY5ODI4YjlmZDNhZjIxYWI0YTFkNWY4Y2VlNDFiMTlkZWZjMDYyMmY3
15
- YTAwMDUzZGI0YzQ4ZmNhODAzNjNlZDEyZDQxYzg5NDA1NzU2OGI=
13
+ Y2NiMDkzOTA3NzE0NDdmNzgxODc1ZmNjMzYyOTkyMGQ5MjRhOTllZmMyYzY2
14
+ OTE4MTRmMWE3ODcwOGViYzJmMTZkNWM4ZmQ1N2E5NjgyODMwNGM5ODM4YTll
15
+ ZmZlZDY3ZDBjNzdlMDA2ZDQ5YmJhMDdlZDE0YjdjODZmM2NkMWE=
data/bin/svi CHANGED
@@ -1,4 +1,89 @@
1
1
  #!/usr/bin/ruby19
2
2
 
3
+ require 'gli'
4
+ require 'colorize'
5
+ require 'svi/version'
6
+ require 'svi/vidpid'
7
+ require 'svi/sviif'
8
+ require 'svi/sbiif'
9
+ require 'svi/svi'
10
+
11
+ include GLI::App
12
+
13
+ program_desc 'SVI interface tool set'
14
+
15
+ accept(VidPid) do |str|
16
+ VidPid.new(str)
17
+ end
18
+
19
+ accept(SVIIf) do |str|
20
+ SVIIf.new(str)
21
+ end
22
+
23
+ accept(SBIIf) do |str|
24
+ SBIIf.new(str)
25
+ end
26
+
27
+ desc 'Use appropriate VID/PID'
28
+ arg_name 'vid:pid'
29
+ default_value VidPid.new '3241:9372'
30
+ flag [:D, 'device'], :type => VidPid
31
+
32
+ desc 'Use device number N (see device list by --list option)'
33
+ arg_name 'N'
34
+ default_value 0
35
+ flag [:N,'device-number'], :type => Integer
36
+
37
+ desc 'Timeout for transfers on both interfaces'
38
+ arg_name 'milliseconds'
39
+ default_value 3000
40
+ flag [:T,'timeout'], :type => Integer
41
+
42
+ desc 'Define interface for SVI'
43
+ arg_name 'ifnum:epout:epin'
44
+ default_value SVIIf.new '2:4:4'
45
+ flag ['svi-if'], :type => SVIIf
46
+
47
+ desc 'Define interface for SBI'
48
+ arg_name 'ifnum:epout:epin'
49
+ default_value SBIIf.new '3:3:3'
50
+ flag ['sbi-if'], :type => SBIIf
51
+
52
+ desc 'Show devices list only'
53
+ switch ['l', 'list'], :negatable => false
54
+
55
+ desc 'Show version'
56
+ switch ['verbose'], :negatable => false
57
+
58
+ desc 'Rescue mode of device'
59
+ default_value false
60
+ switch ['r', 'rescue'], :negatable => false
61
+
62
+ pre do |global_opts, cmd, opts, args|
63
+ $dev = USB.new(global_opts[:device].vid, global_opts[:device].pid).svi_devices[global_opts[:N]]
64
+
65
+ if $dev
66
+ $dev.svi_if = global_opts['svi-if'].ifnum
67
+ $dev.svi_if_ep_in = global_opts['svi-if'].epin
68
+ $dev.svi_if_ep_out = global_opts['svi-if'].epout
69
+ $dev.svi_timeout = global_opts[:timeout]
70
+ end
71
+
72
+ exit_now! 'No devices detected' unless $dev
73
+
74
+ true
75
+ end
76
+
77
+ require 'svi/cmd/list'
78
+ require 'svi/cmd/leds'
79
+ require 'svi/cmd/app'
80
+ require 'svi/cmd/lun'
81
+ require 'svi/cmd/random'
82
+ require 'svi/cmd/usb'
83
+ require 'svi/cmd/sys'
84
+ require 'svi/cmd/dfu'
85
+
86
+ exit run(ARGV)
87
+
3
88
  # vim: sw=2 sts=2 ts=8:
4
89
 
@@ -0,0 +1,57 @@
1
+ desc 'app control'
2
+ command :app do |c|
3
+ c.desc 'Start app task'
4
+ c.command :start do |start|
5
+ start.action do
6
+ $dev.app_start
7
+ end
8
+ end
9
+
10
+ c.desc 'Stop app task'
11
+ c.command :stop do |stop|
12
+ stop.action do
13
+ $dev.app_stop
14
+ end
15
+ end
16
+
17
+ c.desc 'Test is app task exist in device'
18
+ c.command :exist do |exist|
19
+ exist.action do
20
+ puts $dev.app_exist[0] == 1 ? 'Application exist' : 'Application is not exist'
21
+ end
22
+ end
23
+
24
+ c.desc 'Get app size'
25
+ c.command [:size, :length] do |size|
26
+ size.action do
27
+ puts "App size = #{$dev.app_length[0]}"
28
+ end
29
+ end
30
+
31
+ c.desc 'Get app state'
32
+ c.command :state do |state|
33
+ state.action do
34
+ state = [
35
+ 'UNINIT',
36
+ 'LOADED',
37
+ 'RUN',
38
+ 'SLEEP',
39
+ 'INT_RUN',
40
+ 'INT_SLEEP',
41
+ 'HALTED'
42
+ ]
43
+
44
+ puts "App state = #{state[$dev.app_state[0]]}"
45
+ end
46
+ end
47
+
48
+ c.desc 'Get app checksum'
49
+ c.command :crc do |crc|
50
+ crc.action do
51
+ puts "App checksum = #{$dev.app_checksum[0].to_s(16)}"
52
+ end
53
+ end
54
+ end
55
+
56
+ # vim: sw=2 sts=2 ts=8:
57
+
@@ -0,0 +1,54 @@
1
+ desc 'Device firmwares update'
2
+ command :dfu do |c|
3
+ c.desc 'Update kernel'
4
+ arg_name 'firmware.bin'
5
+ c.command :kernel do |kernel|
6
+ kernel.action do |global_opts, opts, args|
7
+ exit_now! 'Invalid arguments' if args.count != 1
8
+
9
+ filepath = args[0]
10
+
11
+ res = $dev.nvm_load_file 1, 0, filepath
12
+
13
+ exit_now! "Can't load firmware into buffer" if res != [0]
14
+
15
+ res = $dev.nvm_verify_file 1, 0, filepath
16
+
17
+ exit_now! "Can't verify firmware into buffer" if res != [0]
18
+
19
+ addr = 0x10000
20
+ #addr = 0x20000 if options.target == :app
21
+
22
+ res = $dev.firmware_program addr, Pathname.new(filepath).size()/512+1, !global_opts[:rescue]
23
+
24
+ puts res[0] == 0 ? 'OK'.light_green : 'Fail'.light_red
25
+ end
26
+ end
27
+
28
+ c.desc 'Update app'
29
+ arg_name 'firmware.bin'
30
+ c.command :app do |app|
31
+ app.action do |global_opts, opts, args|
32
+ exit_now! 'Invalid arguments' if args.count != 1
33
+
34
+ filepath = args[0]
35
+
36
+ res = $dev.nvm_load_file 1, 0, filepath
37
+
38
+ exit_now! "Can't load firmware into buffer" if res != [0]
39
+
40
+ res = $dev.nvm_verify_file 1, 0, filepath
41
+
42
+ exit_now! "Can't verify firmware into buffer" if res != [0]
43
+
44
+ addr = 0x20000
45
+
46
+ res = $dev.firmware_program addr, Pathname.new(filepath).size()/512+1, !global_opts[:rescue]
47
+
48
+ puts res[0] == 0 ? 'OK'.light_green : 'Fail'.light_red
49
+ end
50
+ end
51
+ end
52
+
53
+ # vim: sw=2 sts=2 ts=8:
54
+
@@ -0,0 +1,10 @@
1
+ desc 'leds control'
2
+ arg_name 'led-number value'
3
+ command :led do |c|
4
+ c.action do |global_opts, opts, args|
5
+ help_now! 'Invalid arguments number' if args.count != 2
6
+
7
+ $dev.led_set args[0].to_i, args[1].to_i
8
+ end
9
+ end
10
+
@@ -0,0 +1,14 @@
1
+ desc 'list detected devices'
2
+ command :list do |c|
3
+ c.action do |opts|
4
+ devs = USB.new(opts[:device].vid, opts[:device].pid).svi_devices
5
+
6
+ if devs.empty?
7
+ puts 'No devices detected'
8
+ else
9
+ devs.each_with_index { |dev, i|
10
+ puts "##{i} #{dev.manufacturer} #{dev.product}"
11
+ }
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,20 @@
1
+ desc 'LUN control'
2
+ command :lun do |c|
3
+ c.desc 'Get eMMC capacity (in 512 blocks)'
4
+ c.command :seccount do |seccount|
5
+ seccount.action do
6
+ capacity = $dev.lun_get_seccount[0]
7
+ puts "eMMC capacity = #{capacity} blocks (#{capacity/2/1024/1024.0} GiB)"
8
+ end
9
+ end
10
+
11
+ c.desc 'Get count of active luns'
12
+ c.command :count do |count|
13
+ count.action do
14
+ puts "Count of active LUNs = #{$dev.lun_get_count[0]}"
15
+ end
16
+ end
17
+ end
18
+
19
+ # vim: sw=2 sts=2 ts=8:
20
+
@@ -0,0 +1,9 @@
1
+ desc 'RNG module'
2
+ command :random do |c|
3
+ c.action do
4
+ puts "Random number = #{$dev.random[0]}"
5
+ end
6
+ end
7
+
8
+ # vim: sw=2 sts=2 ts=8:
9
+
@@ -0,0 +1,12 @@
1
+ desc 'System control'
2
+ command :sys do |c|
3
+ c.desc 'Soft reset device'
4
+ c.command :reset do |reset|
5
+ reset.action do
6
+ $dev.system_reset
7
+ end
8
+ end
9
+ end
10
+
11
+ # vim: sw=2 sts=2 ts=8:
12
+
@@ -0,0 +1,12 @@
1
+ desc 'USB control'
2
+ command :usb do |c|
3
+ c.desc 'Reconnect to device'
4
+ c.command :reconnect do |reconnect|
5
+ reconnect.action do
6
+ $dev.usb_reconnect
7
+ end
8
+ end
9
+ end
10
+
11
+ # vim: sw=2 sts=2 ts=8:
12
+
data/lib/svi/sbiif.rb ADDED
@@ -0,0 +1,57 @@
1
+ class SBIIf
2
+ @ifnum
3
+ @epin
4
+ @epout
5
+
6
+ def initialize *args
7
+ raise ArgumentError, 'function shall accept 0, 1 or 3 arguments' unless [0, 1, 3].include? args.count
8
+
9
+ @ifnum, @epin, @epout = 0, 0, 0
10
+
11
+ if args.count == 1
12
+ _args = args[0].to_s.split ':'
13
+
14
+ raise ArgumentError, "Invalid string format of vid:pid - #{args[0].to_s}" if _args.count != 3
15
+
16
+ args = _args
17
+ end
18
+
19
+ if args.count == 3
20
+ self.ifnum = args[0]
21
+ self.epin = args[1]
22
+ self.epout = args[2]
23
+ end
24
+ end
25
+
26
+ def ifnum
27
+ @ifnum
28
+ end
29
+
30
+ def epin
31
+ @epin
32
+ end
33
+
34
+ def epout
35
+ @epout
36
+ end
37
+
38
+ def ifnum= (n)
39
+ @ifnum = n.to_i
40
+ end
41
+
42
+ def epin= (n)
43
+ raise ArgumentError, 'Invalid endpoint number' if n.to_i > 0xFF || n.to_i&0x7F > 16
44
+
45
+ @epin = n.to_i&0x7F
46
+ end
47
+
48
+ def epout= (n)
49
+ raise ArgumentError, 'Invalid endpoint number' if n.to_i > 0xFF || n.to_i&0x7F > 16
50
+
51
+ @epout = n.to_i&0x7F
52
+ end
53
+
54
+ def to_s
55
+ "#{@ifnum.to_s}:#{@epin.to_s}:#{@epout.to_s}"
56
+ end
57
+ end
data/lib/svi/sviif.rb ADDED
@@ -0,0 +1,57 @@
1
+ class SVIIf
2
+ @ifnum
3
+ @epin
4
+ @epout
5
+
6
+ def initialize *args
7
+ raise ArgumentError, 'function shall accept 0, 1 or 3 arguments' unless [0, 1, 3].include? args.count
8
+
9
+ @ifnum, @epin, @epout = 0, 0, 0
10
+
11
+ if args.count == 1
12
+ _args = args[0].to_s.split ':'
13
+
14
+ raise ArgumentError, "Invalid string format of vid:pid - #{args[0].to_s}" if _args.count != 3
15
+
16
+ args = _args
17
+ end
18
+
19
+ if args.count == 3
20
+ self.ifnum = args[0]
21
+ self.epin = args[1]
22
+ self.epout = args[2]
23
+ end
24
+ end
25
+
26
+ def ifnum
27
+ @ifnum
28
+ end
29
+
30
+ def epin
31
+ @epin
32
+ end
33
+
34
+ def epout
35
+ @epout
36
+ end
37
+
38
+ def ifnum= (n)
39
+ @ifnum = n.to_i
40
+ end
41
+
42
+ def epin= (n)
43
+ raise ArgumentError, 'Invalid endpoint number' if n.to_i > 0xFF || n.to_i&0x7F > 16
44
+
45
+ @epin = n.to_i&0x7F
46
+ end
47
+
48
+ def epout= (n)
49
+ raise ArgumentError, 'Invalid endpoint number' if n.to_i > 0xFF || n.to_i&0x7F > 16
50
+
51
+ @epout = n.to_i&0x7F
52
+ end
53
+
54
+ def to_s
55
+ "#{@ifnum.to_s}:#{@epin.to_s}:#{@epout.to_s}"
56
+ end
57
+ end
@@ -0,0 +1 @@
1
+ VERSION='0.3.10'
data/lib/svi/vidpid.rb ADDED
@@ -0,0 +1,60 @@
1
+ class VidPid
2
+ @vid
3
+ @pid
4
+
5
+ def initialize *args
6
+ raise ArgumentError, 'function shall accept 2 arguments max' if args.count > 2
7
+
8
+ @vid, @pid = 0, 0
9
+
10
+ if args.count == 1
11
+ _args = args[0].to_s.split ':'
12
+
13
+ raise ArgumentError, "Invalid string format of vid:pid - #{args[0].to_s}" if _args.count != 2
14
+
15
+ args = _args
16
+ end
17
+
18
+ if args.count == 2
19
+ self.vid = args[0]
20
+ self.pid = args[1]
21
+ end
22
+ end
23
+
24
+ def vid
25
+ @vid
26
+ end
27
+
28
+ def pid
29
+ @pid
30
+ end
31
+
32
+ def vid= (vendor)
33
+ if String === vendor
34
+ i = vendor.to_i 16
35
+ else
36
+ i = vendor.to_i
37
+ end
38
+
39
+ raise ArgumentError, "Invalid vendor #{vendor}" if i < 0 || i > 65535
40
+
41
+ @vid = i
42
+ end
43
+
44
+ def pid= (product)
45
+ if String === product
46
+ i = product.to_i 16
47
+ else
48
+ i = product.to_i
49
+ end
50
+
51
+ raise ArgumentError, "Invalid product #{product}" if i < 0 || i > 65535
52
+
53
+ @pid = i
54
+ end
55
+
56
+ def to_s
57
+ "#{@vid.to_s(16)}:#{@pid.to_s(16)}"
58
+ end
59
+ end
60
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: svi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.3.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Levenkov Artem
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-27 00:00:00.000000000 Z
11
+ date: 2015-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: libusb
@@ -70,7 +70,19 @@ files:
70
70
  - bin/usb_reconnect
71
71
  - lib/svi/api.generated.rb
72
72
  - lib/svi/api.rb
73
+ - lib/svi/cmd/app.rb
74
+ - lib/svi/cmd/dfu.rb
75
+ - lib/svi/cmd/leds.rb
76
+ - lib/svi/cmd/list.rb
77
+ - lib/svi/cmd/lun.rb
78
+ - lib/svi/cmd/random.rb
79
+ - lib/svi/cmd/sys.rb
80
+ - lib/svi/cmd/usb.rb
81
+ - lib/svi/sbiif.rb
73
82
  - lib/svi/svi.rb
83
+ - lib/svi/sviif.rb
84
+ - lib/svi/version.rb
85
+ - lib/svi/vidpid.rb
74
86
  homepage: http://www.mcs51.ru/svi-utils
75
87
  licenses:
76
88
  - MIT