Changed PiFace demo Binary Inputs to be toggle-on toggle-off, and verified functionality with COV.

This commit is contained in:
skarg
2014-06-29 23:03:52 +00:00
parent 9499d1106e
commit 227b89ff7c
+31 -6
View File
@@ -114,7 +114,9 @@ static void Init_Service_Handlers(
static void piface_init(void) static void piface_init(void)
{ {
int hw_addr = 0; /**< PiFaceDigital hardware address */ int hw_addr = 0; /**< PiFaceDigital hardware address */
#ifdef PIFACE_INTERRUPT_ENABLE
int intenable = 1; /**< Whether or not interrupts are enabled */ int intenable = 1; /**< Whether or not interrupts are enabled */
#endif
/** /**
* Open piface digital SPI connection(s) * Open piface digital SPI connection(s)
@@ -137,24 +139,45 @@ static void piface_init(void)
#endif #endif
} }
/* track the Piface pin state to react on changes only */
static bool PiFace_Pin_Status[MAX_BINARY_INPUTS];
/**
* Clean up the PiFace interface
*/
static void piface_cleanup(void) static void piface_cleanup(void)
{ {
pifacedigital_close(0); pifacedigital_close(0);
} }
/**
* Perform a periodic task for the PiFace card
*/
static void piface_task(void) static void piface_task(void)
{ {
unsigned i = 0; unsigned i = 0;
BACNET_BINARY_PV present_value = BINARY_INACTIVE; BACNET_BINARY_PV present_value = BINARY_INACTIVE;
bool pin_status = false;
for (i = 0; i < MAX_BINARY_INPUTS; i++) { for (i = 0; i < MAX_BINARY_INPUTS; i++) {
if (!Binary_Input_Out_Of_Service(i)) { if (!Binary_Input_Out_Of_Service(i)) {
present_value = BINARY_INACTIVE; present_value = Binary_Input_Present_Value(i);
pin_status = false;
if (pifacedigital_digital_read(i)) { if (pifacedigital_digital_read(i)) {
present_value = BINARY_ACTIVE; pin_status = true;
}
if (pin_status != PiFace_Pin_Status[i]) {
PiFace_Pin_Status[i] = pin_status;
if (pin_status) {
/* toggle the input only when button is pressed */
if (present_value == BINARY_INACTIVE) {
present_value = BINARY_ACTIVE;
} else {
present_value = BINARY_INACTIVE;
}
Binary_Input_Present_Value_Set(i, present_value);
}
} }
Binary_Input_Present_Value_Set(i, present_value);
} }
} }
for (i = 0; i < MAX_BINARY_OUTPUTS; i++) { for (i = 0; i < MAX_BINARY_OUTPUTS; i++) {
@@ -174,7 +197,7 @@ static void piface_task(void)
* @see Device_Set_Object_Instance_Number, dlenv_init, Send_I_Am, * @see Device_Set_Object_Instance_Number, dlenv_init, Send_I_Am,
* datalink_receive, npdu_handler, * datalink_receive, npdu_handler,
* dcc_timer_seconds, bvlc_maintenance_timer, * dcc_timer_seconds, bvlc_maintenance_timer,
* Load_Control_State_Machine_Handler, handler_cov_task, * handler_cov_task,
* tsm_timer_milliseconds * tsm_timer_milliseconds
* *
* @param argc [in] Arg count. * @param argc [in] Arg count.
@@ -200,8 +223,10 @@ int main(
if (argc > 1) { if (argc > 1) {
Device_Set_Object_Instance_Number(strtol(argv[1], NULL, 0)); Device_Set_Object_Instance_Number(strtol(argv[1], NULL, 0));
} }
printf("BACnet PiFace Digital Demo\n" "BACnet Stack Version %s\n" printf("BACnet Raspberry Pi PiFace Digital Demo\n"
"BACnet Device ID: %u\n" "Max APDU: %d\n", BACnet_Version, "BACnet Stack Version %s\n"
"BACnet Device ID: %u\n"
"Max APDU: %d\n", BACnet_Version,
Device_Object_Instance_Number(), MAX_APDU); Device_Object_Instance_Number(), MAX_APDU);
/* load any static address bindings to show up /* load any static address bindings to show up
in our device bindings list */ in our device bindings list */