encoder_ioprox.cpp 813 B

1234567891011121314151617181920212223242526272829303132
  1. #include "encoder_ioprox.h"
  2. #include "protocols/protocol_ioprox.h"
  3. #include <furi.h>
  4. void EncoderIoProx::init(const uint8_t* data, const uint8_t data_size) {
  5. ProtocolIoProx ioprox;
  6. ioprox.encode(data, data_size, card_data, sizeof(card_data));
  7. card_data_index = 0;
  8. }
  9. void EncoderIoProx::get_next(bool* polarity, uint16_t* period, uint16_t* pulse) {
  10. uint8_t bit = (card_data[card_data_index / 8] >> (7 - (card_data_index % 8))) & 1;
  11. bool advance = fsk->next(bit, period);
  12. if(advance) {
  13. card_data_index++;
  14. if(card_data_index >= (8 * card_data_max)) {
  15. card_data_index = 0;
  16. }
  17. }
  18. *polarity = true;
  19. *pulse = *period / 2;
  20. }
  21. EncoderIoProx::EncoderIoProx() {
  22. fsk = new OscFSK(8, 10, 64);
  23. }
  24. EncoderIoProx::~EncoderIoProx() {
  25. delete fsk;
  26. }