Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Hardware » Магнитные носители информации » Ремонт накопителей Seagate. Часть 11

Модерирует : Akam1, Dr_StandBy, vertex4

vertex4 (05-02-2023 13:12): Ремонт накопителей Seagate. Часть 12  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

SRUTSSSSSSSS80



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

/*--------------------------------------zzzverrr©2013--------------------------------------*/
CALL ZocTimeout 2
ZocSuppressOutput 1
CALL ZocCommand "CLS"
CALL ZocCommand "CLEARSCROLLBACK"
HD="Head 0,"
CALL _INI
CALL _BAUDRATE
CALL _INFO
CALL _OPERATIONS
 
_DIR:
    DR=ZocAsk("DIR ?", "C:\_DUMPS")
    IF DR="##CANCEL##" THEN CALL _BYE
    DIR=""DR"\"MODEL"_"SN"_"FW""
    IF STREAM(DIR, "C", "QUERY EXISTS")="" THEN CALL ZocShell MD DIR,1
    RETURN
_INI:
    file_1= ZocGetFilename("Select config file", "%USERDESKTOP%\Seagate_F3_v3.3.ini")
    IF file_1="##CANCEL##" THEN CALL _BYE
    CALL STREAM file_1,"C","OPEN READ"
    INI=Charin(file_1,,4096)
    CALL STREAM file_1,"C","CLOSE"
    RETURN
 
_BAUDRATE:
    answer= ZocRequestList("Select Baudrate", "38400", "57600", "115200", "230400", "460800", "921600")
    IF answer=0 THEN BD=38400
    IF answer=1 THEN BD=57600
    IF answer=2 THEN BD=115200
    IF answer=3 THEN BD=230400
    IF answer=4 THEN BD=460800
    IF answer=5 THEN BD=921600
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    CALL ZocSend "B"||BD||"^M"
    CALL ZocDelay 1
    CALL ZocBaud ""||BD||"-8N1"
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    RETURN
    
_HEAD:
    Answer= ZocRequestList("Select Head", "Head 0", "Head 1", "Head 2", "Head 3", "Head 4", "Head 5", "Head 6", "Head 7")
    IF Answer=0 THEN HD="Head 0,"
    IF Answer=1 THEN HD="Head 1,"
    IF Answer=2 THEN HD="Head 2,"
    IF Answer=3 THEN HD="Head 3,"
    IF Answer=4 THEN HD="Head 4,"
    IF Answer=5 THEN HD="Head 5,"
    IF Answer=6 THEN HD="Head 6,"
    IF Answer=7 THEN HD="Head 7,"
    RETURN
 
