Пример #1
0
void read_data (DDS_DataReaderListener *l, DDS_DataReader dr)
{
	static DDS_DynamicDataSeq drx_sample = DDS_SEQ_INITIALIZER (void *);
	static DDS_SampleInfoSeq rx_info = DDS_SEQ_INITIALIZER (DDS_SampleInfo *);
	DDS_SampleStateMask	ss = DDS_NOT_READ_SAMPLE_STATE;
	DDS_ViewStateMask	vs = DDS_ANY_VIEW_STATE;
	DDS_InstanceStateMask	is = DDS_ANY_INSTANCE_STATE;
	DDS_SampleInfo		*info;
	DDS_ReturnCode_t	error;
	DDS_DynamicData		dd;
	Topic			*tp;
	int			secure = (cert_path != NULL);

	tp = (Topic *) l->cookie;
	for (;;) {
		error = DDS_DynamicDataReader_take (dr, &drx_sample, &rx_info, 1, ss, vs, is);
		if (error) {
			if (error != DDS_RETCODE_NO_DATA)
				printf ("Unable to read samples: error = %s!\r\n", DDS_error (error));
			return;
		}
		if (DDS_SEQ_LENGTH (rx_info)) {
			info = DDS_SEQ_ITEM (rx_info, 0);
			if (info->valid_data) {
				dd = DDS_SEQ_ITEM (drx_sample, 0);
				if (!dd)
					fatal ("Empty dynamic sample!");

				tp->ndata++;
				if (!paused) {
					dbg_printf ("%s: ", tp->topic_name);
					DDS_Debug_dump_dynamic (0, tp->ts, dd, 0, secure, 1);
					dbg_printf ("\r\n");
				}
			}
			else if (info->instance_handle && info->instance_state != DDS_ALIVE_INSTANCE_STATE) {
				if (info->instance_state == DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE)
					tp->ndispose++;
				else if (info->instance_state == DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE)
					tp->nnowriter++;
				if (!paused) {
					dd = DDS_DynamicDataFactory_create_data (tp->dtype);
					DDS_DynamicDataReader_get_key_value (dr, dd, info->instance_handle);
					dbg_printf ("%s: ", tp->topic_name);
					DDS_Debug_dump_dynamic (0, tp->ts, dd, 1, secure, 1);
					if (info->instance_state == DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE)
						dbg_printf (": Not alive - disposed.");
					else if (info->instance_state == DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE)
						dbg_printf (": Not alive - no writers.");
					dbg_printf ("\r\n");
				}
			}
			DDS_DynamicDataReader_return_loan (dr, &drx_sample, &rx_info);
		}
		else
			return;
	}
}
Пример #2
0
static DDS_ReturnCode_t struct_get(qeocore_data_t **data,
                                   const DDS_DynamicData dyndata,
                                   qeocore_member_id_t id,
                                   DDS_MemberDescriptor *mdesc)
{
    DDS_ReturnCode_t ddsrc = DDS_RETCODE_OUT_OF_RESOURCES;

    *data = calloc(1, sizeof(qeocore_data_t));
    if (NULL != *data) {
        (*data)->flags.is_single = 1;
        ddsrc = DDS_DynamicData_get_complex_value(dyndata, &(*data)->d.dynamic.single_data, id);
        if (DDS_RETCODE_NO_DATA == ddsrc) {
            /* no nested structure there yet, create empty one */
            (*data)->d.dynamic.single_data = DDS_DynamicDataFactory_create_data(mdesc->type);
            qeo_log_dds_null("DDS_DynamicDataFactory_create_data", (*data)->d.dynamic.single_data);
            if (NULL != (*data)->d.dynamic.single_data) {
                ddsrc = DDS_RETCODE_OK;
            }
        }
        else {
            qeo_log_dds_rc("DDS_DynamicData_get_complex_value", ddsrc);
        }
    }
    if (DDS_RETCODE_OK == ddsrc) {
        /* take ownership of type for future use */
        (*data)->d.dynamic.single_type = mdesc->type;
        mdesc->type = NULL;
    }
    else {
        if (NULL != *data) {
            if (NULL != (*data)->d.dynamic.single_data) {
                DDS_DynamicDataFactory_delete_data((*data)->d.dynamic.single_data);
            }
            free(*data);
        }
    }
    return ddsrc;
}
Пример #3
0
#include "MP3_VS1053_defs.h"

