corrected simple ack; added WP for AO
This commit is contained in:
+33
-31
@@ -454,9 +454,8 @@ void WritePropertyHandler(
|
|||||||
int len = 0;
|
int len = 0;
|
||||||
int pdu_len = 0;
|
int pdu_len = 0;
|
||||||
BACNET_ADDRESS my_address;
|
BACNET_ADDRESS my_address;
|
||||||
bool send = false;
|
BACNET_ERROR_CLASS error_class = ERROR_CLASS_OBJECT;
|
||||||
BACNET_ERROR_CLASS error_class;
|
BACNET_ERROR_CODE error_code = ERROR_CODE_UNKNOWN_OBJECT;
|
||||||
BACNET_ERROR_CODE error_code;
|
|
||||||
int bytes_sent = 0;
|
int bytes_sent = 0;
|
||||||
|
|
||||||
// decode the service request only
|
// decode the service request only
|
||||||
@@ -490,7 +489,6 @@ void WritePropertyHandler(
|
|||||||
service_data->invoke_id,
|
service_data->invoke_id,
|
||||||
ABORT_REASON_OTHER);
|
ABORT_REASON_OTHER);
|
||||||
fprintf(stderr,"Sending Abort!\n");
|
fprintf(stderr,"Sending Abort!\n");
|
||||||
send = true;
|
|
||||||
}
|
}
|
||||||
else if (service_data->segmented_message)
|
else if (service_data->segmented_message)
|
||||||
{
|
{
|
||||||
@@ -499,7 +497,6 @@ void WritePropertyHandler(
|
|||||||
service_data->invoke_id,
|
service_data->invoke_id,
|
||||||
ABORT_REASON_SEGMENTATION_NOT_SUPPORTED);
|
ABORT_REASON_SEGMENTATION_NOT_SUPPORTED);
|
||||||
fprintf(stderr,"Sending Abort!\n");
|
fprintf(stderr,"Sending Abort!\n");
|
||||||
send = true;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -508,12 +505,11 @@ void WritePropertyHandler(
|
|||||||
case OBJECT_DEVICE:
|
case OBJECT_DEVICE:
|
||||||
if (Device_Write_Property(&wp_data,&error_class,&error_code))
|
if (Device_Write_Property(&wp_data,&error_class,&error_code))
|
||||||
{
|
{
|
||||||
pdu_len = encode_simple_ack(
|
pdu_len += encode_simple_ack(
|
||||||
&Tx_Buf[pdu_len],
|
&Tx_Buf[pdu_len],
|
||||||
service_data->invoke_id,
|
service_data->invoke_id,
|
||||||
SERVICE_CONFIRMED_WRITE_PROPERTY);
|
SERVICE_CONFIRMED_WRITE_PROPERTY);
|
||||||
fprintf(stderr,"Sending Write Property Simple Ack!\n");
|
fprintf(stderr,"Sending Write Property Simple Ack!\n");
|
||||||
send = true;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -524,50 +520,56 @@ void WritePropertyHandler(
|
|||||||
error_class,
|
error_class,
|
||||||
error_code);
|
error_code);
|
||||||
fprintf(stderr,"Sending Write Property Error!\n");
|
fprintf(stderr,"Sending Write Property Error!\n");
|
||||||
send = true;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OBJECT_ANALOG_INPUT:
|
case OBJECT_ANALOG_INPUT:
|
||||||
|
error_class = ERROR_CLASS_PROPERTY;
|
||||||
|
error_code = ERROR_CODE_WRITE_ACCESS_DENIED;
|
||||||
pdu_len += bacerror_encode_apdu(
|
pdu_len += bacerror_encode_apdu(
|
||||||
&Tx_Buf[pdu_len],
|
&Tx_Buf[pdu_len],
|
||||||
service_data->invoke_id,
|
service_data->invoke_id,
|
||||||
SERVICE_CONFIRMED_WRITE_PROPERTY,
|
SERVICE_CONFIRMED_WRITE_PROPERTY,
|
||||||
ERROR_CLASS_PROPERTY,
|
error_class,
|
||||||
ERROR_CODE_WRITE_ACCESS_DENIED);
|
error_code);
|
||||||
fprintf(stderr,"Sending Write Access Error!\n");
|
fprintf(stderr,"Sending Write Access Error!\n");
|
||||||
send = true;
|
|
||||||
break;
|
break;
|
||||||
case OBJECT_ANALOG_OUTPUT:
|
case OBJECT_ANALOG_OUTPUT:
|
||||||
pdu_len += bacerror_encode_apdu(
|
if (Analog_Output_Write_Property(&wp_data,&error_class,&error_code))
|
||||||
&Tx_Buf[pdu_len],
|
{
|
||||||
service_data->invoke_id,
|
pdu_len += encode_simple_ack(
|
||||||
SERVICE_CONFIRMED_WRITE_PROPERTY,
|
&Tx_Buf[pdu_len],
|
||||||
ERROR_CLASS_PROPERTY,
|
service_data->invoke_id,
|
||||||
ERROR_CODE_WRITE_ACCESS_DENIED);
|
SERVICE_CONFIRMED_WRITE_PROPERTY);
|
||||||
fprintf(stderr,"Sending Write Access Error!\n");
|
fprintf(stderr,"Sending Write Property Simple Ack!\n");
|
||||||
send = true;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pdu_len += bacerror_encode_apdu(
|
||||||
|
&Tx_Buf[pdu_len],
|
||||||
|
service_data->invoke_id,
|
||||||
|
SERVICE_CONFIRMED_WRITE_PROPERTY,
|
||||||
|
error_class,
|
||||||
|
error_code);
|
||||||
|
fprintf(stderr,"Sending Write Access Error!\n");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
pdu_len += bacerror_encode_apdu(
|
pdu_len += bacerror_encode_apdu(
|
||||||
&Tx_Buf[pdu_len],
|
&Tx_Buf[pdu_len],
|
||||||
service_data->invoke_id,
|
service_data->invoke_id,
|
||||||
SERVICE_CONFIRMED_WRITE_PROPERTY,
|
SERVICE_CONFIRMED_WRITE_PROPERTY,
|
||||||
ERROR_CLASS_OBJECT,
|
error_class,
|
||||||
ERROR_CODE_UNKNOWN_OBJECT);
|
error_code);
|
||||||
fprintf(stderr,"Sending Unknown Object Error!\n");
|
fprintf(stderr,"Sending Unknown Object Error!\n");
|
||||||
send = true;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (send)
|
bytes_sent = bacdl_send_pdu(
|
||||||
{
|
src, // destination address
|
||||||
bytes_sent = bacdl_send_pdu(
|
&Tx_Buf[0],
|
||||||
src, // destination address
|
pdu_len); // number of bytes of data
|
||||||
&Tx_Buf[0],
|
if (bytes_sent <= 0)
|
||||||
pdu_len); // number of bytes of data
|
fprintf(stderr,"Failed to send PDU (%s)!\n", strerror(errno));
|
||||||
if (bytes_sent <= 0)
|
|
||||||
fprintf(stderr,"Failed to send PDU (%s)!\n", strerror(errno));
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user