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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mfrc522.rb +24 -12
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 215975fcbc3557e0178dfb4914d1f7c485da80ec
4
- data.tar.gz: 23d6d8c256dcd032ac97a4c8cfc24484d2b63f1f
3
+ metadata.gz: 9428817820b5c88cd3cff12e41b08d10c04d9059
4
+ data.tar.gz: 5b47fcf6a136886d21b45b5afbacff6493926b9c
5
5
  SHA512:
6
- metadata.gz: 14924647fdbe471062ef2cf950148f8aef115c3a0a39e77d599a78950928e3356163a001dfdbba9f2a432fd5cf4bce7f54ad49d756e6a2acc30aec4226529293
7
- data.tar.gz: 94d9f280bcd1fe4d9d7b9b91c96e149bcd7b0d03dadc3b3023c83ea21a1abd363abaab504c2c504f52ad1471e9e1952fd8d2166ddfb47120086fadd53d7c9bbc
6
+ metadata.gz: 8b8df55a9798f3c3d91cf359b341f0ff42871dc7530e9b06e2504d517de20083c772fcb528d01b623a5e9d2e27a32add5fc6bfca66ab0fde499eaf02cb6ba8c6
7
+ data.tar.gz: 205c14b4031c9ec0dd11e7ce54ad91bf633a01cdd7ef4122556ef689f30d6e89ff7236816ed6dc3b2e948b13c0b4f286f26c329399aaaca6fc3de675d56af3b6
@@ -249,14 +249,10 @@ class MFRC522
249
249
  received_data = []
250
250
  valid_bits = 0
251
251
 
252
- loop do
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
- # ensure there's nothing weird in buffer
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
- buffer = buffer[0...all_full_byte] + received_data[0..3] if current_level_known_bits < 32
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
- # Mark the collision bit
301
+ # Calculate positioin
298
302
  current_level_known_bits = collision_position
299
- uid_bit = (current_level_known_bits - 1) % 8
300
- uid_byte = (current_level_known_bits / 8) + (uid_bit != 0 ? 1 : 0)
301
- buffer[1 + uid_byte] |= (1 << uid_bit)
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.2
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-25 00:00:00.000000000 Z
11
+ date: 2016-08-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pi_piper