From 2e693f7d80d2ecda87e02d4feec830d181ed9d94 Mon Sep 17 00:00:00 2001 From: hadaq Date: Wed, 25 Apr 2012 00:39:28 +0000 Subject: [PATCH] added setbit and clearbit to libtrbnet_perl --- libtrbnet_perl/TrbNet.xs | 25 ++++++++++++++++++++++--- libtrbnet_perl/lib/HADES/TrbNet.pm | 16 ++++++++++++++++ 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/libtrbnet_perl/TrbNet.xs b/libtrbnet_perl/TrbNet.xs index d3eac6d..53e8bb6 100644 --- a/libtrbnet_perl/TrbNet.xs +++ b/libtrbnet_perl/TrbNet.xs @@ -42,7 +42,7 @@ trb_init_ports() int status; PPCODE: status = init_ports(); - if (status < 0) { + if (status < 0) { XSRETURN_UNDEF; } else { XPUSHs(sv_2mortal(newSVuv(1))); @@ -131,9 +131,10 @@ trb_register_write(trb_address, reg_address, value) PPCODE: status = trb_register_write(trb_address,reg_address, value); if (status < 0) { - XSRETURN_UNDEF; + XSRETURN_UNDEF; + } else { + XPUSHs(sv_2mortal(newSVuv(1))); } - XPUSHs(sv_2mortal(newSVuv(buffer[1]))); void trb_read_uid_c(trb_address) @@ -167,3 +168,21 @@ trb_nettrace_c(trb_address) for (i = 0 ; i < status; i++) { XPUSHs(sv_2mortal(newSVuv(buffer[i]))); } + +void +trb_register_modify(trb_address, reg_address, mode, bitMask, bitValue) + U16 trb_address + U16 reg_address + int mode + U32 bitMask + U32 bitValue + INIT: + int status; + + PPCODE: + status = trb_register_modify(trb_address, reg_address, mode, bitMask, bitValue); + if (status < 0) { + XSRETURN_UNDEF; + } else { + XPUSHs(sv_2mortal(newSVuv(1))); + } \ No newline at end of file diff --git a/libtrbnet_perl/lib/HADES/TrbNet.pm b/libtrbnet_perl/lib/HADES/TrbNet.pm index ae85ab7..bffa53e 100644 --- a/libtrbnet_perl/lib/HADES/TrbNet.pm +++ b/libtrbnet_perl/lib/HADES/TrbNet.pm @@ -34,6 +34,8 @@ our %EXPORT_TAGS = ( 'all' => [ qw( trb_read_uid_c trb_nettrace trb_nettrace_c + trb_setbit + trb_clearbit ) ] ); our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } ); @@ -156,6 +158,20 @@ sub trb_nettrace { return \@array; } +sub trb_setbit { + my ($trb_address, $reg_address, $bitMask) = @_; + my $ret = trb_register_modify($trb_address, $reg_address, + 1, $bitMask, 0); + return $ret; +} + +sub trb_clearbit { + my ($trb_address, $reg_address, $bitMask) = @_; + my $ret = trb_register_modify($trb_address, $reg_address, + 2, $bitMask, 0); + return $ret; +} + 1; __END__ # Below is stub documentation for your module. You'd better edit it! -- 2.43.0