forked from thordreier/Arduino-LPF
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArduino-LPF-common.cpp
81 lines (45 loc) · 2.1 KB
/
Arduino-LPF-common.cpp
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/*
* http://brickostan.com/arduino-lpf/
*/
#include <stdlib.h>
#include "Arduino.h"
#include "Arduino-LPF-common.h"
byte lpf_lrc_check(lpf_msg msg) {
return
! ( LPF_LRC_CHECK_BITS
^ ( (msg & LPF_NIBBLE1_BITS_FULL) >> LPF_NIBBLE1_SHIFT_FULL )
^ ( (msg & LPF_NIBBLE2_BITS_FULL) >> LPF_NIBBLE2_SHIFT_FULL )
^ ( (msg & LPF_NIBBLE3_BITS_FULL) >> LPF_NIBBLE3_SHIFT_FULL )
^ ( (msg & LPF_NIBBLE4_BITS_FULL) >> LPF_NIBBLE4_SHIFT_FULL )
);
}
lpf_msg lpf_lrc_calc(lpf_msg msg) {
return
msg | ( LPF_LRC_CHECK_BITS
^ ( (msg & LPF_NIBBLE1_BITS_FULL) >> LPF_NIBBLE1_SHIFT_FULL )
^ ( (msg & LPF_NIBBLE2_BITS_FULL) >> LPF_NIBBLE2_SHIFT_FULL )
^ ( (msg & LPF_NIBBLE3_BITS_FULL) >> LPF_NIBBLE3_SHIFT_FULL )
);
}
//Nibbles
byte lpf_get_nibble1(lpf_msg msg) { return ( msg & LPF_NIBBLE1_BITS_FULL ) >> LPF_NIBBLE1_SHIFT_FULL ; }
byte lpf_get_nibble2(lpf_msg msg) { return ( msg & LPF_NIBBLE2_BITS_FULL ) >> LPF_NIBBLE2_SHIFT_FULL ; }
byte lpf_get_nibble3(lpf_msg msg) { return ( msg & LPF_NIBBLE3_BITS_FULL ) >> LPF_NIBBLE3_SHIFT_FULL ; }
byte lpf_get_nibble4(lpf_msg msg) { return ( msg & LPF_NIBBLE4_BITS_FULL ) >> LPF_NIBBLE4_SHIFT_FULL ; }
//Nibble 1
byte lpf_get_toggle(lpf_msg msg) { return ( msg & LPF_TOGGLE_BITS_FULL ) >> LPF_TOGGLE_SHIFT_FULL ; }
byte lpf_get_escape(lpf_msg msg) { return ( msg & LPF_ESCAPE_BITS_FULL ) >> LPF_ESCAPE_SHIFT_FULL ; }
byte lpf_get_channel(lpf_msg msg) { return ( msg & LPF_CHANNEL_BITS_FULL ) >> LPF_CHANNEL_SHIFT_FULL ; }
//Nibble 2
byte lpf_get_address(lpf_msg msg) { return ( msg & LPF_ADDRESS_BITS_FULL ) >> LPF_ADDRESS_SHIFT_FULL ; }
byte lpf_get_mode(lpf_msg msg) { return ( msg & LPF_MODE_BITS_FULL ) >> LPF_MODE_SHIFT_FULL ; }
//Nibble 3
//empty
//only works on single mode/pwm
byte lpf_get_brakefloat(lpf_msg msg) {
return ! ( ( msg & LPF_MODE_SINGLE_PWM_BRAKEFLOAT_FULL_LOOKAT ) ^ LPF_MODE_SINGLE_PWM_BRAKEFLOAT_FULL_VALUES );
}
//only works on single mode
byte lpf_get_output(lpf_msg msg) {
return ( ( msg & LPF_MODE_SINGLE_OUTPUT_FULL_LOOKAT ) & LPF_MODE_SINGLE_OUTPUT_FULL_VALUES ) >> LPF_MODE_SINGLE_OUTPUT_FULL_SHIFT;
}