subghz_protocol_common.c 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "subghz_protocol_common.h"
  2. #include <stdio.h>
  3. void subghz_protocol_common_add_bit(SubGhzProtocolCommon *common, uint8_t bit){
  4. common->code_found = common->code_found <<1 | bit;
  5. common->code_count_bit++;
  6. }
  7. bool subghz_protocol_common_check_interval (SubGhzProtocolCommon *common, uint32_t duration, uint16_t duration_check) {
  8. if ((duration_check >= (duration - common->te_delta))&&(duration_check <= (duration + common->te_delta))){
  9. return true;
  10. } else {
  11. return false;
  12. }
  13. }
  14. uint64_t subghz_protocol_common_reverse_key(uint64_t key, uint8_t count_bit){
  15. uint64_t key_reverse=0;
  16. for(uint8_t i=0; i<count_bit; i++) {
  17. key_reverse=key_reverse<<1|bit_read(key,i);
  18. }
  19. return key_reverse;
  20. }
  21. void subghz_protocol_common_set_callback(SubGhzProtocolCommon* common, SubGhzProtocolCommonCallback callback, void* context) {
  22. common->callback = callback;
  23. common->context = context;
  24. }
  25. void subghz_protocol_common_to_str(SubGhzProtocolCommon* instance, string_t output) {
  26. if (instance->to_string) {
  27. instance->to_string(instance, output);
  28. } else {
  29. uint32_t code_found_hi = instance->code_found >> 32;
  30. uint32_t code_found_lo = instance->code_found & 0x00000000ffffffff;
  31. uint64_t code_found_reverse = subghz_protocol_common_reverse_key(instance->code_found, instance->code_count_bit);
  32. uint32_t code_found_reverse_hi = code_found_reverse>>32;
  33. uint32_t code_found_reverse_lo = code_found_reverse&0x00000000ffffffff;
  34. if (code_found_hi>0) {
  35. string_cat_printf(
  36. output,
  37. "Protocol %s, %d Bit\r\n"
  38. " KEY:0x%lX%08lX\r\n"
  39. " YEK:0x%lX%08lX\r\n"
  40. " SN:0x%05lX BTN:%02X\r\n",
  41. instance->name,
  42. instance->code_count_bit,
  43. code_found_hi,
  44. code_found_lo,
  45. code_found_reverse_hi,
  46. code_found_reverse_lo,
  47. instance->serial,
  48. instance->btn
  49. );
  50. } else {
  51. string_cat_printf(
  52. output,
  53. "Protocol %s, %d Bit\r\n"
  54. " KEY:0x%lX%lX\r\n"
  55. " YEK:0x%lX%lX\r\n"
  56. " SN:0x%05lX BTN:%02X\r\n",
  57. instance->name,
  58. instance->code_count_bit,
  59. code_found_hi,
  60. code_found_lo,
  61. code_found_reverse_hi,
  62. code_found_reverse_lo,
  63. instance->serial,
  64. instance->btn
  65. );
  66. }
  67. }
  68. }