windows-nt/Source/XPSP1/NT/drivers/wdm/input/tabletpc/inc/smapi.h
2020-09-26 16:20:57 +08:00

344 lines
16 KiB
C

#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