/**************************************************************************//** * @brief Main function *****************************************************************************/ int main(void) { uint32_t buttons; POINT touchSample, P[ 3 ]; ADC_Init_TypeDef init = ADC_INIT_DEFAULT; /* Configure for 48MHz HFXO operation of core clock */ CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO); /* Initialize DK board register access */ BSP_Init(BSP_INIT_DEFAULT); /* If first word of user data page is non-zero, enable eA Profiler trace */ BSP_TraceProfilerSetup(); CMU_ClockEnable(cmuClock_GPIO, true); CMU_ClockEnable( cmuClock_ADC0, true); /* Max ADC clock is 13MHz, use 14MHz/(1+1) or 48MHz/(5+1) */ init.prescale = 5; ADC_Init(ADC0, &init); sInit.reference = adcRefVDD; /* Set frame buffer start address */ frameBuffer = (uint16_t *) EBI_BankAddress(EBI_BANK2); /* Make sure CYCCNT is running, needed by delay functions. */ DWT_CTRL |= 1; /* Indicate we are waiting for AEM button state enabling EFM */ BSP_LedsSet(0x8001); while (BSP_RegisterRead(&BC_REGISTER->UIF_AEM) != BC_UIF_AEM_EFM) { /* Show a short "strobe light" on DK LEDs, indicating wait */ BSP_LedsSet(0x8001); delayMs(200); BSP_LedsSet(0x4002); delayMs(50); } /* Initialize touch screen calibration factor matrix with approx. values */ setCalibrationMatrix( (POINT*)&lcdCalibPoints, /* Display coordinates */ (POINT*)&touchCalibPoints, /* Touch coordinates */ &calibFactors ); /* Calibration factor matrix */ while (1) { if ( TFT_DirectInit(&tftInit) ) { displayHelpScreen(); BSP_LedsSet(0x0000); BSP_PeripheralAccess(BSP_TOUCH, true); GPIO_PinModeSet(LCD_TOUCH_X1, gpioModeInput, 0); GPIO_PinModeSet(LCD_TOUCH_X2, gpioModeInput, 0); GPIO_PinModeSet(LCD_TOUCH_Y1, gpioModeInput, 0); GPIO_PinModeSet(LCD_TOUCH_Y2, gpioModeInput, 0); do { buttons = readButtons(); /* Draw on screen */ if ( buttons & BC_UIF_PB1 ) { memset( frameBuffer, BLACK, 2 * WIDTH * HEIGHT ); /* Clear screen */ do { if ( touched() ) { touchSample = getTouchSample(); drawPixel( touchSample.x, touchSample.y, COLOR ); } delayMs( 2 ); buttons = readButtons() & ~BC_UIF_PB1; } while ( buttons == 0 ); } /* Calibrate touch screen */ else if ( buttons & BC_UIF_PB2 ) { memset( frameBuffer, BLACK, 2 * WIDTH * HEIGHT ); /* Clear screen */ drawCross( lcdCalibPoints[ 0 ].x, lcdCalibPoints[ 0 ].y, COLOR ); TFT_DrawString(30, 35, "Tap green marker" ); P[ 0 ] = getTouchTapSample10bit(); memset( frameBuffer, BLACK, 2 * WIDTH * HEIGHT ); /* Clear screen */ drawCross( lcdCalibPoints[ 1 ].x, lcdCalibPoints[ 1 ].y, COLOR ); TFT_DrawString(40, 130, "Tap green marker" ); P[ 1 ] = getTouchTapSample10bit(); memset( frameBuffer, BLACK, 2 * WIDTH * HEIGHT ); /* Clear screen */ drawCross( lcdCalibPoints[ 2 ].x, lcdCalibPoints[ 2 ].y, COLOR ); TFT_DrawString(20, 180, "Tap green marker" ); P[ 2 ] = getTouchTapSample10bit(); setCalibrationMatrix( (POINT*)&lcdCalibPoints,/* Display coordinates*/ &P[0], /* Touch coordinates */ &calibFactors ); /* Calibration factor matrix*/ memset( frameBuffer, BLACK, 2 * WIDTH * HEIGHT ); /* Clear screen */ TFT_DrawString(10, 100, "The touch screen is" ); TFT_DrawString(30, 130, "now calibrated !" ); } /* Display help screen */ else if ( buttons & BC_UIF_PB3 ) { displayHelpScreen(); while ( readButtons() & BC_UIF_PB3 ) {} } } while ( ( buttons & EXIT_LOOP ) == 0 ); } else { BSP_LedsSet(0x8001); delayMs(200); } } }
int main() { signal(SIGINT, INThandler); int xres,yres,x; int Xsamples[20]; int Ysamples[20]; int screenXmax, screenXmin; int screenYmax, screenYmin; float scaleXvalue, scaleYvalue; int rawX, rawY, rawPressure, scaledX, scaledY; int Xaverage = 0; int Yaverage = 0; if (openTouchScreen() == 1) perror("error opening touch screen"); getTouchScreenDetails(&screenXmin,&screenXmax,&screenYmin,&screenYmax); framebufferInitialize(&xres,&yres); scaleXvalue = ((float)screenXmax-screenXmin) / xres; printf ("X Scale Factor = %f\n", scaleXvalue); scaleYvalue = ((float)screenYmax-screenYmin) / yres; printf ("Y Scale Factor = %f\n", scaleYvalue); int h; int sample; while(1){ for (sample = 0; sample < SAMPLE_AMOUNT; sample++){ getTouchSample(&rawX, &rawY, &rawPressure); Xsamples[sample] = rawX; Ysamples[sample] = rawY; } Xaverage = 0; Yaverage = 0; for ( x = 0; x < SAMPLE_AMOUNT; x++ ){ Xaverage += Xsamples[x]; Yaverage += Ysamples[x]; } Xaverage = Xaverage/SAMPLE_AMOUNT; Yaverage = Yaverage/SAMPLE_AMOUNT; scaledX = Xaverage / scaleXvalue; scaledY = Yaverage / scaleYvalue; drawSquare(scaledX, scaledY,5,5,WHITE); } }
// wait for a specific character void waituntil(int w,int h,int endchar) { int key; int rawX, rawY, rawPressure,i; int Toggle=0; for (;;) { //Start(w,h); if (getTouchSample(&rawX, &rawY, &rawPressure)==0) continue; printf("x=%d y=%d\n",rawX,rawY); if(IsDisplayOn==0) { printf("Display ON\n"); TransmitStop(); ReceiveStop(); init(&wscreen, &hscreen); Start(wscreen,hscreen); IsDisplayOn=1; SelectPTT(15,0); SelectPTT(16,0); UpdateWindow(); //usleep(500000); continue; } for(i=0;i<IndexButtonInArray;i++) { if(IsButtonPushed(i,rawX,rawY)==1) { printf("Button Event %d\n",i); if((i>=0)&&(i<=4)) //SR { SelectSR(i); } if((i>=5)&&(i<=9)) //FEC { SelectFec(i); } if((i>=10)&&(i<=14)) //Source { SelectSource(i,1); } if((i>=15)&&(i<=16)) //Source { printf("Status %d\n",GetButtonStatus(i)); if((i==15)&&(GetButtonStatus(i)==0)) { usleep(500000); SelectPTT(i,1); UpdateWindow(); TransmitStart(); break; } if((i==15)&&(GetButtonStatus(i)==1)) { TransmitStop(); usleep(500000); SelectPTT(i,0); UpdateWindow(); break; } if(i==16) { printf("DISPLAY OFF \n"); finish(); ReceiveStart(); IsDisplayOn=0; usleep(500000); } } if(IsDisplayOn==1) { UpdateWindow(); // DrawButton(i); // End(); } /*if((i==0)&&(GetButtonStatus(i)==0)) { printf("DISPLAY OFF \n"); finish(); IsDisplayOn=0; } if((i==0)&&(GetButtonStatus(i)==1)) { printf("DISPLAY ON \n"); init(&wscreen, &hscreen); Start(wscreen,hscreen); IsDisplayOn=1; UpdateWindow(); }*/ //FixMe : Add a Antibounce } } //circleCursor(scaledX,h-scaledY); // key = getchar(); // if (key == endchar || key == '\n') { // break; // } } }