📄 dvd_ctl_pc.c
字号:
/* * +-------------------------------------------------------------------+ * | Copyright (c) 1995,1996,1997 by Philips Semiconductors. | * | | * | This software is furnished under a license and may only be used | * | and copied in accordance with the terms and conditions of such a | * | license and with the inclusion of this copyright notice. This | * | software or any other copies of this software may not be provided | * | or otherwise made available to any other person. The ownership | * | and title of this software is not transferred. | * | | * | The information in this software is subject to change without | * | any prior notice and should not be construed as a commitment by | * | Philips Semiconductors. | * | | * | This code and information is provided "as is" without any | * | warranty of any kind, either expressed or implied, including but | * | not limited to the implied warranties of merchantability and/or | * | fitness for any particular purpose. | * +-------------------------------------------------------------------+ * * * Module name : DVD_Ctl_PC.c 1.1 * * Last update : 11:47:14 - 98/11/06 * * Description : (Authentication) Interface to DVD * *//*----------------------------- includes ------------------------------------*/#include "DVD_Interface.h"#include "DVD_Ctl.h"#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <assert.h> /*------------------------- module state -------------------------------------*/ static DVDCtl_Command state= DVDCtl_None;static Int the_drive;/*------------------------- functions ----------------------------------------*/ static void print( String p, UInt8 *data, Int size ){ Int i; printf("%s : ", p); for (i=0; i<size; i++) { printf( " %02x", data[i] ); } printf("\n");}int dvdRead( Byte *buffer, Int size ){/* printf("dvdRead : state %d\n", state ); */ switch (state) { case DVDCtl_PutOpenDrive: buffer[2] = dvdIntOpenDrive(&the_drive); buffer[1] = the_drive; buffer[0] = DVDCtl_GetOpenDrive; state = DVDCtl_GetOpenDrive; return 3; case DVDCtl_PutDrvChallenge: buffer[1] = the_drive; buffer[0] = DVDCtl_GetDrvResponse; state = DVDCtl_GetDrvResponse; if (dvdIntGetDrvResponse( the_drive, &buffer[2] )) { return -1; } else { return 7; } case DVDCtl_GetDrvResponse: buffer[1] = the_drive; buffer[0] = DVDCtl_GetDecChallenge; state = DVDCtl_GetDecChallenge; if (dvdIntGetDecChallenge( the_drive, &buffer[2] )) { return -1; } else { return 12; } case DVDCtl_GetBedk: buffer[1] = the_drive; buffer[0] = DVDCtl_GetBedk; if (dvdIntGetEncDiscKey( the_drive, &buffer[2] )) { return -1; } else { return 2047; } case DVDCtl_GetBetk: buffer[1] = the_drive; buffer[0] = DVDCtl_GetBetk; if (dvdIntGetEncTitleKey( the_drive, &buffer[2] )) { return -1; } else { return 7; } default: assert(False); }}int dvdWrite( Byte *buffer, Int size){ state= buffer[0];/* printf("dvdWrite : state %d\n", state ); */ switch (state) { case DVDCtl_PutOpenDrive: case DVDCtl_GetBedk: case DVDCtl_GetBetk: return 1; case DVDCtl_PutCloseDrive: dvdIntCloseDrive( the_drive ); return 2; case DVDCtl_PutDrvChallenge: if (dvdIntPutDrvChallenge( the_drive, &buffer[2] )) { return -1; } else { return 12; } case DVDCtl_PutDecResponse: if (dvdIntPutDecResponse( the_drive, &buffer[2] )) { return -1; } else { return 7; } default: assert(False); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -