示例#1
0
static int tx4927_pcibios_write_config_byte(struct pci_dev *dev,
					    int where, unsigned char val)
{
	int flags;
	unsigned char bus, func_num;

	/* check if the bus is top-level */
	if (dev->bus->parent != NULL) {
		bus = dev->bus->number;
		db_assert(bus != 0);
	} else {
		bus = 0;
	}

	func_num = PCI_FUNC(dev->devfn);
	if (mkaddr(bus, dev->devfn, where, &flags))
		return -1;
#ifdef __BIG_ENDIAN
	*(volatile u8 *) ((ulong) & tx4927_pcicptr->
			  g2pcfgdata | ((where & 3) ^ 3)) = val;
#else
	*(volatile u8 *) ((ulong) & tx4927_pcicptr->
			  g2pcfgdata | (where & 3)) = val;
#endif
	return check_abort(flags);
}
示例#2
0
static int tx4927_pcibios_read_config_dword(struct pci_dev *dev,
					    int where, unsigned int *val)
{
	int flags, retval;
	unsigned char bus, func_num;

	if (where & 3)
		return PCIBIOS_BAD_REGISTER_NUMBER;

	db_assert((where & 3) == 0);
	db_assert(where < (1 << 8));

	/* check if the bus is top-level */
	if (dev->bus->parent != NULL) {
		bus = dev->bus->number;
		db_assert(bus != 0);
	} else {
		bus = 0;
	}

	func_num = PCI_FUNC(dev->devfn);
	if (mkaddr(bus, dev->devfn, where, &flags))
		return -1;
	*val = tx4927_pcicptr->g2pcfgdata;
	retval = check_abort(flags);
	if (retval == PCIBIOS_DEVICE_NOT_FOUND)
		*val = 0xffffffff;

	return retval;
}
示例#3
0
/*
 * We can't address 8 and 16 bit words directly.  Instead we have to
 * read/write a 32bit word and mask/modify the data we actually want.
 */
static int tx4927_pcibios_read_config_byte(struct pci_dev *dev,
					   int where, unsigned char *val)
{
	int flags, retval;
	unsigned char bus, func_num;

	db_assert((where & 3) == 0);
	db_assert(where < (1 << 8));

	/* check if the bus is top-level */
	if (dev->bus->parent != NULL) {
		bus = dev->bus->number;
		db_assert(bus != 0);
	} else {
		bus = 0;
	}

	func_num = PCI_FUNC(dev->devfn);
	if (mkaddr(bus, dev->devfn, where, &flags))
		return -1;
#ifdef __BIG_ENDIAN
	*val =
	    *(volatile u8 *) ((ulong) & tx4927_pcicptr->
			      g2pcfgdata | ((where & 3) ^ 3));
#else
	*val =
	    *(volatile u8 *) ((ulong) & tx4927_pcicptr->
			      g2pcfgdata | (where & 3));
#endif
	retval = check_abort(flags);
	if (retval == PCIBIOS_DEVICE_NOT_FOUND)
		*val = 0xff;
	return retval;
}
示例#4
0
static int tx4927_pcibios_read_config(struct pci_bus *bus, unsigned int devfn, int where,
		int size, u32 * val)
{
	int flags, retval, dev, busno, func;

	busno = bus->number;
        dev = PCI_SLOT(devfn);
        func = PCI_FUNC(devfn);

	if (size == 2) {
		if (where & 1)
	                return PCIBIOS_BAD_REGISTER_NUMBER;
	}

	if (size == 4) {
		if (where & 3)
			return PCIBIOS_BAD_REGISTER_NUMBER;
	}

	/* check if the bus is top-level */
	if (bus->parent != NULL) {
		busno = bus->number;
	} else {
		busno = 0;
	}

	if (mkaddr(busno, devfn, where, &flags))
		return -1;

	switch (size) {
	case 1:
		*val = *(volatile u8 *) ((ulong) & tx4927_pcicptr->
                              g2pcfgdata | 
#ifdef __LITTLE_ENDIAN
						(where & 3));
#else
						((where & 0x3) ^ 0x3));
#endif
		break;
	case 2:
		*val = *(volatile u16 *) ((ulong) & tx4927_pcicptr->
                               g2pcfgdata | 
#ifdef __LITTLE_ENDIAN
						(where & 3));
#else
						((where & 0x3) ^ 0x2));
