Announcement

Collapse
No announcement yet.

ASPI Problem (beim lesen einer Audio CD)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ASPI Problem (beim lesen einer Audio CD)

    hi,<br>
    <br>
    folgende code zeilen:<br>
    <br>
    <pre>
    int __declspec(dllexport) __stdcall CDDAGetData( BYTE** p_ppbyData, DWORD p_dwAdress, WORD p_wLength, BYTE p_byHostAdapter, BYTE p_bySCSI ) {
    SRB_ExecSCSICmd l_srbExecIO;
    DWORD ret;

    memset( &l_srbExecIO, 0, sizeof( l_srbExecIO ) );
    l_srbExecIO.SRB_Cmd = SC_EXEC_SCSI_CMD;
    l_srbExecIO.SRB_HaId = p_byHostAdapter;
    l_srbExecIO.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY;
    l_srbExecIO.SRB_Target = p_bySCSI;
    l_srbExecIO.SRB_SenseLen = 14;
    l_srbExecIO.SRB_BufLen = p_wLength;
    l_srbExecIO.SRB_BufPointer = (*p_ppbyData);
    l_srbExecIO.SRB_CDBLen = 0xA;
    l_srbExecIO.CDBByte[0] = 0x28; // Lese von Gerät
    l_srbExecIO.CDBByte[2] = HIBYTE( HIWORD( p_dwAdress ) );
    l_srbExecIO.CDBByte[3] = LOBYTE( HIWORD( p_dwAdress ) );
    l_srbExecIO.CDBByte[4] = HIBYTE( LOWORD( p_dwAdress ) );
    l_srbExecIO.CDBByte[5] = LOBYTE( LOWORD( p_dwAdress ) );
    l_srbExecIO.CDBByte[7] = HIBYTE( p_wLength );
    l_srbExecIO.CDBByte[8] = LOBYTE( p_wLength );
    l_srbExecIO.SRB_PostProc = g_hEventSRB;
    ResetEvent( g_hEventSRB );

    ret = sendASPI32Command( (LPSRB)&l_srbExecIO );
    if( ret != SS_PENDING ) {
    return ASPI32ERR_COMMAND;
    }

    WaitForSingleObject( g_hEventSRB, 10000 );

    if( l_srbExecIO.SRB_Status != SS_COMP ) {
    printf( "Error reading!\n" );
    printf( "CmdStatus = %d\n", l_srbExecIO.SRB_Status );
    printf( "HaStat = %d\n", l_srbExecIO.SRB_HaStat );
    printf( "TargetStat = %d\n", l_srbExecIO.SRB_TargStat );
    printf( "Sense Key = %d\n", l_srbExecIO.SenseArea[2] );
    printf( "Sense Code = %d\n", l_srbExecIO.SenseArea[12] );

    return ASPI32ERR_COMMAND;
    }

    return ASPI32ERR_OK;
    }

    DWORD l_nTStart = 17632;
    WORD l_nTLength = 16668;

    BYTE* Data = new BYTE[l_nTLength - 1];

    if( CDDAGetData( &Data, l_nTStart, l_nTLength - 1, 0, 1 ) != ASPI32ERR_OK ) {
    printf( "Couldn't read data\n" );
    }
    else {
    for( WORD i = 0; i < l_nLength; i++ ) {
    printf( "%d", Data[i] );
    }
    }

    delete[] Data;
    </pre>
    <br>
    folgende zusätzliche angaben:<br>
    <br>
    SenseKey = 5<br>
    SenseCode = 100<br>
    TargetStat = 2<br>
    CmdStatus = 4<br>
    <br>
    <pre>
    (Sense Key Code)
    |--------+--------------------------------------------------------------------|
    | 5h | ILLEGAL REQUEST. Indicates that there was an illegal parameter in|
    | | the command descriptor block or in the additional parameters |
    | | supplied as data for some commands (FORMAT UNIT, SEARCH DATA, |
    | | etc.). If the target detects an invalid parameter in the command |
    | | descriptor block, then it shall terminate the command without |
    | | altering the medium. If the target detects an invalid parameter |
    | | in the additional parameters supplied as data, then the target may|
    | | have already altered the medium. This sense key may also indicate|
    | | that an invalid IDENTIFY message was received (6.6.7). |
    |--------+--------------------------------------------------------------------|

    (Sense Code Code)
    | 64 00 R ILLEGAL MODE FOR THIS TRACK |
    </pre>
    <br>
    mein problem:<br>
    ich kann mit der fehlernummer nix anfangen.<br>
    ich hab versucht mittels aspi von eine audio-cd daten zu lesen...<br>
    <br>
    kann mir da bitte einer helfen?<br>
    <br>
    cya<br>
    Christoph<br>
Working...
X