blink_tm 0.4.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aee9807ee73b58a75f7c4c0d09fcda705f6d8087d51e3c5178ab0472ebd2faae
4
- data.tar.gz: d9156630e58cc9d4a41b26b7f0666f2abe565de91e8d1636bb8733920a9dfac0
3
+ metadata.gz: '080b57c4c4dac231dbb6353428aaaf7be86bd47e4da2379308c23d9ca5315aaa'
4
+ data.tar.gz: e13ccff20189b8e1e944230b0c27ce87272677a9d50ee2c289098800f1860fe9
5
5
  SHA512:
6
- metadata.gz: 204d49f580218bce9aed96a58a27a1f6fae07996e8d9a911749fec17a621b8c4cfcf2f081e71447e0d61788b22032713239c287d0b1194d6c4e6b048fdcd24a1
7
- data.tar.gz: 4c269cca6fb02329354483e4495a88da1270c6426a2756315eb8bc88ef0577466165d0f2239181a140bcf04042c04c4ae4b53c0ec53044034bd930954f98f606
6
+ metadata.gz: 1ae79bb6028b57c8046e1cf68ccd62fcac30ae38a75579d6402855e9dce94d012877cd358bd0b4a99dc6ddd1376ba3548a3ac88aa59867ea54d9c7bdd7e5f16c
7
+ data.tar.gz: 4cc14d89f98e59675fa2071005cda0b44a4c41f421c5ea0ba850193363b33c922c623187c939f9ed48bd152277732ceb7022e3ccedc88cc13ba710c2d52157f4
@@ -7,7 +7,7 @@ VALUE setBaudRate(volatile VALUE obj, volatile VALUE dev, volatile VALUE speed)
7
7
  char *device = StringValuePtr(dev) ;
8
8
  unsigned int spd = NUM2UINT(speed) ;
9
9
 
10
- int serial_port = open(device, O_RDWR) ;
10
+ int serial_port = open(device, O_RDWR | O_NOCTTY) ;
11
11
  struct termios tty ;
12
12
 
13
13
  char status = tcgetattr(serial_port, &tty) ;
@@ -22,7 +22,10 @@ VALUE setBaudRate(volatile VALUE obj, volatile VALUE dev, volatile VALUE speed)
22
22
  -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke
23
23
  */
24
24
 
25
- if(status != 0) return Qnil ;
25
+ if(status != 0) {
26
+ close(serial_port) ;
27
+ return Qnil ;
28
+ }
26
29
 
27
30
  tty.c_cflag &= ~CSIZE ;
28
31
  tty.c_cflag |= CS8 ;
@@ -46,18 +49,20 @@ VALUE setBaudRate(volatile VALUE obj, volatile VALUE dev, volatile VALUE speed)
46
49
  cfsetospeed(&tty, spd) ;
47
50
  status = tcsetattr(serial_port, TCSANOW, &tty) ;
48
51
 
49
- if (status == 0) return Qtrue ;
52
+ close(serial_port) ;
50
53
 
54
+ if (status == 0) return Qtrue ;
51
55
  return Qfalse ;
52
56
  }
53
57
 
