|
|
|
@ -5,8 +5,69 @@
|
|
|
|
volatile uint8_t outStates[nrOfOutputs/8];
|
|
|
|
volatile uint8_t outStates[nrOfOutputs/8];
|
|
|
|
volatile uint8_t inStatesRaw[nrOfInputs/8];
|
|
|
|
volatile uint8_t inStatesRaw[nrOfInputs/8];
|
|
|
|
volatile uint8_t inStates[nrOfInputs/8];
|
|
|
|
volatile uint8_t inStates[nrOfInputs/8];
|
|
|
|
volatile uint8_t oldInstates[nrOfInputs/8];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
volatile uint8_t outStatesBlinking[nrOfOutputs/8];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
volatile uint8_t oldInstates[nrOfInputs/8];
|
|
|
|
|
|
|
|
volatile uint8_t inStatesBothEdges[nrOfInputs/8];
|
|
|
|
|
|
|
|
volatile uint8_t inStatesRisingEdge[nrOfInputs/8];
|
|
|
|
|
|
|
|
volatile uint8_t inStatesFallingEdge[nrOfInputs/8];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t read_Input(uint8_t nr, uint8_t type) {
|
|
|
|
|
|
|
|
uint8_t state = 0;
|
|
|
|
|
|
|
|
switch (type) {
|
|
|
|
|
|
|
|
case LEVEL:
|
|
|
|
|
|
|
|
state = ioHelperReadBit(inStates, nr);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case EDGE:
|
|
|
|
|
|
|
|
state = ioHelperReadBit(inStatesBothEdges, nr);
|
|
|
|
|
|
|
|
ioHelperSetBit(inStatesBothEdges, nr, 0);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case RISING:
|
|
|
|
|
|
|
|
state = ioHelperReadBit(inStatesRisingEdge, nr);
|
|
|
|
|
|
|
|
ioHelperSetBit(inStatesRisingEdge, nr, 0);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case FALLING:
|
|
|
|
|
|
|
|
state = ioHelperReadBit(inStatesFallingEdge, nr);
|
|
|
|
|
|
|
|
ioHelperSetBit(inStatesFallingEdge, nr, 0);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return state;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void set_Output(uint8_t nr, uint8_t state) {
|
|
|
|
|
|
|
|
switch (state) {
|
|
|
|
|
|
|
|
case BLINK:
|
|
|
|
|
|
|
|
ioHelperSetBit(outStatesBlinking, nr, ON);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TOGGLE:
|
|
|
|
|
|
|
|
ioHelperSetBit(outStatesBlinking, nr, OFF);
|
|
|
|
|
|
|
|
if (ioHelperReadBit(outStates, nr)) {
|
|
|
|
|
|
|
|
ioHelperSetBit(outStates, nr, OFF);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
ioHelperSetBit(outStates, nr, ON);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case ON:
|
|
|
|
|
|
|
|
ioHelperSetBit(outStates, nr, ON);
|
|
|
|
|
|
|
|
ioHelperSetBit(outStatesBlinking, nr, OFF);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case OFF:
|
|
|
|
|
|
|
|
ioHelperSetBit(outStates, nr, OFF);
|
|
|
|
|
|
|
|
ioHelperSetBit(outStatesBlinking, nr, OFF);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ioHelperEdgeDetector(void){
|
|
|
|
|
|
|
|
for (uint8_t i = 0; i < nrOfInputs/8; i++){
|
|
|
|
|
|
|
|
inStatesBothEdges[i] = oldInstates[i] ^ inStates[i];
|
|
|
|
|
|
|
|
inStatesRisingEdge[i] = inStatesBothEdges[i] & inStates[i];
|
|
|
|
|
|
|
|
inStatesFallingEdge[i] = inStatesBothEdges[i] & oldInstates[i];
|
|
|
|
|
|
|
|
oldInstates[i] = inStates[i];
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* @brief: copies a single bit from one char to another char (or arrays thereof)
|
|
|
|
/* @brief: copies a single bit from one char to another char (or arrays thereof)
|
|
|
|
*
|
|
|
|
*
|
|
|
|
|