|
|
|
//
|
|
|
|
// Created by MightyPork on 2018/02/03.
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef GEX_F072_DIN_INTERNAL_H
|
|
|
|
#define GEX_F072_DIN_INTERNAL_H
|
|
|
|
|
|
|
|
#ifndef DIN_INTERNAL
|
|
|
|
#error bad include!
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "unit_base.h"
|
|
|
|
|
|
|
|
/** Private data structure */
|
|
|
|
struct priv {
|
|
|
|
char port_name;
|
|
|
|
uint16_t pins; // pin mask
|
|
|
|
uint16_t pulldown; // pull-downs (default is pull-up)
|
|
|
|
uint16_t pullup; // pull-ups
|
|
|
|
uint16_t trig_rise; // pins generating events on rising edge
|
|
|
|
uint16_t trig_fall; // pins generating events on falling edge
|
|
|
|
uint16_t trig_holdoff; // ms
|
|
|
|
uint16_t def_auto; // initial auto triggers
|
|
|
|
|
|
|
|
uint16_t arm_auto; // pins armed for auto reporting
|
|
|
|
uint16_t arm_single; // pins armed for single event
|
|
|
|
uint16_t holdoff_countdowns[16]; // countdowns to arm for each pin in the bit map
|
|
|
|
GPIO_TypeDef *port;
|
|
|
|
};
|
|
|
|
|
|
|
|
/** Allocate data structure and set defaults */
|
|
|
|
error_t DIn_preInit(Unit *unit);
|
|
|
|
|
|
|
|
/** Load from a binary buffer stored in Flash */
|
|
|
|
void DIn_loadBinary(Unit *unit, PayloadParser *pp);
|
|
|
|
|
|
|
|
/** Write to a binary buffer for storing in Flash */
|
|
|
|
void DIn_writeBinary(Unit *unit, PayloadBuilder *pb);
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/** Parse a key-value pair from the INI file */
|
|
|
|
error_t DIn_loadIni(Unit *unit, const char *key, const char *value);
|
|
|
|
|
|
|
|
/** Generate INI file section for the unit */
|
|
|
|
void DIn_writeIni(Unit *unit, IniWriter *iw);
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/** Finalize unit set-up */
|
|
|
|
error_t DIn_init(Unit *unit);
|
|
|
|
|
|
|
|
/** Tear down the unit */
|
|
|
|
void DIn_deInit(Unit *unit);
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* EXTI callback for pin change interrupts
|
|
|
|
*
|
|
|
|
* @param arg - the unit is passed here
|
|
|
|
*/
|
|
|
|
void DIn_handleExti(void *arg);
|
|
|
|
|
|
|
|
#endif //GEX_F072_DIN_INTERNAL_H
|