54
58
  VALUE getBaudRate(volatile VALUE obj, volatile VALUE dev) {
55
59
  char *device = StringValuePtr(dev) ;
56
60
 
57
- int serial_port = open(device, O_RDWR) ;
61
+ int serial_port = open(device, O_RDWR | O_NOCTTY | O_NONBLOCK) ;
58
62
  struct termios tty ;
59
63
 
60
64
  char status = tcgetattr(serial_port, &tty) ;
65
+ close(serial_port) ;
61
66
 
62
67
  if(status == 0) {
63
68
  unsigned int in = cfgetispeed(&tty) ;
data/ext/crc32/crc32.c ADDED
@@ -0,0 +1,33 @@
1
+ /*
2
+ Source:
3
+ https://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art008
4
+
5
+ Note that this obeys the standard and matches with Ruby's Zlib.crc32(...)
6
+ */
7
+
8
+ #define CRC32_DIVISOR 0xEDB88320
9
+ #include "ruby.h"
10
+
11
+ static VALUE getCRC(volatile VALUE obj, volatile VALUE str) {
12
+ char *input = StringValuePtr(str) ;
13
+ unsigned char len = strlen(input) ;
14
+ unsigned long crc = 0xFFFFFFFF ;
15
+
16
+ for (unsigned char i = 0 ; i < len ; ++i) {
17
+ crc ^= input[i] ;
18
+
19
+ for (unsigned char k = 8 ; k ; --k) {
20
+ crc = crc & 1 ? (crc >> 1) ^ CRC32_DIVISOR : crc >> 1 ;
21
+ }
22
+ }
23
+
24
+ char buffer[11] ;
25
+ sprintf(buffer, "%lu", crc ^ 0xFFFFFFFF) ;
26
+
27
+ return rb_str_new_cstr(buffer) ;
28
+ }
29
+
30
+ void Init_crc32() {
31
+ VALUE blinktm = rb_define_module("BlinkTM") ;
32
+ rb_define_module_function(blinktm, "crc32", getCRC, 1) ;
33
+ }
@@ -0,0 +1,2 @@
1
+ require 'mkmf'
2
+ create_makefile 'blink_tm/crc32'
data/lib/blink_tm.rb CHANGED
@@ -6,18 +6,19 @@ $-v = true
6
6
 
7
7
  module BlinkTM
8
8
  # Important Constants
9
- BAUDRATE = BlinkTM::B57600
9
+ BAUDRATE = BlinkTM::B38400
10
10
  SCANID = 'BTM'
11
11
 
12
12
  # POLLING time, how often should CPU, Net, IO usages should be updated.
13
13
  # Should always be a float.
14
- POLLING = 0.375
14
+ POLLING = 0.250
15
15
 
16
16
  # Refresh time, how often the main loop should run
17
17
  REFRESH = 0.5
18
18
 
19
19
  # Errors
20
20
  NoDeviceError = Class.new(StandardError)
21
+ SyncError = Class.new(StandardError)
21
22
  DeviceNotReady = Class.new(StandardError)
22
23
 
23
24
  # Units
@@ -47,3 +48,4 @@ end
47
48
  require 'blink_tm/version'
48
49
  require 'fcntl'
49
50
  require 'blink_tm/blink_tm'
51
+ require 'blink_tm/crc32'
@@ -102,18 +102,25 @@ module BlinkTM
102
102
  end
103
103
  }
104
104
 
105
+ prev_crc32 = ''
106
+
105
107
  begin
106
108
  raise NoDeviceError unless device
107
109
 
108
110
  in_sync = false
109
- fd = IO.sysopen(device, Fcntl::O_RDWR)
111
+
112
+ fd = IO.sysopen(
113
+ device,
114
+ Fcntl::O_RDWR | Fcntl::O_NOCTTY | Fcntl::O_NONBLOCK | Fcntl::O_TRUNC
115
+ )
116
+
110
117
  file = IO.open(fd)
111
118
 
112
119
  until in_sync
113
120
  # Clear out any extra zombie bits
114
- file.syswrite(?~)
121
+ file.syswrite(?~.freeze)
115
122
  # Start the device
116
- file.syswrite(?#)
123
+ file.syswrite(?#.freeze)
117
124
  file.flush
118
125
 
119
126
  sleep 0.125
@@ -129,7 +136,10 @@ module BlinkTM
129
136
  end
130
137
  end
131
138
 
139
+ sync_error_count = 0
140
+
132
141
  puts "#{BlinkTM::BOLD}#{BlinkTM::GREEN}:: #{Time.now.strftime('%H:%M:%S.%2N')}: Device ready!#{BlinkTM::RESET}"
142
+ file.read
133
143
 
134
144
  while true
135
145
  # cpu(01234) memUsed(999993) swapUsed(999992) io_active(0)
@@ -161,7 +171,16 @@ module BlinkTM
161
171
  # Rescuing from suspend
162
172
  file.syswrite(str)
163
173
  file.flush
174
+ crc32 = file.read.scrub![/\d+/]
164
175
 
176
+ unless crc32 == prev_crc32 || prev_crc32.empty?
177
+ raise SyncError if sync_error_count > 1
178
+ sync_error_count += 1
179
+ else
180
+ sync_error_count = 0 unless sync_error_count == 0
181
+ end
182
+
183
+ prev_crc32 = BlinkTM.crc32(str[2..-2])
165
184
  sleep REFRESH
166
185
  end
167
186
  rescue Interrupt, SystemExit, SignalException
@@ -176,6 +195,10 @@ module BlinkTM
176
195
  sleep 0.1
177
196
  end
178
197
 
198
+ retry
199
+ rescue BlinkTM::SyncError
200
+ file &.close
201
+ sleep 0.005
179
202
  retry
180
203
  rescue BlinkTM::DeviceNotReady
181
204
  file &.close
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BlinkTM
4
- VERSION = "0.4.0"
4
+ VERSION = "1.0.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blink_tm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sourav Goswami
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-07 00:00:00.000000000 Z
11
+ date: 2021-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: linux_stat
@@ -31,11 +31,14 @@ executables:
31
31
  - blink-tm
32
32
  extensions:
33
33
  - ext/baudrate/extconf.rb
34
+ - ext/crc32/extconf.rb
34
35
  extra_rdoc_files: []
35
36
  files:
36
37
  - exe/blink-tm
37
38
  - ext/baudrate/baudrate.c
38
39
  - ext/baudrate/extconf.rb
40
+ - ext/crc32/crc32.c
41
+ - ext/crc32/extconf.rb
39
42
  - lib/blink_tm.rb
40
43
  - lib/blink_tm/blink_tm.rb
41
44
  - lib/blink_tm/version.rb
@@ -58,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
61
  - !ruby/object:Gem::Version
59
62
  version: '0'
60
63
  requirements: []
61
- rubygems_version: 3.2.18
64
+ rubygems_version: 3.2.21
62
65
  signing_key:
63
66
  specification_version: 4
64
67
  summary: A controller for Arduino OLED System Monitor, Blink Task Manager