mfrc522 1.0.2 → 1.0.3
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 +4 -4
- data/lib/mfrc522.rb +24 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9428817820b5c88cd3cff12e41b08d10c04d9059
|
4
|
+
data.tar.gz: 5b47fcf6a136886d21b45b5afbacff6493926b9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b8df55a9798f3c3d91cf359b341f0ff42871dc7530e9b06e2504d517de20083c772fcb528d01b623a5e9d2e27a32add5fc6bfca66ab0fde499eaf02cb6ba8c6
|
7
|
+
data.tar.gz: 205c14b4031c9ec0dd11e7ce54ad91bf633a01cdd7ef4122556ef689f30d6e89ff7236816ed6dc3b2e948b13c0b4f286f26c329399aaaca6fc3de675d56af3b6
|
data/lib/mfrc522.rb
CHANGED
@@ -249,14 +249,10 @@ class MFRC522
|
|
249
249
|
received_data = []
|
250
250
|
valid_bits = 0
|
251
251
|
|
252
|
-
loop
|
252
|
+
# Maxmimum loop is defined in ISO spec
|
253
|
+
32.times do
|
253
254
|
if current_level_known_bits >= 32 # Prepare to do a complete select if we knew everything
|
254
|
-
|
255
|
-
if buffer.size != 6 && !buffer.select{|b| !buffer.is_a?(Fixnum)}.empty?
|
256
|
-
current_level_known_bits = 0
|
257
|
-
buffer = [cascade_level]
|
258
|
-
next
|
259
|
-
end
|
255
|
+
buffer = buffer[0..5] if buffer.size != 6
|
260
256
|
|
261
257
|
tx_last_bits = 0
|
262
258
|
buffer[1] = 0x70 # NVB - We're sending full length byte[0..6]
|
@@ -281,7 +277,15 @@ class MFRC522
|
|
281
277
|
end
|
282
278
|
|
283
279
|
# Append received UID into buffer if not doing full select
|
284
|
-
|
280
|
+
if current_level_known_bits < 32
|
281
|
+
if current_level_known_bits % 8 != 0
|
282
|
+
uid_bit = current_level_known_bits % 8
|
283
|
+
buffer[-1] &= (0xFF >> (8 - uid_bit))
|
284
|
+
buffer[-1] |= received_data.shift
|
285
|
+
end
|
286
|
+
|
287
|
+
buffer.concat(received_data[0..3])
|
288
|
+
end
|
285
289
|
|
286
290
|
# Handle collision
|
287
291
|
if status == :status_collision
|
@@ -294,11 +298,19 @@ class MFRC522
|
|
294
298
|
collision_position = 32 if collision_position == 0 # Values 0-31, 0 means bit 32
|
295
299
|
raise CollisionError if collision_position <= current_level_known_bits
|
296
300
|
|
297
|
-
#
|
301
|
+
# Calculate positioin
|
298
302
|
current_level_known_bits = collision_position
|
299
|
-
uid_bit =
|
300
|
-
uid_byte = (current_level_known_bits
|
301
|
-
|
303
|
+
uid_bit = current_level_known_bits % 8
|
304
|
+
uid_byte = (current_level_known_bits + 7) / 8
|
305
|
+
|
306
|
+
# Mark the collision bit
|
307
|
+
buffer = buffer[0..(uid_byte + 1)]
|
308
|
+
if uid_bit == 0
|
309
|
+
buffer << 0x01
|
310
|
+
else
|
311
|
+
buffer[-1] &= (0xFF >> (8 - uid_bit))
|
312
|
+
buffer[-1] |= (1 << uid_bit)
|
313
|
+
end
|
302
314
|
else
|
303
315
|
break if current_level_known_bits >= 32
|
304
316
|
current_level_known_bits = 32 # We've already known all bits, loop again for a complete select
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mfrc522
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- atitan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-08-
|
11
|
+
date: 2016-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pi_piper
|