#endif
		break;
	case 4:
		*val = tx4927_pcicptr->g2pcfgdata;
		break;
	}

	retval = check_abort(flags);
	if (retval == PCIBIOS_DEVICE_NOT_FOUND)
		*val = 0xffffffff;

	return retval;
}
void hPrincipalEscritura(void* dato ) 
{
	
	struct sockaddr_in adr;
	int estado;
	int len_inet;
	int idSocket;
	char buffer[100];
	int finBuffer;
	
	struct sockaddr_in adr_srvr;
	struct sockaddr_in cliente_sock;	

	int len_srvr = sizeof(adr_srvr);	
	static char *sv_addr = "127.0.0.99:6666";
	
	len_srvr = sizeof(adr_srvr);

	estado = mkaddr(&adr_srvr,&len_srvr,sv_addr,"udp");
	if(estado < 0)
		displayError("Direccion Servidor Erronea");
	
	idSocket = socket(AF_INET,SOCK_STREAM,0 );
	
	if(idSocket < 0)
		displayError("ERROR EN SOCKET()");

	if( bind(idSocket,(struct sockaddr *)&adr_srvr,len_srvr) < 0 )
	       displayError("ERROR EN BIND()");	

	if(listen(idSocket,SOMAXCONN ) < 0)
		displayError("ERROR LISTEN()Escritura\n ");
	for(;;)
	{
		
		misEscritura.idSockCliente = accept( idSocket,
					 (struct sockaddr*) &cliente_sock,
					  &len_srvr);
		
		if(misEscritura.idSockCliente > 0 )
		{
			pthread_t hilo;
			pthread_create(&hilo,NULL,(void*)hEscritura,(void*) &misEscritura);
		}
		else
		{
			printf("Conexion Rechazada %d \n");
		}
	}
}
示例#6
0
static int tx4938_pcibios_read_config(struct pci_bus *bus, unsigned int devfn,
					int where, int size, u32 * val)
{
	int retval, dev, busno, func;
	struct tx4938_pcic_reg *pcicptr = pci_bus_to_pcicptr(bus);
	void __iomem *cfgdata =
		(void __iomem *)(unsigned long)&pcicptr->g2pcfgdata;

	dev = PCI_SLOT(devfn);
	func = PCI_FUNC(devfn);

	/* check if the bus is top-level */
	if (bus->parent != NULL)
		busno = bus->number;
	else {
		busno = 0;
	}

	if (mkaddr(busno, devfn, where, pcicptr))
		return -1;

	switch (size) {
	case 1:
#ifdef __BIG_ENDIAN
		cfgdata += (where & 3) ^ 3;
#else
		cfgdata += where & 3;
#endif
		*val = __raw_readb(cfgdata);
		break;
	case 2:
#ifdef __BIG_ENDIAN
		cfgdata += (where & 2) ^ 2;
#else
		cfgdata += where & 2;
#endif
		*val = __raw_readw(cfgdata);
		break;
	case 4:
		*val = __raw_readl(cfgdata);
		break;
	}

	retval = check_abort(pcicptr);
	if (retval == PCIBIOS_DEVICE_NOT_FOUND)
		*val = 0xffffffff;

	return retval;
}
示例#7
0
int un_create(const char *path,mode_t mode)
{
    struct sockaddr_un addr;
    mode_t old_umask;
    int size;
    int s;

    s = socket(PF_UNIX,SOCK_DGRAM,0);
    if (s < 0) return s;
    (void) unlink(path);
    size = mkaddr(path,&addr);
    old_umask = umask(~mode);
    if (bind(s,(struct sockaddr *) &addr,size) < 0) return -1;
    (void) umask(old_umask);
    return s;
}
示例#8
0
static int tx4938_pcibios_write_config(struct pci_bus *bus, unsigned int devfn, int where,
						int size, u32 val)
{
	int dev, busno, func;
	struct tx4938_pcic_reg *pcicptr = pci_bus_to_pcicptr(bus);
	void __iomem *cfgdata =
		(void __iomem *)(unsigned long)&pcicptr->g2pcfgdata;

	busno = bus->number;
	dev = PCI_SLOT(devfn);
	func = PCI_FUNC(devfn);

	/* check if the bus is top-level */
	if (bus->parent != NULL) {
		busno = bus->number;
	} else {
		busno = 0;
	}

	if (mkaddr(busno, devfn, where, pcicptr))
		return -1;

	switch (size) {
	case 1:
#ifdef __BIG_ENDIAN
		cfgdata += (where & 3) ^ 3;
#else
		cfgdata += where & 3;
#endif
		__raw_writeb(val, cfgdata);
		break;
	case 2:
#ifdef __BIG_ENDIAN
		cfgdata += (where & 2) ^ 2;
#else
		cfgdata += where & 2;
#endif
		__raw_writew(val, cfgdata);
		break;
	case 4:
		__raw_writel(val, cfgdata);
		break;
	}

	return check_abort(pcicptr);
}
示例#9
0
static int tx4927_pcibios_write_config(struct pci_bus *bus, unsigned int devfn, int where,
				int size, u32 val)
{
	int flags, dev, busno, func;
	busno = bus->number;
        dev = PCI_SLOT(devfn);
        func = PCI_FUNC(devfn);

	if (size == 1) {
		if (where & 1)
			return PCIBIOS_BAD_REGISTER_NUMBER;
	}

	if (size == 4) {
		if (where & 3)
			return PCIBIOS_BAD_REGISTER_NUMBER;
	}

	/* check if the bus is top-level */
	if (bus->parent != NULL) {
		busno = bus->number;
	} else {
		busno = 0;
	}

	if (mkaddr(busno, devfn, where, &flags))
		return -1;

	switch (size) {
	case 1:
		 *(volatile u8 *) ((ulong) & tx4927_pcicptr->
                          g2pcfgdata | (where & 3)) = val;
		break;

	case 2:
		*(volatile u16 *) ((ulong) & tx4927_pcicptr->
                           g2pcfgdata | (where & 3)) = val;
		break;
	case 4:
		tx4927_pcicptr->g2pcfgdata = val;
		break;
	}

	return check_abort(flags);
}
示例#10
0
static int tx4927_pcibios_write_config(struct pci_bus *bus, unsigned int devfn, int where,
				int size, u32 val)
{
	int flags, dev, busno, func;
	busno = bus->number;
        dev = PCI_SLOT(devfn);
        func = PCI_FUNC(devfn);

	/* check if the bus is top-level */
	if (bus->parent != NULL) {
		busno = bus->number;
	} else {
		busno = 0;
	}

	if (mkaddr(busno, devfn, where, &flags))
		return -1;

	switch (size) {
	case 1:
		 *(volatile u8 *) ((unsigned long) & tx4927_pcicptr->
                          g2pcfgdata |
#ifdef __LITTLE_ENDIAN
					(where & 3)) = val;
#else
					((where & 0x3) ^ 0x3)) = val;
#endif
		break;

	case 2:
		*(volatile u16 *) ((unsigned long) & tx4927_pcicptr->
                           g2pcfgdata |
#ifdef __LITTLE_ENDIAN
					(where & 3)) = val;
#else
					((where & 0x3) ^ 0x2)) = val;
