int main(int argc, char *argv[]) { #ifdef __XENO__ struct sched_param param = { 99 }; mlockall(MCL_CURRENT | MCL_FUTURE); pthread_setschedparam(pthread_self(), SCHED_FIFO, ¶m); #endif if (!raspi_map_hw()) { perror("Could not map hardware registers"); exit(1); } #ifdef __XENO__ pthread_set_mode_np(0, PTHREAD_WARNSW|PTHREAD_PRIMARY); #endif gpio_configure(16, Output); for (;;) { gpio_set(16); sleep(1); gpio_clear(16); sleep(1); } #ifdef __XENO__ pthread_set_mode_np(PTHREAD_WARNSW, 0); #endif return 1; }
static void check_value_inner(const char *fn, int line, const char *msg, int value, int expected) { if (value == expected) return; pthread_set_mode_np(PTHREAD_WARNSW, 0); fprintf(stderr, "FAILURE %s:%d: %s returned %u instead of %u\n", fn, line, msg, value, expected); exit(EXIT_FAILURE); }
int main(int argc, char **argv) { unsigned char *zero_mem, *test1_mem, *test2_mem; struct sched_param param = { .sched_priority = 1 }; struct timespec zero = { .tv_sec = 0, .tv_nsec = 0 }; struct sigaction sa; zero_mem = check_mmap(mmap(0, MEMSIZE, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0)); test1_mem = check_mmap(mmap(0, MEMSIZE, PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0)); sigemptyset(&sa.sa_mask); sa.sa_sigaction = sigdebug_handler; sa.sa_flags = SA_SIGINFO; check_unix(sigaction(SIGDEBUG, &sa, NULL)); check_unix(mlockall(MCL_CURRENT | MCL_FUTURE)); check_pthread(pthread_setschedparam(pthread_self(), SCHED_FIFO, ¶m)); printf("memory read\n"); check_value("read mem", test1_mem[0], 0); pthread_set_mode_np(PTHREAD_WARNSW, 0); test2_mem = check_mmap(mmap(0, MEMSIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0)); check_unix(mprotect(test2_mem, MEMSIZE, PROT_READ | PROT_WRITE | PROT_EXEC)); nanosleep(&zero, NULL); pthread_set_mode_np(0, PTHREAD_WARNSW); printf("memory write after exec enable\n"); test2_mem[0] = 0xff; pthread_set_mode_np(PTHREAD_WARNSW, 0); check_unix(mprotect(test1_mem, MEMSIZE, PROT_READ | PROT_WRITE)); nanosleep(&zero, NULL); pthread_set_mode_np(0, PTHREAD_WARNSW); printf("memory write after write enable\n"); test1_mem[0] = 0xff; check_value("read zero", zero_mem[0], 0); pthread_set_mode_np(PTHREAD_WARNSW, 0); test1_mem = check_mmap(mmap(0, MEMSIZE, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0)); check_unix(mprotect(test1_mem, MEMSIZE, PROT_READ | PROT_WRITE)); printf("memory read/write after access enable\n"); check_value("read mem", test1_mem[0], 0); test1_mem[0] = 0xff; check_value("read zero", zero_mem[0], 0); fprintf(stderr, "Test OK\n"); return 0; }
int main(int argc, char *argv[]) { #ifdef __XENO__ struct sched_param param = { 99 }; mlockall(MCL_CURRENT | MCL_FUTURE); pthread_setschedparam(pthread_self(), SCHED_FIFO, ¶m); #endif if (!raspi_map_hw()) { perror("Could not map hardware registers"); exit(1); } #ifdef __XENO__ pthread_set_mode_np(0, PTHREAD_WARNSW|PTHREAD_PRIMARY); #endif // ILI9341(int8_t _CS, int8_t _DC, int8_t _RST, int8_t _BL, int8_t _MOSI, int8_t _SCLK, int8_t _MISO); ILI9341 tft = ILI9341(PIN_CS, PIN_DC, PIN_RESET, PIN_BL, PIN_MOSI, PIN_SCLK, PIN_MISO); printf("Setting up TFT...\n"); tft.begin(); g_HWSPI=0; if (argc > 1) { g_HWSPI=1; } if (g_HWSPI) { printf("Setup HW SPI parameters...\n"); } else { printf("Setup SW SPI (Bit-Banger) parameters...\n"); } printf("HWReset done, initializing display\n") ; int i, colors[8] = { ILI9341_BLACK, ILI9341_BLUE, ILI9341_RED, ILI9341_GREEN, ILI9341_CYAN, ILI9341_MAGENTA, ILI9341_WHITE, ILI9341_YELLOW }; begin(); printf("Done intializing, now fill screens...\n"); for (i=0;i<8 ;i++ ) { fillScreen(ILI9341_BLACK); //sleep(1); fillScreen(colors[i]); //sleep (2); } printf("Setting up for HWreset\n"); printf("Benchmark\tTime (microseconds)\n"); printf("Screen fill\t%f\n", testFillScreen()); sl_delay(500); printf("Text\t%f\n",testText()); sl_delay(3000); printf("Lines\t%f\n",testLines(ILI9341_CYAN)); sl_delay(500); printf("Horiz/Vert Lines\t%f\n", testFastLines(ILI9341_RED, ILI9341_BLUE)); sl_delay(500); printf("Rectangles (outline)\t%f",testRects(ILI9341_GREEN)); sl_delay(500); printf("Rectangles (filled)\t%f\n", testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA)); sl_delay(500); printf("Circles (filled)\t%f\n", testFilledCircles(10, ILI9341_MAGENTA)); printf("Circles (outline)\t%f\n", testCircles(10, ILI9341_WHITE)); sl_delay(500); printf("Triangles (outline)\t%f\n", testTriangles()); sl_delay(500); printf("Triangles (filled)\t%f\n", testFilledTriangles()); sl_delay(500); printf("Rounded rects (outline)\t%f\n", testRoundRects()); sl_delay(500); printf("Rounded rects (filled)\t%f\n", testFilledRoundRects()); sl_delay(500); printf("Done!\n"); for(uint8_t rotation=0; rotation<4; rotation++) { tft.setRotation(rotation); testText(); sl_delay(1000); } #ifdef __XENO__ pthread_set_mode_np(PTHREAD_WARNSW, 0); #endif return 1; }