#include #include #include "io-helper.h" volatile uint8_t outStates[nrOfOutputs/8]; volatile uint8_t inStatesRaw[nrOfInputs/8]; volatile uint8_t inStates[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]; } } void ioHelperBlinkOuts(){ for(uint8_t i=0; i