فهرست منبع

[FL-1629] Better RFID writing (#632)

* RFID: ground the antenna when writing
* RFID: forced switch to indala mode
SG 4 سال پیش
والد
کامیت
b8b0417374

+ 7 - 15
applications/lfrfid/helpers/rfid-reader.cpp

@@ -20,7 +20,10 @@ void RfidReader::decode(bool polarity) {
     uint32_t period = current_dwt_value - last_dwt_value;
     last_dwt_value = current_dwt_value;
 
-    //decoder_gpio_out.process_front(polarity, period);
+#ifdef RFID_GPIO_DEBUG
+    decoder_gpio_out.process_front(polarity, period);
+#endif
+
     switch(type) {
     case Type::Normal:
         decoder_em.process_front(polarity, period);
@@ -86,20 +89,9 @@ void RfidReader::start() {
 }
 
 void RfidReader::start_forced(RfidReader::Type _type) {
-    type = _type;
-    switch(type) {
-    case Type::Normal:
-        start();
-        break;
-    case Type::Indala:
-        furi_hal_rfid_pins_read();
-        furi_hal_rfid_tim_read(62500.0f, 0.25f);
-        furi_hal_rfid_tim_read_start();
-        start_comparator();
-
-        switch_timer_reset();
-        last_readed_count = 0;
-        break;
+    start();
+    if(_type == Type::Indala) {
+        switch_mode();
     }
 }
 

+ 5 - 1
applications/lfrfid/helpers/rfid-reader.h

@@ -6,6 +6,8 @@
 #include "decoder-indala.h"
 #include "key-info.h"
 
+//#define RFID_GPIO_DEBUG 1
+
 class RfidReader {
 public:
     enum class Type : uint8_t {
@@ -26,7 +28,9 @@ private:
     friend struct RfidReaderAccessor;
 
     //DecoderAnalyzer decoder_analyzer;
-    //DecoderGpioOut decoder_gpio_out;
+#ifdef RFID_GPIO_DEBUG
+    DecoderGpioOut decoder_gpio_out;
+#endif
     DecoderEMMarine decoder_em;
     DecoderHID26 decoder_hid26;
     DecoderIndala decoder_indala;

+ 1 - 0
applications/lfrfid/helpers/rfid-writer.cpp

@@ -37,6 +37,7 @@ void RfidWriter::start() {
     furi_hal_rfid_tim_read(125000, 0.5);
     furi_hal_rfid_pins_read();
     furi_hal_rfid_tim_read_start();
+    hal_gpio_write(&gpio_rfid_pull, true);
 }
 
 void RfidWriter::stop() {