Пример #1
0
void test_Private_Transfer_Request(
    Test * pTest)
{
    uint8_t apdu[480] = { 0 };
    uint8_t test_value[480] = { 0 };
    int len = 0;
    int apdu_len = 0;
    uint8_t invoke_id = 128;
    uint8_t test_invoke_id = 0;
    int private_data_len = 0;
    char private_data_chunk[33] = { "00112233445566778899AABBCCDDEEFF" };
    BACNET_APPLICATION_DATA_VALUE data_value = { 0 };
    BACNET_APPLICATION_DATA_VALUE test_data_value = { 0 };
    BACNET_PRIVATE_TRANSFER_DATA private_data = { 0 };
    BACNET_PRIVATE_TRANSFER_DATA test_data = { 0 };
    bool status = false;

    private_data.vendorID = BACNET_VENDOR_ID;
    private_data.serviceNumber = 1;

    status =
        bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING,
        &private_data_chunk[0], &data_value);
    ct_test(pTest, status == true);
    private_data_len =
        bacapp_encode_application_data(&test_value[0], &data_value);
    private_data.serviceParameters = &test_value[0];
    private_data.serviceParametersLen = private_data_len;

    len = ptransfer_encode_apdu(&apdu[0], invoke_id, &private_data);
    ct_test(pTest, len != 0);
    apdu_len = len;
    len =
        ptransfer_decode_apdu(&apdu[0], apdu_len, &test_invoke_id, &test_data);
    ct_test(pTest, len != -1);
    ct_test(pTest, test_data.vendorID == private_data.vendorID);
    ct_test(pTest, test_data.serviceNumber == private_data.serviceNumber);
    ct_test(pTest,
        test_data.serviceParametersLen == private_data.serviceParametersLen);
    len =
        bacapp_decode_application_data(test_data.serviceParameters,
        test_data.serviceParametersLen, &test_data_value);
    ct_test(pTest, bacapp_same_value(&data_value, &test_data_value) == true);

    return;
}
int Send_ConfirmedPrivateTransfer(
	BACNET_ADDRESS * dest,
	BACNET_PRIVATE_TRANSFER_DATA * private_data)
{
	int len = 0;
	int pdu_len = 0;
	int bytes_sent = 0;
	BACNET_NPDU_DATA npdu_data;
	BACNET_ADDRESS my_address;
	int invoke_id = 0;
	if (!dcc_communication_enabled())
		return -1;

	datalink_get_my_address(&my_address);
	/* encode the NPDU portion of the packet */
	// npdu_encode_npdu_data(&npdu_data, false, MESSAGE_PRIORITY_NORMAL);	//Fance
	npdu_encode_npdu_data(&npdu_data, true, MESSAGE_PRIORITY_NORMAL);
	pdu_len =
		npdu_encode_pdu(&Handler_Transmit_Buffer[0], dest, &my_address,
		&npdu_data);

	/* encode the APDU portion of the packet */

	 invoke_id = tsm_next_free_invokeID();
	 if(invoke_id==0)//这里是当没有可用的调用ID的时候将所有ID都清零;变为可用;
		 tsm_free_all_invoke_id();
	len =
		ptransfer_encode_apdu(&Handler_Transmit_Buffer[pdu_len],invoke_id,private_data);	//这里的还需要完善 Invoke ID
	// uptransfer_encode_apdu(&Handler_Transmit_Buffer[pdu_len],		//Fance
	// private_data);
	pdu_len += len;
	bytes_sent =
		datalink_send_pdu(dest, &npdu_data, &Handler_Transmit_Buffer[0],
		pdu_len);
#if PRINT_ENABLED
	if (bytes_sent <= 0)
		fprintf(stderr,
		"Failed to Send UnconfirmedPrivateTransfer Request (%s)!\n",
		strerror(errno));
#endif
	if(bytes_sent>0)
		return invoke_id;
	else
		return -2;
}
Пример #3
0
void test_Private_Transfer_Request(
    Test * pTest)
{
    uint8_t apdu[480] = { 0 };
    uint8_t test_value[480] = { 0 };
    int len = 0;
    int apdu_len = 0;
    uint8_t invoke_id = 128;
    uint8_t test_invoke_id = 0;
    int private_data_len = 0;
    uint8_t private_data_chunk[32] = { "I Love You, Patricia!" };
    BACNET_APPLICATION_DATA_VALUE data_value;
    BACNET_APPLICATION_DATA_VALUE test_data_value;
    BACNET_PRIVATE_TRANSFER_DATA private_data;
    BACNET_PRIVATE_TRANSFER_DATA test_data;

    private_data.vendorID = BACNET_VENDOR_ID;
    private_data.serviceNumber = 1;

    bacapp_parse_application_data(BACNET_APPLICATION_TAG_OCTET_STRING,
        &private_data_chunk[0], &data_value);
    private_data_len =
        bacapp_encode_application_data(&test_value[0], &data_value);
    private_data.serviceParameters = &test_value[0];
    private_data.serviceParametersLen = private_data_len;

    len = ptransfer_encode_apdu(&apdu[0], invoke_id, &private_data);
    ct_test(pTest, len != 0);
    apdu_len = len;
    len =
        ptransfer_decode_apdu(&apdu[0], apdu_len, &test_invoke_id, &test_data);
    ct_test(pTest, len != -1);
    ct_test(pTest, test_data.vendorID == private_data.vendorID);
    ct_test(pTest, test_data.serviceNumber == private_data.serviceNumber);
    ct_test(pTest,
        test_data.serviceParametersLen == private_data.serviceParametersLen);
    len =
        bacapp_decode_application_data(test_data.serviceParameters,
        test_data.serviceParametersLen, &test_data_value);
    ct_test(pTest, bacapp_same_value(&data_value, &test_data_value) == true);

    return;
}