Rev 1960 | Rev 1986 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1960 | Rev 1964 | ||
---|---|---|---|
Line 50... | Line 50... | ||
50 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
50 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
51 | #include <inttypes.h> |
51 | #include <inttypes.h> |
52 | #include "output.h" |
52 | #include "output.h" |
53 | #include "eeprom.h" |
53 | #include "eeprom.h" |
54 | #include "timer0.h" |
54 | #include "timer0.h" |
55 | - | ||
56 | // To access the DebugOut struct. |
55 | // To access the DebugOut struct. |
57 | #include "uart0.h" |
56 | #include "uart0.h" |
58 | uint8_t flashCnt[2], flashMask[2]; |
57 | uint8_t flashCnt[2], flashMask[2]; |
59 | // initializes the LED control outputs J16, J17 |
58 | // initializes the LED control outputs J16, J17 |
- | 59 | ||
- | 60 | ||
60 | void output_init(void) { |
61 | void output_init(void) { |
61 | // set PC2 & PC3 as output (control of J16 & J17) |
62 | // set PC2 & PC3 as output (control of J16 & J17) |
62 | DDRC |= (1 << DDC2) | (1 << DDC3); |
63 | DDRC |= (1 << DDC2) | (1 << DDC3); |
63 | OUTPUT_SET(0,0); |
64 | outputSet(0,0); |
64 | OUTPUT_SET(1,0); |
65 | outputSet(1,0); |
65 | flashCnt[0] = flashCnt[1] = 0; |
66 | flashCnt[0] = flashCnt[1] = 0; |
66 | flashMask[0] = flashMask[1] = 128; |
67 | flashMask[0] = flashMask[1] = 128; |
67 | } |
68 | } |
Line 68... | Line 69... | ||
68 | 69 | ||
- | 70 | void outputSet(uint8_t num, uint8_t state) { |
|
- | 71 | if (staticParams.outputOptions & (OUTPUTOPTIONS_INVERT_0 << num)) { |
|
- | 72 | if (state) OUTPUT_LOW(num) else OUTPUT_HIGH(num); |
|
- | 73 | } else { |
|
- | 74 | if (state) OUTPUT_HIGH(num) else OUTPUT_LOW(num); |
|
- | 75 | } |
|
69 | void flashingLight(uint8_t port, uint8_t timing, uint8_t bitmask, |
76 | if (staticParams.outputOptions & OUTPUTOPTIONS_USE_ONBOARD_LEDS) { |
- | 77 | if (num) { |
|
- | 78 | if (state) GRN_ON else GRN_OFF; |
|
- | 79 | } else { |
|
- | 80 | if (state) RED_ON else RED_OFF; |
|
- | 81 | } |
|
- | 82 | } |
|
- | 83 | } |
|
- | 84 | ||
70 | uint8_t manual) { |
85 | void flashingLight(uint8_t port, uint8_t timing, uint8_t bitmask, uint8_t manual) { |
71 | if (timing > 250 && manual > 230) { |
86 | if (timing > 250 && manual > 230) { |
72 | // "timing" is set to "manual (a variable)" and the value is very high --> Set to the value in bitmask bit 7. |
87 | // "timing" is set to "manual (a variable)" and the value is very high --> Set to the value in bitmask bit 7. |
73 | OUTPUT_SET(port, bitmask & 128); |
88 | outputSet(port, 1); |
74 | } else if (timing > 250 && manual < 10) { |
89 | } else if (timing > 250 && manual < 10) { |
75 | // "timing" is set to "manual" (a variable) and the value is very low --> Set to the negated value in bitmask bit 7. |
90 | // "timing" is set to "manual" (a variable) and the value is very low --> Set to the negated value in bitmask bit 7. |
76 | OUTPUT_SET(port, !(bitmask & 128)); |
91 | outputSet(port, 0); |
77 | } else if (!flashCnt[port]--) { |
92 | } else if (!flashCnt[port]--) { |
78 | // rotating mask over bitmask... |
93 | // rotating mask over bitmask... |
79 | flashCnt[port] = timing - 1; |
94 | flashCnt[port] = timing - 1; |
80 | if (flashMask[port] == 1) |
95 | if (flashMask[port] == 1) |
81 | flashMask[port] = 128; |
96 | flashMask[port] = 128; |
82 | else |
97 | else |
83 | flashMask[port] >>= 1; |
98 | flashMask[port] >>= 1; |
84 | OUTPUT_SET(port, flashMask[port] & bitmask); |
99 | outputSet(port, flashMask[port] & bitmask); |
85 | } |
100 | } |
Line 86... | Line 101... | ||
86 | } |
101 | } |
87 | 102 | ||
88 | void flashingLights(void) { |
103 | void flashingLights(void) { |
89 | static int8_t delay = 0; |
104 | static int8_t delay = 0; |
90 | if (!delay--) { // 10 ms intervals |
105 | if (!delay--) { // 10 ms intervals |
91 | delay = 4; |
106 | delay = 4; |
92 | if (staticParams.outputFlags & 4 && beepModulation != BEEP_MODULATION_NONE) { |
107 | if (staticParams.outputOptions & OUTPUTOPTIONS_FLASH_AT_BEEP && beepModulation != BEEP_MODULATION_NONE) { |
93 | // alarm |
108 | // alarm |
94 | flashingLight(0, 25, 0x55, 25); |
109 | flashingLight(0, 25, 0x55, 25); |
95 | flashingLight(1, 25, 0xAA, 25); |
110 | flashingLight(1, 25, 0xAA, 25); |
Line 99... | Line 114... | ||
99 | } |
114 | } |
100 | } |
115 | } |
101 | } |
116 | } |
Line 102... | Line 117... | ||
102 | 117 | ||
103 | void output_update(void) { |
118 | void output_update(void) { |
104 | if (staticParams.outputFlags & 1) { |
119 | if (staticParams.outputOptions & OUTPUTOPTIONS_TEST_HI) { |
105 | OUTPUT_SET(0, 1); |
120 | outputSet(0, 1); |
106 | OUTPUT_SET(1, 1); |
121 | outputSet(1, 1); |
107 | } else if (staticParams.outputFlags & 2) { |
122 | } else if (staticParams.outputOptions & OUTPUTOPTIONS_TEST_LO) { |
108 | OUTPUT_SET(0, 0); |
123 | outputSet(0, 0); |
109 | OUTPUT_SET(1, 0); |
124 | outputSet(1, 0); |
110 | } else if (!staticParams.outputDebugMask) { |
125 | } else if (!staticParams.outputDebugMask) { |
111 | flashingLights(); |
126 | flashingLights(); |
112 | } else { |
127 | } else { |
113 | OUTPUT_SET(0, debugOut.digital[0] & staticParams.outputDebugMask); |
128 | outputSet(0, debugOut.digital[0] & staticParams.outputDebugMask); |
114 | OUTPUT_SET(1, debugOut.digital[1] & staticParams.outputDebugMask); |
129 | outputSet(1, debugOut.digital[1] & staticParams.outputDebugMask); |
115 | } |
130 | } |
Line 116... | Line 131... | ||
116 | } |
131 | } |
117 | 132 |