mirror of
https://github.com/ISpillMyDrink/OpenSuperClone.git
synced 2026-05-03 13:30:49 +00:00
172 lines
4.5 KiB
Plaintext
172 lines
4.5 KiB
Plaintext
seti $help = $help
|
|
seti $printhelp = $printhelp
|
|
if $help = 1
|
|
echo 'This command is not supported by all drives.'
|
|
echo 'View the results of the identify device command to check support.'
|
|
echo 'Get the value of the read error control timer.'
|
|
echo 'Optionally set the value of the read error control timer.'
|
|
echo 'This command uses the number variable "timer".'
|
|
echo 'Timer can be a value from 0-65535.'
|
|
echo 'The timer controls how much time before giving up on a read error.'
|
|
echo 'Normally this is in 100ms increments (value of 5 would be 500ms),'
|
|
echo ' but this is drive specific (try different values to see what happens).'
|
|
echo 'The default value is 0 (unlimited, all recovery proceedures are tried).'
|
|
echo 'This value is not permenant, it resets with a power cycle.'
|
|
echo 'If timer is not set it will only show the current value.'
|
|
echo 'Example to show current error timer:'
|
|
echo ' opensuperclone --tool -t /dev/sda -f ata_sct_error_control_timer'
|
|
echo 'Example to set the error control timer to 1:'
|
|
echo ' opensuperclone --tool -t /dev/sda -f ata_sct_error_control_timer timer=1'
|
|
if $printhelp = 1
|
|
exit 0
|
|
endif
|
|
echo 'Hit ENTER to continue...'
|
|
userinput $choicestring
|
|
previousscript
|
|
endif
|
|
|
|
include good_subroutines.osc
|
|
|
|
# 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
|
|
|
|
|
|
# find out if using menus or if variables were set on the command line, and ask for input if they were not set
|
|
|
|
seti $ask = 0
|
|
while 1 = 1
|
|
variablecheck $timer
|
|
if $using_menu = 1
|
|
seti $ask = 1
|
|
elseif $error_level < 16
|
|
seti $timer = -1
|
|
endif
|
|
if $ask = 1
|
|
echo "Enter new timer value, or leave blank for no change:"
|
|
userinput $choicestring
|
|
if $choicestring != $null
|
|
seti $timer = $choicestring 0
|
|
break
|
|
else
|
|
seti $timer = -1
|
|
break
|
|
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 for the ata write command
|
|
setwritepio
|
|
# 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 e0
|
|
seti $LBAlow = 0xe0
|
|
# set the command for write log extended
|
|
seti $command = 0x3f
|
|
|
|
# make sure buffer is clear
|
|
clearbuffer
|
|
|
|
# set the buffer data to return the error recovery control timer
|
|
setbuffer 0
|
|
03 00 02 00 01
|
|
endbuffer
|
|
|
|
# perform the command
|
|
ata48cmd $features $count $LBAhigh $LBAmid $LBAlow $device $command
|
|
|
|
# check if command failed
|
|
gosub status_check
|
|
|
|
seti $temp = $ata_return_lba < 8
|
|
seti $current_timer = $temp & 0xff00
|
|
seti $temp = $ata_return_count & 0xff
|
|
seti $current_timer = $current_timer + $temp
|
|
echo "Current error control timer = " $current_timer
|
|
|
|
if $timer > -1
|
|
# set the time limit bytes
|
|
seti $timelow = $timer & 0xff
|
|
seti $timehigh = $timer > 8
|
|
seti $timehigh = $timehigh & 0xff
|
|
|
|
clearbuffer
|
|
# data to set the error recovery control timer
|
|
# set action code to error recovery control
|
|
seti $actionlow = 0x03
|
|
seti $actionhigh = 0x00
|
|
# set function code to set new time
|
|
seti $functionlow = 0x01
|
|
seti $functionhigh = 0x00
|
|
# set selection code to the read timer
|
|
seti $selectionlow = 0x01
|
|
seti $selectionhigh = 0x00
|
|
|
|
# set the buffer data
|
|
setbuffer 0
|
|
$actionlow $actionhigh $functionlow $functionhigh $selectionlow $selectionhigh $timelow $timehigh
|
|
endbuffer
|
|
|
|
# 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
|
|
|
|
clearbuffer
|
|
# set the buffer data to return the error recovery control timer
|
|
setbuffer 0
|
|
03 00 02 00 01
|
|
endbuffer
|
|
# 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
|
|
|
|
seti $temp = $ata_return_lba < 8
|
|
seti $new_timer = $temp & 0xff00
|
|
seti $temp = $ata_return_count & 0xff
|
|
seti $new_timer = $new_timer + $temp
|
|
echo "New error control timer = " $new_timer
|
|
|
|
endif
|
|
|
|
|
|
previousscript
|
|
end
|