#!/usr/bin/perl
my @crc;
$preamble = '1010101010101010101010101010101010101010101010101010101010101011';
$da = '110111111101110100111101110000111101110000111101';
$sa = '110000111101110000111101110000111101110000111101';
$data_len = int( rand(50)) + 46;
print "$data_len ok\n";
$data_len_str = dec2bin($data_len);
#print "yes $data_len_str\n";
for ($i=0; $i < $data_len; $i++)
#for ($i=0; $i < 2; $i++)
{
$data_random = int( rand(255));
#print "$data_random \n";
$data_ran_str = dec2bin($data_random);
$pay_load = $pay_load . substr($data_ran_str,8);
#print "es $pay_load\n";
}
$crc_str_data = $da . $sa . $pay_load;
$crc_ini = '11111111111111111111111111111111' ;
@crc = split ("",$crc_ini);
print "\n crc initial @crc\n";
for ($i=0; $i < $data_len + 12; $i++)
{
print "for loop $i ";
$crc_char = substr ($crc_str_data , 8*$i ,8);
chomp($crc_char);
@data = split ("", $crc_char);
open (ABC,">> crccheck.txt");
print ABC "data $crc_char\n d0 @data[0] d1 @data[1] d2 @data[2] d3 @data[3],d4 @data[4] d5 @data[5] d6 @data[6] d7 @data[7] ";
@crc1[0] = @data[6] ^ @data[0] ^ @crc[24] ^ @crc[30];
print ABC "@crc11[0] @crc11[1] crc0= @crc1[0], data6= @data[6], data0= @data[0] ,crc24= @crc[24], crc30= @crc[30] \n";
@crc1[1] = @data[7] ^ @data[6] ^ @data[1] ^ @data[0] ^ @crc[24] ^ @crc[25] ^ @crc[30] ^ @crc[31];
@crc1[2] = @data[7] ^ @data[6] ^ @data[2] ^ @data[1] ^ @data[0] ^ @crc[24] ^ @crc[25] ^ @crc[26] ^ @crc[30] ^ @crc[31];
@crc1[3] = @data[7] ^ @data[3] ^ @data[2] ^ @data[1] ^ @crc[25] ^ @crc[26] ^ @crc[27] ^ @crc[31];
@crc1[4] = @data[6] ^ @data[4] ^ @data[3] ^ @data[2] ^ @data[0] ^ @crc[24] ^ @crc[26] ^ @crc[27] ^ @crc[28] ^ @crc[30];
@crc1[5] = @data[7] ^ @data[6] ^ @data[5] ^ @data[4] ^ @data[3] ^ @data[1] ^ @data[0] ^ @crc[24] ^ @crc[25] ^ @crc[27] ^ @crc[28] ^ @crc[29] ^ @crc[30] ^ @crc[31];
@crc1[6] = @data[7] ^ @data[6] ^ @data[5] ^ @data[4] ^ @data[2] ^ @data[1] ^ @crc[25] ^ @crc[26] ^ @crc[28] ^ @crc[29] ^ @crc[30] ^ @crc[31];
@crc1[7] = @data[7] ^ @data[5] ^ @data[3] ^ @data[2] ^ @data[0] ^ @crc[24] ^ @crc[26] ^ @crc[27] ^ @crc[29] ^ @crc[31];
@crc1[8] = @data[4] ^ @data[3] ^ @data[1] ^ @data[0] ^ @crc[0] ^ @crc[24] ^ @crc[25] ^ @crc[27] ^ @crc[28];
@crc1[9] = @data[5] ^ @data[4] ^ @data[2] ^ @data[1] ^ @crc[1] ^ @crc[25] ^ @crc[26] ^ @crc[28] ^ @crc[29];
@crc1[10] = @data[5] ^ @data[3] ^ @data[2] ^ @data[0] ^ @crc[2] ^ @crc[24] ^ @crc[26] ^ @crc[27] ^ @crc[29];
@crc1[11] = @data[4] ^ @data[3] ^ @data[1] ^ @data[0] ^ @crc[3] ^ @crc[24] ^ @crc[25] ^ @crc[27] ^ @crc[28];
@crc1[12] = @data[6] ^ @data[5] ^ @data[4] ^ @data[2] ^ @data[1] ^ @data[0] ^ @crc[4] ^ @crc[24] ^ @crc[25] ^ @crc[26] ^ @crc[28] ^ @crc[29] ^ @crc[30];
@crc1[13] = @data[7] ^ @data[6] ^ @data[5] ^ @data[3] ^ @data[2] ^ @data[1] ^ @crc[5] ^ @crc[25] ^ @crc[26] ^ @crc[27] ^ @crc[29] ^ @crc[30] ^ @crc[31];
@crc1[14] = @data[7] ^ @data[6] ^ @data[4] ^ @data[3] ^ @data[2] ^ @crc[6] ^ @crc[26] ^ @crc[27] ^ @crc[28] ^ @crc[30] ^ @crc[31];
@crc1[15]= @data[7] ^ @data[5] ^ @data[4] ^ @data[3] ^ @crc[7] ^ @crc[27] ^ @crc[28] ^ @crc[29] ^ @crc[31];
@crc1[16] = @data[5] ^ @data[4] ^ @data[0] ^ @crc[8] ^ @crc[24] ^ @crc[28] ^ @crc[29];
@crc1[17] = @data[6] ^ @data[5] ^ @data[1] ^ @crc[9] ^ @crc[25] ^ @crc[29] ^ @crc[30];
@crc1[18] = @data[7] ^ @data[6] ^ @data[2] ^ @crc[10] ^ @crc[26] ^ @crc[30] ^ @crc[31];
@crc1[19]= @data[7] ^ @data[3] ^ @crc[11] ^ @crc[27] ^ @crc[31];
@crc1[20] = @data[4] ^ @crc[12] ^ @crc[28];
@crc1[21] = @data[5] ^ @crc[13] ^ @crc[29];
@crc1[22] = @data[0] ^ @crc[14] ^ @crc[24];
@crc1[23] = @data[6] ^ @data[1] ^ @data[0] ^ @crc[15] ^ @crc[24] ^ @crc[25] ^ @crc[30];
@crc1[24] = @data[7] ^ @data[2] ^ @data[1] ^ @crc[16] ^ @crc[25] ^ @crc[26] ^ @crc[31];
@crc1[25]= @data[3] ^ @data[2] ^ @crc[17] ^ @crc[26] ^ @crc[27];
@crc1[26]= @data[6] ^ @data[4] ^ @data[3] ^ @data[0] ^ @crc[18] ^ @crc[24] ^ @crc[27] ^ @crc[28] ^ @crc[30];
@crc1[27] = @data[7] ^ @data[5] ^ @data[4] ^ @data[1] ^ @crc[19] ^ @crc[25] ^ @crc[28] ^ @crc[29] ^ @crc[31];
@crc1[28] = @data[6] ^ @data[5] ^ @data[2] ^ @crc[20] ^ @crc[26] ^ @crc[29] ^ @crc[30];
@crc1[29] = @data[7] ^ @data[6] ^ @data[3] ^ @crc[21] ^ @crc[27] ^ @crc[30] ^ @crc[31];
@crc1[30] = @data[7] ^ @data[4] ^ @crc[22] ^ @crc[28] ^ @crc[31];
@crc1[31]= @data[5] ^ @crc[23] ^ @crc[29];
@crc = @crc1 ;
#print" data @data \n"
}
$crc_32 = "@crc";
$crc_32 =~ s/(.)\s/$1/seg;
#$init_value1 = 0 unless (defined $init_value);
#$polynomial1 = 0xedb88320 unless (defined $polynomial);
#$crc_32 = mycrc32 ($crc_str_data,$init_value1,$polynomial1);
print "\n$crc_32";
$frame_data = $preamble . $crc_str_data . $crc_32 ;
sub dec2bin
{
my $str1 = unpack("B16", pack("n", shift));
# my $str = unpack("B32", pack("N", shift));
#$str1 = substr($str, 16);
return $str1;
}
sub mycrc32 {
my ($input, $init_value, $polynomial) = @_;
print "$input";
$init_value = 0 unless (defined $init_value);
$polynomial = 0xedb88320 unless (defined $polynomial);
my @lookup_table;
for (my $i=0; $i<256 br="" i=""> my $x = $i;
for (my $j=0; $j<8 br="" j=""> if ($x & 1) {
$x = ($x >> 1) ^ $polynomial;
} else {
$x = $x >> 1;
}
}
push @lookup_table, $x;
}
my $crc = $init_value ^ 0xffffffff;
foreach my $x (unpack ('C*', $input)) {
$crc = (($crc >> 8) & 0xffffff) ^ $lookup_table[ ($crc ^ $x) & 0xff ];
}
$crc = $crc ^ 0xffffffff;
return $crc;
}
8>256>