Exemple #1
0
int
XEventsQueued(Display * display, int mode)
{
	int ret;
	GR_EVENT temp;

	FUNC_ENTER;
	ret = GrQueueLength();

	/* check hack for local saved event*/
	if (saved)
		return ret+1;

	if (!ret && mode != QueuedAlready) {
		if (mode == QueuedAfterFlush)
			GrFlush();
		if (GrPeekEvent(&temp))
			ret = 1;
	}

	if (ret)
		DPRINTF("Returning %d events ready\n", ret);

	return ret;
}
Exemple #2
0
static void
GrPeekEventWrapper(void *r)
{
	GR_EVENT evt;
	GR_CHAR	 ret;
	GR_EVENT_CLIENT_DATA *cde;

	ret = GrPeekEvent(&evt);

	GsWriteType(current_fd,GrNumPeekEvent);
	GsWrite(current_fd, &evt, sizeof(evt));
	if(evt.type == GR_EVENT_TYPE_CLIENT_DATA) {
		cde = (GR_EVENT_CLIENT_DATA *)&evt;
		if(cde->data) {
			GsWrite(current_fd, cde->data, cde->datalen);
			free(cde->data);
		} cde->datalen = 0;
	}
	GsWrite(current_fd, &ret, sizeof(GR_CHAR));

	/* EXPERIMENTAL CODE for GTK+ select wait*/
	if (ret == 0) {
		/* tell main loop to call Finish routine on event*/
		curclient->waiting_for_event = TRUE;
	}
}
// check for events & delete the event queue
static void check_event() {
		if (GrPeekEvent(&break_event)) { 
			GrGetNextEventTimeout(&break_event, 1000);
			if (break_event.type != GR_EVENT_TYPE_TIMEOUT) {
				pz_event_handler(&break_event);
				// delete the rest of the event queue
				while ( break_event.type != GR_EVENT_TYPE_NONE ) 
				    GrGetNextEventTimeout(&break_event, 0);
			}
		}
}
void generate_tone()
{
	int nsamples;
	GR_EVENT event;
	int freq = 0;
//	struct audio_buf_info info;
//	char buf[20];

	while(!generator_paused) {
		if(generator_freq != freq) {
			freq = generator_freq;
			nsamples = make_wave_buffer(generator_freq); 
//add wave types here - tbd
		}
// we need to use ioctl to get available space and ensure we dont write too much to improve response
// times while changing freq/notes. to be done
//        	ioctl(dspz.dsp, SNDCTL_DSP_GETOSPACE, &info);
//		sprintf(buf, "f:%d, s/f: %d", info.fragstotal, info.fragsize);
//		sprintf(buf, "afs: %d, ab: %d", info.fragments, info.bytes);
//		generator_draw_text(buf);
		
		dsp_write( &dspz, wave_buffer, sizeof(short)*nsamples);	// dont write block
		if(GrPeekEvent(&event)) {
repeat:
			GrGetNextEventTimeout(&event, 1000);
			if (event.type != GR_EVENT_TYPE_TIMEOUT) {
				pz_event_handler(&event);
				if (GrPeekEvent(&event)) 
					goto repeat;
			}
		}
	}
	if (generator_quit_app)	// menu button in the middle of a play
		generator_button_menu();//get out of the app
		// better way to get out of the event handler - tbd
}
Exemple #5
0
static void
GrPeekEventWrapper(void *r)
{
	GR_EVENT evt;
	GR_CHAR	 ret;
	GR_EVENT_CLIENT_DATA *cde;

	ret = GrPeekEvent(&evt);

	GsWriteType(current_fd,GrNumPeekEvent);
	GsWrite(current_fd, &evt, sizeof(evt));
	if(evt.type == GR_EVENT_TYPE_CLIENT_DATA) {
		cde = (GR_EVENT_CLIENT_DATA *)&evt;
		if(cde->data) {
			GsWrite(current_fd, cde->data, cde->datalen);
			free(cde->data);
		} cde->datalen = 0;
	}
	GsWrite(current_fd, &ret, sizeof(GR_CHAR));
}
Exemple #6
0
static void video_check_messages()
{
	GR_EVENT event;
	int evtcap = 200;
	video_vol_delta = 0;
	while (GrPeekEvent(&event) && evtcap--) {
		GrGetNextEventTimeout(&event, 500);
		if (event.type != GR_EVENT_TYPE_TIMEOUT) {
			pz_event_handler(&event);
		} else {
			break;
		}
	}

	if (video_vol_delta != 0)
	{
		audio_adjustVolume(video_vol_delta);

	}
}
Exemple #7
0
static void mp3_event_handler()
{
	GR_EVENT event;
	int evtcap = 200;

	vol_delta = 0;
	while (GrPeekEvent(&event) && evtcap--)
	{
		
		GrGetNextEventTimeout(&event, 1000);
		if (event.type != GR_EVENT_TYPE_TIMEOUT) {
			pz_event_handler(&event);
		} else {
			break;
		}
	}
	
	if (vol_delta != 0) {
		mp3_refresh_state();		
	}
}
    /// forward events from system queue to application queue
    virtual void forwardSystemEvents( bool waitForEvent )
    {
        if ( _stopFlag )
            waitForEvent = false;
        GR_EVENT event;
        for(;;)
        {
            //main_win->unsetLastNavigationDirection();
            if ( waitForEvent ) {
                GrGetNextEvent(&event);
            } else {
                if (!GrPeekEvent(&event))
                    break;
                GrCheckNextEvent( &event );
            }
            waitForEvent = false;

            switch(event.type)
            {
                case GR_EVENT_TYPE_ERROR:
                    CRLog::debug("GR_EVENT_TYPE_ERROR");
                    break;
                case GR_EVENT_TYPE_CLOSE_REQ:
                    CRLog::debug("GR_EVENT_TYPE_CLOSE_REQ");
                    break;
                case GR_EVENT_TYPE_EXPOSURE:
                    CRLog::debug("GR_EVENT_TYPE_EXPOSURE");
                    postEvent( new CRGUIUpdateEvent(true) );
/*
                    m_images->printImage("logo",0,0);
                    GrSetFontSize(m_state->fontid,32);
                    GrText(m_state->wid,m_state->gc,240,690,(char *)"Hello!\n",-1,GR_TFASCII|GR_TFTOP);
                    GrText(m_state->wid,m_state->gc,100,720,(char *)"This is only an example",-1,\
                        GR_TFASCII|GR_TFTOP);
*/
                    //postLeds( true );
                    //update(true);
                    if ( firstDocUpdate ) {
                        //main_win->getDocView()->swapToCache();
                        firstDocUpdate = false;
                    }
                    //postLeds( false );
                    break;
            case GR_EVENT_TYPE_BUTTON_DOWN:
                {
                    CRLog::debug("GR_EVENT_TYPE_BUTTON_DOWN");
/*
                char buf[128]={0};
                GrClearArea(m_state->wid,10,770,400,28,0);
                GrSetFontSize(m_state->fontid,24);
                sprintf(buf,"mouse down: x=%d y=%d",event.mouse.x,event.mouse.y);
                GrText(m_state->wid,m_state->gc,10,770,(char *)buf,-1,GR_TFASCII|GR_TFTOP);
                GrPartialPrint(m_state->wid,10,770,400,28);
*/
                }
                break;
            case GR_EVENT_TYPE_BUTTON_UP:
                    {
                    CRLog::debug("GR_EVENT_TYPE_BUTTON_UP");
/*
                char buf[128]={0};
                GrClearArea(m_state->wid,10,770,400,28,0);
                GrSetFontSize(m_state->fontid,24);
                sprintf(buf,"mouse up: x=%d y=%d",event.mouse.x,event.mouse.y);
                GrText(m_state->wid,m_state->gc,10,770,(char *)buf,-1,GR_TFASCII|GR_TFTOP);
                    GrPartialPrint(m_state->wid,10,770,400,28);
*/
                    }
                break;
            case GR_EVENT_TYPE_MOUSE_POSITION:
                    {
                    CRLog::debug("GR_EVENT_TYPE_MOUSE_POSITION");
/*
                char buf[128]={0};
                    GrClearArea(m_state->wid,10,770,400,28,0);
                GrSetFontSize(m_state->fontid,24);
                sprintf(buf,"mouse move: x=%d y=%d",event.mouse.x,event.mouse.y);
                GrText(m_state->wid,m_state->gc,10,770,(char *)buf,-1,GR_TFASCII|GR_TFTOP);
                    GrPartialPrint(m_state->wid,10,770,400,28);

*/
                    }
                    break;
            case GR_EVENT_TYPE_KEY_DOWN:
            //case GR_EVENT_TYPE_KEY_UP:
                    CRLog::debug("GR_EVENT_TYPE_KEY_DOWN %d", (int)event.keystroke.ch );
                    {
                        static int convert_table[] = {
                        KEY_0, '0', 0,
                        KEY_1, '1', 0,
                        KEY_2, '2', 0,
                        KEY_3, '3', 0,
                        KEY_4, '4', 0,
                        KEY_5, '5', 0,
                        KEY_6, '6', 0,
                        KEY_7, '7', 0,
                        KEY_8, '8', 0,
                        KEY_9, '9', 0,
                        LONG_KEY_0, '0', KEY_FLAG_LONG_PRESS,
                        LONG_KEY_1, '1', KEY_FLAG_LONG_PRESS,
                        LONG_KEY_2, '2', KEY_FLAG_LONG_PRESS,
                        LONG_KEY_3, '3', KEY_FLAG_LONG_PRESS,
                        LONG_KEY_4, '4', KEY_FLAG_LONG_PRESS,
                        LONG_KEY_5, '5', KEY_FLAG_LONG_PRESS,
                        LONG_KEY_6, '6', KEY_FLAG_LONG_PRESS,
                        LONG_KEY_7, '7', KEY_FLAG_LONG_PRESS,
                        LONG_KEY_8, '8', KEY_FLAG_LONG_PRESS,
                        LONG_KEY_9, '9', KEY_FLAG_LONG_PRESS,
                        KEY_CANCEL, XK_Escape, 0,
                        KEY_OK, XK_Return, 0,
                        KEY_DOWN, XK_Right, 0,
                        KEY_UP, XK_Left, 0,

                        KEY_CURSOR_OK, XK_KP_Enter, 0,
                        KEY_CURSOR_DOWN, XK_Next, 0,
                        KEY_CURSOR_UP, XK_Prior, 0,
                        //KEY_CURSOR_OK, XK_Return, 0,
                        //KEY_CURSOR_DOWN, XK_Up, 0,
                        //KEY_CURSOR_UP, XK_Down, 0,

                        LONG_KEY_CANCEL, XK_Escape, KEY_FLAG_LONG_PRESS,
                        LONG_KEY_OK, XK_Return, KEY_FLAG_LONG_PRESS,
                        LONG_KEY_DOWN, XK_Right, KEY_FLAG_LONG_PRESS,
                        LONG_KEY_UP, XK_Left, KEY_FLAG_LONG_PRESS,

                        LONG_KEY_CURSOR_OK, XK_KP_Enter, KEY_FLAG_LONG_PRESS,
                        LONG_KEY_CURSOR_DOWN, XK_Next, KEY_FLAG_LONG_PRESS,
                        LONG_KEY_CURSOR_UP, XK_Prior, KEY_FLAG_LONG_PRESS,

                        KEY_SHORTCUT_VOLUME_UP, XK_KP_Add, 0,
                        KEY_SHORTCUT_VOLUME_DOWN, XK_KP_Subtract, 0,
                        LONG_SHORTCUT_KEY_VOLUMN_UP, XK_KP_Add, KEY_FLAG_LONG_PRESS,
                        LONG_SHORTCUT_KEY_VOLUMN_DOWN, XK_KP_Subtract, KEY_FLAG_LONG_PRESS,
                        0, 0, 0 // end marker
                        };
                        int code = 0;
                        int flags = 0;
                        int keyId = event.keystroke.ch;
                        for ( int i=0; convert_table[i]; i+=3 ) {
                            if ( keyId==convert_table[i] ) {
                                code = convert_table[i+1];
                                flags = convert_table[i+2];
                                CRLog::debug( "OnKeyPressed( %d (%04x) ) - converted to %04x, %d", keyId, keyId, code, flags );
                            }
                        }
                        if ( !code ) {
                            CRLog::debug( "Unknown key code in OnKeyPressed() : %d (%04x)", keyId, keyId );
                            break;
                        }
                        postEvent( new CRGUIKeyDownEvent(code, flags) );

                        if ( CRJinkeWindowManager::instance->getWindowCount()==0 ) {
                            _stopFlag = true;
                            // QUIT
                            CRLog::trace("windowCount==0, quitting");
                        }
                    }
                    break;
            case GR_EVENT_TYPE_FDINPUT:
                    CRLog::debug( "GR_EVENT_TYPE_FDINPUT" );
                    break;
            default:
                    CRLog::debug( "unknown event %d", (int)event.type );
                    break;
            }
        }
    }
