void NMEAGPS::setBoatDirection(int bearing){ boat.boatDirection = bearing; q.setProperty("boatDirection", boat.boatDirection); ui->gemap->page()->mainFrame()->evaluateJavaScript("setBoatAngle();"); QString newString = "$IIHDG,"+ QString::number(bearing) +",,,7.1,W"; newString = newString + "*" + generateChecksum(newString); //if(newString != NMEAString){ NMEAString = newString; emit newNMEAString(NMEAString); //} }
int PanasonicProtocol::generateStandardCommand( const PIRKeyBits &pkb, PIRInfraredLED &led) { int duration = 0; // First, the header pulse: led.addPair(headerPulse, headerSpace); duration += (headerPulse + headerSpace); // Similar to the "Kaseikyo" protocol, this protocol is 48 bits long. // In this case, the first 16 bits are a fixed value (defining the // manufacturer?). Next comes eight bits for the "device", eight more // bits for the "subdevice", and then eight bits for the "command". // Finally, the last eight bits are a checksum generated by x-oring the // device, subdevice, and command bytes. // The 16 manufacturer code bits: duration += pushReverseBits(preData, led); // The eight device bits: duration += pushReverseBits(pkb.firstCode, led); // The eight subdevice bits: duration += pushReverseBits(pkb.secondCode, led); // The eight command bits: duration += pushReverseBits(pkb.thirdCode, led); // Finally, the checksum: CommandSequence checksum; generateChecksum(pkb.firstCode, pkb.secondCode, pkb.thirdCode, checksum); duration += pushReverseBits(checksum, led); // Add the trailer pulse: led.addSingle(trailerPulse); duration += trailerPulse; return duration; }
void NMEAGPS::coordinatesChanged() { QString str = "$IIRMC,"; str += ",A,"; str += ui->latLineEdit->text() + ","; if(boat.latitude>=0) str+= "N,"; else{ str+= "S,"; } qDebug() << ui->longLineEdit->text(); str += ui->longLineEdit->text() + ","; if(boat.longnitude<0){ str+= "W,"; } else str+= "E,"; str +=QString::number(boat.boatSpeed)+","; str +="0.0,"; //track made good ??? str +=","; //date str = str + "*" + generateChecksum(str); emit newNMEAString(str); // if(NMEAString!=""){ // } // if(str != NMEAString){ // NMEAString = str; // emit newNMEAString(NMEAString); // } //setBoatMapLocation(lat, lng); }
int main(int argc,char *argv[]) { if(argc < 2) { printError("Usage: <portNumber> <outputFileName>"); } frame messageFrame; int network_socket; int connection_status; struct sockaddr_in server_address,client_address; struct timeval tv; int structure_length = sizeof(client_address); FILE *outputFile; char *outputFileName = argv[2]; char * portNumber = argv[1]; //DATA MEMBERS FOR COMPARISON int checksum = 0; char * const sendMessage = (char*)malloc(sizeof(char)*1); int prevSeq = 1; network_socket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); if(connection_status == -1) { printError("Unable to Create Socket!\n"); } //CLEAR SERVER STRUCTURE memset((char*) &server_address,0,sizeof(server_address)); //FILL IN THE SERVER STRUCTURE server_address.sin_family = AF_INET; server_address.sin_port = htons(atoi(portNumber)); server_address.sin_addr.s_addr = htonl(INADDR_ANY); //BIND SOCKET connection_status = bind(network_socket,(struct sockaddr*) &server_address,sizeof(server_address)); if(connection_status == -1) { perror("Cannot Bind Port\n!"); } outputFile = fopen(outputFileName,"wb"); /* Set Timeout */ tv.tv_sec = 1; tv.tv_usec = 0; /* Set socket option to timeout on recvfrom */ setsockopt(network_socket, SOL_SOCKET, SO_RCVTIMEO, (char*)&tv, sizeof(struct timeval)); //START THE RECEPTION LOOP while(1) { printf("Waiting for Data...\n"); connection_status = recvfrom(network_socket,&messageFrame,sizeof(messageFrame),0,(struct sockaddr *) &client_address,&structure_length); if(strcmp(messageFrame.payload,"exit") == 0) { printf("Data Transmission Completed...!\n"); break; } checksum = generateChecksum(messageFrame.payload,10); if(checksum != messageFrame.checksum) { //WAIT FOR RETRANSMISSION AND DO NOT SEND ACK printf("CHECKSUM MISMATCH!!\n"); continue; } /*** SEQUENCE CHECK ************/ if(prevSeq == messageFrame.sequenceNumber) { //SEND PREVIOUS ACK if(prevSeq == 0) { strcpy(sendMessage,"0"); } else if(prevSeq == 1) { strcpy(sendMessage,"1"); } printf("****SEQUENCE MISMATCH!\n"); printf("****RESENDING ACK %d\n",prevSeq); sendto(network_socket,sendMessage,1,0,(struct sockaddr*) &client_address,structure_length); continue; } printf("Received Data: %s\n",messageFrame.payload); printf("Message Verified! Writing to File...\n"); printf("***********************\n"); //WRITE DATA TO FILE IF CHECKSUM IS FINE if(outputFileName[strlen(outputFileName)-3] == 't' && outputFileName[strlen(outputFileName)-2] == 'x' && outputFileName[strlen(outputFileName)-1] == 't') { fwrite(messageFrame.payload,sizeof(char),strlen(messageFrame.payload),outputFile); } else { fwrite(messageFrame.payload,sizeof(char),10,outputFile); } //SEND ACK TO CLIENT printf("Sending ACK for SEQ: %d\n",messageFrame.sequenceNumber); if(messageFrame.sequenceNumber == 0) { strcpy(sendMessage,"0"); prevSeq = 0; } else if(messageFrame.sequenceNumber == 1) { strcpy(sendMessage,"1"); prevSeq = 1; } sendto(network_socket,sendMessage,1,0,(struct sockaddr*) &client_address,structure_length); printf("***********************\n"); printf("***********************\n"); memset(messageFrame.payload,'\0',11); } //CLEANUP CODE close(network_socket); fclose(outputFile); free(sendMessage); return 0; }