mirror of
https://github.com/ISpillMyDrink/OpenSuperClone.git
synced 2026-05-04 14:00:54 +00:00
175 lines
3.8 KiB
Plaintext
175 lines
3.8 KiB
Plaintext
seti $printhelp = $printhelp
|
|
seti $help = $help
|
|
if $help = 1
|
|
echo 'This will read a log from the device.'
|
|
echo 'This requires the number variable "log" to be set in DECIMAL.'
|
|
echo 'To enter a hex number preceed it with "0x".'
|
|
echo 'log is the log number to be read.'
|
|
echo 'Example: hddsupertool -t /dev/sda -f ata_read_log_ext'
|
|
if $printhelp = 1
|
|
exit 0
|
|
endif
|
|
echo 'Hit ENTER to continue...'
|
|
userinput $choicestring
|
|
previousscript
|
|
endif
|
|
|
|
include good_subroutines
|
|
|
|
# set a blank string variable to compare with user input
|
|
# make sure not to set this anyplace else
|
|
sets $null = ""
|
|
|
|
# set this to itself for use with the menu system
|
|
# make sure not to set this anyplace else
|
|
# if it was not previously set it will = 0
|
|
seti $using_menu = $using_menu
|
|
|
|
seti $ask = 0
|
|
while 1 = 1
|
|
variablecheck $log
|
|
if $error_level < 16
|
|
seti $ask = 1
|
|
elseif $using_menu = 1
|
|
seti $ask = 1
|
|
endif
|
|
if $ask = 1
|
|
echo "Enter log number in decimal (0x for hex):"
|
|
userinput $choicestring
|
|
if $choicestring != $null
|
|
seti $log = $choicestring 0
|
|
if $log < 256
|
|
break
|
|
else
|
|
echo "Value cannot be above 255 (0xff)"
|
|
endif
|
|
else
|
|
echo "Choice cannot be blank!"
|
|
endif
|
|
else
|
|
break
|
|
endif
|
|
done
|
|
|
|
# set the buffer size
|
|
buffersize 512
|
|
|
|
# set the LBAs to 0
|
|
seti $LBAlow = 0
|
|
seti $LBAmid = 0
|
|
seti $LBAhigh = 0
|
|
|
|
# set some things to read log 0
|
|
setreadpio
|
|
# set features to 0
|
|
seti $features = 0
|
|
# set count to 1
|
|
seti $count = 1
|
|
# set device to 0
|
|
seti $device = 0
|
|
# set lba to log page 0
|
|
seti $LBAlow = 0x0
|
|
# set the command for read log extended
|
|
seti $command = 0x2f
|
|
|
|
# make sure buffer is clear
|
|
clearbuffer
|
|
|
|
# perform the command
|
|
ata48cmd $features $count $LBAhigh $LBAmid $LBAlow $device $command
|
|
|
|
# check if command failed
|
|
seti $command_failed = 0
|
|
gosub check_command_status
|
|
if $command_failed = 1
|
|
echo "Command failed!"
|
|
gosub show_sense_data
|
|
gosub show_ata_return_status
|
|
previousscript
|
|
endif
|
|
|
|
#echo "Raw buffer:"
|
|
#printbuffer 0 512
|
|
|
|
if $log > 0
|
|
seti $temp = $log * 2
|
|
seti $logsize = buffer $temp w
|
|
else
|
|
seti $logsize = 1
|
|
endif
|
|
if $logsize > 0
|
|
seti $buffersize = $logsize * 512
|
|
buffersize $buffersize
|
|
# set lba to log page
|
|
seti $LBAlow = $log
|
|
# set count to log size
|
|
seti $count = $logsize
|
|
# perform the command
|
|
ata48cmd $features $count $LBAhigh $LBAmid $LBAlow $device $command
|
|
|
|
# check if command failed
|
|
seti $command_failed = 0
|
|
gosub check_command_status
|
|
if $command_failed = 1
|
|
echo "Command failed!"
|
|
gosub show_sense_data
|
|
gosub show_ata_return_status
|
|
previousscript
|
|
endif
|
|
echo "Raw buffer:"
|
|
printbuffer 0 $buffersize
|
|
endif
|
|
|
|
if $log = 0
|
|
seti $log = 1
|
|
while $log < 256
|
|
seti $temp = $log * 2
|
|
seti $logsize = buffer $temp w
|
|
if $logsize > 0
|
|
hex
|
|
echo "log 0x" $log " = 0x" $logsize
|
|
decimal
|
|
endif
|
|
seti $log = $log + 1
|
|
done
|
|
endif
|
|
|
|
if $log = 3
|
|
seti $logpage = 0
|
|
seti $logerrcount = 1
|
|
while $logpage < $logsize
|
|
seti $logposition = $logpage * 512
|
|
if $logpage = 0
|
|
seti $logindex = buffer 2 w
|
|
echo "log index = " $logindex
|
|
endif
|
|
seti $errstructcount = 0
|
|
while $errstructcount < 4
|
|
seti $errstructoffset = $logposition + 4
|
|
seti $tempoffset = $errstructcount * 124
|
|
seti $errstructoffset = $errstructoffset + $tempoffset
|
|
echo "error structure " $logerrcount
|
|
seti $datastructcount = 0
|
|
while $datastructcount < 6
|
|
seti $tempoffset = $datastructcount * 18
|
|
seti $datastructoffset = $errstructoffset + $tempoffset
|
|
printbuffer $datastructoffset 16
|
|
seti $datastructcount = $datastructcount + 1
|
|
done
|
|
seti $errstructcount = $errstructcount + 1
|
|
seti $logerrcount = $logerrcount + 1
|
|
done
|
|
seti $logpage = $logpage + 1
|
|
done
|
|
endif
|
|
|
|
|
|
|
|
|
|
previousscript
|
|
end
|
|
|
|
|
|
|
|
|