_INFO:
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    CALL ZocReceiveBuf 2048
    CALL ZocSend "^L"
    CALL ZocDelay 1
    INFO_1=ZocReceiveBuf(0)
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    ZocSend "/2^M"
    CALL ZocWait "2>"
    CALL ZocSend "r,0,1^M"
    CALL ZocWait "2>"
    CALL ZocReceiveBuf 2048
    CALL ZocSend "?"
    CALL ZocDelay 0.3
    CALL ZocSend "^M"
    CALL ZocWait "2>"
    INFO_2=ZocReceiveBuf(0)
    CALL ZocReceiveBuf 2048
    CALL ZocSend "x1^M"
    CALL ZocDelay 0.3
    CALL ZocSend "^M"
    CALL ZocWait "2>"
    INFO_3=ZocReceiveBuf(0)
    CALL ZocReceiveBuf 2048
    CALL ZocSend "x0^M"
    CALL ZocDelay 0.3
    CALL ZocSend "^M"
    CALL ZocWait "2>"
    INFO_4=ZocReceiveBuf(0)
    FID="FID_"||substr(word(INFO_1,(Wordpos("FamilyId:",INFO_1)+1)),1,2)
    MID="MID_"||substr(word(INFO_1,(Wordpos("MemberId:",INFO_1)+1)),1,2)
    SN=substr(word(INFO_1,(Wordpos("SN:",INFO_1)+1)),1,8)
    FW=word(substr(word(INFO_1,(Wordpos("Version:",INFO_1)+1)),20,8),1)
    IF Wordpos(FID,INI)==0 THEN DO
        SAY "Unknown Model!"
        CALL _BYE
        END
    ID_TRC="TRC_"||word(INI,(Wordpos(FID,INI)+1))
    ID_MOD_FILES="MOD_FILES_"||word(INI,(Wordpos(FID,INI)+1))
    ID_MOD_PZU="MOD_PZU_"||word(INI,(Wordpos(FID,INI)+1))
    ID=word(INI,(Wordpos(FID,INI)+1))
    ID_INFO=word(INI,(Wordpos(FID,INI)+2))
    MODEL=word(INI,(Wordpos(FID||"_"||MID,INI)+1))
    Param=word(INI,(Wordpos(FID,INI)+3))
    Count=substr(Param,7,1)
    Head=substr(HD,6,1)
    RD_TRC=substr(word(INI,(Wordpos(ID_TRC,INI))+1),1,2)
    RD_MOD_0=substr(word(INI,(Wordpos(ID_MOD_FILES,INI))+1),1,2)
    RD_MOD_1=substr(word(INI,(Wordpos(ID_MOD_PZU,INI))+1),1,2)
    A=9
    DO N=1 TO Count BY 1
        x=substr(Param,A,1)
        y=substr(Param,A+2,1)
        z=substr(Param,A+4,1)
        IF N==1 THEN Buffer_R=substr(word(INFO_2,(Wordpos("Default",INFO_2))-x),y,z)
        IF N==2 THEN Buffer_W=substr(word(INFO_2,(Wordpos("Default",INFO_2))+x),y,z)
        IF N==3 THEN Track=substr(word(INFO_3,(Wordpos(HD,INFO_3))+x),y,z)
        IF N==4 THEN SPT=substr(word(INFO_3,(Wordpos("00",INFO_3))+x),y,z)
        IF N==5 THEN LBAs=substr(word(INFO_4,(Wordpos("LBAs",INFO_4)+x)),y+1,z)
        A=A+6
    END
    INF_HD=substr(HD,1,6)
    SAY "ID:" ID
    SAY "FW:" FW
    SAY "Family:" ID_INFO
    SAY "Model:" MODEL", Max LBA:" LBAs", "x2d(LBAs)/2/1024/1024 "Gb"
    SAY "HDA SN:" SN
    SAY "SA Start Track ("INF_HD"):" Track", SPT" SPT", Buffer_R" Buffer_R", Buffer_W" Buffer_W
    RETURN
 
_OPERATIONS:
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    ZocSend "/C^M"
    CALL ZocWait "C>"
    CALL ZocReceiveBuf 2048
    ZocSend "QT^M"
    CALL ZocDelay 0.2
    CALL ZocWait "C>"
    INFO_4=ZocReceiveBuf(0)
    M=Wordpos("'r':",INFO_4)
    IF M=0 THEN DO
    Answer= ZocRequestList("Select operations", "Read System Tracks", "Write System Tracks", "Terminal", "Self-Test", "Defects To G-List", "Exit")
    IF Answer=0 THEN CALL _READ_TRC
    IF Answer=1 THEN CALL _WRITE_TRC
    IF Answer=2 THEN CALL _TERMINAL
    IF Answer=3 THEN CALL _SELF_TEST
    IF Answer=4 THEN CALL _DEFECTS
    IF Answer=5 THEN CALL _BYE
 
    END
    Answer= ZocRequestList("Select operations", "Read System Modules", "Read System Tracks", "Write System Modules", "Write System Tracks", "Terminal", "Self-Test", "Defects To G-List", "Exit")
    IF Answer=0 THEN CALL _READ_MOD
    IF Answer=1 THEN CALL _READ_TRC
    IF Answer=2 THEN CALL _WRITE_MOD
    IF Answer=3 THEN CALL _WRITE_TRC
    IF Answer=4 THEN CALL _TERMINAL
    IF Answer=5 THEN CALL _SELF_TEST
    IF Answer=6 THEN CALL _DEFECTS
    IF Answer=7 THEN CALL _BYE
 
