irda_samsung.c 1014 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "flipper.h"
  2. #include "irda_samsung.h"
  3. #include "irda_protocols.h"
  4. void ir_samsung_preambula(void) {
  5. irda_pwm_set(SAMSUNG_DUTY_CYCLE, SAMSUNG_CARRIER_FREQUENCY);
  6. delay_us(4500);
  7. irda_pwm_stop();
  8. delay_us(4500);
  9. }
  10. void ir_samsung_send_bit(bool bit) {
  11. irda_pwm_set(SAMSUNG_DUTY_CYCLE, SAMSUNG_CARRIER_FREQUENCY);
  12. delay_us(560);
  13. irda_pwm_stop();
  14. if(bit) {
  15. delay_us(1590);
  16. } else {
  17. delay_us(560);
  18. }
  19. }
  20. void ir_samsung_send_byte(uint8_t data) {
  21. for(uint8_t i = 0; i < 8; i++) {
  22. ir_samsung_send_bit((data & (1 << (i))) != 0);
  23. }
  24. }
  25. void ir_samsung_send(uint16_t addr, uint16_t data) {
  26. uint8_t samsung_packet[4] = {
  27. (uint8_t)addr, (uint8_t)(addr >> 8), (uint8_t)data, (uint8_t)(data >> 8)};
  28. ir_samsung_preambula();
  29. ir_samsung_send_byte(samsung_packet[0]);
  30. ir_samsung_send_byte(samsung_packet[1]);
  31. ir_samsung_send_byte(samsung_packet[2]);
  32. ir_samsung_send_byte(samsung_packet[3]);
  33. ir_samsung_send_bit(0);
  34. }