#include "devman.h"

#define MP3_VS1053_BUFFER_SIZE 128

#define MASK_GPIO_EN (1 << 1)

/* Port registers */
#define VII_GPIO_SYS_CNTRL_1   0x180   /* GPIO Control Register */
#define VII_GPIO_CNTRL_PORTA_1 0x181
#define VII_GPIO_CNTRL_PORTB_1 0x182
#define VII_GPIO_CNTRL_PORTC_1 0x183
#define VII_GPIO_CNTRL_PORTD_1 0x184
#define VII_GPIO_CNTRL_PORTE_1 0x185
#define VII_GPIO_DATA_TX_PA_1  0x186
#define VII_GPIO_DATA_TX_PB_1  0x187
#define VII_GPIO_DATA_TX_PC_1  0x188
#define VII_GPIO_DATA_TX_PD_1  0x189
#define VII_GPIO_DATA_TX_PE_1  0x18a
#define VII_GPIO_DATA_RX_PA_1  0x18b
#define VII_GPIO_DATA_RX_PB_1  0x18c
#define VII_GPIO_DATA_RX_PC_1  0x18d
#define VII_GPIO_DATA_RX_PD_1  0x18e
#define VII_GPIO_DATA_RX_PE_1  0x18f
#define VII_GPIO_INT_REG_EN_1  0x19a   /* GPIO Interrupt Register */