_READ_MOD:
    Answer= ZocRequestList("Select operations", "Read System Files", "Read System DT PZU", "Read System DT OZU", "Terminal", "Exit", "Back")
    IF Answer=0 THEN DO
            V=3
            H=ID_MOD_FILES
            L=RD_MOD_0
            B="\Files"
            END
    IF Answer=1 THEN DO
            V=9
            H=ID_MOD_PZU
            L=RD_MOD_1
            B="\PZU"
            END
    IF Answer=2 THEN DO
            V="A"
            H=ID_MOD_PZU
            L=RD_MOD_1
            B="\OZU"
            END
    IF Answer=3 THEN CALL _TERMINAL
    IF Answer=4 THEN CALL _BYE
    IF Answer=5 THEN CALL _OPERATIONS
    CALL _DIR
    DIR_MOD=""DIR"\Modules"
    IF STREAM(DIR_MOD, "C", "QUERY EXISTS")="" THEN CALL ZocShell MD DIR_MOD,1
    IF STREAM(DIR_MOD||B, "C", "QUERY EXISTS")="" THEN CALL ZocShell MD DIR_MOD||B,1
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    SAY "Read" L "System Modules."
    T1=time(S)
        DO T=1 TO L BY 1
        Offset=substr(word(INI,(Wordpos(H,INI))+1+T),1,3)
        SAY "Read Modul" T "(ID "Offset")" "of" L
        CALL ZocReceiveBuf 2048
        CALL ZocSend "r"Offset","V"^M"
        CALL ZocDelay 0.1
        INFO_5=ZocReceiveBuf(0)
        Ready=Wordpos("file.",INFO_5)
        IF Ready>0 THEN DO
            RDM=ZocDownload("YMODEM", DIR_MOD||B)
            IF ret="##ERROR##" THEN DO
                SAY "DOWNLOAD FAILED"
            END
        END
        ELSE SAY "Modul" Offset "is not exist"
        END
    T2=time(S)  
    SAY "DONE! in "||T2-T1||" seconds"  
    CALL _READ_MOD
 
_READ_TRC:
    CALL _HEAD
    CALL _INFO
    CALL _DIR
    DIR_TRC=""DIR"\Tracks"
    IF STREAM(DIR_TRC, "C", "QUERY EXISTS")="" THEN CALL ZocShell MD DIR_TRC,1
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    ZocSend "/2^M"
    CALL ZocWait "2>"
    SAY "Read" RD_TRC "System Tracks."
    T1=time(S)
        DO T=1 TO RD_TRC BY 1
        Offset=substr(word(INI,(Wordpos(ID_TRC,INI))+1+T),1,3)
        ST=(x2d(Track)+x2d(Offset))
        Start=d2x(ST)
        file=""DIR_TRC"\Track_"||Start||"_HD_"||Head||"_SPT_0("||SPT||")_Off_"Offset".bin"
        IF STREAM(file, "C", "QUERY EXISTS")\="" THEN CALL ZocShell DEL file,1  
        CALL STREAM file,"C","OPEN WRITE"
 
        RD_BUFF=x2d(Buffer_R)
        LIM=x2d(SPT)
        M=d2x(LIM)
 
        CALL ZocSend "s"||Start||","||Head||",22^M"
        CALL ZocWait ">"
        CALL ZocSend "r,0,"||M||"^M"
        CALL ZocWait ">"
 
            DO K=RD_BUFF TO RD_BUFF+LIM-1 BY 1  
                   W=d2x(K,04)
            U=d2x((K-RD_BUFF),03)
            ZocNotify "PROCCESSING: Track "||Start||" SPT "||U||": Track "||T||" of "RD_TRC
            CALL ZocReceiveBuf 2048  
            ZocSend "B"||W||","||W||"^M"  
            ZocWait ">"  
            abst= ZocReceiveBuf(0)  
            BINSTRING=""  
                DO F=29 TO words(abst)-1  
                BINSTRING=BINSTRING||substr(word(abst,F),1,2)  
                END  
            CALL CHAROUT file,x2c(BINSTRING)
            END
        CALL STREAM file,"C","CLOSE"
        END  
    T2=time(S)  
    SAY "DONE! in "||T2-T1||" seconds"  
    RETURN
 
