Forgot the header update for BBMD getter and setters.
Revised gateway demo to use the new device_init(NULL) way. Eliminated triplicate I-Am responses and deprecated the offending routed_ I-Am and I-Have senders (don't see any other usages; scheduled for deletion in 2/2012). Fixed I-Am sender to not always zero out dest->net, because if a src->net was given in Who-Is, need to have it or else global bcast in the I-Am response.
This commit is contained in:
@@ -83,27 +83,6 @@
|
||||
/** @addtogroup GatewayDemo */
|
||||
/*@{*/
|
||||
|
||||
/* All included BACnet objects */
|
||||
static object_functions_t Object_Table[] = {
|
||||
{DEVICE_OBJ_FUNCTIONS},
|
||||
{ANALOG_INPUT_OBJ_FUNCTIONS},
|
||||
{ANALOG_OUTPUT_OBJ_FUNCTIONS},
|
||||
{ANALOG_VALUE_OBJ_FUNCTIONS},
|
||||
{BINARY_INPUT_OBJ_FUNCTIONS},
|
||||
{BINARY_OUTPUT_OBJ_FUNCTIONS},
|
||||
{BINARY_VALUE_OBJ_FUNCTIONS},
|
||||
{LIFE_SAFETY_POINT_OBJ_FUNCTIONS},
|
||||
{LOAD_CONTROL_OBJ_FUNCTIONS},
|
||||
{MULTI_STATE_OUTPUT_OBJ_FUNCTIONS},
|
||||
{MULTI_STATE_INPUT_OBJ_FUNCTIONS},
|
||||
{TRENDLOG_OBJ_FUNCTIONS},
|
||||
#if defined(BACFILE)
|
||||
{FILE_OBJ_FUNCTIONS},
|
||||
#endif
|
||||
{MAX_BACNET_OBJECT_TYPE, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
/** Buffer used for receiving */
|
||||
static uint8_t Rx_Buf[MAX_MPDU] = { 0 };
|
||||
|
||||
@@ -156,16 +135,19 @@ void Devices_Init(
|
||||
static void Init_Service_Handlers(
|
||||
uint32_t first_object_instance)
|
||||
{
|
||||
Device_Init(&Object_Table[0]);
|
||||
Device_Init(NULL);
|
||||
Routing_Device_Init(first_object_instance);
|
||||
|
||||
/* we need to handle who-is to support dynamic device binding
|
||||
* For the gateway, we want the routing handlers, and we will use the
|
||||
* unicast variety so we can get back through switches to different subnets */
|
||||
* For the gateway, we will use the unicast variety so we can
|
||||
* get back through switches to different subnets.
|
||||
* Don't need the routed versions, since the npdu handler calls
|
||||
* each device in turn.
|
||||
*/
|
||||
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_IS,
|
||||
handler_who_is_unicast_for_routing);
|
||||
handler_who_is_unicast);
|
||||
apdu_set_unconfirmed_handler(SERVICE_UNCONFIRMED_WHO_HAS,
|
||||
handler_who_has_for_routing);
|
||||
handler_who_has);
|
||||
/* set the handler for all the services we don't implement */
|
||||
/* It is required to send the proper reject message... */
|
||||
apdu_set_unrecognized_service_handler_handler
|
||||
|
||||
@@ -110,7 +110,7 @@ void handler_who_has(
|
||||
}
|
||||
|
||||
|
||||
#ifdef BAC_ROUTING
|
||||
#ifdef DEPRECATED /* was for BAC_ROUTING - delete in 2/2012 if still unused */
|
||||
/** Handler for Who-Has requests in the virtual routing setup,
|
||||
* with broadcast I-Have response.
|
||||
* Will respond if the device Object ID matches, and we have
|
||||
|
||||
@@ -95,6 +95,7 @@ void handler_who_is_unicast(
|
||||
len =
|
||||
whois_decode_service_request(service_request, service_len, &low_limit,
|
||||
&high_limit);
|
||||
/* If no limits, then always respond */
|
||||
if (len == 0)
|
||||
Send_I_Am_Unicast(&Handler_Transmit_Buffer[0], src);
|
||||
else if (len != -1) {
|
||||
@@ -112,7 +113,7 @@ void handler_who_is_unicast(
|
||||
}
|
||||
|
||||
|
||||
#ifdef BAC_ROUTING
|
||||
#ifdef DEPRECATED /* was for BAC_ROUTING - delete in 2/2012 if still unused */
|
||||
/** Local function to check Who-Is requests against our Device IDs.
|
||||
* Will check the gateway (root Device) and all virtual routed
|
||||
* Devices against the range and respond for each that matches.
|
||||
|
||||
@@ -133,7 +133,7 @@ int iam_unicast_encode_pdu(
|
||||
BACNET_ADDRESS my_address;
|
||||
/* The destination will be the same as the src, so copy it over. */
|
||||
memcpy(dest, src, sizeof(BACNET_ADDRESS));
|
||||
dest->net = 0;
|
||||
/* dest->net = 0; - no, must direct back to src->net to meet BTL tests */
|
||||
|
||||
datalink_get_my_address(&my_address);
|
||||
/* encode the NPDU portion of the packet */
|
||||
|
||||
@@ -37,10 +37,10 @@ extern "C" {
|
||||
uint16_t elapsed_seconds);
|
||||
|
||||
/* Simple setters and getter. */
|
||||
void set_bbmd_address( long address );
|
||||
void set_bbmd_port( int port );
|
||||
void set_bbmd_ttl( int ttl_secs );
|
||||
int get_bbmd_result( void );
|
||||
void dlenv_bbmd_address_set( long address );
|
||||
void dlenv_bbmd_port_set( int port );
|
||||
void dlenv_bbmd_ttl_set( int ttl_secs );
|
||||
int dlenv_bbmd_result( void );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user