// ------------------------------------------------------------------------ int main( int argc, char *argv[] ) { // Create a hex board Hexboard hb = newHex( 11, 100.0, 100.0, 20); // Debugging printout printf("Created board of dimension %d\n", boardSizeHex( hb )); const Geometry* g = getGeoHex( hb ); printf("Bounding box of board: %g %g %g %g\n", g->x0, g->y0, g->x1, g->y1); printf("Hexagon dimensions:\n" " radius of inscribed circle = %g\n" " radius of circumscribed circle = %g\n" "-----------------------------------------------\n", g->h, g->s); // Create the game Game game = newGame( hb ); // Run the game startController( game, argc, argv ); // Clean up freeGame(game); freeHex( hb ); }
int main(int argc, char* argv[]) { // check for exactly one command line argument if (argc != 2) { fatal("TOO MANY ARGUMENTS\n", argv[0]); } char* infile = argv[1]; // try to open the file printf("Starting hex player on input file \"%s\"\n", infile); FILE* in; // defines in to be a stream in = fopen(infile, "r"); if (in == NULL) { fatal("Failed to open file %s for reading\n", infile); } Hexboard board = newHex(11,0,0,10); const Geometry* geom = getGeoHex(board); printf("Created board of dimension %i\n",11); printf("Bounding box of board: %i %i %lg %lg\n", (int) geom->x0, (int) geom->y0, geom->x1, geom->y1); printf("Hexagon dimensions:\n"); printf(" radius of inscribed circle = %lg\n", geom->h); printf(" radius of circumscribed circle = %lg\n", geom->s); printf("-----------------------------------------------\n\n"); int lineno; CellContents color = Red; for(lineno = 1;;lineno++) { if(executeGame(board, in, lineno, &color) == EOF) break; } freeHex(board); fclose(in); return 0; }
int main(int argc, char *argv[]) { FILE *fp; char c; time_t start = time(NULL), end; if ((argc < 3) || (argc > 4)) { printf("Usage:\n%s /dev/port /path/to.hex [q]\n", argv[0]); return 1; } // Open HEX File if ((fp = fopen(argv[2], "r")) == NULL) { printf("Could not open file %s\n", argv[2]); return 1; } // Read it's contents if (readHex(fp) != 0) { printf("Could not parse HEX file %s\n", argv[2]); fclose(fp); return 1; } fclose(fp); if (!isValid()) { printf("HEX-File not valid!\n"); freeHex(); return 1; } uint32_t min = minAddress(); uint32_t max = maxAddress(); uint32_t length = dataLength(); printf("Hex File Path : %s\n", argv[2]); printf("Minimum Address : 0x%X\n", min); printf("Maximum Address : 0x%X\n", max); printf("Data payload : %i bytes\n\n", length); uint8_t *d = (uint8_t *)malloc(length * sizeof(uint8_t)); if (d == NULL) { fprintf(stderr, "Not enough memory (%lu bytes)!\n", length * sizeof(uint8_t)); freeHex(); return 1; } parseData(d); freeHex(); // Open serial port if ((fd = serialOpen(argv[1], 38400, 1)) == -1) { printf("Could not open port %s\n", argv[1]); free(d); return 1; } signal(SIGINT, intHandler); signal(SIGQUIT, intHandler); ping: printf("Pinging bootloader... Stop with CTRL+C\n"); if (argc > 3) { c = argv[3][0]; } else { c = 'f'; } serialWriteChar(fd, c); usleep(PINGDELAY * 1000); if ((serialReadRaw(fd, &c, 1) != 1) || (c != OKAY)) { goto ping; } printf("Got response... Acknowledging...\n"); serialWriteChar(fd, CONFIRM); serialReadChar(fd, &c); if (c != ACK) { printf("Invalid acknowledge! Trying again...\n", c, c); goto ping; } printf("Connection established successfully!\n"); printf("Sending target address...\n"); serialWriteChar(fd, (min & 0xFF000000) >> 24); serialWriteChar(fd, (min & 0x00FF0000) >> 16); serialWriteChar(fd, (min & 0x0000FF00) >> 8); serialWriteChar(fd, min & 0x000000FF); serialReadChar(fd, &c); if (c != OKAY) { printf("Invalid acknowledge from YASAB!\n", c, c); free(d); serialClose(fd); return 1; } printf("Sending data length...\n"); serialWriteChar(fd, (length & 0xFF000000) >> 24); serialWriteChar(fd, (length & 0x00FF0000) >> 16); serialWriteChar(fd, (length & 0x0000FF00) >> 8); serialWriteChar(fd, length & 0x000000FF); serialReadChar(fd, &c); if (c != OKAY) { printf("Invalid acknowledge from YASAB (%x)!\n", c, c); free(d); serialClose(fd); return 1; } printf("\n\n"); for (uint32_t i = 0; i < length; i++) { serialWriteChar(fd, d[i]); if (serialHasChar(fd)) { serialReadChar(fd, &c); if (c == OKAY) { printNextPage(); } else if (c == ERROR) { printf("YASAB aborted the connection!\n"); free(d); serialClose(fd); return 1; } else { printf("Unknown answer from YASAB (%x)!\n", c, c); } } printProgress(i + 1, length); } end = time(NULL); printf("\n\nUpload finished after %3.1f seconds.\n", difftime(end, start)); printf("YASAB - Yet another simple AVR Bootloader\n"); printf("By xythobuz - Visit www.xythobuz.org\n"); free(d); serialClose(fd); return 0; }