_WRITE_MOD:
    DIR="C:\_DUMPS\"MODEL"_"SN"_"FW"\Modules"
    CALL ZocSendRaw x2c(1A)
    ZocWait "T>"
    file= ZocGetFilename("Select file to upload", DIR)
    IF file="##CANCEL##" THEN CALL _BYE
    Name=substr(RIGHT(file,7),3,3)
    Volume=substr(RIGHT(file,7),1,1)
    Name_Volume=ZocAsk("ID, Volume?", Name","Volume)
    SAY "Write System Modules," "INFO:" "ID" Name",Volume" Volume
    T1=time(S)
    CALL ZocReceiveBuf 2048
    CALL ZocSend "w"Name_Volume"^M"
    CALL ZocDelay 0.1
    INFO_5=ZocReceiveBuf(0)
    Ready=Wordpos("transfer",INFO_5)
    IF Ready>0 THEN DO
            WTM=ZocUpload("YMODEM", file)
            IF WTM="##ERROR##" THEN DO
                SAY "UPLOAD FAILED"
            END
    END
    
    T2=time(S)  
    SAY "DONE! in "||T2-T1||" seconds"  
    RETURN
 
_WRITE_TRC:
    CALL ZocSendRaw x2c(1A)
    ZocWait "T>"
    file= ZocGetFilename("Select file to upload", ""||DR||"\*.bin")
    IF file="##CANCEL##" THEN CALL _BYE
    Name=substr(file,17,5)
    HD=substr(file,24,1)
    Track_Head=ZocAsk("Track, Head?", Name","HD)
    T=ZocFilename(GETSIZE, file)
    CALL STREAM file,"C","OPEN READ"
    SAY "Write System Track," "INFO:" "Track, Head" Track_Head "SPT" d2x(T/512)
    
    A=1
    T1=time(S)
    DO M=0 TO T/512
        W=d2x(M,03)
        ZocNotify "PROCCESSING: Track_Head "||Track_Head||" SPT "W
        N=Charin(file,A,512)
        CALL ZocDelay 0.3
        CALL ZocSend "P200^M"
        CALL ZocDelay 0.3
        CALL ZocSend N
        CALL ZocDelay 0.3  
        CALL ZocSend "^M"  
        CALL ZocWait "T>"
        DO R=A TO 2
            CALL ZocSend "/2^M"  
            CALL ZocWait "2>"
            CALL ZocSend "r,0,1^M"
            CALL ZocWait "2>"
            CALL ZocReceiveBuf 2048  
            CALL ZocSend "?"  
            CALL ZocDelay 0.3  
            CALL ZocSend "^M"  
            CALL ZocWait "2>"  
            abst= ZocReceiveBuf(0)
            Buffer_Download=substr(word(abst,(Wordpos("Download",abst))-8),4,3)
            Buffer=substr(word(abst,(Wordpos("Default",abst))+4),3,4)
        END
        CALL ZocSend "^M"
        CALL ZocWait "T>"
        CALL ZocSend "/2^M"
        CALL ZocWait "2>"
        CALL ZocSend "C"||Buffer_Download||","||Buffer||"^M"
        CALL ZocWait "2>"
        ZocSend "s"||Track_Head||",22^M"
        CALL ZocWait "2>"
        ZocSend "w,"||W||",1^M"
        CALL ZocWait "2>"
        CALL ZocSend "/^M"
        CALL ZocWait "T>"
        A=A+512
    END
    T2=time(S)  
    SAY "DONE! in "||T2-T1||" seconds"  
    CALL STREAM file,"C","CLOSE"
    RETURN
 
_SELF_TEST:
    CALL _DIR
    file=""DIR"\Defects.log"
    IF STREAM(file, "C", "QUERY EXISTS")\="" THEN CALL ZocShell DEL file,1  
    CALL STREAM file,"C","OPEN WRITE"
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    CALL ZocSend "O4,80^M"
    CALL ZocWait "T>"
    CALL ZocSend "/A^M"
    CALL ZocWait "A>"
    CALL CHAROUT file,"Defects "
 
    Start=x2d(0)
    Stop=x2d(LBAs)
    T1=time(S)
    DO N=Start TO Stop BY 1
        T=d2x(N)
        ZocNotify "PROCCESSING: Total LBAs "||LBAs||" Current LBAs "T
        CALL ZocReceiveBuf 2048  
        CALL ZocSend "Q"T"^M"
        CALL ZocWait "A>"
        abst= ZocReceiveBuf(0)
        IF Wordpos("Error",abst)>0 THEN DO  
            CALL CHAROUT file,T||" "
        END
    END
    CALL STREAM file,"C","CLOSE"
    T2=time(S)
    SAY "DONE! in "||T2-T1||" seconds, Defects.log is created."
    RETURN
 
