~ruther/uni-mam-arm

ref: 009a105e762919ce95daabb7343085c9b93f0efe uni-mam-arm/arm07/include/spi_matrix.h -rw-r--r-- 1.3 KiB
009a105e — Rutherther feat: implement large part of arm07 3 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "buffered_peripheral.h"

typedef enum {
  MATRIX_SLOT0 = 0,
  MATRIX_SLOT1 = 1,
  MATRIX_SLOT_OTHER = 2,
} matrix_slot_t;

typedef enum {
  MATRIX_OFF,
  MATRIX_STABLE,
  MATRIX_ANIMATING,
} matrix_state_t;

typedef enum {
  MATRIX_REG_NO_OP = 0,
  MATRIX_REG_DIGIT0 = 1,
  MATRIX_REG_DIGIT1 = 2,
  MATRIX_REG_DIGIT2 = 3,
  MATRIX_REG_DIGIT3 = 4,
  MATRIX_REG_DIGIT4 = 5,
  MATRIX_REG_DIGIT5 = 6,
  MATRIX_REG_DIGIT6 = 7,
  MATRIX_REG_DIGIT7 = 8,
  MATRIX_REG_DECODE_MODE = 9,
  MATRIX_REG_INTENSITY = 10,
  MATRIX_REG_SCAN_LIMIT = 11,
  MATRIX_REG_SHUTDOWN = 11,
  MATRIX_REG_DISPLAY_TEST = 11,
} matrix_register_t;

typedef struct {
  buffered_transceiver_t* transceiver;
  uint32_t shift_period;

  matrix_slot_t slot;
  matrix_state_t state;

  uint8_t* buffers[2];

  uint32_t state_cycle;
  uint32_t cycle;
} matrix_t;

void matrix_init(matrix_t* matrix, buffered_transceiver_t* transceiver, uint32_t shift_period);

void matrix_setup(matrix_t* matrix);
void matrix_enable(matrix_t* matrix, bool enable);

void matrix_send(matrix_t* matrix, matrix_register_t reg, uint8_t value);
void matrix_set_buffer(matrix_t* matrix, matrix_slot_t slot, uint8_t* buffer);

void matrix_swap(matrix_t* matrix);
void matrix_animate_swap(matrix_t* matrix);

void matrix_update(matrix_t* matrix, buffered_transceiver_t* transceiver);
Do not follow this link