Subversion Repositories FlightCtrl

Rev

Rev 1960 | Rev 1968 | 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