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 U32 x_start;
00180 U32 y_start;
00181 U32 x_size;
00182 U32 y_size;
00183 U32 color;
00184 demo_color_t demo_color=DEMO_COLOR_ALL;
00185 demo_display_t demo_display=DEMO_DISPLAY_WHEEL;
00186 Bool touch_states[QT60168_TOUCH_NUMBER_OF_SENSORS];
00187
00188
00189 pm_switch_to_osc0(&AVR32_PM, FOSC0, OSC0_STARTUP);
00190
00191
00192 init_dbg_rs232(FOSC0);
00193
00194
00195 qt60168_resources_init();
00196
00197
00198 qt60168_init(FOSC0);
00199
00200
00201 et024006_Init( FOSC0, FOSC0);
00202
00203
00204 et024006_DrawFilledRect(0, 0, ET024006_WIDTH, ET024006_HEIGHT, BLACK );
00205
00206
00207 gpio_set_gpio_pin(ET024006DHU_BL_PIN);
00208
00209
00210 et024006_PrintString("QT60168 EXAMPLE", (const unsigned char *)&FONT8x8, 110, 5, WHITE, -1);
00211 et024006_PrintString("Press the QTouch sensors.", (const unsigned char *)&FONT6x8, 95, 20, WHITE, -1);
00212 et024006_PrintString("Color: All", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00213 et024006_PrintString("Display sensors", (const unsigned char *)&FONT6x8, 120, 200, WHITE, -1);
00214
00215 et024006_DrawLine(DEMO_START_X, DEMO_START_Y-1, DEMO_START_X+DEMO_SIZE_X, DEMO_START_Y-1, WHITE );
00216 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 );
00217
00218
00219 for( i=0 ; i<QT60168_TOUCH_NUMBER_OF_SENSORS ; i++ )
00220 touch_states[i] = qt60168_is_key_pressed(i);
00221
00222 while(1)
00223 {
00224 for( i=0 ; i<QT60168_TOUCH_NUMBER_OF_SENSORS ; i++)
00225 {
00226
00227
00228 if( !touch_states[i] && qt60168_is_key_pressed(i) )
00229 {
00230 touch_states[i] = TRUE;
00231
00232 if( i==QT60168_TOUCH_SENSOR_BUTTON_0 )
00233 {
00234 gpio_tgl_gpio_pin(LED0_GPIO);
00235 et024006_PrintString("B0", (const unsigned char *)&FONT6x8, 10, 215, WHITE, -1);
00236 demo_color=(demo_color+1) % DEMO_COLOR_MAX;
00237
00238
00239 et024006_DrawFilledRect(10, 200, 80, 10, BLACK );
00240 switch( demo_color )
00241 {
00242 case DEMO_COLOR_BLUE:
00243 et024006_PrintString("Color: Blue", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00244 break;
00245 case DEMO_COLOR_RED:
00246 et024006_PrintString("Color: Red", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00247 break;
00248 case DEMO_COLOR_GREEN:
00249 et024006_PrintString("Color: Green", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00250 break;
00251 default:
00252 et024006_PrintString("Color: All", (const unsigned char *)&FONT6x8, 10, 200, WHITE, -1);
00253 break;
00254 }
00255 continue;
00256 }
00257
00258 if( i==QT60168_TOUCH_SENSOR_BUTTON_1 )
00259 {
00260 gpio_tgl_gpio_pin(LED1_GPIO);
00261 et024006_PrintString("B1", (const unsigned char *)&FONT6x8, 30, 215, WHITE, -1);
00262 demo_display=(demo_display+1) % DEMO_DISPLAY_MAX;
00263
00264
00265 et024006_DrawFilledRect(120, 200, 160, 10, BLACK );
00266 switch( demo_display )
00267 {
00268 case DEMO_DISPLAY_WHEEL:
00269 et024006_PrintString("Display sensors", (const unsigned char *)&FONT6x8, 120, 200, WHITE, -1);
00270 break;
00271 case DEMO_DISPLAY_BOXES:
00272 default:
00273 et024006_PrintString("Display random boxes", (const unsigned char *)&FONT6x8, 120, 200, WHITE, -1);
00274 break;
00275 }
00276
00277 et024006_DrawFilledRect(DEMO_START_X, DEMO_START_Y, DEMO_SIZE_X, DEMO_SIZE_Y, BLACK );
00278 continue;
00279 }
00280
00281
00282 if( demo_display==DEMO_DISPLAY_BOXES )
00283 {
00284 x_start = DEMO_START_X + rand()%DEMO_SIZE_X;
00285 y_start = DEMO_START_Y + rand()%DEMO_SIZE_Y;
00286 x_size = rand()%(DEMO_START_X+DEMO_SIZE_X-x_start);
00287 y_size = rand()%(DEMO_START_Y+DEMO_SIZE_Y-y_start);
00288 color = rand()%0x10000;
00289 switch( demo_color )
00290 {
00291 case DEMO_COLOR_BLUE:
00292 color = color & BLUE;
00293 break;
00294 case DEMO_COLOR_RED:
00295 color = color & RED;
00296 break;
00297 case DEMO_COLOR_GREEN:
00298 color = color & GREEN;
00299 break;
00300 default:
00301 break;
00302 }
00303
00304 et024006_DrawFilledRect(
00305 x_start
00306 , y_start
00307 , x_size
00308 , y_size
00309 , color );
00310 }
00311
00312
00313 et024006_DrawFilledRect(80 + 16*i, 215-2, 10, 10, WHITE );
00314 gpio_tgl_gpio_pin(LED2_GPIO);
00315 }
00316
00317
00318
00319 if(touch_states[i] && !qt60168_is_key_pressed(i))
00320 {
00321 touch_states[i] = FALSE;
00322 if( i==QT60168_TOUCH_SENSOR_BUTTON_0 )
00323 {
00324
00325 et024006_DrawFilledRect(10, 215-2, 12, 12, BLACK );
00326 continue;
00327 }
00328
00329 if( i==QT60168_TOUCH_SENSOR_BUTTON_1 )
00330 {
00331
00332 et024006_DrawFilledRect(30, 215-2, 12, 12, BLACK );
00333 continue;
00334 }
00335
00336
00337 et024006_DrawFilledRect(80 + 16*i, 215-2, 10, 10, BLACK );
00338 }
00339 }
00340
00341 if( demo_display==DEMO_DISPLAY_WHEEL )
00342 {
00343 if( touch_states[QT60168_TOUCH_SENSOR_BUTTON_0] ) color = WHITE;
00344 else color = BLUE;
00345 et024006_DrawFilledRect(30, 50, DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00346
00347 if( touch_states[QT60168_TOUCH_SENSOR_BUTTON_1] ) color = WHITE;
00348 else color = BLUE;
00349 et024006_DrawFilledRect(30, 80, DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00350
00351 if( touch_states[QT60168_TOUCH_SENSOR_BUTTON_2] ) color = WHITE;
00352 else color = BLUE;
00353 et024006_DrawFilledRect(30, 110, DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00354
00355 if( touch_states[QT60168_TOUCH_SENSOR_BUTTON_3] ) color = WHITE;
00356 else color = BLUE;
00357 et024006_DrawFilledRect(30, 140, DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00358
00359 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_0] ) color = WHITE;
00360 else color = BLUE;
00361 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN0,
00362 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS0,
00363 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00364
00365 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_1] ) color = WHITE;
00366 else color = BLUE;
00367 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN30,
00368 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS30,
00369 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00370
00371 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_2] ) color = WHITE;
00372 else color = BLUE;
00373 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN60,
00374 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS60,
00375 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00376
00377 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_3] ) color = WHITE;
00378 else color = BLUE;
00379 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN90,
00380 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS90,
00381 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00382
00383 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_4] ) color = WHITE;
00384 else color = BLUE;
00385 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN60,
00386 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS60,
00387 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00388
00389 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_5] ) color = WHITE;
00390 else color = BLUE;
00391 et024006_DrawFilledRect(DEMO_WHEEL_START_X + DEMO_WHEEL_RADIUS*SIN30,
00392 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS30,
00393 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00394
00395 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_6] ) color = WHITE;
00396 else color = BLUE;
00397 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN0,
00398 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS0,
00399 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00400
00401 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_7] ) color = WHITE;
00402 else color = BLUE;
00403 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN30,
00404 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS30,
00405 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00406
00407 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_8] ) color = WHITE;
00408 else color = BLUE;
00409 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN60,
00410 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS60,
00411 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00412
00413 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_9] ) color = WHITE;
00414 else color = BLUE;
00415 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN90,
00416 DEMO_WHEEL_START_Y + DEMO_WHEEL_RADIUS*COS90,
00417 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00418
00419 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_10] ) color = WHITE;
00420 else color = BLUE;
00421 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN60,
00422 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS60,
00423 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00424
00425 if( touch_states[QT60168_TOUCH_SENSOR_WHEEL_11] ) color = WHITE;
00426 else color = BLUE;
00427 et024006_DrawFilledRect(DEMO_WHEEL_START_X - DEMO_WHEEL_RADIUS*SIN30,
00428 DEMO_WHEEL_START_Y - DEMO_WHEEL_RADIUS*COS30,
00429 DEMO_WHEEL_SIZE_X, DEMO_WHEEL_SIZE_Y, color );
00430 }
00431 }
00432 }