Ejemplo n.º 1
0
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);
    //}
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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;

	


}