コード例 #1
0
ファイル: wacomthread.c プロジェクト: BJIADL/libwacom
//------------------------------------------------------------  LeerTableta()
//
static void LeerTableta(int i) {

	static unsigned char uchBuf[64];
	static int nLength;
	static WACOMSTATE state = WACOMSTATE_INIT;

	//Lectura de un paquete
	if ( ( nLength = WacomReadRaw(ghTablet,uchBuf,sizeof(uchBuf)) ) < 0)
		return;

	//Interpretacion del paquete
	if (WacomParseData(ghTablet,uchBuf,nLength,&state))
		return;

	//Lectura secuencial de los distintos valores del estado actual de la tableta
	if (state.uValid & BIT(WACOMFIELD_PROXIMITY))
		gAbsState[WACOMFIELD_PROXIMITY].nValue = state.values[WACOMFIELD_PROXIMITY].nValue;
	if (state.uValid & BIT(WACOMFIELD_POSITION_X))
		gAbsState[WACOMFIELD_POSITION_X].nValue = state.values[WACOMFIELD_POSITION_X].nValue;
	if (state.uValid & BIT(WACOMFIELD_POSITION_Y))
		gAbsState[WACOMFIELD_POSITION_Y].nValue = state.values[WACOMFIELD_POSITION_Y].nValue;
	if (state.uValid & BIT(WACOMFIELD_PRESSURE))
		gAbsState[WACOMFIELD_PRESSURE].nValue = state.values[WACOMFIELD_PRESSURE].nValue;

/*	for (i=WACOMFIELD_TOOLTYPE; i<WACOMFIELD_MAX; ++i)
		if (state.uValid & BIT(i))
			gAbsState[i].nValue = state.values[i].nValue;
	} Para leer todos los campos*/
	
	/* Call the user defined callback function */
	if (gCallback)
		gCallback(i);
}
コード例 #2
0
ファイル: wacomthread_unblock.c プロジェクト: BJIADL/libwacom
//------------------------------------------------------------  LeerTableta()
//
int LeerTableta() {

	unsigned char uchBuf[64];
	int nLength;
	WACOMSTATE state = WACOMSTATE_INIT;

	if ( ( nLength = WacomReadRaw(ghTablet,uchBuf,sizeof(uchBuf)) ) < 0) 		
		return 0;												//Lectura de un paquete 
	if (WacomParseData(ghTablet,uchBuf,nLength,&state)) 		
		return 0;												//Interpretacion del paquete 
	
	//Lectura secuencial de los distintos valores del estado actual de la tableta
	if (state.uValid & BIT(WACOMFIELD_PROXIMITY))
		gAbsState[WACOMFIELD_PROXIMITY].nValue = state.values[WACOMFIELD_PROXIMITY].nValue;
	if (state.uValid & BIT(WACOMFIELD_POSITION_X))
		gAbsState[WACOMFIELD_POSITION_X].nValue = state.values[WACOMFIELD_POSITION_X].nValue;
	if (state.uValid & BIT(WACOMFIELD_POSITION_Y))
		gAbsState[WACOMFIELD_POSITION_Y].nValue = state.values[WACOMFIELD_POSITION_Y].nValue;
	if (state.uValid & BIT(WACOMFIELD_PRESSURE))
		gAbsState[WACOMFIELD_PRESSURE].nValue = state.values[WACOMFIELD_PRESSURE].nValue;
	
	return 1;
}
コード例 #3
0
void FetchTablet(WACOMTABLET hTablet)
{
    char chOut[128];
    unsigned char uchBuf[64];
    int i, nLength, nRow=gnSerialDataRow, nErrors=0;
    WACOMSTATE state = WACOMSTATE_INIT;
    int input_fd;

    input_fd = open("/sys/devices/platform/wac_android/input", O_RDWR);
    if (input_fd < 0) {
        perror("Couldn't open wac_android input file\n");
        return;
    }

    while (1)
    {
        nLength = WacomReadRaw(hTablet,uchBuf,sizeof(uchBuf));
        if (nLength < 0)
        {
            /*snprintf(chOut,sizeof(chOut),"ReadRaw: %10d (%d)",
            		nLength,++nErrors);
            fprintf(stderr,"%s\n", chOut);*/
            sleep(1);
            continue;
        }

        if ((i=WacomParseData(hTablet,uchBuf,nLength,&state)))
        {
            /*snprintf(chOut,sizeof(chOut),
            	"ParseData: %10d %-40s (%d)",
            	i,strerror(errno),++nErrors);
            fprintf(stderr,"%s\n", chOut);*/
            continue;
        }

        //fprintf(stdout, "WacomField\n");

        for (i=WACOMFIELD_TOOLTYPE; i<WACOMFIELD_MAX; ++i)
        {
            if (state.uValid & BIT(i))
            {
                if (i == WACOMFIELD_RELWHEEL) {
                    gAbsState[i].nValue += state.values[i].nValue;
                } else {
                    gAbsState[i].nValue = state.values[i].nValue;
                }
                //fprintf(stdout, "index: %d value %d\n", i, gAbsState[i].nValue);
            }
        }

        //fprintf(stdout, "WacomButton\n");

        for (i=WACOMBUTTON_LEFT; i<WACOMBUTTON_MAX; ++i)
        {
            gKeyState[i].nValue = state.values[WACOMFIELD_BUTTONS].nValue &
                                  (1 << i) ? 1 : 0;
            //fprintf(stdout, "index: %d value %d\n", i, gKeyState[i].nValue);
        }

        // tooltype = 1 when tip is in range; tooltype = 4 when eraser is in range
        int tooltype = gAbsState[WACOMFIELD_TOOLTYPE].nValue;
        // proximity = 1 when stylus is in range
        int proximity = gAbsState[WACOMFIELD_PROXIMITY].nValue;
        // buttons = 32 when either tip or eraser is being pressed
        // buttons = 64 when only side button is being pressed
        // buttons = 96 if both tip and side button are being pressed
        int buttons = gAbsState[WACOMFIELD_BUTTONS].nValue;
        int x = gAbsState[WACOMFIELD_POSITION_X].nValue;
        int y = gAbsState[WACOMFIELD_POSITION_Y].nValue;
        // pressure values 0 - 255
        int pressure = gAbsState[WACOMFIELD_PRESSURE].nValue;

        // touch value = 1 when either tip or eraser is touching
        int touch = gKeyState[WACOMBUTTON_TOUCH].nValue;
        // side = 1 when side button is being pressed
        int side = gKeyState[WACOMBUTTON_STYLUS].nValue;

        sprintf(chOut, "%d %d %d %d %d %d %d %d %d", tooltype, proximity, buttons,
                x, y, pressure, touch, side, 0);
        int err = write(input_fd, chOut, strlen(chOut));
        if (err < 0) perror("error writing to driver");
        //err = fsync(input_fd);
        //if (err < 0) perror("error syncing to driver");
        fprintf(stderr, "%s\n", chOut);
    }
}
コード例 #4
0
ファイル: mywintab.c プロジェクト: rvlander/HTools
int GetFirstValid(WACOMTABLET hTablet, float *lX, float *lY, int *lB, long *lT) {
    char chOut[128];
    unsigned char uchBuf[64];
    int i, nLength, nErrors = 0;
    WACOMSTATE state = WACOMSTATE_INIT;
    long curr_time;
    int j = 0;
    int valid = 0;
    
    // printf("GFV\n"); 



    while (!valid) {
        nLength = WacomReadRaw(hTablet, uchBuf, sizeof (uchBuf));


        for (i = 0; i < nLength; ++i) {
            snprintf(chOut, sizeof (chOut), "%02X", uchBuf[i]);
            //wacscrn_output(nRow,i*3,chOut);
        }
        for (i = 0; i < nLength; ++i) {
            snprintf(chOut, sizeof (chOut), "%c", isprint(uchBuf[i]) ?
                    uchBuf[i] : '.');
            //wacscrn_output(nRow,60 + i,chOut);
        }

        if ((i = WacomParseData(hTablet, uchBuf, nLength, &state))) {
            snprintf(chOut, sizeof (chOut),
                    "ParseData: %10d %-40s (%d)",
                    i, strerror(errno), ++nErrors);
            /*wacscrn_output(23,0,chOut);
            wacscrn_refresh();*/
            //continue;
        }

        if (state.uValid & BIT(5)) {
            int prox = state.values[2].nValue;
            if (prox == 1) {

                int X, Y, B;



                X = state.values[4].nValue;
                Y = state.values[5].nValue;
                B = state.values[WACOMFIELD_BUTTONS].nValue & (1 << 5) ? 1 : 0;
                *lT = delay;
                *lX = X;
                *lY = 33440 - Y;
                *lB = B;
                
                valid=1;

              //  printf("valid=%d\n",valid);

            }
        }
        /*int fd = WacomGetFileDescriptor(hTablet);
        int unused[100];
        int imp = read(fd, &unused, 50);
        if (imp==0) {
            we_stop = 1;
        } else {
            lseek(fd, -imp, SEEK_CUR);
        }
        printf("fd=%d,imp=%d,we_stop=%d\n",fd,imp,we_stop);*/

    }
    //printf("j=%d\n",j);
    return j;
}