#endif
		break;
	case 4:
		tx4927_pcicptr->g2pcfgdata = val;
		break;
	}

	return check_abort(flags);
}
示例#11
0
static int tx3927_pci_write_config(struct pci_bus *bus, unsigned int devfn,
	int where, int size, u32 val)
{
	if (mkaddr(bus, devfn, where))
		return PCIBIOS_DEVICE_NOT_FOUND;

	switch (size) {
	case 1:
		*(volatile u8 *) ((unsigned long) & tx3927_pcicptr->icd | (where & 3)) = val;
		break;

	case 2:
		*(volatile u16 *) ((unsigned long) & tx3927_pcicptr->icd | (where & 2)) =
	    cpu_to_le16(val);
		break;

	case 4:
		tx3927_pcicptr->icd = cpu_to_le32(val);
	}

	return check_abort();
}
示例#12
0
static int tx4927_pcibios_write_config_dword(struct pci_dev *dev,
					     int where, unsigned int val)
{
	int flags;
	unsigned char bus, func_num;

	if (where & 3)
		return PCIBIOS_BAD_REGISTER_NUMBER;

	/* check if the bus is top-level */
	if (dev->bus->parent != NULL) {
		bus = dev->bus->number;
		db_assert(bus != 0);
	} else {
		bus = 0;
	}

	func_num = PCI_FUNC(dev->devfn);
	if (mkaddr(bus, dev->devfn, where, &flags))
		return -1;
	tx4927_pcicptr->g2pcfgdata = val;
	return check_abort(flags);
}
示例#13
0
static int jmr3927_pcibios_write_config_word (struct pci_dev *dev,
					      int where,
					      unsigned short val)
{
	int flags;
	unsigned char bus, func_num;

	if (where & 1)
		return PCIBIOS_BAD_REGISTER_NUMBER;

	/* check if the bus is top-level */
	if (dev->bus->parent != NULL) {
		bus = dev->bus->number;
		db_assert(bus != 0);
	} else {
		bus = 0;
	}                               

	func_num = PCI_FUNC(dev->devfn);
	if (mkaddr(bus, dev->devfn, where, &flags))
		return -1;
	*(volatile u16 *)((ulong)&tx3927_pcicptr->icd | (where&3)) = cpu_to_le16(val);
	return check_abort(flags);
}
示例#14
0
/*
 * We can't address 8 and 16 bit words directly.  Instead we have to
 * read/write a 32bit word and mask/modify the data we actually want.
 */
