int  main() {
	int c, res ,seq = 0 ,len;
	unsigned char result, serialRead;
	struct sockaddr_in receiver_addr;
	int sock_fd;

	/* Prepare Serial Port */
	if(serialOpen() != 0) return -1;
	signal(SIGINT, interrupt); //set ctrl-c handler

	/* Prepare Socket */
	sock_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	receiver_addr.sin_family = AF_INET;
	if( inet_aton( ADDR,  &receiver_addr.sin_addr )== 0) {
		printf("Crap!, Init failed\n");
		close(sock_fd);
		return;
	}
	receiver_addr.sin_port = htons( PORT );

	while (isrunning) {   /*endless loop until ctrl-c is typed */
		serialRead = serialReadChar();
		printf("value is %c\n", serialRead);
		makeATCommand(at_command,seq,serialRead);
		len = strlen(at_command);
		sendto(sock_fd, at_command, len, 0,(struct sockaddr*)&receiver_addr,sizeof(receiver_addr));
		seq ++;
		
	}
 	
 	close(sock_fd);
	serialClose();

	return 0;
}
void makeATCommand(char *at_command,int seq,char serialRead){
	strcpy(at_command,"");
	char at[5] = "AT*" ,command[9],seri_num[6];
	strcpy(at_command,at);
	sprintf(seri_num,"%d",seq);

	if(serialRead == 'k'){
		//takeoff
		strcat(at_command,"REF=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"290718208\r");
		return;

	}else if(serialRead == 'j'){
		//landing
		strcat(at_command,"REF=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"290717696\r");
		return;

	}else if(serialRead == 'w'){
		//move forward
		strcat(at_command,"PCMD=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"1,0,-1102263091,0,0\r");
		return;

	}else if(serialRead == 's'){
		//move backward
		strcat(at_command,"PCMD=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"1,0,1045220577,0,0\r");
		return;


	}else if(serialRead == 'd'){
		//move to right
		strcat(at_command,"PCMD=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"1,1045220557,0,0,0\r");
		return;
		
	}else if(serialRead == 'a'){
		//move left
		strcat(at_command,"PCMD=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"1,-1102263091,0,0,0\r");
		return;

	}else if(serialRead == '1'){
		//rise upward
		strcat(at_command,"PCMD=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"1,0,0,1102263091,0\r");
		return;
		
	}else if(serialRead == '3'){
		//rise downward
		strcat(at_command,"PCMD=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"1,0,0,-1102263091,0\r");
		return;
		
	}
	else if(serialRead == 'e'){
		//rotate right
		strcat(at_command,"PCMD=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"1,0,0,0,1102263091\r");
		return;
		
	}else if(serialRead == 'q'){
		//rotate left
		strcat(at_command,"PCMD=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"1,0,0,0,-1102263091\r");
		return;
		
	}else if(serialRead == 'x' | serialRead == '2'){
		//hover
		strcat(at_command,"PCMD=");
		strcat(at_command,seri_num);
		strcat(at_command,",");
		strcat(at_command,"0,0,0,0,0\r");
		return;
		
	}else {
		//watchdog
		serialReadChar();
		strcat(at_command,"COMWDG=");
		strcat(at_command,seri_num);
		strcat(at_command,"\r");
		return;
		
	}

}
Exemple #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;
}