Example #1
0
File: main.c Project: dougvk/CS223
// ------------------------------------------------------------------------
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 );
}
Example #2
0
File: game.c Project: dougvk/CS223
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;
}
Example #3
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;
}