예제 #1
0
static void on_regreq_available(const qeocore_reader_t *reader,
                         const qeocore_data_t *data,
                         uintptr_t userdata)
{
    log_verbose("%s entry (%d)", __FUNCTION__, qeocore_data_get_status(data));
    switch (qeocore_data_get_status(data)) {
        case QEOCORE_DATA: {
            org_qeo_system_RegistrationRequest_t *t = (org_qeo_system_RegistrationRequest_t *)qeocore_data_get_data(data);
            /* verify struct */
            validate_regreq(_current_regreq, t, false);
            /* release main thread */
            sem_post(&_sync);
            break;
        }
        case QEOCORE_NO_MORE_DATA:
            break;
        case QEOCORE_REMOVE: {
            org_qeo_system_RegistrationRequest_t *t = (org_qeo_system_RegistrationRequest_t *)qeocore_data_get_data(data);
            /* verify struct */
            validate_regreq(_current_regreq, t, true);
            /* release main thread */
            sem_post(&_sync);
            break;
        }
        case QEOCORE_NOTIFY:
            sem_post(&_notify_sync);
            break;
        default:
            abort(); /* error */
    }
    log_verbose("%s exit", __FUNCTION__);
}
예제 #2
0
파일: test.c 프로젝트: JianlongCao/qeo-core
static void on_di_data_available(const qeocore_reader_t *reader,
                                            const qeocore_data_t *data,
                                            uintptr_t userdata){

    
    qeo_retcode_t ret = QEO_OK;
    switch (qeocore_data_get_status(data)) {
        case QEOCORE_NOTIFY:
            qeo_log_d("Notify received");
            break;
        case QEOCORE_DATA:
            qeo_log_d("Data received");
            ret = qeo_walk_tsm_for_unmarshal(_types, org_qeo_system_DeviceInfo_type, data, (uintptr_t)&_rcvd_di, QEO_T2D_FLAGS_ALL, &_di_ucbs);
            break;
        case QEOCORE_NO_MORE_DATA:
            qeo_log_d("No more data received");
            break;
        case QEOCORE_REMOVE:
            qeo_log_d("remove received");
            break;
        case QEOCORE_ERROR:
            qeo_log_e("no callback called due to prior error");
            break;
    }
    ck_assert_int_eq(ret, QEO_OK);

}
예제 #3
0
static void fwd_client_on_data(const qeocore_reader_t *reader,
                               const qeocore_data_t *data,
                               uintptr_t userdata)
{
    qeo_factory_t *factory = (qeo_factory_t *)userdata;
    qeocore_data_status_t status;
    org_qeo_system_Forwarder_t *fwd_data;
    org_qeo_system_ForwarderLocator_t fwd_locator;
    qeo_mgmt_client_locator_t locator;

    status = qeocore_data_get_status(data);
    if (QEOCORE_DATA == status) {
        fwd_data = (org_qeo_system_Forwarder_t *)qeocore_data_get_data(data);
        /* check locator */
        if ((NULL != fwd_data) && (DDS_SEQ_LENGTH(fwd_data->locator) > 0)) {
            fwd_locator = DDS_SEQ_ITEM(fwd_data->locator, 0);
            locator.type = fwd_locator.type;
            locator.port = fwd_locator.port;
            locator.address = fwd_locator.address;
            client_state_machine_eval(factory, CLIENT_EVENT_FWD_DATA_RECEIVED, &locator, fwd_data->deviceId);
        }
    }
    else if (QEOCORE_REMOVE == status) {
        fwd_data = (org_qeo_system_Forwarder_t *)qeocore_data_get_data(data);
        if (NULL != fwd_data) {
            client_state_machine_eval(factory, CLIENT_EVENT_FWD_DATA_REMOVED, NULL, fwd_data->deviceId);
        }
    }
}
예제 #4
0
static void my_on_data_available(const qeocore_reader_t *reader,
                                 const qeocore_data_t *data,
                                 uintptr_t userdata)
{
    switch (qeocore_data_get_status(data)) {
        case QEOCORE_DATA: {
            qeocore_data_t *seqdata = NULL;
            byte_array_t array;
            int i, size;

            log_pid("reader received data");
            assert(QEO_OK == qeocore_data_get_member(data, _size_id, &size));
            assert(QEO_OK == qeocore_data_get_member(data, _buf_id, &seqdata));
            assert(QEO_OK == qeocore_data_sequence_get(seqdata, (qeo_sequence_t *)&array, 0, QEOCORE_SIZE_UNLIMITED));
            assert(size == DDS_SEQ_LENGTH(array));
            assert(_test_size == DDS_SEQ_LENGTH(array));
            for (i = 0; i < size; i++) {
                assert(DDS_SEQ_ITEM(array, i) == (i & 0xff));
            }
            qeocore_data_sequence_free(seqdata, (qeo_sequence_t *)&array);
            qeocore_data_free(seqdata);
            sem_post(&_sync); /* release main thread */
            break;
        }
        case QEOCORE_NO_MORE_DATA:
        case QEOCORE_REMOVE:
            /* ignore */
            break;
        default:
            abort();
            break;
    }
}
예제 #5
0
static void fwd_server_on_data(const qeocore_reader_t *reader,
                                const qeocore_data_t *data,
                                uintptr_t userdata)
{
    /* count number of local forwarder instances */
    if (QEOCORE_NOTIFY == qeocore_data_get_status(data)) {
        qeo_factory_t *factory = (qeo_factory_t *)reader->entity.factory;
        int cnt = fwd_server_count_instances(reader);

        fwd_server_state_machine_eval(factory, cnt, false);
    }
}
예제 #6
0
static void on_data_available(const qeocore_reader_t *reader,
                              const qeocore_data_t *data,
                              uintptr_t userdata)
{
    switch (qeocore_data_get_status(data)) {
        case QEOCORE_DATA: {
            struct timespec ts = { 0, 100*1000*1000 /* 100ms*/ };

            nanosleep(&ts, NULL);
            break;
        }
        default:
            /*nop*/
            break;
    }
}
static void on_data_available(const qeocore_reader_t *reader,
                              const qeocore_data_t *data,
                              uintptr_t userdata)
{
    log_verbose(" =================== %d on_data_available( is a type2 reader) \n", getpid());
    switch (qeocore_data_get_status(data)) {
        case QEOCORE_DATA: {
            log_verbose(" =================== case QEOCORE_DATA \n");
            type_qdm_version2_t *t = (type_qdm_version2_t *)qeocore_data_get_data(data);
            /* verify struct */
            log_verbose(" =================== received t->string = %s \n", t->string );
            log_verbose(" =================== received t->i8 = %u \n", t->i8 );
            log_verbose(" =================== received t->i16 = %u \n", t->i16 );
            log_verbose(" =================== received t->i32 = %u \n", t->i32 );
            log_verbose(" =================== received t->i64 = %" PRIu64 " \n", t->i64 );
            log_verbose(" =================== received t->f32 = %f \n", t->f32 );
            log_verbose(" =================== received t->boolean = %d \n", t->boolean );
            log_verbose(" =================== received t->string_2 = %s \n", t->string_2 );
            log_verbose(" =================== received t->i8_2 = %u \n", t->i8_2 );
            log_verbose(" =================== received t->i16_2 = %u \n", t->i16_2 );
            log_verbose(" =================== received t->i32_2 = %u \n", t->i32_2 );
            log_verbose(" =================== received t->i64_2 = %" PRIu64 " \n", t->i64_2 );
            log_verbose(" =================== received t->f32_2 = %f \n", t->f32_2 );
            log_verbose(" =================== received t->boolean_2 = %d \n", t->boolean_2 );
            assert(0 == strcmp(_type_qdm_version1.string, t->string));
            assert(_type_qdm_version1.i8 == t->i8);
            assert(_type_qdm_version1.i16 == t->i16);
            assert(_type_qdm_version1.i32 == t->i32);
            assert(_type_qdm_version1.i64 == t->i64);
            assert(_type_qdm_version1.f32 == t->f32);
            assert(_type_qdm_version1.boolean == t->boolean);
            /* release main thread */
            log_verbose(" =================== sem_post(&_sync) \n");
            sem_post(&_sync);
            break;
        }
        case QEOCORE_NO_MORE_DATA:
            log_verbose(" =================== case QEOCORE_NO_MORE_DATA \n");
            /* release main thread */
            log_verbose(" =================== sem_post(&_sync_nodata) \n");
            sem_post(&_sync_nodata);
            break;
        default:
            abort();
            break;
    }
}
예제 #8
0
파일: de1804_main.c 프로젝트: bq/qeo-core
static void validate_data(const qeocore_data_t *data)
{
    qeocore_data_t *inner = NULL;
    int32_t i = 0;

    assert(expected_status == qeocore_data_get_status(data));
    /* check outer struct */
    assert(QEO_OK == qeocore_data_get_member(data, _id_id, &i));
    assert(123 == i);
    if (expected_status == QEOCORE_DATA) {
        /* check inner struct */
        assert(QEO_OK == qeocore_data_get_member(data, _inner_id, &inner));
        assert(QEO_OK == qeocore_data_get_member(inner, _num_id, &i));
        assert(456 == i);
        qeocore_data_free(inner);
    }
}
예제 #9
0
static void on_data_available(const qeocore_reader_t *reader,
                              const qeocore_data_t *data,
                              uintptr_t userdata)
{
    switch (qeocore_data_get_status(data)) {
        case QEOCORE_DATA: {
            struct timespec ts = { 0, 100*1000*1000 /* 100ms*/ };

            assert(!_closed);
            nanosleep(&ts, NULL);
            assert(!_closed);
            /* release main thread */
            sem_post(&_sync);
            break;
        }
        default:
            /*nop*/
            break;
    }
}
예제 #10
0
static void my_on_data_available(const qeocore_reader_t *reader,
                                 const qeocore_data_t *data,
                                 uintptr_t userdata)
{
    // the reader is a type_unnest reader
    switch (qeocore_data_get_status(data)) {
        case QEOCORE_DATA: {

            int outer_int32_value_rx=0, outer_int8_value_rx=0, outer_int16_value_rx=0;
            int64_t outer_int64_value_rx=0;
            char* outer_string_value_rx="";
            log_pid("===================================== reader received data");
            assert(QEO_OK == qeocore_data_get_member(data, _outer_int32_id, &outer_int32_value_rx));
            assert(QEO_OK == qeocore_data_get_member(data, _outer_int8_id, &outer_int8_value_rx));
            assert(QEO_OK == qeocore_data_get_member(data, _outer_string_id, &outer_string_value_rx));
            assert(QEO_OK == qeocore_data_get_member(data, _outer_int16_id, &outer_int16_value_rx));
            assert(QEO_OK == qeocore_data_get_member(data, _outer_int64_id, &outer_int64_value_rx));
            log_verbose(" =================== outer_int32_value_rx = %u \n", outer_int32_value_rx );
            log_verbose(" =================== outer_int8_value_rx = %u \n", outer_int8_value_rx );
            log_verbose(" =================== outer_string_value_rx = \"%s\" \n", outer_string_value_rx );
            log_verbose(" =================== outer_int16_value_rx = %u \n", outer_int16_value_rx );
            log_verbose(" =================== outer_int64_value_rx = %"PRIu64" \n", outer_int64_value_rx );
            assert(outer_int32_value_rx==_outer_int32_value);
            assert(outer_int8_value_rx==_outer_int8_value);
            assert(0 == strcmp(_outer_string_value, outer_string_value_rx));
            assert(outer_int16_value_rx==_outer_int16_value);
            assert(outer_int64_value_rx==_outer_int64_value);
            free(outer_string_value_rx);
            sem_post(&_sync); /* release main thread */
            break;
        }
        case QEOCORE_NO_MORE_DATA:
        case QEOCORE_REMOVE:
            /* ignore */
            break;
        default:
            abort();
            break;
    }
}
예제 #11
0
static void on_data_available(const qeocore_reader_t *reader,
                              const qeocore_data_t *data,
                              uintptr_t userdata)
{
    switch (qeocore_data_get_status(data)) {
        case QEOCORE_DATA: {
            org_qeo_dynamic_qdm_test_TypeWithStructs_t *t = (org_qeo_dynamic_qdm_test_TypeWithStructs_t *) qeocore_data_get_data(data);

            /* verify struct TODO */
            assert(NULL != t);
            /* release main thread */
            sem_post(&_sync);
            break;
        }
        case QEOCORE_NO_MORE_DATA:
            /* release main thread */
            sem_post(&_sync_nodata);
            break;
        default:
            abort();
            break;
    }
}
예제 #12
0
void core_callback_dispatcher(const qeocore_reader_t *reader,
                              const qeocore_data_t *data,
                              uintptr_t userdata)
{
    reader_dispatcher_cookie *dc = (reader_dispatcher_cookie *)userdata;

    switch (qeocore_data_get_status(data)) {
        case QEOCORE_NOTIFY:
            call_on_update(reader, dc);
            break;
        case QEOCORE_DATA:
            call_on_data(reader, data, dc);
            break;
        case QEOCORE_NO_MORE_DATA:
            call_on_no_more_data(reader, dc);
            break;
        case QEOCORE_REMOVE:
            call_on_remove(reader, data, dc);
            break;
        case QEOCORE_ERROR:
            qeo_log_e("no callback called due to prior error");
            break;
    }
}