HiPi

 view release on metacpan or  search on metacpan

Exec.xs  view on Meta::CPAN

#include "mylib/include/ppport.h"

#include "zlib.h"

MODULE=HiPi::Utils::Exec PACKAGE=HiPi::Utils::Exec

PROTOTYPES:  DISABLE

void
_compress_buffer(SV* inputsv)
  PPCODE:
    unsigned char* outputbuffer;
    SV* output = sv_newmortal();
    unsigned inputsize = SvCUR(inputsv);
    unsigned char* inputbuffer = (unsigned char *)SvPVX(inputsv);
    unsigned outputsize = inputsize + (inputsize * 0.1) + 12;
    
   /* allocate the output buffers */
    SvUPGRADE(output, SVt_PV);
    outputbuffer = (unsigned char *)SvGROW(output, outputsize + sizeof(unsigned char) );
    

Exec.xs  view on Meta::CPAN

    
  /* return SVs */
    EXTEND(SP, 2);
    PUSHs(output);
    PUSHs(sv_2mortal(newSViv(inputsize)));
    PUSHs(sv_2mortal(newSViv(compressedsize)));
  

void
_decompress_buffer(SV* inputsv, unsigned outputsize)
  PPCODE:
    unsigned char* outputbuffer;
    SV* output = sv_newmortal();
    unsigned inputsize = SvCUR(inputsv);
    unsigned char* inputbuffer = (unsigned char *)SvPVX(inputsv);
    
  /* allocate the output buffers */
    SvUPGRADE(output, SVt_PV);
    outputbuffer = (unsigned char *)SvGROW(output, outputsize + sizeof(unsigned char) );
    
  /* do the decompression */

I2C.xs  view on Meta::CPAN

  CODE:
    RETVAL = i2c_smbus_process_call(file, command, value );
    
  OUTPUT: RETVAL
  

void
i2c_smbus_read_block_data( file, command )
    int  file
    __u8 command
  PPCODE:
    int i;
    __u8 buf[32];
    int result = i2c_smbus_read_block_data(file, command, buf);
    if (result < 0) {
        EXTEND( SP, 1 );
        PUSHs(  &PL_sv_undef );
    } else {
        EXTEND( SP, (IV)result );
        for( i = 0; i < result; ++i )
        {

I2C.xs  view on Meta::CPAN

            PUSHs( var );
        }
    }
    

void
i2c_smbus_read_i2c_block_data( file, command, len )
    int  file
    __u8 command
    __u8 len
  PPCODE:
    int i;
    __u8 *buffer;
    buffer = malloc(len * sizeof(__u8));
    int result = i2c_smbus_read_i2c_block_data(file, command, len, buffer);
    if (result < 0) {
        EXTEND( SP, 1 );
        PUSHs(  &PL_sv_undef );
    } else {
        EXTEND( SP, (IV)result );
        for( i = 0; i < result; ++i )

I2C.xs  view on Meta::CPAN

    }

    OUTPUT: RETVAL

void
i2c_scan_bus( file,  mode = SCAN_MODE_AUTO,  first = 0x03, last = 0x77 )
    int file
    int mode
    int first
    int last
  PPCODE:
    int i;
    int j;
    int res;

    for (i = 0; i < 128; i += 16) {
        for(j = 0; j < 16; j++) {
            
            res = -1;
            
            /* Skip unwanted addresses */

RP1.xs  view on Meta::CPAN

    } else {        
        RETVAL = map_fsel_rp1_to_hipi(do_gpio_get_mode( gpio ));
    }
    
  OUTPUT: RETVAL

void
xs_gpio_get_mode_name( gpio, mode )
    unsigned gpio
    int mode
  PPCODE:
    XPUSHs(sv_2mortal(newSVpv(rp1_gpio_get_fsel_name( gpio, map_fsel_hipi_to_rp1( mode ) ), 0)));

void
xs_gpio_get_current_mode_name( gpio )
    unsigned gpio
  PPCODE:
    XPUSHs(sv_2mortal(newSVpv(rp1_gpio_get_fsel_name( gpio, do_gpio_get_mode( gpio ) ), 0)));

int
xs_gpio_set_pud( gpio, pud )
    unsigned gpio
    unsigned pud
  CODE:
  
    if (gpio > PI_MAX_GPIO) {
        send_module_error("bad gpio number specified");

SPI.xs  view on Meta::CPAN


MODULE = HiPi::Device::SPI  PACKAGE = HiPi::Device::SPI

void
_transfer_data(file, inbuf, delay = 0, speed = 1000000, bitspw = 8 )
    int file
    SV* inbuf
    __u16 delay
    __u32 speed
    __u8 bitspw
  PPCODE:
    struct spi_ioc_transfer msg;
    memset (&msg, 0, sizeof(msg));
    SV* outbuf = newSVsv(inbuf);
    
    msg.tx_buf        = (intptr_t)SvPVX(inbuf);
    msg.rx_buf        = (intptr_t)SvPVX(outbuf);
    msg.len           = (__u32)SvCUR(inbuf);
    msg.speed_hz      = speed;
    msg.delay_usecs   = delay;
    msg.bits_per_word = bitspw;



( run in 1.114 second using v1.01-cache-2.11-cpan-5511b514fd6 )