XPUSHs(sv_2mortal(newSVuv(buffer[i])));
}
+void
+trb_registertime_read_c(trb_address, reg_address)
+ U16 trb_address;
+ U16 reg_address;
+ INIT:
+ int status;
+ int i;
+
+ PPCODE:
+ status = trb_registertime_read(trb_address, reg_address, (uint32_t*)buffer, BUFFER_SIZE);
+ if (status <= 0) {
+ XSRETURN_UNDEF;
+ }
+ for (i = 0 ; i < status; i++) {
+ XPUSHs(sv_2mortal(newSVuv(buffer[i])));
+ }
+
void
trb_register_read_mem_c(trb_address, reg_address, option, size)
U16 trb_address;
XPUSHs(sv_2mortal(newSVuv(buffer[i])));
}
+void
+trb_registertime_read_mem_c(trb_address, reg_address, option, size)
+ U16 trb_address;
+ U16 reg_address;
+ U16 option;
+ U16 size;
+ INIT:
+ int status;
+ int i;
+
+ PPCODE:
+ status = trb_registertime_read_mem(trb_address, reg_address, option, size, (uint32_t*)buffer, BUFFER_SIZE);
+ if (status <= 0) {
+ XSRETURN_UNDEF;
+ }
+ for (i = 0 ; i < status; i++) {
+ XPUSHs(sv_2mortal(newSVuv(buffer[i])));
+ }
+
void
trb_register_write(trb_address, reg_address, value)
U16 trb_address
# If you do not need this, moving things directly into @EXPORT or @EXPORT_OK
# will save memory.
our %EXPORT_TAGS = ( 'all' => [ qw(
- trb_errno
- trb_error
- trb_strerror
- trb_init_ports
- trb_register_read
- trb_register_read_c
- trb_register_read_mem
- trb_register_read_mem_c
- trb_register_write
- trb_read_uid
- trb_read_uid_c
- trb_nettrace
- trb_nettrace_c
-) ] );
+ trb_errno
+ trb_error
+ trb_strerror
+ trb_init_ports
+ trb_register_read
+ trb_registertime_read
+ trb_register_read_c
+ trb_registertime_read_c
+ trb_register_read_mem
+ trb_registertime_read_mem
+ trb_register_read_mem_c
+ trb_registertime_read_mem_c
+ trb_register_write
+ trb_read_uid
+ trb_read_uid_c
+ trb_nettrace
+ trb_nettrace_c
+ ) ] );
our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
# Preloaded methods go her
sub trb_register_read {
- my ($trb_address, $register_address) = @_;
- my @res = trb_register_read_c($trb_address, $register_address);
- return if (! defined $res[0]);
+ my ($trb_address, $register_address) = @_;
+ my @res = trb_register_read_c($trb_address, $register_address);
+ return if (! defined $res[0]);
+
+ my %hash;
+ %hash = @res;
+ return \%hash;
+}
+
+sub trb_registertime_read {
+ my ($trb_address, $register_address) = @_;
+ my @res = trb_registertime_read_c($trb_address, $register_address);
+ return if (! defined $res[0]);
+
+ my %hash;
+ my $len_array = scalar @res;
+ for (my $i = 0; ($i + 3) <= $len_array; $i += 3) {
+ my $trb_address = $res[$i] & 0xffff;
+ $hash{$trb_address}->{'value'} = $res[$i + 1];
+ $hash{$trb_address}->{'time'} = $res[$i + 2];
+ }
- my %hash;
- %hash = @res;
- return \%hash;
+ return \%hash;
}
sub trb_register_read_mem {
- my ($trb_address, $register_address, $option, $size) = @_;
- my @res = trb_register_read_mem_c($trb_address, $register_address,
- $option, $size);
- return if (! defined $res[0]);
-
- my %hash;
- my $k = 0;
- my $len_array = scalar @res;
- while ($k < $len_array) {
- my $len = ($res[$k] >> 16) & 0xffff;
- my $trb_address = $res[$k] & 0xffff;
- my @array;
- $k++;
-
- for (my $i = 0; $i < $len ; $i++, $k++) {
- push (@array, $res[$k]);
- }
- $hash{$trb_address} = \@array;
+ my ($trb_address, $register_address, $option, $size) = @_;
+ my @res = trb_register_read_mem_c($trb_address, $register_address,
+ $option, $size);
+ return if (! defined $res[0]);
+
+ my %hash;
+ my $k = 0;
+ my $len_array = scalar @res;
+ while ($k < $len_array) {
+ my $len = ($res[$k] >> 16) & 0xffff;
+ my $trb_address = $res[$k] & 0xffff;
+ my @array;
+ $k++;
+
+ for (my $i = 0; $i < $len ; $i++, $k++) {
+ push (@array, $res[$k]);
}
+ $hash{$trb_address} = \@array;
+ }
- return \%hash;
+ return \%hash;
}
-sub trb_read_uid {
- my ($trb_address) = @_;
- my @res = trb_read_uid_c($trb_address);
- return if (! defined $res[0]);
-
- my %hash;
- for (my $k = 0; $k < scalar @res; $k += 4) {
- my $uid = ($res[$k] << 32) | $res[$k + 1];
- my $endP = $res[$k + 2];
- my $sender = $res[$k + 3];
-
- $hash{$uid}->{'trb_address'} = $sender;
- $hash{$uid}->{'trb_endpoint'} = $endP;
+sub trb_registertime_read_mem {
+ my ($trb_address, $register_address, $option, $size) = @_;
+ my @res = trb_registertime_read_mem_c($trb_address, $register_address,
+ $option, $size);
+ return if (! defined $res[0]);
+
+ my %hash;
+ my $k = 0;
+ my $len_array = scalar @res;
+ while ($k < $len_array) {
+ my $len = ($res[$k] >> 16) & 0xffff;
+ my $trb_address = $res[$k] & 0xffff;
+ my @array_val;
+ my @array_time;
+ $k++;
+
+ for (my $i = 0; ($i < $len) && (($k + 1) < $len_array); $i++, $k += 2) {
+ push (@array_val, $res[$k]);
+ push (@array_time, $res[$k + 1]);
}
+ $hash{$trb_address}->{'value'} = \@array_val;
+ $hash{$trb_address}->{'time'} = \@array_time;
+ }
- return \%hash;
+ return \%hash;
}
-sub trb_nettrace {
- my ($trb_address) = @_;
- my @res = trb_nettrace_c($trb_address);
- return if (! defined $res[0]);
+sub trb_read_uid {
+ my ($trb_address) = @_;
+ my @res = trb_read_uid_c($trb_address);
+ return if (! defined $res[0]);
- my @array;
- my $c = 0;
- for (my $i = 0; $i < scalar @res; $i += 2) {
- $array[$c]->{'address'} = $res[$i];
- $array[$c]->{'port'} = $res[$i + 1];
- $c++;
- }
- return \@array;
+ my %hash;
+ for (my $k = 0; $k < scalar @res; $k += 4) {
+ my $uid = ($res[$k] << 32) | $res[$k + 1];
+ my $endP = $res[$k + 2];
+ my $sender = $res[$k + 3];
+
+ $hash{$uid}->{'trb_address'} = $sender;
+ $hash{$uid}->{'trb_endpoint'} = $endP;
+ }
+
+ return \%hash;
+}
+
+sub trb_nettrace {
+ my ($trb_address) = @_;
+ my @res = trb_nettrace_c($trb_address);
+ return if (! defined $res[0]);
+
+ my @array;
+ my $c = 0;
+ for (my $i = 0; $i < scalar @res; $i += 2) {
+ $array[$c]->{'address'} = $res[$i];
+ $array[$c]->{'port'} = $res[$i + 1];
+ $c++;
+ }
+ return \@array;
}
1;