Device-SaleaeLogic

 view release on metacpan or  search on metacpan

SaleaeLogic.xs  view on Meta::CPAN

                SvSetSV((SV *)obj->on_writedata, cb);
            }

void
saleaeinterface_register_on_error(obj, cb)
    saleaeinterface_t *obj
    SV* cb
        CODE:
            /* save a copy of the callback */
            if (obj && !obj->on_error) {
                obj->on_error = newSVsv(cb);
            } else if (obj) {
                SvSetSV((SV *)obj->on_error, cb);
            }

saleaeinterface_t *
saleaeinterface_new(parent)
    SV *parent
    CODE:
        RETVAL = (saleaeinterface_t *)malloc(sizeof(saleaeinterface_t));
        if (RETVAL) {
            memset(RETVAL, 0, sizeof(saleaeinterface_t));
            RETVAL->begun = 0;
            RETVAL->perl = Perl_get_context();
            RETVAL->interface_count = 0;
            RETVAL->interface_map = saleaeinterface_map_create();
            RETVAL->id_map = saleaeinterface_id_map_create();
            /* make a reference to the parent calling object */
            RETVAL->parent = (void *)SvREFCNT_inc(parent);
        } else {
            Perl_croak(aTHX_ "No memory to allocate saleaeinterface_t object\n");
        }
    OUTPUT:
        RETVAL

void
saleaeinterface_DESTROY(obj)
    saleaeinterface_t *obj
    CODE:
        IAMHERE_ENTRY;
        if (obj) {
            SV* parent = obj->parent;
            SvREFCNT_dec(parent);
            saleaeinterface_map_delete(obj->interface_map);
            saleaeinterface_id_map_delete(obj->id_map);
            free(obj);
            obj = NULL;
        }
        IAMHERE_EXIT;

unsigned int
saleaeinterface_is_usb2(obj, id)
    saleaeinterface_t *obj
    unsigned int id
    CODE:
        RETVAL = saleaeinterface_isusb2(obj, id);
    OUTPUT:
        RETVAL

unsigned int
saleaeinterface_is_streaming(obj, id)
    saleaeinterface_t *obj
    unsigned int id
    CODE:
        RETVAL = saleaeinterface_isstreaming(obj, id);
    OUTPUT:
        RETVAL

unsigned int
saleaeinterface_get_channel_count(obj, id)
    saleaeinterface_t *obj
    unsigned int id
    CODE:
        RETVAL = saleaeinterface_getchannelcount(obj, id);
    OUTPUT:
        RETVAL

unsigned int
saleaeinterface_get_sample_rate(obj, id)
    saleaeinterface_t *obj
    unsigned int id
    CODE:
        RETVAL = saleaeinterface_getsamplerate(obj, id);
    OUTPUT:
        RETVAL

void saleaeinterface_set_sample_rate(obj, id, hz)
    saleaeinterface_t *obj
    unsigned int id
    unsigned int hz
    CODE:
        if (hz > 0) {
            saleaeinterface_setsamplerate(obj, id, hz);
        }

SV *
saleaeinterface_get_supported_sample_rates(obj, id)
    saleaeinterface_t *obj
    unsigned int id
    PREINIT:
        AV *results;
        unsigned int *buf = NULL;
        unsigned int blen = 32;
        int outlen = 0;
        int i = 0;
    CODE:
        buf = malloc(blen * sizeof(unsigned int));
        if (!buf) {
            Perl_croak(aTHX_ "No memory to allocate 32 array of integers\n");
            XSRETURN_UNDEF;
        } else {
            memset(buf, 0, blen * sizeof(unsigned int));
        }
        results = newAV();
        outlen = saleaeinterface_getsupportedsamplerates(obj, id, buf, blen);
        if (outlen > 0) {
            for (i = 0; i < outlen && i < blen; ++i) {
                if (saleaeinterface_internal_verbosity)
                    fprintf(stderr, "[%s:%d] sample[%d]: %u\n", __func__, __LINE__, i, buf[i]);
                av_push(results, newSVuv(buf[i]));
            }
        }
        RETVAL = newRV_noinc((SV *)results);
        if (buf) {
            free(buf);



( run in 1.199 second using v1.01-cache-2.11-cpan-39bf76dae61 )