Rev 1043 | Details | Compare with Previous | Last modification | View Log | SVN | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1039 | runge | 1 | #!/usr/bin/perl |
| 2 | |||
| 3 | # Written by Mattias Runge 20089 |
||
| 4 | |||
| 5 | use IO::Socket; |
||
| 1398 | arune | 6 | use Time::HiRes qw(usleep nanosleep); |
| 1039 | runge | 7 | |
| 8 | $| = 1; |
||
| 9 | |||
| 10 | $numArgs = $#ARGV + 1; |
||
| 11 | |||
| 12 | my $hostname = "localhost"; |
||
| 13 | my $port = 1202; |
||
| 14 | my $filename = ""; |
||
| 15 | my $hwid = ""; |
||
| 16 | my $bios = "false"; |
||
| 1040 | runge | 17 | my $reset = "false"; |
| 1039 | runge | 18 | |
| 19 | foreach $argnum (0 .. $#ARGV) |
||
| 20 | { |
||
| 21 | if ($ARGV[$argnum] eq "-h") |
||
| 22 | { |
||
| 23 | $hostname = $ARGV[$argnum+1]; |
||
| 1040 | runge | 24 | next; |
| 25 | |||
| 1039 | runge | 26 | } |
| 27 | elsif ($ARGV[$argnum] eq "-p") |
||
| 28 | { |
||
| 29 | $port = $ARGV[$argnum+1]; |
||
| 1040 | runge | 30 | next; |
| 31 | |||
| 1039 | runge | 32 | } |
| 33 | elsif ($ARGV[$argnum] eq "-i") |
||
| 34 | { |
||
| 35 | $hwid = $ARGV[$argnum+1]; |
||
| 1040 | runge | 36 | next; |
| 37 | |||
| 1039 | runge | 38 | } |
| 39 | elsif ($ARGV[$argnum] eq "-f") |
||
| 40 | { |
||
| 41 | $filename = $ARGV[$argnum+1]; |
||
| 1040 | runge | 42 | next; |
| 43 | |||
| 1039 | runge | 44 | } |
| 45 | elsif ($ARGV[$argnum] eq "-b") |
||
| 46 | { |
||
| 47 | $bios = "true"; |
||
| 48 | } |
||
| 1040 | runge | 49 | elsif ($ARGV[$argnum] eq "-r") |
| 50 | { |
||
| 51 | $reset = "true"; |
||
| 52 | } |
||
| 1039 | runge | 53 | } |
| 54 | |||
| 1040 | runge | 55 | if ($hwid eq "") |
| 1039 | runge | 56 | { |
| 57 | die "You must specify a hardware id!\n"; |
||
| 58 | exit 1; |
||
| 59 | } |
||
| 60 | |||
| 61 | #0x14f90d1f to 0x1f0df914 |
||
| 62 | @hwidChars = split(//, $hwid); |
||
| 63 | $hwid = @hwidChars[0]. @hwidChars[1]. @hwidChars[8]. @hwidChars[9]. @hwidChars[6]. @hwidChars[7]. @hwidChars[4]. @hwidChars[5]. @hwidChars[2]. @hwidChars[3]; |
||
| 64 | |||
| 1040 | runge | 65 | print "atomDude settings:\n"; |
| 66 | print "Hardware id: " . $hwid . "\n"; |
||
| 67 | print "Atom address: " . $hostname . ":" . $port . "\n"; |
||
| 68 | print "Hexfile: " . $filename . "\n"; |
||
| 69 | print "Parameters: " . "\n"; |
||
| 1039 | runge | 70 | |
| 71 | my $sock = new IO::Socket::INET( |
||
| 72 | PeerAddr => $hostname, |
||
| 73 | PeerPort => $port, |
||
| 74 | Proto => 'tcp' |
||
| 75 | ); |
||
| 76 | die "Could not create socket: $!\n" unless $sock; |
||
| 1040 | runge | 77 | print "Connected to Atom\n"; |
| 1039 | runge | 78 | |
| 1040 | runge | 79 | if ($filename ne "") |
| 80 | { |
||
| 81 | open(FILE, $filename) || die("Could not open file!"); |
||
| 82 | @fileData=<FILE>; |
||
| 83 | close(FILE); |
||
| 84 | print "Hexfile loaded\n"; |
||
| 1039 | runge | 85 | |
| 1398 | arune | 86 | usleep(5000); |
| 1040 | runge | 87 | print $sock "programNode('", $hwid, "','"; |
| 1039 | runge | 88 | |
| 1040 | runge | 89 | foreach $line (@fileData) |
| 90 | { |
||
| 1398 | arune | 91 | usleep(5000); |
| 1040 | runge | 92 | print $sock $line; |
| 93 | } |
||
| 1039 | runge | 94 | |
| 1398 | arune | 95 | usleep(5000); |
| 1040 | runge | 96 | print $sock "', ", $bios, ");\n"; |
| 1039 | runge | 97 | |
| 1040 | runge | 98 | my $pLoop = 1; |
| 99 | |||
| 100 | while ($pLoop eq 1) |
||
| 101 | { |
||
| 102 | $sock->recv($text, 128); |
||
| 103 | |||
| 104 | if (rindex($text, "STOP") ne -1) |
||
| 105 | { |
||
| 106 | print $text; |
||
| 107 | $pLoop = 0; |
||
| 108 | } |
||
| 109 | elsif ($text ne '') |
||
| 110 | { |
||
| 111 | print $text; |
||
| 112 | } |
||
| 113 | else |
||
| 114 | { |
||
| 1043 | arune | 115 | print "Connection closed by other side!\n"; |
| 1040 | runge | 116 | close($sock); |
| 117 | exit 1; |
||
| 118 | } |
||
| 119 | } |
||
| 120 | } |
||
| 121 | |||
| 122 | if ($reset eq "true") |
||
| 1039 | runge | 123 | { |
| 1398 | arune | 124 | usleep(5000); |
| 1040 | runge | 125 | print $sock "resetNode('", $hwid, "');\n"; |
| 126 | |||
| 127 | my $rLoop = 1; |
||
| 1039 | runge | 128 | |
| 1040 | runge | 129 | while ($rLoop eq 1) |
| 1039 | runge | 130 | { |
| 1040 | runge | 131 | $sock->recv($text, 128); |
| 1039 | runge | 132 | print $text; |
| 1040 | runge | 133 | |
| 134 | if (rindex($text, "Success") ne -1) |
||
| 135 | { |
||
| 136 | $rLoop = 0; |
||
| 137 | } |
||
| 138 | elsif (rindex($text, "Failed") ne -1) |
||
| 139 | { |
||
| 140 | close($sock); |
||
| 141 | exit 1; |
||
| 142 | } |
||
| 143 | elsif ($text eq '') |
||
| 144 | { |
||
| 1043 | arune | 145 | print "Connection closed by other side!\n"; |
| 1040 | runge | 146 | close($sock); |
| 147 | exit 1; |
||
| 148 | } |
||
| 1039 | runge | 149 | } |
| 150 | } |
||
| 151 | |||
| 1398 | arune | 152 | |
| 153 | usleep(5000); |
||
| 154 | print $sock "quit();\n"; |
||
| 155 | usleep(5000); |
||
| 1039 | runge | 156 | close($sock); |
| 1040 | runge | 157 | exit 0; |