Example #1
0
int main (int argc, char** argv) {
    if (argc != 3) {
        std::cerr << "wrong number of arguments !!!\nUsage: " << *argv << " [tty_dev] [string to send]\n" << std::endl;
        return -1;
    }

    const std::string tty_dev = *(argv+1);

    int tty_sock;
    //char* buffer;

    struct termios attribs;

    memset(&attribs, 0, sizeof(attribs));
    attribs.c_iflag=0;
    attribs.c_oflag=0;
    attribs.c_cflag=0;
    attribs.c_lflag=0;
    attribs.c_cc[VMIN]=1;
    attribs.c_cc[VTIME]=0;

    tty_sock = open(tty_dev.c_str(), O_RDWR | O_NOCTTY | O_NDELAY);
    if (tty_sock == -1 )
    {
        std::cerr << "open_port: Unable to open " << tty_dev << ": " << strerror(errno) << std::endl;
        return -1;
    }
    else {
        cfsetospeed(&attribs, B115200);            // 115200 baud
        cfsetispeed(&attribs, B115200);            // 115200 baud
        /// possible bauds are: 110, 150, 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600

        tcsetattr(tty_sock, TCSANOW,&attribs);

        fcntl(tty_sock, F_SETFL,0);
        std::cout << "Port has been successfully opened, tty_sock_fd: " << tty_sock << std::endl;
    }


    std::string data_to_send (*(argv+2));

    write(tty_sock, data_to_send.c_str(), data_to_send.length());
    //rd=read(tty_sock ,buffer, 1024);

    std::cout << "sent data: " << data_to_send << std::endl;

    close (tty_sock);

    return 0;
}
Example #2
0
int main (int argc, char **argv)
{
  CGMTimers *timers = new CGMTimers ();
  Comm *comm = Comm::getComm (&argc, &argv, timers);
  int tag = 0;
  int p = comm->getNumberOfProcessors ();
  //printf("Number of processors %d\n",p);
  int id = comm->getMyId ();
  //printf("ID%d\n",id);
  int sendTo = (id + 1) % p;
  int receiveFrom = (id - 1 + p) % p;
  int actualSource = -1;
  vector<int> values;
  if (argc > 1)
  {
	char *size=strtok(argv[1],",");
	while (size!=NULL)
	{
		values.push_back(atoi(size));
		size=strtok(NULL,",");
	}
  }
  else
  {
	printf("Falt argumento com os tamanhos das matrices: ex. 1,3,4,5,6\n");
  }
//	printf("size %d\n",values.size());
//	int bloco=(values.size()-1)/p;
	//printf("Bloco %d\n",bloco);
		SimpleCommObject<int> sample(0);
	int matrix_size=values.size()-1;
	int **total_matrix=new int*[matrix_size];
	for (int i=0;i<matrix_size;i++)
		total_matrix[i]=new int[matrix_size];
	for (int row=0;row<matrix_size;row++)
		for (int col=0;col<matrix_size;col++)
			{
				if (row==col)
					total_matrix[row][row]=0;
				else
					total_matrix[row][col]=-1;
			}
	int *blocos=new int[p];
	int q=(values.size()-1)/p;
	if (q<1) q=1;
	int r=(values.size()-1)%p;
	if (r<1) r=0;
	for (int i=0;i<p;i++)
	{
		if (i<r)
			blocos[i]=q+1;
		else
			blocos[i]=q;
	}
	//printf("ID: %d Bloco: %d\n",id,blocos[id]);
	int bloco_offset=0;
	for (int i=0;i<id;i++)
		bloco_offset+=blocos[i];
	//int row_start=blocos[id]*id;
	int row_start=bloco_offset;
	int row_end=row_start+blocos[id]-1;
	//printf("ID %d, row_start %d row_end %d\n",id,row_start, row_end);
	for (int rodada=0;rodada<=p-id-1;rodada++)
	{
		//printf("ID %d RODADA %d\n",id,rodada);
		//int col_start=blocos[id]*(rodada+id);
		int col_start=bloco_offset+(blocos[id]*rodada);
		//int col_end=blocos[id]*(rodada+id+1)-1;
		int col_end=col_start+blocos[id]-1;
		if (col_start>values.size()-2)
			break;
	//	printf("ID %d, col_start %d, col_end %d RODADA: %d\n",id,col_start, col_end,rodada);
		CommObjectList data_to_send(&sample);

		workOnSubMatrix(&total_matrix, &values, row_start,row_end,col_start,col_end, rodada, blocos[id], id);
		//printf("ID: %d SAIU RODADA: %d\n",id,rodada);
		int **submatrix=new int*[row_end-row_start+1];
		for (int i=0;i<row_end-row_start+1;i++)
			submatrix[i]=new int[col_end-col_start+1];
/*if (id==1)
{		
	for (int row=0;row<matrix_size;row++)
	{
		for (int col=0;col<matrix_size;col++)
			{
				printf("R>%d %d,%d=%d ",rodada,row,col,total_matrix[row][col]);
			}
		printf("\n");
	}
}*/

		convertMatrixToList(&total_matrix,row_start, col_end, col_start, col_end, &data_to_send,id,rodada);
		//printf("ID: %d, COPIOU SUBM RODADA: %d\n",id,rodada);

		CommObjectList data_to_receive(&sample);


		if (id!=0)
		{
			//printf("ID: %d IS SENDING RODADA: %d\n",id,rodada);
			comm -> send(id-1,data_to_send,rodada);
//			printf("MANDOU DE ID: %d a ID: %d TAG_ROUND:%d\n",id,id-1,rodada);
		}
		if (id!=p-1)
		{
			if (col_end>=values.size()-2)
			{
//				printf("ID: %d SAINDO\n",id);
				continue;
			}else
			{
			
				int num_receives=blocos[id]/blocos[id+1];
//				printf("ID: %d ESPERA RECEBER %d DE ID: %d RODADA: %d\n",id,num_receives,id+1,rodada);

			for (int i=0;i<num_receives;i++)
			{
				comm -> receive(id+1,data_to_receive,rodada+i,&actualSource);
				copyFromSubMatrix(&total_matrix,&data_to_receive,id+1,id,rodada+i);

//				printf("ID: %d RECEBEU DE ID: %d TAG_ROUND: %d\n",id,id+1, rodada+i);	
			}
						}
		}
	}
//	printf("ID %d terminou\n",id);

	if (id==0)
	{
		printf("Custo total da matriz %d\n",total_matrix[0][values.size()-2]);
	}
	  comm -> dispose(); 
}