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 */
|
/** @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 */
|
/** Buffer used for receiving */
|
||||||
static uint8_t Rx_Buf[MAX_MPDU] = { 0 };
|
static uint8_t Rx_Buf[MAX_MPDU] = { 0 };
|
||||||
|
|
||||||
@@ -156,16 +135,19 @@ void Devices_Init(
|
|||||||
static void Init_Service_Handlers(
|
static void Init_Service_Handlers(
|
||||||
uint32_t first_object_instance)
|
uint32_t first_object_instance)
|
||||||
{
|
{
|
||||||
Device_Init(&Object_Table[0]);
|
Device_Init(NULL);
|
||||||
Routing_Device_Init(first_object_instance);
|
Routing_Device_Init(first_object_instance);
|
||||||
|
|
||||||
/* we need to handle who-is to support dynamic device binding
|
/* we need to handle who-is to support dynamic device binding
|
||||||
* For the gateway, we want the routing handlers, and we will use the
|
* For the gateway, we will use the unicast variety so we can
|
||||||
* unicast variety so we can get back through switches to different subnets */
|
* 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,
|
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,
|
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 */
|
/* set the handler for all the services we don't implement */
|
||||||
/* It is required to send the proper reject message... */
|
/* It is required to send the proper reject message... */
|
||||||
apdu_set_unrecognized_service_handler_handler
|
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,
|
/** Handler for Who-Has requests in the virtual routing setup,
|
||||||
* with broadcast I-Have response.
|
* with broadcast I-Have response.
|
||||||
* Will respond if the device Object ID matches, and we have
|
* Will respond if the device Object ID matches, and we have
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ void handler_who_is_unicast(
|
|||||||
len =
|
len =
|
||||||
whois_decode_service_request(service_request, service_len, &low_limit,
|
whois_decode_service_request(service_request, service_len, &low_limit,
|
||||||
&high_limit);
|
&high_limit);
|
||||||
|
/* If no limits, then always respond */
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
Send_I_Am_Unicast(&Handler_Transmit_Buffer[0], src);
|
Send_I_Am_Unicast(&Handler_Transmit_Buffer[0], src);
|
||||||
else if (len != -1) {
|
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.
|
/** Local function to check Who-Is requests against our Device IDs.
|
||||||
* Will check the gateway (root Device) and all virtual routed
|
* Will check the gateway (root Device) and all virtual routed
|
||||||
* Devices against the range and respond for each that matches.
|
* Devices against the range and respond for each that matches.
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ int iam_unicast_encode_pdu(
|
|||||||
BACNET_ADDRESS my_address;
|
BACNET_ADDRESS my_address;
|
||||||
/* The destination will be the same as the src, so copy it over. */
|
/* The destination will be the same as the src, so copy it over. */
|
||||||
memcpy(dest, src, sizeof(BACNET_ADDRESS));
|
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);
|
datalink_get_my_address(&my_address);
|
||||||
/* encode the NPDU portion of the packet */
|
/* encode the NPDU portion of the packet */
|
||||||
|
|||||||
@@ -37,10 +37,10 @@ extern "C" {
|
|||||||
uint16_t elapsed_seconds);
|
uint16_t elapsed_seconds);
|
||||||
|
|
||||||
/* Simple setters and getter. */
|
/* Simple setters and getter. */
|
||||||
void set_bbmd_address( long address );
|
void dlenv_bbmd_address_set( long address );
|
||||||
void set_bbmd_port( int port );
|
void dlenv_bbmd_port_set( int port );
|
||||||
void set_bbmd_ttl( int ttl_secs );
|
void dlenv_bbmd_ttl_set( int ttl_secs );
|
||||||
int get_bbmd_result( void );
|
int dlenv_bbmd_result( void );
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user