tm2004.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "tm2004.h"
  2. #include <core/kernel.h>
  3. #define TM2004_CMD_READ_STATUS 0xAA
  4. #define TM2004_CMD_READ_MEMORY 0xF0
  5. #define TM2004_CMD_WRITE_ROM 0x3C
  6. #define TM2004_CMD_FINALIZATION 0x35
  7. #define TM2004_ANSWER_READ_MEMORY 0xF5
  8. bool tm2004_write(OneWireHost* host, const uint8_t* data, size_t data_size) {
  9. onewire_host_reset(host);
  10. onewire_host_write(host, TM2004_CMD_WRITE_ROM);
  11. // Starting writing from address 0x0000
  12. onewire_host_write(host, 0x00);
  13. onewire_host_write(host, 0x00);
  14. size_t i;
  15. for(i = 0; i < data_size; ++i) {
  16. uint8_t answer;
  17. onewire_host_write(host, data[i]);
  18. answer = onewire_host_read(host);
  19. // TODO: check answer CRC
  20. // pulse indicating that data is correct
  21. furi_delay_us(600);
  22. onewire_host_write_bit(host, true);
  23. furi_delay_us(50000);
  24. // read written key byte
  25. answer = onewire_host_read(host); //-V519
  26. // check that written and read are same
  27. if(data[i] != answer) {
  28. break;
  29. }
  30. }
  31. // TODO: Better error handling
  32. return i == data_size;
  33. }