Added WhoHas/I-Have services.

Simplified the BO writes from main.
This commit is contained in:
skarg
2010-02-12 21:46:11 +00:00
parent eeaaf3caa1
commit 6b1cc84249
5 changed files with 34 additions and 27 deletions
+2
View File
@@ -84,6 +84,8 @@ extern "C" {
bool Binary_Output_Write_Property(
BACNET_WRITE_PROPERTY_DATA * wp_data);
BACNET_BINARY_PV Binary_Output_Present_Value(
uint32_t instance);
bool Binary_Output_Present_Value_Set(
uint32_t instance,
BACNET_BINARY_PV binary_value,
+6 -2
View File
@@ -74,7 +74,9 @@ DEMOSRC = $(BACNET_DEMO)/handler/txbuf.c \
$(BACNET_DEMO)/handler/h_wp.c \
$(BACNET_DEMO)/handler/h_rp.c \
$(BACNET_DEMO)/handler/h_rpm.c \
$(BACNET_DEMO)/handler/h_whohas.c \
$(BACNET_DEMO)/handler/s_iam.c \
$(BACNET_DEMO)/handler/s_ihave.c \
$(BACNET_DEMO)/handler/noserv.c
# core BACnet stack files
@@ -89,12 +91,14 @@ CORESRC = \
$(BACNET_CORE)/bacreal.c \
$(BACNET_CORE)/bacstr.c \
$(BACNET_CORE)/iam.c \
$(BACNET_CORE)/ihave.c \
$(BACNET_CORE)/dcc.c \
$(BACNET_CORE)/rp.c \
$(BACNET_CORE)/rd.c \
$(BACNET_CORE)/rpm.c \
$(BACNET_CORE)/wp.c \
$(BACNET_CORE)/whois.c \
$(BACNET_CORE)/whohas.c \
$(BACNET_CORE)/bacaddr.c \
$(BACNET_CORE)/abort.c \
$(BACNET_CORE)/reject.c \
@@ -137,8 +141,8 @@ DEFINES =
OPTIMIZE_FLAGS = -mcall-prologues
OPTIMIZE_FLAGS += -finline-functions-called-once
# default is for debugging from AVR Studio
OPTIMIZATION = -O0
DEBUGGING = -g
OPTIMIZATION = -Os $(OPTIMIZE_FLAGS)
DEBUGGING =
ifeq (${BUILD},debug)
OPTIMIZATION = -O0
DEBUGGING = -g
Binary file not shown.
+16 -12
View File
@@ -150,7 +150,7 @@ static BACNET_BINARY_PV Present_Value(
return value;
}
static BACNET_BINARY_PV Binary_Output_Present_Value(
BACNET_BINARY_PV Binary_Output_Present_Value(
uint32_t object_instance)
{
unsigned index = 0;
@@ -160,7 +160,7 @@ static BACNET_BINARY_PV Binary_Output_Present_Value(
return Present_Value(index);
}
void Binary_Output_Level_Sync(
static void Binary_Output_Level_Sync(
uint32_t instance)
{
BACNET_BINARY_PV pv;
@@ -198,19 +198,25 @@ void Binary_Output_Level_Sync(
}
}
void Binary_Output_Level_Set(
bool Binary_Output_Present_Value_Set(
uint32_t instance,
unsigned int priority,
BACNET_BINARY_PV level)
BACNET_BINARY_PV binary_value,
unsigned priority) /* 0..15 */
{
bool status = false;
if (instance < MAX_BINARY_OUTPUTS) {
if (priority < BACNET_MAX_PRIORITY) {
Binary_Output_Level[instance][priority] = (uint8_t) level;
Binary_Output_Level[instance][priority] = (uint8_t) binary_value;
seeprom_bytes_write(NV_SEEPROM_BINARY_OUTPUT(instance,
NV_SEEPROM_BO_PRIORITY_ARRAY_1 + priority),
&Binary_Output_Level[instance][priority], 1);
Binary_Output_Level_Sync(instance);
status = true;
}
}
return status;
}
void Binary_Output_Polarity_Set(
@@ -434,10 +440,9 @@ bool Binary_Output_Write_Property(
(value.type.Enumerated <= MAX_BINARY_PV)) {
level = (BACNET_BINARY_PV) value.type.Enumerated;
priority--;
Binary_Output_Level_Set(
Binary_Output_Present_Value_Set(
wp_data->object_instance,
priority, level);
Binary_Output_Level_Sync(wp_data->object_instance);
level, priority);
} else if (priority == 6) {
/* Command priority 6 is reserved for use by Minimum On/Off
algorithm and may not be used for other purposes in any
@@ -460,10 +465,9 @@ bool Binary_Output_Write_Property(
priority = wp_data->priority;
if (priority && (priority <= BACNET_MAX_PRIORITY)) {
priority--;
Binary_Output_Level_Set(
Binary_Output_Present_Value_Set(
wp_data->object_instance,
priority, level);
Binary_Output_Level_Sync(wp_data->object_instance);
level, priority);
} else if (priority == 6) {
status = false;
/* Command priority 6 is reserved for use by Minimum On/Off
+10 -13
View File
@@ -97,7 +97,10 @@ static void bacnet_init(
apdu_set_unrecognized_service_handler_handler
(handler_unrecognized_service);
/* we need to handle who-is to support dynamic device binding */
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS, handler_who_is);
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS,
handler_who_is);
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_HAS,
handler_who_has);
/* Set the handlers for any confirmed services that we support. */
/* We must implement read property - it's required! */
apdu_set_confirmed_handler(SERVICE_CONFIRMED_READ_PROPERTY,
@@ -187,22 +190,16 @@ void test_task(
/* echo the character */
serial_byte_send(data_register);
if (data_register == '0') {
Binary_Output_Level_Set(0, 1, BINARY_INACTIVE);
Binary_Output_Level_Sync(0);
Binary_Output_Level_Set(1, 1, BINARY_INACTIVE);
Binary_Output_Level_Sync(1);
Binary_Output_Present_Value_Set(0, 0, BINARY_INACTIVE);
Binary_Output_Present_Value_Set(1, 0, BINARY_INACTIVE);
}
if (data_register == '1') {
Binary_Output_Level_Set(0, 1, BINARY_ACTIVE);
Binary_Output_Level_Sync(0);
Binary_Output_Level_Set(1, 1, BINARY_ACTIVE);
Binary_Output_Level_Sync(1);
Binary_Output_Present_Value_Set(0, 0, BINARY_ACTIVE);
Binary_Output_Present_Value_Set(1, 0, BINARY_ACTIVE);
}
if (data_register == '2') {
Binary_Output_Level_Set(0, 1, BINARY_NULL);
Binary_Output_Level_Sync(0);
Binary_Output_Level_Set(1, 1, BINARY_NULL);
Binary_Output_Level_Sync(1);
Binary_Output_Present_Value_Set(0, 0, BINARY_NULL);
Binary_Output_Present_Value_Set(1, 0, BINARY_NULL);
}
serial_byte_send('\r');
serial_byte_send('\n');