zero_tracker.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include <furi.h>
  2. #include "speaker_hal.h"
  3. #include "zero_tracker.h"
  4. /**
  5. * @brief Note record
  6. *
  7. * AH AL
  8. * FEDCBA98 76543210
  9. * nnnnnnee eedddddd
  10. * -------- --------
  11. * nnnnnn = [0] note kill, [1..60] note number, [61..63] service values
  12. * ee ee = [0..F] effect
  13. * 111222 = [0..63] or [0..7, 0..7] effect data
  14. */
  15. typedef uint16_t NoteRecord;
  16. uint8_t record_get_note(NoteRecord note) {
  17. return note & 0x3F;
  18. }
  19. uint8_t record_get_effect(NoteRecord note) {
  20. return (note >> 6) & 0xF;
  21. }
  22. uint8_t record_get_effect_data(NoteRecord note) {
  23. return (note >> 10) & 0x3F;
  24. }
  25. #define PATTERN_SIZE 64
  26. typedef struct {
  27. NoteRecord notes[PATTERN_SIZE];
  28. } NoteRow;
  29. typedef struct {
  30. uint8_t row_count;
  31. NoteRow* rows;
  32. } NotePattern;
  33. void tracker_interrupt_body() {
  34. tracker_debug_set(true);
  35. tracker_debug_set(false);
  36. }
  37. int32_t zero_tracker_app(void* p) {
  38. UNUSED(p);
  39. tracker_debug_init();
  40. tracker_speaker_init();
  41. tracker_interrupt_init(120.0f, tracker_interrupt_body, NULL);
  42. while(1) {
  43. furi_delay_ms(1000);
  44. }
  45. return 0;
  46. }