Просмотр исходного кода

refactor card details into a function

Eric Betts 2 лет назад
Родитель
Сommit
e73874ce98
1 измененных файлов с 32 добавлено и 20 удалено
  1. 32 20
      seader_worker.c

+ 32 - 20
seader_worker.c

@@ -467,8 +467,9 @@ NfcCommand seader_iso14443a_transmit(
     NfcCommand ret = NfcCommandContinue;
     NfcCommand ret = NfcCommandContinue;
 
 
     do {
     do {
+        // bit_buffer_reset(tx_buffer);
         bit_buffer_append_bytes(tx_buffer, buffer, len);
         bit_buffer_append_bytes(tx_buffer, buffer, len);
-        NfcError error = nfc_poller_trx(seader->nfc, tx_buffer, rx_buffer, SEADER_POLLER_MAX_FWT);
+        NfcError error = iso14443_4a_poller_send_block(seader->poller, tx_buffer, rx_buffer);
         if(error != NfcErrorNone) {
         if(error != NfcErrorNone) {
             FURI_LOG_W(TAG, "nfc_poller_trx error %d", error);
             FURI_LOG_W(TAG, "nfc_poller_trx error %d", error);
             ret = NfcCommandStop;
             ret = NfcCommandStop;
@@ -709,6 +710,34 @@ int32_t seader_worker_task(void* context) {
     return 0;
     return 0;
 }
 }
 
 
+
+NfcCommand seader_worker_card_detect(Seader* seader, uint8_t sak, uint8_t* atqa, const uint8_t* uid, uint8_t uid_len, uint8_t* ats, uint8_t ats_len) {
+  UNUSED(ats);
+  UNUSED(ats_len);
+  SeaderWorker* seader_worker = seader->worker;
+    SeaderUartBridge* seader_uart = seader_worker->uart;
+    CardDetails_t* cardDetails = 0;
+    cardDetails = calloc(1, sizeof *cardDetails);
+    assert(cardDetails);
+
+    OCTET_STRING_fromBuf(&cardDetails->csn, (const char*)uid, uid_len);
+    uint8_t protocolBytes[] = {0x00, FrameProtocol_nfc};
+    OCTET_STRING_fromBuf(
+        &cardDetails->protocol, (const char*)protocolBytes, sizeof(protocolBytes));
+
+    OCTET_STRING_t sak_string = {.buf = &sak, .size = 1};
+    cardDetails->sak = &sak_string;
+
+    OCTET_STRING_t atqa_string = {.buf = atqa, .size = 2};
+    cardDetails->atqa = &atqa_string;
+
+    seader_send_card_detected(seader_uart, cardDetails);
+
+    ASN_STRUCT_FREE(asn_DEF_CardDetails, cardDetails);
+
+    return NfcCommandContinue;
+}
+
 typedef enum {
 typedef enum {
     SeaderPollerEventTypeCardDetect,
     SeaderPollerEventTypeCardDetect,
     SeaderPollerEventTypeConversation,
     SeaderPollerEventTypeConversation,
@@ -724,7 +753,6 @@ NfcCommand seader_worker_poller_callback_iso14443_4a(NfcGenericEvent event, void
     furi_assert(event.protocol == NfcProtocolIso14443_4a);
     furi_assert(event.protocol == NfcProtocolIso14443_4a);
 
 
     Seader* seader = context;
     Seader* seader = context;
-    SeaderUartBridge* seader_uart = seader->uart;
     SeaderWorker* seader_worker = seader->worker;
     SeaderWorker* seader_worker = seader->worker;
 
 
     const Iso14443_4aPollerEvent* iso14443_4a_event = event.event_data;
     const Iso14443_4aPollerEvent* iso14443_4a_event = event.event_data;
@@ -740,26 +768,10 @@ NfcCommand seader_worker_poller_callback_iso14443_4a(NfcGenericEvent event, void
 
 
             const Iso14443_3aData* iso14443_3a_data =
             const Iso14443_3aData* iso14443_3a_data =
                 nfc_device_get_data(seader->nfc_device, NfcProtocolIso14443_3a);
                 nfc_device_get_data(seader->nfc_device, NfcProtocolIso14443_3a);
-            uint8_t sak_val = iso14443_3a_get_sak(iso14443_3a_data);
-
-            CardDetails_t* cardDetails = 0;
-            cardDetails = calloc(1, sizeof *cardDetails);
-            assert(cardDetails);
-
-            OCTET_STRING_fromBuf(&cardDetails->csn, (const char*)uid, uid_len);
-            uint8_t protocolBytes[] = {0x00, FrameProtocol_nfc};
-            OCTET_STRING_fromBuf(
-                &cardDetails->protocol, (const char*)protocolBytes, sizeof(protocolBytes));
-
-            OCTET_STRING_t sak = {.buf = &sak_val, .size = 1};
-            cardDetails->sak = &sak;
-
-            OCTET_STRING_t atqa = {.buf = (uint8_t*)iso14443_3a_data->atqa, .size = 2};
-            cardDetails->atqa = &atqa;
+            uint8_t sak = iso14443_3a_get_sak(iso14443_3a_data);
 
 
-            seader_send_card_detected(seader_uart, cardDetails);
+            seader_worker_card_detect(seader, sak, (uint8_t*)iso14443_3a_data->atqa, uid, uid_len, NULL, 0);
 
 
-            ASN_STRUCT_FREE(asn_DEF_CardDetails, cardDetails);
 
 
             nfc_set_fdt_poll_fc(event.instance, SEADER_POLLER_MAX_FWT);
             nfc_set_fdt_poll_fc(event.instance, SEADER_POLLER_MAX_FWT);
             furi_thread_set_current_priority(FuriThreadPriorityLowest);
             furi_thread_set_current_priority(FuriThreadPriorityLowest);