corrected simple ack; added WP for AO

This commit is contained in:
skarg
2005-05-15 11:52:03 +00:00
parent e5b5fb76e0
commit a8d92af038
+33 -31
View File
@@ -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;
} }