void coms_test()
{
   IF_SET set;
   uint8_t ifaces=0;
   comBuf *recvd;
   com_mode(IFACE_SERIAL, IF_LISTEN);

#ifdef PLATFORM_LINUX
   com_mode(IFACE_TERMINAL, IF_LISTEN);
#else
   com_mode(IFACE_RADIO, IF_LISTEN);
#endif

   
   while(1){
      IF_ZERO(&set);

    
      IF_SET(IFACE_SERIAL, &set);

#ifdef PLATFORM_LINUX
      IF_SET(IFACE_TERMINAL, &set);
#else
      IF_SET(IFACE_RADIO, &set);
#endif
      
      ifaces = com_select(&set,2000);
      
      if(IF_ISSET(IFACE_SERIAL, &set)){
	 printf("serial brought us back\n");
	 recvd = com_recv(IFACE_SERIAL);
	 com_free_buf(recvd);
      }
#ifdef PLATFORM_LINUX
      else if(IF_ISSET(IFACE_TERMINAL, &set)){
	 printf("terminal brought us back\n");
	 recvd = com_recv(IFACE_TERMINAL);
	 com_free_buf(recvd);
      }
#else
      else if(IF_ISSET(IFACE_RADIO, &set)){
	 printf("radio brought us back\n");
	 recvd = com_recv(IFACE_RADIO);

	 printf("[%C-%C]", recvd->data[0], recvd->data[recvd->size-1]);
	 com_free_buf(recvd);
      } 
#endif
      else {
	 printf("timed out, returned %d ifaces\n",ifaces);
      }
     
   }
}
void recv_thread(void)
{
   while(1)
   {
      
      IF_SET set;
      IF_ZERO(&set);
      IF_SET(IFACE_RADIO, &set);

      if(com_select(&set, 1000))
      {
	 
	 comBuf* p = com_recv(IFACE_RADIO);
	 if (p && p->data[0] == PKT_DO_SENSE)
	 {
	    if (p->size != 5)
	       continue;

	    if (crc_compute(p->data, 3) != buf_extract_WORD(p->data, 3))
	       continue;

	    send_packet(PKT_REQUESTED_SENSE);
	 }
	 

	 com_free_buf(p);
      }
   }
   
   
   
}
Beispiel #3
0
static int imp_get_mfcc_ttls(if_set *p_ttls, int length, pi_addr *pi_src,
    pi_addr *p_group)
{
    imp_interface *p_if = imp_interface_first();
    unsigned char flag = 0;


    if (pi_src->ss.ss_family != p_group->ss.ss_family) {
        IMP_LOG_ERROR("unmatch family");
        return 0;
    }

    while(p_if) {
        if (p_if->type != INTERFACE_UPSTREAM &&
            imp_get_is_forward(p_if, p_group, pi_src) &&
            p_if->if_index < length) {

            int vmif = 0;
               vmif = k_get_vmif(p_if->if_index, p_group->ss.ss_family);
            IF_SET(vmif, p_ttls);
            flag = 1;
        }
        p_if = LIST_NEXT(p_if, link);
    }
    if (flag == 0)
        IMP_LOG_DEBUG("group %s isn't interest in packet from %s\n",
            imp_pi_ntoa(p_group), imp_pi_ntoa(pi_src));

    return flag;
}
Beispiel #4
0
void gba_state::request_irq(uint32_t int_type)
{
	// set flag for later recovery
	IF_SET(int_type);

	// is this specific interrupt enabled?
	int_type &= IE;
	if (int_type != 0)
	{
		// master enable?
		if (IME & 1)
		{
			m_maincpu->set_input_line(ARM7_IRQ_LINE, ASSERT_LINE);
			m_maincpu->set_input_line(ARM7_IRQ_LINE, CLEAR_LINE);
		}
	}
}
Beispiel #5
0
/*
** Removes the multicast routed '*Dp' from the kernel routes
**
** returns: - 0 if the function succeeds
**          - the errno value for non-fatal failure condition
*/
int delMRoute( struct MRouteDesc *Dp )
{
    int MifIx;
    struct mf6cctl CtlReq;

    int i;

    CtlReq.mf6cc_origin    = Dp->OriginAdr;
    CtlReq.mf6cc_mcastgrp  = Dp->McAdr;
    CtlReq.mf6cc_parent    = Dp->InVif;

    for ( MifIx = 0; MifIx < MAX_MC_MIFS; MifIx++ ) 
    {
        if ( Dp->TtlVc[ MifIx ] > 0 )
        {
            IF_SET( MifIx, &CtlReq.mf6cc_ifset );
        }
    }

    if ( setsockopt( MRouterFD, IPPROTO_IPV6, MRT6_DEL_MFC, (void *)&CtlReq, sizeof(CtlReq) ) )
    {
        atlog( LOG_ERR, errno, "MRT6_DEL_MFC set failed\n");        
    }
/*   
    for (i = 0; i < sizeof(struct sockaddr_in6); i++)
        printf("%02x ", ((char *)(&CtlReq.mf6cc_origin))[i] & 255);
    printf("\n");
    for (i = 0; i < sizeof(struct sockaddr_in6); i++)
        printf("%02x ", ((char *)(&CtlReq.mf6cc_mcastgrp))[i] & 255);
    printf("\n");    
    printf ("CtlReq.mf6cc_parent = %d\n", CtlReq.mf6cc_parent);
    for (i = 0; i < sizeof(struct if_set); i++)
        printf("%02x ", ((char *)(&CtlReq.mf6cc_ifset))[i] & 255);
    printf("\n\n");  
*/
    return 0;    
}