00001
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00078
00079 #include "board.h"
00080 #include "gpio.h"
00081 #include "spi.h"
00082 #include "pm.h"
00083 #include "gpio.h"
00084 #include "spi.h"
00085 #include "print_funcs.h"
00086 #include "usart.h"
00087 #include "et024006dhu.h"
00088
00089 #include "qt60168.h"
00090 #include "conf_qt60168.h"
00091
00092 #define DEMO_START_X 0
00093 #define DEMO_START_Y 38
00094 #define DEMO_SIZE_X ET024006_WIDTH
00095 #define DEMO_SIZE_Y 160
00096
00097 #define DEMO_WHEEL_RADIUS 60 // in pixels
00098 #define DEMO_WHEEL_START_X ET024006_WIDTH/2 - DEMO_WHEEL_SIZE_X/2 // in pixels
00099 #define DEMO_WHEEL_START_Y ET024006_HEIGHT/2 - DEMO_WHEEL_SIZE_Y/2 // in pixels
00100 #define DEMO_WHEEL_SIZE_X 20 // in pixels
00101 #define DEMO_WHEEL_SIZE_Y 20 // in pixels
00102
00103 #define SIN0 0
00104 #define SIN30 0.5
00105 #define SIN60 0.87
00106 #define SIN90 1
00107
00108 #define COS0 1
00109 #define COS30 0.87
00110 #define COS60 0.5
00111 #define COS90 0
00112
00113
00114
00117 static void qt60168_resources_init(void)
00118 {
00119 static const gpio_map_t QT60168_SPI_GPIO_MAP =
00120 {
00121 {QT60168_SPI_SCK_PIN, QT60168_SPI_SCK_FUNCTION },
00122 {QT60168_SPI_MISO_PIN, QT60168_SPI_MISO_FUNCTION },
00123 {QT60168_SPI_MOSI_PIN, QT60168_SPI_MOSI_FUNCTION },
00124 {QT60168_SPI_NPCS0_PIN, QT60168_SPI_NPCS0_FUNCTION}
00125 };
00126
00127
00128 spi_options_t spiOptions =
00129 {
00130 .reg = QT60168_SPI_NCPS,
00131 .baudrate = QT60168_SPI_MASTER_SPEED,
00132 .bits = QT60168_SPI_BITS,
00133 .spck_delay = 0,
00134 .trans_delay = 0,
00135 .stay_act = 0,
00136 .spi_mode = 3,
00137 .modfdis = 1
00138 };
00139
00140
00141 gpio_enable_module(QT60168_SPI_GPIO_MAP,
00142 sizeof(QT60168_SPI_GPIO_MAP) / sizeof(QT60168_SPI_GPIO_MAP[0]));
00143
00144
00145 spi_initMaster(QT60168_SPI, &spiOptions);
00146
00147
00148 spi_selectionMode(QT60168_SPI, 0, 0, 0);
00149
00150
00151 spi_enable(QT60168_SPI);
00152
00153
00154 spi_setupChipReg(QT60168_SPI, &spiOptions, FOSC0);
00155 }
00156
00157
00158 typedef enum
00159 {
00160 DEMO_COLOR_ALL=0
00161 , DEMO_COLOR_BLUE
00162 , DEMO_COLOR_RED
00163 , DEMO_COLOR_GREEN
00164 , DEMO_COLOR_MAX
00165 } demo_color_t;
00166
00167 typedef enum
00168 {
00169 DEMO_DISPLAY_BOXES=0
00170 , DEMO_DISPLAY_WHEEL
00171 , DEMO_DISPLAY_MAX
00172 } demo_display_t;
00173
00176 int main(void)
00177 {
00178 int i;
00179 Bool idle=FALSE;
00180 U32 x_start;
00181 U32 y_start;
00182 U32 x_size;
00183 U32 y_size;
00184 U16 color;
00185 const U16 icon[QT60168_TOUCH_NUMBER_OF_SENSORS] = {0, 1*16, 2*16, 3*16, 4*16, 5*16, -1, -1, 6*16, 7*16, 8*16, 9*16, 10*16, 11*16, -1, -1};
00186 demo_color_t demo_color=DEMO_COLOR_ALL;
00187 demo_display_t demo_display=DEMO_DISPLAY_WHEEL;
00188 Bool touch_states[QT60168_TOUCH_NUMBER_OF_SENSORS];
00189
00190
00191 pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);
00192
00193
00194 init_dbg_rs232(FOSC0);
00195
00196
00197 qt60168_resources_init();
00198
00199
00200 qt60168_init(FOSC0);
00201
00202
00203 et024006_Init( FOSC0, FOSC0);
00204
00205
00206 et024006_DrawFilledRect(0, 0, ET024006_WIDTH, ET024006_HEIGHT, BLACK );
00207
00208
00209 gpio_set_gpio_pin(ET024006DHU_BL_PIN);
00210
00211
00212 et024006_PrintString("QT60168 EXAMPLE", (const unsigned char *)&FONT8x8, 110, 5, WHITE, -1);
00213 et024006_PrintString("Press the QTouch sensors.", (const unsigned char *)&FONT6x8, 95, 20, WHITE, -1);
00214 et024006_PrintString("Color: All", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00215 et024006_PrintString("Display sensors", (const unsigned char *)&FONT6x8, 120, 200, WHITE, -1);
00216
00217 et024006_DrawLine(DEMO_START_X, DEMO_START_Y-1, DEMO_START_X+DEMO_SIZE_X, DEMO_START_Y-1, WHITE );
00218 et024006_DrawLine(DEMO_START_X, DEMO_START_Y+DEMO_SIZE_Y+1, DEMO_START_X+DEMO_SIZE_X, DEMO_START_Y+DEMO_SIZE_Y+1, WHITE );
00219
00220
00221 for( i=0 ; i<QT60168_TOUCH_NUMBER_OF_SENSORS ; i++ )
00222 touch_states[i] = qt60168_is_key_pressed(i);
00223
00224
00225 gpio_set_gpio_pin(LED0_GPIO);
00226 gpio_set_gpio_pin(LED1_GPIO);
00227 gpio_set_gpio_pin(LED2_GPIO);
00228 gpio_set_gpio_pin(LED3_GPIO);
00229
00230 while(1)
00231 {
00232 for( i=0 ; i<QT60168_TOUCH_NUMBER_OF_SENSORS ; i++)
00233 {
00234
00235
00236 if( !touch_states[i] && qt60168_is_key_pressed(i) )
00237 {
00238 touch_states[i] = TRUE;
00239
00240 if( i==QT60168_TOUCH_SENSOR_BUTTON_0 )
00241 {
00242 gpio_tgl_gpio_pin(LED0_GPIO);
00243 et024006_PrintString("B0", (const unsigned char *)&FONT6x8, 10, 215, WHITE, -1);
00244 demo_color=(demo_color+1) % DEMO_COLOR_MAX;
00245
00246
00247 et024006_DrawFilledRect(10, 200, 80, 10, BLACK );
00248 switch( demo_color )
00249 {
00250 case DEMO_COLOR_BLUE:
00251 et024006_PrintString("Color: Blue", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00252 break;
00253 case DEMO_COLOR_RED:
00254 et024006_PrintString("Color: Red", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00255 break;
00256 case DEMO_COLOR_GREEN:
00257 et024006_PrintString("Color: Green", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00258 break;
00259 default:
00260 et024006_PrintString("Color: All", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00261 break;
00262 }
00263 }
00264 else if( i==QT60168_TOUCH_SENSOR_BUTTON_1 )
00265 {
00266 gpio_tgl_gpio_pin(LED1_GPIO);
00267 et024006_PrintString("B1", (const unsigned char *)&FONT6x8, 30, 215, WHITE, -1);
00268 demo_display=(demo_display+1) % DEMO_DISPLAY_MAX;
00269
00270
00271 et024006_DrawFilledRect(120, 200, 160, 10, BLACK );
00272 switch( demo_display )
00273 {
00274 case DEMO_DISPLAY_WHEEL:
00275 et024006_PrintString("Display sensors", (const unsigned char *)&FONT6x8, 120, 200, WHITE, -1);
00276 break;
00277 case DEMO_DISPLAY_BOXES:
00278 default:
00279 et024006_PrintString("Display random boxes", (const unsigned char *)&FONT6x8, 120, 200, WHITE, -1);
00280 break;
00281 }
00282
00283 et024006_DrawFilledRect(DEMO_START_X, DEMO_START_Y, DEMO_SIZE_X, DEMO_SIZE_Y, BLACK );
00284 }
00285 else if( i==QT60168_TOUCH_SENSOR_BUTTON_2 )
00286 {
00287 gpio_tgl_gpio_pin(LED2_GPIO);
00288 et024006_PrintString("B2", (const unsigned char *)&FONT6x8, 50, 215, WHITE, -1);
00289 }
00290
00291 else if( i==QT60168_TOUCH_SENSOR_BUTTON_3 )
00292 {
00293 gpio_tgl_gpio_pin(LED3_GPIO);
00294 et024006_PrintString("B3", (const unsigned char *)&FONT6x8, 70, 215, WHITE, -1);
00295 }
00296 else
00297 {
00298
00299 idle = FALSE;
00300
00301
00302 et024006_DrawFilledRect(100 + icon[i], 215-2, 10, 10, WHITE );
00303 }
00304 }
00305
00306
00307
00308
00309
00310 if(touch_states[i] && !qt60168_is_key_pressed(i))
00311 {
00312 touch_states[i] = FALSE;
00313 if( i==QT60168_TOUCH_SENSOR_BUTTON_0 )
00314 {
00315 et024006_DrawFilledRect(10, 215-2, 12, 12, BLACK );
00316 }
00317 else if( i==QT60168_TOUCH_SENSOR_BUTTON_1 )
00318 {
00319 et024006_DrawFilledRect(30, 215-2, 12, 12, BLACK );
00320 }
00321 else if( i==QT60168_TOUCH_SENSOR_BUTTON_2 )
00322 {
00323 et024006_DrawFilledRect(50, 215-2, 12, 12, BLACK );
00324 }
00325 else if( i==QT60168_TOUCH_SENSOR_BUTTON_3 )
00326 {
00327 et024006_DrawFilledRect(70, 215-2, 12, 12, BLACK );
00328 }
00329 else
00330 {
00331 et024006_DrawFilledRect(100 + icon[i], 215-2, 10, 10, BLACK );
00332 }
00333 }
00334 }
00335
00336
00337
00338 if( demo_display==DEMO_DISPLAY_WHEEL )
00339 {
00340 if( touch_states[QT60168_TOUCH_SENSOR_BUTTON_0] ) color = WHITE;
00341 else color = BLUE;
00342 et024006_DrawFilledRect(30, 50, DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00343
00344 if( touch_states[QT60168_TOUCH_SENSOR_BUTTON_1] ) color = WHITE;
00345 else color = BLUE;
00346 et024006_DrawFilledRect(30, 80, DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00347
00348 if( touch_states[QT60168_TOUCH_SENSOR_BUTTON_2] ) color = WHITE;
00349 else color = BLUE;
00350 et024006_DrawFilledRect(30, 110, DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00351
00352 if( touch_states[QT60168_TOUCH_SENSOR_BUTTON_3] ) color = WHITE;
00353 else color = BLUE;
00354 et024006_DrawFilledRect(30, 140, DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00355
00356 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_0] ) color = WHITE;
00357 else color = BLUE;
00358 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN0,
00359 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS0,
00360 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00361
00362 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_1] ) color = WHITE;
00363 else color = BLUE;
00364 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN30,
00365 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS30,
00366 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00367
00368 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_2] ) color = WHITE;
00369 else color = BLUE;
00370 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN60,
00371 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS60,
00372 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00373
00374 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_3] ) color = WHITE;
00375 else color = BLUE;
00376 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN90,
00377 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS90,
00378 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00379
00380 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_4] ) color = WHITE;
00381 else color = BLUE;
00382 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN60,
00383 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS60,
00384 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00385
00386 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_5] ) color = WHITE;
00387 else color = BLUE;
00388 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN30,
00389 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS30,
00390 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00391
00392 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_6] ) color = WHITE;
00393 else color = BLUE;
00394 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN0,
00395 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS0,
00396 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00397
00398 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_7] ) color = WHITE;
00399 else color = BLUE;
00400 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN30,
00401 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS30,
00402 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00403
00404 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_8] ) color = WHITE;
00405 else color = BLUE;
00406 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN60,
00407 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS60,
00408 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00409
00410 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_9] ) color = WHITE;
00411 else color = BLUE;
00412 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN90,
00413 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS90,
00414 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00415
00416 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_10] ) color = WHITE;
00417 else color = BLUE;
00418 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN60,
00419 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS60,
00420 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00421
00422 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_11] ) color = WHITE;
00423 else color = BLUE;
00424 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN30,
00425 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS30,
00426 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00427 }
00428
00429 else if( !idle && ( demo_display==DEMO_DISPLAY_BOXES ) )
00430 {
00431 idle = TRUE;
00432 x_start = DEMO_START_X + rand()%DEMO_SIZE_X;
00433 y_start = DEMO_START_Y + rand()%DEMO_SIZE_Y;
00434 x_size = rand()%(DEMO_START_X+DEMO_SIZE_X-x_start);
00435 y_size = rand()%(DEMO_START_Y+DEMO_SIZE_Y-y_start);
00436 color = rand()%0x10000;
00437 switch( demo_color )
00438 {
00439 case DEMO_COLOR_BLUE:
00440 color = color & BLUE;
00441 break;
00442 case DEMO_COLOR_RED:
00443 color = color & RED;
00444 break;
00445 case DEMO_COLOR_GREEN:
00446 color = color & GREEN;
00447 break;
00448 default:
00449 break;
00450 }
00451
00452 et024006_DrawFilledRect(
00453 x_start
00454 , y_start
00455 , x_size
00456 , y_size
00457 , color );
00458 }
00459 }
00460 }