mfrc522 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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