int main(int argc, char **argv) {

    int serialFd;
    int outFd;

    GR_SCREEN_INFO info;
    GR_WINDOW_ID calWindow;
    GR_EVENT event;

    /* Open up the graphics */

    if (GrOpen() == -1) {
        fprintf(stderr, "Error!  Unable to open the graphics engine\n");
        return(-1);
    }

    /* Now open the serial port */

    serialFd = calInitSerial("/dev/ttyS1");
    if (serialFd == -1) {
        fprintf(stderr, "Error!  Unable to open the touchscreen device\n");
        return(-1);
    }

    GrGetScreenInfo(&info);

    /* Decide which points we are going to touch */

    dataPoints[0].scrX = 10;
    dataPoints[0].scrY = 10;

    dataPoints[1].scrX = 10;
    dataPoints[1].scrY = info.rows - 10;

    dataPoints[2].scrX = info.cols - 10;
    dataPoints[2].scrY = info.rows - 10;

    dataPoints[3].scrX = info.cols - 10;
    dataPoints[3].scrY = 10;

    /* Now, create a window that spans the entire size of the screen */
    calWindow = GrNewWindow(GR_ROOT_WINDOW_ID, 0, 0, info.cols, info.rows, 0, BGCOLOR, FGCOLOR);
    GrSelectEvents(calWindow, GR_EVENT_MASK_EXPOSURE);
    GrMapWindow(calWindow);
    /* Wait for exposure */
    while(GrPeekEvent(&event) != GR_EVENT_TYPE_EXPOSURE);

    /* Ok, now that we have been exposed, draw the instructions */
    drawText(calWindow, instructions, 4);

    if (!doPoints(calWindow, serialFd)) {

        double scrXDelta, rawXDelta;
        double scrYDelta, rawYDelta;

        double deltaX, deltaY;

        scrXDelta = (double) dataPoints[2].scrX - dataPoints[0].scrX;
        rawXDelta = (double) dataPoints[2].rawX - dataPoints[0].rawX;

        scrYDelta = (double) dataPoints[1].scrY - dataPoints[0].scrY;
        rawYDelta = (double) dataPoints[1].rawY - dataPoints[0].rawY;

        /* We can now extrapolate and discover the extreme edges of the screen */

        /* First, the low values */

        deltaX = abs( (rawXDelta / scrXDelta) * ((double) dataPoints[0].scrX));
        deltaY = abs( (rawYDelta / scrYDelta) * ((double) dataPoints[0].scrY));

        /*
        deltaX = abs((double) dataPoints[0].scrX * rawXDelta) / scrXDelta);
        deltaY = abs((double) (dataPoints[0].scrY * rawYDelta) / scrYDelta);
        */

        /* Print out the raw values, accounting for possible inversion */

        if (dataPoints[0].rawX > dataPoints[2].rawX) {
            printf("%d ", (int) (dataPoints[0].rawX + deltaX));
            printf("%d ", (int) (dataPoints[2].rawX - deltaX));
        }
        else {
            printf("%d ", (int) (dataPoints[0].rawX - deltaX));
            printf("%d ", (int) (dataPoints[2].rawX + deltaX));
        }

        if (dataPoints[0].rawY >dataPoints[1].rawY) {
            printf("%d ", (int) (dataPoints[0].rawY + deltaY));
            printf("%d\n", (int) (dataPoints[1].rawY - deltaY));
        }
        else {
            printf("%d ", (int) (dataPoints[0].rawY - deltaY));
            printf("%d\n", (int) (dataPoints[1].rawY + deltaY));
        }
    }
    else {
        fprintf(stderr, "Error - Unable to read the touchscreen\n");
    }

    /* Close everything down */
    calCloseSerial(serialFd);
    GrClose();

    /* Byebye! */
    return(0);
}
Exemple #10
0
int
main(int ac, char **av)
{
    int ax;
    char *arg;
    RoachMap *rp;
    int rx;
    float angle;
    GR_EVENT ev;
    int nVis;
    int needCalc;
    GR_SCREEN_INFO sinfo;
    
    /*
       Process command line options.
    */
    for (ax=1; ax<ac; ax++) {
	arg = av[ax];
	if (strcmp(arg, "-rc") == 0) {
	    roachColor = atoi(av[++ax]);
	}
	else if (strcmp(arg, "-speed") == 0) {
	    roachSpeed = atof(av[++ax]);
	}
	else if (strcmp(arg, "-roaches") == 0) {
	    maxRoaches = strtol(av[++ax], (char **)NULL, 0);
	}
	else {
	    Usage();
	}
    }

    srand((int)time((long *)NULL));
    
    /*
       Catch some signals so we can erase any visible roaches.
    */
    signal(SIGKILL, SigHandler);
    signal(SIGINT, SigHandler);
    signal(SIGTERM, SigHandler);
    signal(SIGHUP, SigHandler);

    if (GrOpen() < 0) {
	fprintf(stderr, "can't open graphics\n");
	exit(1);
    }

    GrGetScreenInfo(&sinfo);
    display_width = sinfo.cols;
    display_height = sinfo.rows;
    
    /*
       Create roach pixmaps at several orientations.
    */
    for (ax=0; ax<360; ax+=ROACH_ANGLE) {
	rx = ax / ROACH_ANGLE;
	angle = rx * 0.261799387799;
	rp = &roachPix[rx];
	rp->pixmap = GrNewPixmapFromData(rp->width, rp->height, WHITE, BLACK,
		rp->roachBits, GR_BMDATA_BYTEREVERSE|GR_BMDATA_BYTESWAP);
	rp->sine = sin(angle);
	rp->cosine = cos(angle);
    }

    roaches = (Roach *)malloc(sizeof(Roach) * maxRoaches);

    gc = GrNewGC();
    
    while (curRoaches < maxRoaches)
	AddRoach();
    
    GrSelectEvents(GR_ROOT_WINDOW_ID, GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_CHLD_UPDATE);
    
    needCalc = 1;
    while (!done) {
	if (GrPeekEvent(&ev))
	    GrGetNextEvent(&ev);
	else {
	    if (needCalc) {
		needCalc = CalcRootVisible();
	    }
	    nVis = MarkHiddenRoaches();
	    if (nVis) {
		ev.type = SCAMPER_EVENT;
	    }
	    else {
		DrawRoaches();
		eventBlock = GR_TRUE;
		GrGetNextEvent(&ev);
		eventBlock = GR_FALSE;
	    }
	}
	
	switch (ev.type) {
	    case SCAMPER_EVENT:
		for (rx=0; rx<curRoaches; rx++) {
		    if (!roaches[rx].hidden)
			MoveRoach(rx);
		}
		DrawRoaches();
		GrDelay(100);
		break;
		
	    case GR_EVENT_TYPE_EXPOSURE:
	    case GR_EVENT_TYPE_CHLD_UPDATE:
		needCalc = 1;
		break;
		
	}
    }
    
    CoverRoot();
    GrClose();
    return 0;
}