subghz_protocol_common.c 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. uint8_t subghz_protocol_common_check_interval (SubGhzProtocolCommon *common, uint32_t interval, uint16_t interval_check) {
  8. if ((interval_check >= (interval - common->te_delta))&&(interval_check <= (interval + common->te_delta))){
  9. return 1;
  10. } else {
  11. return 0;
  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. instance->name,
  41. instance->code_count_bit,
  42. code_found_hi,
  43. code_found_lo,
  44. code_found_reverse_hi,
  45. code_found_reverse_lo
  46. );
  47. } else {
  48. string_cat_printf(
  49. output,
  50. "Protocol %s, %d Bit\r\n"
  51. " KEY:0x%lX%lX\r\n"
  52. " YEK:0x%lX%lX\r\n",
  53. instance->name,
  54. instance->code_count_bit,
  55. code_found_hi,
  56. code_found_lo,
  57. code_found_reverse_hi,
  58. code_found_reverse_lo
  59. );
  60. }
  61. }
  62. }