port vII_gpio_sys_cntrl_1 @ VII_GPIO_SYS_CNTRL_1;
port vII_gpio_cntrl_porta_1 @ VII_GPIO_CNTRL_PORTA_1;
port vII_gpio_cntrl_portb_1 @ VII_GPIO_CNTRL_PORTB_1;
port vII_gpio_cntrl_portc_1 @ VII_GPIO_CNTRL_PORTC_1;
port vII_gpio_cntrl_portd_1 @ VII_GPIO_CNTRL_PORTD_1;
port vII_gpio_cntrl_porte_1 @ VII_GPIO_CNTRL_PORTE_1;
port vII_gpio_data_tx_pa_1 @ VII_GPIO_DATA_TX_PA_1;
port vII_gpio_data_tx_pb_1 @ VII_GPIO_DATA_TX_PB_1;
port vII_gpio_data_tx_pc_1 @ VII_GPIO_DATA_TX_PC_1;
port vII_gpio_data_tx_pd_1 @ VII_GPIO_DATA_TX_PD_1;
port vII_gpio_data_tx_pe_1 @ VII_GPIO_DATA_TX_PE_1;
Пример #4
0
void test_dyn_array1 (void)
{
	DDS_DynamicTypeSupport ts;
	DDS_DynamicTypeBuilder sb, abc20;
	DDS_TypeDescriptor *desc;
	DDS_MemberDescriptor *md;
	DDS_DynamicType s, ac20;
	DDS_BoundSeq bounds;
	DDS_DynamicData dd, dda, dd2;
	DDS_ReturnCode_t rc;
	unsigned i;

	v_printf ("test_dyn_array1 - ");

	/* 1. Create the type. */
	desc = DDS_TypeDescriptor__alloc ();
	fail_unless (desc != NULL);

	desc->kind = DDS_STRUCTURE_TYPE;
	desc->name = "dstruct1";
	sb = DDS_DynamicTypeBuilderFactory_create_type (desc);
	fail_unless (sb != NULL);

	md = DDS_MemberDescriptor__alloc ();
	fail_unless (md != NULL);

	DDS_SEQ_INIT (bounds);
	dds_seq_require (&bounds, 1);
	DDS_SEQ_LENGTH (bounds) = 1;
	DDS_SEQ_ITEM (bounds, 0) = 20;

	abc20 = DDS_DynamicTypeBuilderFactory_create_array_type (
		DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_CHAR_8_TYPE),
		&bounds);
	fail_unless (abc20 != NULL);

	dds_seq_cleanup (&bounds);

	ac20 = DDS_DynamicTypeBuilder_build (abc20);
	fail_unless (ac20 != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (abc20);

	md->name = "char_a";
	md->index = md->id = 0;
	md->type = ac20;

	rc = DDS_DynamicTypeBuilder_add_member (sb, md);
	fail_unless (rc == DDS_RETCODE_OK);

	s = DDS_DynamicTypeBuilder_build (sb);
	fail_unless (s != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (sb);
	ts = DDS_DynamicTypeSupport_create_type_support (s);
	fail_unless (ts != NULL);

	DDS_TypeDescriptor__free (desc);
	DDS_MemberDescriptor__free (md);

	/* 2. Create a Dynamic Data item for this type. */
	dd = DDS_DynamicDataFactory_create_data (s);
	fail_unless (dd != NULL);

	dda = DDS_DynamicDataFactory_create_data (ac20);
	fail_unless (dda != NULL);

	for (i = 0; i < 20; i++) {
		SET_FIELD (dda, i, char8, i + '0');
	}
	SET_FIELD (dd, 0, complex, dda);

	marshallDynamic (dd, &dd2, ts);

	DDS_DynamicDataFactory_delete_data (dd);
	DDS_DynamicDataFactory_delete_data (dda);

	DDS_DynamicTypeBuilderFactory_delete_type (ac20);
	DDS_DynamicTypeBuilderFactory_delete_type (s);
	DDS_DynamicTypeSupport_delete_type_support (ts);
	v_printf ("success!\r\n");
}
Пример #5
0
void test_dyn_oseq (void)
{
	DDS_DynamicTypeSupport ts;
	DDS_DynamicTypeBuilder sb, oseqb;
	DDS_TypeDescriptor *desc;
	DDS_MemberDescriptor *md;
	DDS_DynamicType s, oseq;
	DDS_DynamicData dd, dda, dd2;
	DDS_ReturnCode_t rc;
	DDS_ByteSeq values;
	unsigned i;

	v_printf ("test_dyn_oseq - ");

	/* 1. Create the type. */
	desc = DDS_TypeDescriptor__alloc ();
	fail_unless (desc != NULL);

	desc->kind = DDS_STRUCTURE_TYPE;
	desc->name = "dstruct3";
	sb = DDS_DynamicTypeBuilderFactory_create_type (desc);
	fail_unless (sb != NULL);

	md = DDS_MemberDescriptor__alloc ();
	fail_unless (md != NULL);

	ADD_FIELD (sb, md, "anuint", 0, 0, DDS_UINT_32_TYPE);

	oseqb = DDS_DynamicTypeBuilderFactory_create_sequence_type (
		DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_BYTE_TYPE),
		0);
	fail_unless (oseqb != NULL);

	oseq = DDS_DynamicTypeBuilder_build (oseqb);
	fail_unless (oseq != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (oseqb);

	md->name = "oseq";
	md->index = md->id = 1;
	md->type = oseq;

	rc = DDS_DynamicTypeBuilder_add_member (sb, md);
	fail_unless (rc == DDS_RETCODE_OK);

	ADD_FIELD (sb, md, "ch", 2, 2, DDS_CHAR_8_TYPE);

	s = DDS_DynamicTypeBuilder_build (sb);
	fail_unless (s != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (sb);
	ts = DDS_DynamicTypeSupport_create_type_support (s);
	fail_unless (ts != NULL);

	DDS_TypeDescriptor__free (desc);
	DDS_MemberDescriptor__free (md);

	/* 2. Create a Dynamic Data item for this type. */
	dd = DDS_DynamicDataFactory_create_data (s);
	fail_unless (dd != NULL);

	dda = DDS_DynamicDataFactory_create_data (oseq);
	fail_unless (dda != NULL);

	SET_FIELD (dd, 0, uint32, 1000);
	DDS_SEQ_INIT (values);
	rc = dds_seq_require (&values, 21);
	fail_unless (rc == DDS_RETCODE_OK);

	for (i = 0; i < 21; i++)
		DDS_SEQ_ITEM (values, i) = i + '0';

	rc = DDS_DynamicData_set_byte_values (dda, 0, &values);
	fail_unless (rc == DDS_RETCODE_OK);

	SET_FIELD (dd, 1, complex, dda);
	SET_FIELD (dd, 2, char8, 'X');

	marshallDynamic (dd, &dd2, ts);

	DDS_DynamicDataFactory_delete_data (dd);
	DDS_DynamicDataFactory_delete_data (dda);

	DDS_DynamicTypeBuilderFactory_delete_type (oseq);
	DDS_DynamicTypeBuilderFactory_delete_type (s);
	DDS_DynamicTypeSupport_delete_type_support (ts);
	v_printf ("success!\r\n");
}
Пример #6
0
void test_dyn_array2 (void)
{
	DDS_DynamicTypeSupport ts;
	DDS_DynamicTypeBuilder sb1, sb1a, abi64, abs1a;
	DDS_DynamicType s1, s1a, ai64, as1a;
	DDS_TypeDescriptor *desc;
	DDS_MemberDescriptor *md;
	DDS_DynamicData dd, dds, dda, ddas, dd2;
	DDS_ReturnCode_t rc;
	DDS_BoundSeq bounds;
	unsigned i, j;

	v_printf ("test_dyn_array2 - ");

	/* 1. Create the type. */
	desc = DDS_TypeDescriptor__alloc ();
	fail_unless (desc != NULL);

	desc->kind = DDS_STRUCTURE_TYPE;
	desc->name = "dstruct2a";
	sb1a = DDS_DynamicTypeBuilderFactory_create_type (desc);
	fail_unless (sb1a != NULL);

	md = DDS_MemberDescriptor__alloc ();
	fail_unless (md != NULL);

	DDS_SEQ_INIT (bounds);
	dds_seq_require (&bounds, 1);
	DDS_SEQ_LENGTH (bounds) = 1;
	DDS_SEQ_ITEM (bounds, 0) = 5;

	abi64 = DDS_DynamicTypeBuilderFactory_create_array_type (
		DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_INT_64_TYPE),
		&bounds);
	fail_unless (abi64 != NULL);

	ai64 = DDS_DynamicTypeBuilder_build (abi64);
	fail_unless (ai64 != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (abi64);

	md->name = "i64";
	md->index = md->id = 0;
	md->type = ai64;

	rc = DDS_DynamicTypeBuilder_add_member (sb1a, md);
	fail_unless (rc == DDS_RETCODE_OK);

	ADD_FIELD (sb1a, md, "ch", 1, 1, DDS_CHAR_8_TYPE);

	s1a = DDS_DynamicTypeBuilder_build (sb1a);
	fail_unless (s1a != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (sb1a);

	DDS_SEQ_ITEM (bounds, 0) = 7;
	abs1a = DDS_DynamicTypeBuilderFactory_create_array_type (s1a, &bounds);
	fail_unless (abs1a != NULL);

	dds_seq_cleanup (&bounds);

	as1a = DDS_DynamicTypeBuilder_build (abs1a);
	fail_unless (as1a != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (abs1a);
	desc->kind = DDS_STRUCTURE_TYPE;
	desc->name = "dstruct2";
	sb1 = DDS_DynamicTypeBuilderFactory_create_type (desc);
	fail_unless (sb1 != NULL);

	ADD_FIELD (sb1, md, "c", 0, 0, DDS_CHAR_8_TYPE);

	md->name = "str2";
	md->index = md->id = 1;
	md->type = as1a;
	rc = DDS_DynamicTypeBuilder_add_member (sb1, md);
	fail_unless (rc == DDS_RETCODE_OK);

	ADD_FIELD (sb1, md, "u16", 2, 2, DDS_UINT_16_TYPE);

	s1 = DDS_DynamicTypeBuilder_build (sb1);
	fail_unless (s1 != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (sb1);
	ts = DDS_DynamicTypeSupport_create_type_support (s1);
	fail_unless (ts != NULL);

	DDS_TypeDescriptor__free (desc);
	DDS_MemberDescriptor__free (md);

	/* 2. Create a Dynamic Data item for this type. */
	dd = DDS_DynamicDataFactory_create_data (s1);
	fail_unless (dd != NULL);

	ddas = DDS_DynamicDataFactory_create_data (as1a);
	fail_unless (ddas != NULL);

	SET_FIELD (dd, 0, char8, 'A');
	for (i = 0; i < 7; i++) {
		dds = DDS_DynamicDataFactory_create_data (s1a);
		fail_unless (dds != NULL);

		dda = DDS_DynamicDataFactory_create_data (ai64);
		fail_unless (dda != NULL);

		for (j = 0; j < 5; j++) {
			SET_FIELD (dda, j, int64, ((i + 6) * j) << i);
		}
		SET_FIELD (dds, 0, complex, dda);
		DDS_DynamicDataFactory_delete_data (dda);

		SET_FIELD (dds, 1, char8, i + 0x30);

		SET_FIELD (ddas, i, complex, dds);
		DDS_DynamicDataFactory_delete_data (dds);
	}
	SET_FIELD (dd, 1, complex, ddas);
	DDS_DynamicDataFactory_delete_data (ddas);

	SET_FIELD (dd, 2, uint16, 1366);

	marshallDynamic (dd, &dd2, ts);

	DDS_DynamicDataFactory_delete_data (dd);
	DDS_DynamicTypeBuilderFactory_delete_type (s1);
	DDS_DynamicTypeBuilderFactory_delete_type (as1a);
	DDS_DynamicTypeBuilderFactory_delete_type (s1a);
	DDS_DynamicTypeBuilderFactory_delete_type (ai64);
	DDS_DynamicTypeSupport_delete_type_support (ts);
	v_printf ("success!\r\n");
}
Пример #7
0
void test_dyn_map1 (void)
{
	DDS_DynamicTypeSupport ts;
	DDS_DynamicTypeBuilder sb1, mb, sb;
	DDS_DynamicType s1, s, m;
	DDS_TypeDescriptor *desc;
	DDS_MemberDescriptor *md;
	DDS_DynamicData dd, dd2, ddm;
	DDS_ReturnCode_t rc;

	v_printf ("test_dyn_map1 - ");

	/* 1. Create the type. */
	desc = DDS_TypeDescriptor__alloc ();
	fail_unless (desc != NULL);

	md = DDS_MemberDescriptor__alloc ();
	fail_unless (md != NULL);

	sb = DDS_DynamicTypeBuilderFactory_create_string_type (50);
	fail_unless (sb != NULL);

	s = DDS_DynamicTypeBuilder_build (sb);
	fail_unless (s != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (sb);

	mb = DDS_DynamicTypeBuilderFactory_create_map_type (
		DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_INT_32_TYPE),
		s, DDS_UNBOUNDED_COLLECTION);
	fail_unless (mb != NULL);

	m = DDS_DynamicTypeBuilder_build (mb);
	fail_unless (m != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (mb);

	desc->kind = DDS_STRUCTURE_TYPE;
	desc->name = "dmap1";

	sb1 = DDS_DynamicTypeBuilderFactory_create_type (desc);
	fail_unless (sb1 != NULL);

	md->name = "m";
	md->id = 0;
	md->type = m;
	md->index = 0;
	fail_unless (md->type != NULL);

	rc = DDS_DynamicTypeBuilder_add_member (sb1, md);
	fail_unless (rc == DDS_RETCODE_OK);

	md->name = "b";
	md->id = 1;
	md->type = DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_INT_64_TYPE);
	md->index = 1;
	fail_unless (md->type != NULL);

	rc = DDS_DynamicTypeBuilder_add_member (sb1, md);
	fail_unless (rc == DDS_RETCODE_OK);

	s1 = DDS_DynamicTypeBuilder_build (sb1);
	fail_unless (s1 != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (sb1);

	ts = DDS_DynamicTypeSupport_create_type_support (s1);
	fail_unless (ts != NULL);

	DDS_TypeDescriptor__free (desc);
	DDS_MemberDescriptor__free (md);

	DDS_TypeSupport_dump_type (0, (DDS_TypeSupport) ts, 15);

	/* 2. Create a Dynamic data item for this type. */
	ddm = DDS_DynamicDataFactory_create_data (m);
	md->name = "key";
	md->id = DDS_DynamicData_get_member_id_by_name (ddm, "alfa");
	md->type = DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_INT_32_TYPE);
	md->default_value = "0"; 
	md->index = 0;
	md->default_label = 0;


	dd = DDS_DynamicDataFactory_create_data (s1);
	fail_unless (dd != NULL);

	rc = DDS_DynamicData_set_int32_value (dd, 0, 0xCAFEBABE);
	fail_unless (rc == DDS_RETCODE_OK);

	rc = DDS_DynamicData_set_int64_value (dd, 1, -1);
	fail_unless (rc == DDS_RETCODE_OK);

	marshallDynamic (dd, &dd2, ts);

	DDS_DynamicDataFactory_delete_data (dd);
	DDS_DynamicTypeBuilderFactory_delete_type (s1);
	DDS_DynamicTypeSupport_delete_type_support (ts);

	v_printf ("success!\r\n");
}
Пример #8
0
void test_dyn_mutable2 (void)
{
	DDS_DynamicTypeSupport ts;
	DDS_DynamicTypeBuilder sb2, stb, sstb;
	DDS_DynamicType s2, st, sst;
	DDS_TypeDescriptor *desc;
	DDS_MemberDescriptor *md;
	DDS_DynamicData dd, dd2, dds;
	DDS_ReturnCode_t rc;
	DDS_StringSeq ss;
	unsigned n;
	char *strings [] = {
		"Hi there", "blabla", "\0", NULL, 
		"got here", "not yet done", "", "num8",
		"9", "10", "11", "12",
		"13", "14", "15", "16",
		"17", "18", "19", "done :)"
	};

	v_printf ("test_mutable2 - ");

	/* 1. Create the type. */
	desc = DDS_TypeDescriptor__alloc ();
	fail_unless (desc != NULL);
	desc->kind = DDS_STRUCTURE_TYPE;
	desc->name = "dstruct2m";

	sb2 = DDS_DynamicTypeBuilderFactory_create_type (desc);
	fail_unless (sb2 != NULL);

	md = DDS_MemberDescriptor__alloc ();
	fail_unless (md != NULL);

	ADD_FIELD (sb2, md, "u16", 0, 5, DDS_UINT_16_TYPE);
	set_key_annotation (sb2, "u16");

	stb = DDS_DynamicTypeBuilderFactory_create_string_type (DDS_UNBOUNDED_COLLECTION);
	fail_unless (stb != NULL);

	st = DDS_DynamicTypeBuilder_build (stb);
	fail_unless (st != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (stb);

	sstb = DDS_DynamicTypeBuilderFactory_create_sequence_type (st, 
							DDS_UNBOUNDED_COLLECTION);
	fail_unless (sstb != NULL);

	sst = DDS_DynamicTypeBuilder_build (sstb);
	fail_unless (sst != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (sstb);

	md->name = "s";
	md->index = 1;
	md->id = 6;
	md->type = sst;
	rc = DDS_DynamicTypeBuilder_add_member (sb2, md);
	fail_unless (rc == DDS_RETCODE_OK);

	set_ext_annotation (sb2, "MUTABLE_EXTENSIBILITY");

	s2 = DDS_DynamicTypeBuilder_build (sb2);
	fail_unless (s2 != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (sb2);

	ts = DDS_DynamicTypeSupport_create_type_support (s2);
	fail_unless (ts != NULL);

	DDS_TypeDescriptor__free (desc);
	DDS_MemberDescriptor__free (md);

	/* 2. Create a Dynamic data item for this type. */

	DDS_SEQ_INIT (ss);
	dds_seq_from_array (&ss, strings, sizeof (strings) / sizeof (char *));

	for (n = 0; n <= DDS_SEQ_MAXIMUM (ss); n++) {

		dd = DDS_DynamicDataFactory_create_data (s2);
		fail_unless (dd != NULL);

		SET_FIELD (dd, 5, uint16, n);

		dds = DDS_DynamicDataFactory_create_data (sst);
		fail_unless (dds != NULL);

		DDS_SEQ_LENGTH (ss) = n;
		rc = DDS_DynamicData_set_string_values (dds, 0, &ss);

		fail_unless (rc == DDS_RETCODE_OK);

		SET_FIELD (dd, 6, complex, dds);

		marshallDynamic (dd, &dd2, ts);

		DDS_DynamicDataFactory_delete_data (dd);
		DDS_DynamicDataFactory_delete_data (dds);
		if (n > 2) {
			n += 3;
			if (n == 18)
				n++;
		}
	}
	dds_seq_cleanup (&ss);

	DDS_DynamicTypeBuilderFactory_delete_type (s2);
	DDS_DynamicTypeBuilderFactory_delete_type (sst);
	DDS_DynamicTypeBuilderFactory_delete_type (st);

	DDS_DynamicTypeSupport_delete_type_support (ts);

	set_key_annotation (NULL, NULL);
	set_ext_annotation (NULL, NULL);

	v_printf ("success!\r\n");
}
Пример #9
0
void test_dyn_mutable1 (void)
{
	DDS_DynamicTypeSupport ts;
	DDS_DynamicTypeBuilder sb2, ostb;
	DDS_DynamicType s2, ot, ost;
	DDS_TypeDescriptor *desc;
	DDS_MemberDescriptor *md;
	DDS_DynamicData dd, dd2, dds;
	DDS_ReturnCode_t rc;
	DDS_ByteSeq bseq;
	unsigned char values [] = { 0x22, 0x33, 0x4f, 0x5e, 0x6d, 0x7c, 0x8b };

	v_printf ("test_mutable1 - ");

	/* 1. Create the type. */
	desc = DDS_TypeDescriptor__alloc ();
	fail_unless (desc != NULL);
	desc->kind = DDS_STRUCTURE_TYPE;
	desc->name = "dstruct1m";

	sb2 = DDS_DynamicTypeBuilderFactory_create_type (desc);
	fail_unless (sb2 != NULL);

	md = DDS_MemberDescriptor__alloc ();
	fail_unless (md != NULL);

	ADD_FIELD (sb2, md, "i16", 0, 99, DDS_INT_16_TYPE);
	set_id_annotation (sb2, "i16", 20);

	ADD_FIELD (sb2, md, "u32", 1, 2, DDS_UINT_32_TYPE);
	set_key_annotation (sb2, "u32");

	ADD_FIELD (sb2, md, "i32", 2, 100, DDS_INT_32_TYPE);
	set_id_annotation (sb2, "i32", 50);
	ADD_FIELD (sb2, md, "u16", 0, DDS_MEMBER_ID_INVALID, DDS_UINT_16_TYPE);
	set_id_annotation (sb2, "u16", 10);
	set_key_annotation (sb2, "u16");
	ADD_FIELD (sb2, md, "u64", 5, 51, DDS_UINT_64_TYPE);
	ADD_FIELD (sb2, md, "i64", 5, DDS_MEMBER_ID_INVALID, DDS_INT_64_TYPE);
	ADD_FIELD (sb2, md, "fl",  6, 53, DDS_FLOAT_32_TYPE);
	ADD_FIELD (sb2, md, "d",   7, 54, DDS_FLOAT_64_TYPE);
	ADD_FIELD (sb2, md, "ch",  8, 55, DDS_CHAR_8_TYPE);
	set_id_annotation (sb2, "ch", 5);
	set_key_annotation (sb2, "ch");
	set_id_annotation (sb2, "fl", 4);

	ot = DDS_DynamicTypeBuilderFactory_get_primitive_type (DDS_BYTE_TYPE);
	fail_unless (ot != NULL);

	ostb = DDS_DynamicTypeBuilderFactory_create_sequence_type (ot, 
							DDS_UNBOUNDED_COLLECTION);
	fail_unless (ostb != NULL);

	ost = DDS_DynamicTypeBuilder_build (ostb);
	fail_unless (ost != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (ostb);

	md->name = "s";
	md->index = 9;
	md->id = 9;
	md->type = ost;
	rc = DDS_DynamicTypeBuilder_add_member (sb2, md);
	fail_unless (rc == DDS_RETCODE_OK);

	set_ext_annotation (sb2, "MUTABLE_EXTENSIBILITY");

	s2 = DDS_DynamicTypeBuilder_build (sb2);
	fail_unless (s2 != NULL);

	DDS_DynamicTypeBuilderFactory_delete_type (sb2);

	ts = DDS_DynamicTypeSupport_create_type_support (s2);
	fail_unless (ts != NULL);

	DDS_TypeDescriptor__free (desc);
	DDS_MemberDescriptor__free (md);

	/* 2. Create a Dynamic data item for this type. */
	dd = DDS_DynamicDataFactory_create_data (s2);
	fail_unless (dd != NULL);

	SET_FIELD (dd, 50, int32, -5);
	SET_FIELD (dd, 10, uint16, 0xDEAD);
	SET_FIELD (dd, 20, int16, INT16_MIN);
	SET_FIELD (dd, 2, uint32, UINT32_MAX);
	SET_FIELD (dd, 52, int64, 100);
	SET_FIELD (dd, 4, float32, 0.5f);
	SET_FIELD (dd, 54, float64, 100e-5);
	SET_FIELD (dd, 5, char8, 'd');
	SET_FIELD (dd, 51, uint64, 5010000);

	dds = DDS_DynamicDataFactory_create_data (ost);
	fail_unless (dds != NULL);

	DDS_SEQ_INIT (bseq);
	dds_seq_from_array (&bseq, values, sizeof (values));
	rc = DDS_DynamicData_set_byte_values (dds, 0, &bseq);
	dds_seq_cleanup (&bseq);

	fail_unless (rc == DDS_RETCODE_OK);

	SET_FIELD (dd, 9, complex, dds);

	marshallDynamic (dd, &dd2, ts);

	DDS_DynamicDataFactory_delete_data (dd);
	DDS_DynamicDataFactory_delete_data (dds);

	DDS_DynamicTypeBuilderFactory_delete_type (s2);
	DDS_DynamicTypeBuilderFactory_delete_type (ost);

	DDS_DynamicTypeSupport_delete_type_support (ts);

	set_id_annotation (NULL, NULL, 0);
	set_key_annotation (NULL, NULL);
	set_ext_annotation (NULL, NULL);

	v_printf ("success!\r\n");
}