#define SMAPI_VERSION 0x00010001 // version 1.1 // // Flags: // // 1st WORD #define FLAG_NOTSPECIAL 0x0000 // Not in special mode now #define FLAG_RGBPROJ_MODE 0x0010 // in RGB Projector mode now ? #define FLAG_DUALVIEW_MODE 0x0020 // in DualView mode now ? #define FLAG_DUALAPP_MODE 0x0040 // in DualApp mode now ? #define FLAG_STRETCH_MODE 0x0080 // in Stretch mode now ? #define FLAG_ROTATE_MODE 0x0100 // in Rotate mode now ? #define FLAG_DDRAW_ON 0x0200 // DirectDraw in effect ? #define FLAG_WIN98_2NDON 0x0400 // 2nd monitor on under Win98 #define FLAG_WIN98_DRV 0x0800 // driver is Win98 native driver #define FLAG_VIRTUALREFRESH_MODE 0x1000 // in virtual refresh mode now ? #define FLAG_IN_DOSFULLSCREEN 0x2000 // in dos full screen mode now ? #define FLAG_APP_EXCLUSIVE_DISP 0x4000 // some application exclusive display ? #define FLAG_LYNXDVM 0x8000 // Is LynxDVM // 2nd WORD #define FLAG_NT_ROTATE_SUPPORT 0x0001 // Is rotation support in NT ? #define FLAG_ROTATE_DIRECTION 0x0006 // Rotation direction. #define FLAG_NEW_ROTATE_SUPPORT 0x0008 // New Rotation (QuickRotate(tm)) Support ? #define DISP2ND_CRT 0 // 2nd display is CRT #define DISP2ND_TV 1 // 2nd display is TV #define TV_NTSC 0 // TV is NTSC #define TV_PAL 1 // TV is PAL /* #define TV_NTSC_640x400 0 // TV is NTSC 640 x 400 #define TV_NTSC_640x480 1 // TV is NTSC 640 x 480 #define TV_PAL_640x480 2 // TV is PAL 640 x 480 #define TV_PAL_800x600 3 // TV is PAL 800 x 600 */ #define LCD_LEFTSIDE 0 // LCD is at left hand side #define LCD_RIGHTSIDE 1 // LCD is at right hand side #define DS_LCD 1 // switch to LCD only #define DS_CRT 2 // switch to CRT only #define DS_TV 3 // switch to TV only #define DS_LCDCRT 4 // switch to LCD+CRT #define DS_LCDTV 5 // switch to LCD+TV #define DS_LCD_VR 6 // switch to virtual LCD #define DA_USEHANDLE 0x00000001 // use window handle for dualapp #define DA_USEPATH 0x00000002 // use application path for dualapp #define DV_GRAPHICS 0x00000001 // dualview for graphics #define DV_VIDEO 0x00000002 // dualview for video #define DV_TWO_VIDEO 0x00000003 // dualview for video -- 1.1 -- #define DV_MINCX 50 // suggestion only! #define DV_MINCY 50 // suggestion only! #define MEM_1M 1 // 1M video memory #define MEM_2M 2 // 2M video memory #define MEM_4M 3 // 4M video memory #define MEM_6M 4 // 6M video memory // for rotation -- new for version 1.1 #define RT_CLOCKWISE 1 // clockwise rotation #define RT_COUNTERCLOCKWISE 2 // counter clockwise rotation #define RT_180 3 // rotate 180 degree // // Messages: // #define SMAPI_INIT 0x00000001 // initiate SMI API DLL #define SMAPI_EXIT 0x00000002 // cleanup SMI API DLL #define SMAPI_DISPLAYCHANGE 0x00000003 // notify SMI API DLL that display changed #define SMAPI_GETCURDS 0x00000004 // set display settings #define SMAPI_SETCURDS 0x00000005 // save current display settings #define SMAPI_GET2NDDISP 0x00000006 // get 2nd display #define SMAPI_SET2NDDISP 0x00000007 // set 2nd display #define SMAPI_GETTVTYPE 0x00000008 // get TV type #define SMAPI_SETTVTYPE 0x00000009 // set TV type #define SMAPI_GETLCDSIDE 0x0000000a // get LCD side #define SMAPI_SETLCDSIDE 0x0000000b // set LCD side #define SMAPI_GETDVCRTRES 0x0000000c // get DualView CRT Res -- new for 1.1 #define SMAPI_SETDVCRTRES 0x0000000d // set DualView CRT Res -- new for 1.1 #define SMAPI_DV_SWAP2PANEL 0x0000000e // dv video swap to panel -- new for 1.1 #define TURNOFF_SPECIALMODE 0x0000000f // turn off special mode #define SMAPI_SUSPENDRESUME 0x00000010 // suspend or resume #define DUALAPP_INIT 0x00000011 #define DUALAPP_EXECUTE 0x00000012 #define DUALAPP_SWAPAPP 0x00000013 #define DUALAPP_SWAPDISPLAY 0x00000014 #define DUALAPP_EXIT 0x00000015 #define SMAPI_TVON_COVER 0x00000019 #define SMAPI_TVOFF_COVER 0x00000020 #define DUALVIEW_INIT 0x00000021 #define DUALVIEW_CHECKFORMAT 0x00000022 #define DUALVIEW_LOCATEVIDEO 0x00000023 #define DUALVIEW_EXECUTE 0x00000024 #define DUALVIEW_UPDATE 0x00000025 #define DUALVIEW_EXIT 0x00000026 #define DUALVIEW_LOCATE2VIDEO 0x00000027 // -- 1.1 -- #define RGBPROJ_INIT 0x00000031 #define RGBPROJ_EXECUTE 0x00000032 #define RGBPROJ_EXIT 0x00000033 #define STRETCH_INIT 0x00000041 #define STRETCH_EXECUTE 0x00000042 #define STRETCH_EXIT 0x00000043 #define STRETCH_CLEAR 0x00000045 #define ROTATE_INIT 0x00000051 // -- 1.1 -- #define ROTATE_EXECUTE 0x00000052 // -- 1.1 -- #define ROTATE_EXIT 0x00000053 // -- 1.1 -- #define ROTATE_STATUS 0x00000054 // -- 1.1 -- #define ROTATE_STARTUP 0x00000055 // -- 1.1 -- #define ROTATE_NEW 0x00000056 #define VREFRESH_INIT 0x00000061 // -- 1.1 -- #define VREFRESH_EXECUTE 0x00000062 // -- 1.1 -- #define VREFRESH_EXIT 0x00000063 // -- 1.1 -- #define SMAPI_910_RESET 0x00000070 // // Return Values: // #define SMAPI_OK 0x00000000 // API calling is OK #define SMAPI_ERR_NODRV 0x00000001 // Display driver is not silicon motion's driver #define SMAPI_ERR_RESET910 0x00000002 // Chip is SM910 for reset #define SMAPI_ERR_UNKNOWNMSG 0xFFFFFFFF // unknown API message #define DS_ERR_LCD 0x00000010 // cannot switch to LCD #define DS_ERR_CRT 0x00000011 // cannot switch to CRT #define DS_ERR_TV_INSTRETCHMODE 0x00000012 // cannot switch to TV because in stretch mode #define DS_ERR_TV_VIDEOON 0x00000013 // cannot switch to TV because hw video on #define DS_ERR_TV_VIRTUALON 0x00000014 // cannot switch to TV because virtual on #define DS_ERR_TV_NOMEMORY 0x00000015 // cannot switch to TV because virtual on #define DS_ERR_LCDCRT 0x00000016 // cannot switch to LCD+CRT #define DS_ERR_LCDTV 0x00000017 // cannot switch to LCD+TV #define DS_ERR_SETMODE 0x00000018 // unable to set mode #define DS_ERR_INVALID 0x00000019 // invalid display setting #define DS_ERR_NOTV 0x00000020 // no TV support #define DS_ERR_INVALIDDISP 0x00000021 // invalid 2nd display #define DS_ERR_INVALIDTYPE 0x00000022 // invalid 2nd display type #define DS_ERR_INVALIDSIDE 0x00000023 // invalid LCD side #define DS_ERR_NOCRT 0x00000024 // CRT not attached #define DS_ERR_TV_CLRDEPTH 0x00000025 // cannot turn on TV in 24-bit #define DS_ERR_2NDMONITORON 0x00000026 // cannot do display switch while 2nd monitor on #define DS_ERR_LCDTV_RES 0x00000027 // cannot switch to LCD+CRT #define DS_ERR_TV_NOMS 0x00000028 // no microvision support #define DS_ERR_ST_712 0x00000029 // video on with stretch on #define DA_ERR_INSTRETCHMODE 0x00000030 // in stretch mode now #define DA_ERR_INDUALAPPMODE 0x00000031 // in dualapp mode now #define DA_ERR_INDUALVIEWMODE 0x00000032 // in dualview mode now #define DA_ERR_INRGBPROJMODE 0x00000033 // in rgbproj mode now #define DA_ERR_INVIRTUALSCREEN 0x00000034 // in virtual screen mode now #define DA_ERR_INVIRTUALREFRESH 0x00000035 // in virtual refresh now #define DA_ERR_VIDEOON 0x00000036 // there is a hardware video on #define DA_ERR_RESOLUTION 0x00000037 // screen resolution is not match with panel resolution #define DA_ERR_CLRDEPTH8 0x00000038 // color depth must be set to 8-bit index mode #define DA_ERR_CLRDEPTH16 0x00000039 // color depth must be set to 16-bit mode #define DA_ERR_INVALIDSIZE 0x0000003a // invalid size field #define DA_ERR_INVALIDFLAG 0x0000003b // invalid flag #define DA_ERR_NOTINDUALAPP 0x0000003c // not in dualapp mode #define DA_ERR_NOTWOAPP 0x0000003d // do not have 2 windows #define DA_ERR_APPNOTEXIST 0x0000003e // window not exist #define DA_ERR_NOTVSWAP 0x0000003f // cannot swap display when 2nd display is TV #define DA_ERR_NEED4M 0x00000040 // need 4M of memory to run DualApp #define DA_ERR_TC_RESTOOBIG 0x00000041 // Dual CRT, resolution too big #define DA_ERR_INROTATEMODE 0x00000042 // in rotation mode now -- 1.1 -- #define DA_ERR_TWOVIDEO 0x00000043 // not allow 2 hw video -- 1.1 -- #define DA_ERR_VIDEOHIDE 0x00000044 // video is hided -- 1.1 -- #define DA_ERR_ALREADYSET 0x00000045 // already in DualApp Mode #define DA_ERR_CLRDEPTH 0x00000046 // color depth must be set to 8-bit or 16-bit mode -- 1.1 -- #define DA_ERR_2NDMONITORON 0x00000046 // cannot do dual app while 2nd monitor on #define DV_ERR_INSTRETCHMODE DA_ERR_INSTRETCHMODE #define DV_ERR_INDUALAPPMODE DA_ERR_INDUALAPPMODE #define DV_ERR_INDUALVIEWMODE DA_ERR_INDUALVIEWMODE #define DV_ERR_INRGBPROJMODE DA_ERR_INRGBPROJMODE #define DV_ERR_INVIRTUALSCREEN DA_ERR_INVIRTUALSCREEN #define DV_ERR_INVIRTUALREFRESH DA_ERR_INVIRTUALREFRESH #define DV_ERR_INROTATEMODE DA_ERR_INROTATEMODE #define DV_ERR_VIDEOHIDE DA_ERR_VIDEOHIDE #define DV_ERR_2NDMONITORON DA_ERR_2NDMONITORON #define DV_ERR_CLRDEPTH16 0x00000050 // color depth must be set to 16-bit mode #define DV_ERR_TWOHWVIDEO 0x00000051 // there are 2 hw videos #define DV_ERR_RESOLUTION 0x00000052 // screen resolution is not match with panel resolution #define DV_ERR_LOCATEVIDEO 0x00000053 // cannot locate video window #define DV_ERR_INVALIDSIZE 0x00000054 // invalid size field #define DV_ERR_INVALIDFLAG 0x00000055 // invalid flag #define DV_ERR_NOTINDUALVIEW 0x00000056 // not in dual view #define DV_ERR_INVIDEODV 0x00000057 // in video DualView now, cannot do update #define DV_ERR_INVALIDRECT 0x00000058 // invalid rectangle, cannot do update #define DV_ERR_TC_RESTOOBIG 0x00000059 // Dual CRT, resolution too big #define DV_ERR_CLRDEPTH 0x0000005a // color depth must be set to 8-bit or 16-bit mode -- 1.1 -- #define DV_ERR_INVALIDPARAM 0x0000005b // invalid parameter #define DV_ERR_ALREADYSET 0x0000005c // already in DualView Mode #define DV_ERR_FORMAT 0x0000005d // there is video on after invoke graphics dv #define DV_ERR_VIDEOON 0x0000005e // there is video on #define DV_ERR_SM712 0x0000005f // there is video on #define RP_ERR_INSTRETCHMODE DA_ERR_INSTRETCHMODE #define RP_ERR_INDUALAPPMODE DA_ERR_INDUALAPPMODE #define RP_ERR_INDUALVIEWMODE DA_ERR_INDUALVIEWMODE #define RP_ERR_INRGBPROJMODE DA_ERR_INRGBPROJMODE #define RP_ERR_INVIRTUALSCREEN DA_ERR_INVIRTUALSCREEN #define RP_ERR_INVIRTUALREFRESH DA_ERR_INVIRTUALREFRESH #define RP_ERR_INROTATEMODE DA_ERR_INROTATEMODE #define RP_ERR_2NDMONITORON DA_ERR_2NDMONITORON #define RP_ERR_RESOLUTION 0x00000060 // screen resolution is > 1024 or < 800 #define RP_ERR_MEMORY 0x00000061 // not enough memory #define RP_ERR_BANDWIDTH 0x00000062 // not enough bandwidth #define RP_ERR_NOTINRGBPROJ 0x00000063 // not in RGB Projector mode #define RP_ERR_INVALIDCRTRES 0x00000064 // Invalid RGB projector resolution #define RP_ERR_ALREADYSET 0x00000065 // already in RGB Projector mode #define ST_ERR_INSTRETCHMODE DA_ERR_INSTRETCHMODE #define ST_ERR_INDUALAPPMODE DA_ERR_INDUALAPPMODE #define ST_ERR_INDUALVIEWMODE DA_ERR_INDUALVIEWMODE #define ST_ERR_INRGBPROJMODE DA_ERR_INRGBPROJMODE #define ST_ERR_INVIRTUALSCREEN DA_ERR_INVIRTUALSCREEN #define ST_ERR_INVIRTUALREFRESH DA_ERR_INVIRTUALREFRESH #define ST_ERR_INROTATEMODE DA_ERR_INROTATEMODE #define ST_ERR_2NDMONITORON DA_ERR_2NDMONITORON #define ST_ERR_VIDEOON 0x00000070 // there is hw video(s) #define ST_ERR_NOLCD 0x00000071 // LCD is not on #define ST_ERR_LOWRES 0x00000072 // current resolution is less than 640 x 480 #define ST_ERR_HIGHRES 0x00000073 // current resolution is greater or equal than panel resolution #define ST_ERR_NOTINSTRETCH 0x00000074 // not in stretch mode #define ST_ERR_ALREADYSET 0x00000075 // already in stretch Mode // -- 1.1 -- for rotation mode #define RT_ERR_INSTRETCHMODE DA_ERR_INSTRETCHMODE #define RT_ERR_INDUALAPPMODE DA_ERR_INDUALAPPMODE #define RT_ERR_INDUALVIEWMODE DA_ERR_INDUALVIEWMODE #define RT_ERR_INRGBPROJMODE DA_ERR_INRGBPROJMODE #define RT_ERR_INVIRTUALSCREEN DA_ERR_INVIRTUALSCREEN #define RT_ERR_INVIRTUALREFRESH DA_ERR_INVIRTUALREFRESH #define RT_ERR_INROTATEMODE DA_ERR_INROTATEMODE #define RT_ERR_2NDMONITORON DA_ERR_2NDMONITORON #define RT_ERR_WRONGHW 0x00000080 // error if SM910 #define RT_ERR_CLRDEPTH 0x00000081 // error if in 24-bit color depth #define RT_ERR_MEMORY 0x00000082 // not enough memory #define RT_ERR_SETMODE 0x00000083 // set rotate mode failed #define RT_ERR_DIRECTION 0x00000084 // error in rotate direction #define RT_ERR_CAPTUREON 0x00000085 // error in rotate direction #define RT_ERR_VIDEOON 0x00000086 // video on when rotate 180 #define RT_ERR_DDRAWON 0x00000087 // direct draw in effect #define RT_ERR_ALREADYSET 0x00000088 // already in rotation Mode // -- 1.1 -- for virtual refresh mode #define VR_ERR_INSTRETCHMODE DA_ERR_INSTRETCHMODE #define VR_ERR_INDUALAPPMODE DA_ERR_INDUALAPPMODE #define VR_ERR_INDUALVIEWMODE DA_ERR_INDUALVIEWMODE #define VR_ERR_INRGBPROJMODE DA_ERR_INRGBPROJMODE #define VR_ERR_INVIRTUALSCREEN DA_ERR_INVIRTUALSCREEN #define VR_ERR_INROTATEMODE DA_ERR_INROTATEMODE #define VR_ERR_2NDMONITORON DA_ERR_2NDMONITORON #define VR_ERR_VIDEOON 0x00000090 // there is hw video(s) #define VR_ERR_NOTLCDONLY 0x00000091 // not LCD only #define VR_ERR_MEMORY 0x00000092 // not enough memory #define VR_ERR_NOTINVREFRESH 0x00000093 // not in virtual refresh mode #define VR_ERR_ALREADYSET 0x00000094 // already in virtual refresh mode // // Structures: // typedef struct { BOOL bWinNT; BOOL bNoTV; BOOL bTwoCRT; BOOL bChronTelTV; // -- ver 1.1 -- int iMem; int cxPanelRes; int cyPanelRes; // DWORD dwWinVer1; WORD bCH7005TV; WORD bNewST; // DWORD dwWinVer2; WORD bNewTV; WORD bNoST; BOOL bNativeDrv; // native windows 98 driver BOOL bNoRT; // no rotation mode BOOL bNoDV; // no DualView BOOL bNoDA; // no DualApp WORD wChipID; // -- ver 1.1 -- WORD b1024x600Panel; // -- ver 1.1 -- BOOL bXGANoST24; BOOL wReserved; } SM_APIINIT; typedef SM_APIINIT FAR *LPSM_APIINIT; typedef struct { int iSize; DWORD dwFlag; HWND hWnd1; HWND hWnd2; char szApp1[MAX_PATH]; char szApp2[MAX_PATH]; } SM_DUALAPP; typedef SM_DUALAPP FAR *LPSM_DUALAPP; typedef struct { int iSize; DWORD dwFlag; HWND hWndCaller; RECT rCapRect; } SM_DUALVIEW; typedef SM_DUALVIEW FAR *LPSM_DUALVIEW; typedef struct { int iSize; DWORD dwFlag; HWND hWndVW1; HWND hWndVW2; } SM_DV2VW; typedef SM_DV2VW FAR *LPSM_DV2VW; // // Function Prototypes: // #ifdef __cplusplus extern "C" { #endif DWORD APIENTRY CallSMAPI(DWORD dwMessage, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3); DWORD APIENTRY dwRotateStatus(); BOOL APIENTRY bNoTVSimul(); BOOL APIENTRY bIsInSpecialMode(WORD wFlag); int APIENTRY nIsInSpecialMode(); #ifdef __cplusplus } #endif