_DEFECTS:
    CALL ZocSendRaw x2c(1A)
    ZocWait "T>"
    file_1= ZocGetFilename("Select Defects.log", ""||DIR||"\*.log")
    IF file_1="##CANCEL##" THEN CALL _BYE
    CALL STREAM file_1,"C","OPEN READ"
    Defects=Charin(file_1,,32768)
    CALL STREAM file_1,"C","CLOSE"
    Stop=Words(Defects)-1
    SAY "Find" Stop "Defects"
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    CALL ZocSend "/2^M"
    CALL ZocWait "2>"
 
    T1=time(S)
    DO N=1 TO Stop BY 1
        Def=substr(word(Defects,(Wordpos("Defects",Defects))+N),1,8)
        ZocNotify "PROCCESSING: Defects "||Def||" Sliped "N
        CALL ZocSend "F"Def",B1^M"
        CALL ZocWait "2>"
    END
    T2=time(S)
    SAY "DONE! in "||T2-T1||" seconds."
    RETURN
 
_TERMINAL:
    ZocSuppressOutput 0
    Answer= ZocRequestList("Select operations", "Clear SMART", "Clear P_List", "Clear G_List", "Translator P_list",  "Translator G_list", "Translator P_&_G_List", "Full Format P_list", "Full Format G_list", "Full Format P_&_G_List", "View Defects", "View P-List", "View G-List", "Exit")
    IF Answer=0 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "/1^M"
        CALL ZocWait "1>"
        CALL ZocSend "N1,,22^M"
        SAY "Wait..."
        CALL _TERMINAL
    END
    IF Answer=1 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "i1,1,22^M"
        SAY "Wait..."
        CALL _TERMINAL
    END
    IF Answer=2 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "i4,1,22^M"
        SAY "Wait..."
        CALL _TERMINAL
    END
    IF Answer=3 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "m0,6,2,,,,,22^M"
        SAY "Wait..."
        CALL _TERMINAL
    END
    IF Answer=4 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "m0,6,1,,,,,22^M"
        SAY "Wait..."
        CALL _TERMINAL
    END
    IF Answer=5 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "m0,6,3,,,,,22^M"
        SAY "Wait..."
        CALL _TERMINAL
    END
    IF Answer=6 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "m0,8,2,,,,,22^M"
        SAY "Wait..."
        CALL _TERMINAL
    END
    IF Answer=7 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "m0,8,1,,,,,22^M"
        SAY "Wait..."
        CALL _TERMINAL
    END
    IF Answer=8 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "m0,8,3,,,,,22^M"
        SAY "Wait..."
        CALL _TERMINAL
    END
    IF Answer=9 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "V4,,,,99^M"
        CALL _TERMINAL
    END
    IF Answer=10 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "V1^M"
        CALL _TERMINAL
    END
    IF Answer=11 THEN DO
        CALL ZocSendRaw x2c(1A)
        ZocWait "T>"
        CALL ZocSend "V4^M"
        CALL _TERMINAL
    END
    IF Answer=12 THEN DO
        SAY "Bye..."
        EXIT
    END
 
_BYE:  
    SAY "Bye!"
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "2>"  
    CALL ZocSend "/^M"
    CALL ZocWait "T>"
    CALL ZocSend "B38400^M"
    CALL ZocBaud "38400-8N1"  
    CALL ZocSendRaw x2c(1A)
    CALL ZocWait "T>"
    EXIT
/*--------------------------------------zzzverrr©2013--------------------------------------*/

Всего записей: 4462 | Зарегистр. 23-04-2006 | Отправлено: 22:00 25-03-2021
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Hardware » Магнитные носители информации » Ремонт накопителей Seagate. Часть 11
vertex4 (05-02-2023 13:12): Ремонт накопителей Seagate. Часть 12


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru