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