@@ -768,7 +768,7 @@ void seader_mfc_transmit(
768
768
uint8_t tx_parity = 0 ;
769
769
770
770
// Don't forget to swap the bits of buffer[8]
771
- for (size_t i = 0 ; i < 8 + 1 ; i ++ ) {
771
+ for (size_t i = 0 ; i < len ; i ++ ) {
772
772
bit_lib_reverse_bits (buffer + i , 0 , 8 );
773
773
}
774
774
@@ -797,14 +797,59 @@ void seader_mfc_transmit(
797
797
break ;
798
798
}
799
799
800
- /*
801
- uint8_t b[SEADER_POLLER_MAX_BUFFER_SIZE];
802
- memset(b, 0, SEADER_POLLER_MAX_BUFFER_SIZE);
803
- size_t bits_written = 0;
804
- bit_buffer_write_bytes_with_parity(rx_buffer, b, SEADER_POLLER_MAX_BUFFER_SIZE, &bits_written);
800
+ size_t length = bit_buffer_get_size_bytes (rx_buffer );
801
+ const uint8_t * rx_parity = bit_buffer_get_parity (rx_buffer );
802
+
803
+ memset (display , 0 , sizeof (display ));
804
+ for (uint8_t i = 0 ; i < length ; i ++ ) {
805
+ snprintf (
806
+ display + (i * 2 ), sizeof (display ), "%02x" , bit_buffer_get_byte (rx_buffer , i ));
807
+ }
808
+ FURI_LOG_D (TAG , "NFC Response %d: %s [%02x]" , length , display , rx_parity [0 ]);
809
+
810
+ uint8_t with_parity [SEADER_POLLER_MAX_BUFFER_SIZE ];
811
+ memset (with_parity , 0 , sizeof (with_parity ));
812
+
813
+ for (size_t i = 0 ; i < length ; i ++ ) {
814
+ uint8_t b = bit_buffer_get_byte (rx_buffer , i );
815
+ bit_lib_reverse_bits (& b , 0 , 8 );
816
+ bit_buffer_set_byte (rx_buffer , i , b );
817
+ }
818
+
819
+ length = length + (length / 8 ) + 1 ;
820
+
821
+ uint8_t parts = 1 + length / 9 ;
822
+ for (size_t p = 0 ; p < parts ; p ++ ) {
823
+ uint8_t doffset = p * 9 ;
824
+ uint8_t soffset = p * 8 ;
825
+
826
+ for (size_t i = 0 ; i < 9 ; i ++ ) {
827
+ with_parity [i + doffset ] = bit_buffer_get_byte (rx_buffer , i + soffset ) >> i ;
828
+ if (i > 0 ) {
829
+ with_parity [i + doffset ] |= bit_buffer_get_byte (rx_buffer , i + soffset - 1 )
830
+ << (9 - i );
831
+ }
832
+
833
+ if (i > 0 ) {
834
+ bool val = bit_lib_get_bit (rx_parity , i - 1 );
835
+ bit_lib_set_bit (with_parity + i , i - 1 , val );
836
+ }
837
+ }
838
+ }
839
+
840
+ for (size_t i = 0 ; i < length ; i ++ ) {
841
+ bit_lib_reverse_bits (with_parity + i , 0 , 8 );
842
+ }
843
+
844
+ bit_buffer_copy_bytes (rx_buffer , with_parity , length );
845
+
846
+ memset (display , 0 , sizeof (display ));
847
+ for (uint8_t i = 0 ; i < length ; i ++ ) {
848
+ snprintf (
849
+ display + (i * 2 ), sizeof (display ), "%02x" , bit_buffer_get_byte (rx_buffer , i ));
850
+ }
851
+ FURI_LOG_D (TAG , "NFC Response %d: %s [%02x]" , length , display , rx_parity [0 ]);
805
852
806
- seader_send_nfc_rx(seader_uart, b, bits_written/8);
807
- */
808
853
} else {
809
854
FURI_LOG_W (TAG , "UNHANDLED FORMAT" );
810
855
}
0 commit comments