static int jmr3927_pcibios_read_config_byte (struct pci_dev *dev,
					     int where,
					     unsigned char *val)
{
	int flags;
	unsigned char bus, func_num;

	db_assert((where & 3) == 0);
	db_assert(where < (1 << 8));  

	/* check if the bus is top-level */
	if (dev->bus->parent != NULL) {
		bus = dev->bus->number;
		db_assert(bus != 0);
	} else {
		bus = 0;
	}                               

	func_num = PCI_FUNC(dev->devfn);
	if (mkaddr(bus, dev->devfn, where, &flags))
		return -1;
	*val = *(volatile u8 *)((ulong)&tx3927_pcicptr->icd | (where&3));
	return check_abort(flags);
}
示例#15
0
static int tx3927_pci_read_config(struct pci_bus *bus, unsigned int devfn,
	int where, int size, u32 * val)
{
	if (mkaddr(bus, devfn, where)) {
		*val = 0xffffffff;
		return PCIBIOS_DEVICE_NOT_FOUND;
	}

	switch (size) {
	case 1:
		*val = *(volatile u8 *) ((unsigned long) & tx3927_pcicptr->icd | (where & 3));
		break;

	case 2:
		*val = le16_to_cpu(*(volatile u16 *) ((unsigned long) & tx3927_pcicptr->icd | (where & 3)));
		break;

	case 4:
		*val = le32_to_cpu(tx3927_pcicptr->icd);
		break;
	}

	return check_abort();
}
int main()
{
	struct pollfd fds[3];
	fds[0].fd = -1;
	fds[1].fd = -1;
	fds[2].fd = -1;

	int srv_sock = Socket(AF_INET, SOCK_STREAM, 0);
	fds[0].fd = srv_sock;
	fds[0].events = POLLIN;

	struct sockaddr_in srv_addr;
	mkaddr(&srv_addr, "127.0.0.1", "2345");
	Bind(srv_sock, (struct sockaddr *)&srv_addr, sizeof(srv_addr));

	Listen(srv_sock, 5);

	int ret = 0;
	char buf[128];
	int i = 1;
	while (1) {
		printf("debug: going to poll().... "); 
		fflush(stdout);
		ret = Poll(fds, 3, -1);
		printf("%d\n", ret);

		int j = 0;
		for (j = 0; j < 3; j++)
		{
			if (fds[j].fd == -1)
				continue;

			if ((fds[j].fd == srv_sock) && ((fds[j].revents & POLLIN) == POLLIN)) {
				int cli_sock = Accept(srv_sock, NULL, NULL);
				fds[i].fd = cli_sock;
				fds[i].events = POLLIN;
				i++;

				printf("debug: create a new connection\n");
				if (--ret == 0)
					break;
			}

			if ((fds[j].revents & POLLIN) == POLLIN) {
				printf("debug: is on the cli_sock %d\n", fds[j].fd);
				int len = recv_all(fds[j].fd, buf);
				if (len == -1) {
					close(fds[j].fd);
					fds[j].fd == -1;
					bzero(&fds[j], sizeof(struct pollfd));
					printf("here\n");
					break;
				}

				send_back(fds[j].fd, buf, len);
				printf("debug: send back %s\n", buf);
			}

			if ((fds[j].revents & POLLHUP) == POLLHUP) {
				close(fds[j].fd);
				printf("debug POLLUP\n");
			}

		}
	}

	close(srv_sock);

	return 0;
}
示例#17
0
int main(int argc,char **argv) {
	
	char bcbuf[512], *bp;/* Buffer and ptr */
	int z;      /* Status return code */
	int s;      /* Socket */
	
	listaClientes = createList();	

	struct sockaddr_in adr_srvr;/* AF_INET */
	int len_srvr;               /* length */
	  
	struct sockaddr_in adr_bc;  /* AF_INET */
	int len_bc;                 /* length */
	  
	static int so_broadcast = TRUE;
	  
	static char *sv_addr = "127.0.0:*",
	  	    *bc_addr = "127.255.255.2:9097";//DIRECCION DE BROADCAST
	
	
	/* Datos de servidor TCP/IP  */
	static char *sv_respuesta_addr = "127.0.0.99:1234";//Direccion servidor tcp/ip 		
	struct sockaddr_in adr_respuesta;
        int len_respuesta;	
	/*Fin datos servidor*/

	struct struct_idSockCliente mistruct;

	int argumento ;
	cantidadMAXClientes = 0;
	tiempoDeEspera = 0;
	
	for( argumento = 1;argumento < argc;argumento++ )
	{

		if( strcmp( argv[argumento],"-t") == 0 )
		{
			tiempoDeEspera = strtod( argv[argumento +1] ,NULL );
		}
		if( strcmp( argv[argumento],"-c") == 0 ) 
		{
			cantidadMAXClientes =(int) strtol( argv[argumento+1],NULL,10 );
		}
		if(strcmp (argv[argumento],"-a") == 0 )
		{
			cantidadMAXClientes = 3 ;
		}

	}
	
	if ( argc > 2 )
	{
		//sv_addr = argv[2]; dejo direccion default
		//asigno por argumento , la direccion del servidor tcp/ip
		sv_respuesta_addr = argv[2];
	}

	if ( argc > 1 ) /* Broadcast address: */
		bc_addr = argv[1];
	
	 /*
	  * Form the server address:
	  */
	len_srvr = sizeof adr_srvr;

	z = mkaddr(
		   &adr_srvr,  /* Returned address */
		   &len_srvr,  /* Returned length */
		   sv_addr,    /* Input string addr */
		   "udp");     /* UDP protocol */
	
	if ( z == -1 )
		displayError("Bad server address");
	 
	 /*
	  * Form the broadcast address:
	  */
	len_bc = sizeof adr_bc;
	 
	z = mkaddr(
		  &adr_bc, /* Returned address */
		  &len_bc, /* Returned length */
		  bc_addr, /* Input string addr */
		  "udp"); /* UDP protocol */
	 
	if ( z == -1 )
		displayError("Bad broadcast address");
	 
	/*
	 * respuesta del servidor
	 */
        len_respuesta = sizeof ( adr_respuesta );
        z = mkaddr ( &adr_respuesta , &len_respuesta ,sv_respuesta_addr,"tcp");	       
	if( z == -1)
		displayError("Bad server address");


	/*
	 * Create a UDP socket to use:
	*/
	s = socket(AF_INET,SOCK_DGRAM,0);
	if ( s == -1 )
		displayError("socket()");
	 
	/*
	 * Allow broadcasts:
	 */
	z = setsockopt(s,
	               SOL_SOCKET,
		       SO_BROADCAST,
		       &so_broadcast,
		       sizeof(so_broadcast) );
	 
	if ( z == -1 )
		displayError("setsockopt(SO_BROADCAST)");

	/*
	 * Bind an address to our socket, so that
	 * client programs can listen to this
	 * server:
	 */
	z = bind( s,
		  (struct sockaddr *)&adr_srvr,
		  len_srvr);
	 
	if ( z == -1 )
		displayError("bind()"); 
	 


	int IdRespuestaSocket = socket(AF_INET,SOCK_STREAM,0);
	if( bind(IdRespuestaSocket,(struct sockaddr *) &adr_respuesta,len_respuesta) < 0)
		displayError("ERROR bind() respuesta socket");
	if( listen(IdRespuestaSocket,5) < 0)
		displayError("ERROR listen() respuesta socket");
	
	
	while(1) {
		 
		  bp = bcbuf;
			
		  sprintf( bcbuf , "%.f",(double) time(NULL) );
	 	  printf("Envio este tiempo a los clientes %.f .\n",bcbuf );	
		  
		  /*
		  * Broadcast the updated info:
		  */
		
	         	  
		  z = sendto(s,	 bcbuf,
				 strlen(bcbuf),
				 0,
				(struct sockaddr *)&adr_bc,
				len_bc ); 
		  if ( z == -1 )
			  displayError("sendto()");
			
		  printf("Despues del sendto \n");
		  tiempoActual = time(NULL);
		  
		  mistruct.idSockCliente = accept(
			           		IdRespuestaSocket,
	                               		(struct sockaddr *)&adr_respuesta,
                                         	&len_respuesta
                                        	);
			
		  printf("Despues del accept\n ");
                  if( mistruct.idSockCliente >= 0 )
                  {
                         printf("Conexion aceptada desde el cliente %d\n",
                         mistruct.idSockCliente);
                         
			 pthread_t hilo;
	                 push_back(listaClientes ,&hilo);
                         
			 cantidadClientes++;
                         pthread_create( &hilo , NULL, (void *) funcionUnicast, (void *) &mistruct );
                  }
			
                  lista	* listAuxiliar = createList();	  
		  void * aux;
		  pthread_t h;
/*		  while(!isEmpty(listaClientes))
		  {
			 		
		         pop_front(listaClientes,&aux);
		 	 h = *( (pthread_t *) aux) ;	 
			 push_back (listAuxiliar,&h );

		  }	  */
		  
		 sleep(1);
		 printf("Despues del sleep\n");
		 fflush(stdout); 
	  }
			 
	  return 0;
}
示例#18
0
nextdata(ftnint *elenp)
#endif
{
    register struct Impldoblock *ip;
    struct Primblock *pp;
    register Namep np;
    register struct Rplblock *rp;
    tagptr p;
    expptr neltp;
    register expptr q;
    int skip;
    ftnint off, vlen;

    while(curdtp)
    {
        p = (tagptr)curdtp->datap;
        if(p->tag == TIMPLDO)
        {
            ip = &(p->impldoblock);
            if(ip->implb==NULL || ip->impub==NULL || ip->varnp==NULL)
                fatali("bad impldoblock 0%o", (int) ip);
            if(ip->isactive)
                ip->varvp->Const.ci += ip->impdiff;
            else
            {
                q = fixtype(cpexpr(ip->implb));
                if( ! ISICON(q) )
                    goto doerr;
                ip->varvp = (Constp) q;

                if(ip->impstep)
                {
                    q = fixtype(cpexpr(ip->impstep));
                    if( ! ISICON(q) )
                        goto doerr;
                    ip->impdiff = q->constblock.Const.ci;
                    frexpr(q);
                }
                else
                    ip->impdiff = 1;

                q = fixtype(cpexpr(ip->impub));
                if(! ISICON(q))
                    goto doerr;
                ip->implim = q->constblock.Const.ci;
                frexpr(q);

                ip->isactive = YES;
                rp = ALLOC(Rplblock);
                rp->rplnextp = rpllist;
                rpllist = rp;
                rp->rplnp = ip->varnp;
                rp->rplvp = (expptr) (ip->varvp);
                rp->rpltag = TCONST;
            }

            if( (ip->impdiff>0 && (ip->varvp->Const.ci <= ip->implim))
                    || (ip->impdiff<0 && (ip->varvp->Const.ci >= ip->implim)) )
            {   /* start new loop */
                curdtp = ip->datalist;
                goto next;
            }

            /* clean up loop */

            if(rpllist)
            {
                rp = rpllist;
                rpllist = rpllist->rplnextp;
                free( (charptr) rp);
            }
            else
                Fatal("rpllist empty");

            frexpr((expptr)ip->varvp);
            ip->isactive = NO;
            curdtp = curdtp->nextp;
            goto next;
        }

        pp = (struct Primblock *) p;
        np = pp->namep;
        cur_varname = np->fvarname;
        skip = YES;

        if(p->primblock.argsp==NULL && np->vdim!=NULL)
        {   /* array initialization */
            q = (expptr) mkaddr(np);
            off = typesize[np->vtype] * curdtelt;
            if(np->vtype == TYCHAR)
                off *= np->vleng->constblock.Const.ci;
            q->addrblock.memoffset =
                mkexpr(OPPLUS, q->addrblock.memoffset, mkintcon(off) );
            if( (neltp = np->vdim->nelt) && ISCONST(neltp))
            {
                if(++curdtelt < neltp->constblock.Const.ci)
                    skip = NO;
            }
            else
                err("attempt to initialize adjustable array");
        }
        else
            q = mklhs((struct Primblock *)cpexpr((expptr)pp), 0);
        if(skip)
        {
            curdtp = curdtp->nextp;
            curdtelt = 0;
        }
        if(q->headblock.vtype == TYCHAR)
            if(ISICON(q->headblock.vleng))
                *elenp = q->headblock.vleng->constblock.Const.ci;
            else	{
                err("initialization of string of nonconstant length");
                continue;
            }
        else	*elenp = typesize[q->headblock.vtype];

        if (np->vstg == STGBSS) {
            vlen = np->vtype==TYCHAR
                   ? np->vleng->constblock.Const.ci
                   : typesize[np->vtype];
            if(vlen > 0)
                np->vstg = STGINIT;
        }
        return( (Addrp) q );

doerr:
        err("nonconstant implied DO parameter");
        frexpr(q);
        curdtp = curdtp->nextp;

next:
        curdtelt = 0;
    }

    return(NULL);
}
示例#19
0
 int
 main(int argc,char **argv) {
     int z;
     int x;
     struct sockaddr_in adr;  /* AF_INET */
     int len_inet;            /* length */
     int s;                   /* Socket */
     char dgram[2048];         /* Recv buffer */
     static int so_reuseaddr = TRUE;
     static char
     *bc_addr = "10.1.7.232:3000";

     unsigned short *vpkt;
     unsigned char err = 0;
     unsigned char vrow_chk = 0;
     unsigned short vrow_clc = 0;
     unsigned char vfr_chk = 0;
     unsigned short vfr_clc = 0;
     unsigned short rcv_cnt = 0;
     unsigned short err_cnt = 0;

    /*
     * Use a server address from the command
     * line, if one has been provided.
     * Otherwise, this program will default
     * to using the arbitrary address
     * 127.0.0.:
     */
     if ( argc > 1 )
     /* Broadcast address: */
        bc_addr = argv[1];

    /*
     * Create a UDP socket to use:
     */
     s = socket(AF_INET,SOCK_DGRAM,0);
     if ( s == -1 )
        displayError("socket()");

    /*
     * Form the broadcast address:
     */
     len_inet = sizeof adr;

     z = mkaddr(&adr,
                &len_inet,
                bc_addr,
                "udp");

     if ( z == -1 )
        displayError("Bad broadcast address");

    /*
     * Allow multiple listeners on the
     * broadcast address:
     */
     z = setsockopt(s,
                    SOL_SOCKET,
                    SO_REUSEADDR,
                    &so_reuseaddr,
                    sizeof so_reuseaddr);

     if ( z == -1 )
        displayError("setsockopt(SO_REUSEADDR)");

    /*
     * Bind our socket to the broadcast address:
     */
     z = bind(s,
             (struct sockaddr *)&adr,
             len_inet);

     if ( z == -1 )
        displayError("bind(2)");

	 printf("Testing......\n");
	 
     while (1) {
        /*
         * Wait for a broadcast message:
         */
         z = recvfrom(s,      /* Socket */
                      dgram,  /* Receiving buffer */
                      sizeof dgram,/* Max rcv buf size */
                      0,      /* Flags: no options */
                      (struct sockaddr *)&adr, /* Addr */
                      &x);    /* Addr len, in & out */

         if ( z < 0 )
           printf("recvfrom err: %d ",z); //displayError("recvfrom(2)"); /* else err */

//         fwrite(dgram,z,1,stdout);
//         putchar('\n');
//
//         fflush(stdout);
     if (z > 0){
        vpkt = (unsigned short *)dgram;
        //vpkt[0]-pkt_type
        //vpkt[1]-vfr_num
        //vpkt[2]-vpix_count
        //vpkt[3]-vrow_count
        //vpkt[4]-vrow_num

        if (vpkt[0]!=0x301){
            printf("RCV: cnt=x%04X, size=%04d. PKT: vpix_count=%04d, vrow_count=%04d, vfr_num=%02d, vrow_num=%04d. ERR: cnt=x%04X: pkt type\n",rcv_cnt, z, vpkt[2], vpkt[3], (vpkt[1]&0x0F), vpkt[4], err_cnt);
            err = 1;
        }
        if (((vpkt[1]&0x0F)!=vfr_clc) && vfr_chk){
            printf("RCV: cnt=x%04X, size=%04d. PKT: vpix_count=%04d, vrow_count=%04d, vfr_num=%02d, vrow_num=%04d. ERR: cnt=x%04X: vfr_clc=%02d\n",rcv_cnt, z, vpkt[2], vpkt[3], (vpkt[1]&0x0F), vpkt[4], err_cnt, vfr_clc);
            err = 1; vfr_chk = 0;
        }
        if (vpkt[2]!=0x400){
            printf("RCV: cnt=x%04X, size=%04d. PKT: vpix_count=%04d, vrow_count=%04d, vfr_num=%02d, vrow_num=%04d. ERR: cnt=x%04X: vpix_count\n",rcv_cnt, z, vpkt[2], vpkt[3], (vpkt[1]&0x0F), vpkt[4], err_cnt);
            err = 1;
        }
        if (vpkt[3]!=0x400){
            printf("RCV: cnt=x%04X, size=%04d. PKT: vpix_count=%04d, vrow_count=%04d, vfr_num=%02d, vrow_num=%04d. ERR: cnt=x%04X: vrow_count\n",rcv_cnt, z, vpkt[2], vpkt[3], (vpkt[1]&0x0F), vpkt[4], err_cnt);
            err = 1;
        }
        if ((vpkt[4]!=vrow_clc) && vrow_chk){
            printf("RCV: cnt=x%04X, size=%04d. PKT: vpix_count=%04d, vrow_count=%04d, vfr_num=%02d, vrow_num=%04d. ERR: cnt=x%04X: vrow_clc=%04d\n",rcv_cnt, z, vpkt[2], vpkt[3], (vpkt[1]&0x0F), vpkt[4], err_cnt, vrow_clc);
            err = 1;
        }

        if (err){
            err = 0;
            err_cnt++;
        }

        vrow_chk = 1;
        if ((vpkt[4]+1)==0x400)
        vrow_clc = 0;
        else
        vrow_clc = vpkt[4] + 1;

        if (vpkt[4]==(vpkt[3]-1)){
            vfr_chk = 1;
            if ((vpkt[1]+1)==16)
            vfr_clc = 0;
            else
            vfr_clc = vpkt[1] + 1;
        }

//        if (rcv_cnt == 24)
//          break;
        rcv_cnt++;
    }
  } //while (1)
  
  printf("....completed!\n");
  return 0;
 }