コード例 #1
0
ファイル: webserver-config.c プロジェクト: Ayesha-N/6lbr
static int
update_config(const char *name, uint8_t *reboot_needed)
{
  const char *ptr = name;
  char *next;
  uint8_t do_update = 1;
  uip_ipaddr_t loc_fipaddr;
#if CETIC_6LBR_IP64
  uip_ip4addr_t loc_fip4addr;
#endif

  *reboot_needed = 0;

  while(*ptr) {
    const char *param = ptr;

    next = index(ptr, '=');
    if(!next)
      break;
    *next = 0;
    ptr = next + 1;
    const char *value = ptr;

    next = index(ptr, '&');
    if(next) {
      *next = 0;
      ptr = next + 1;
    } else {
      ptr += strlen(ptr);
    }

    LOG6LBR_DEBUG("Got param: '%s' = '%s'\n", param, value);
    if (0) {
    }
    UPDATE_FLAG("smart_multi", mode, CETIC_MODE_SMART_MULTI_BR, 1)
    UPDATE_FLAG("wait_ra", mode, CETIC_MODE_WAIT_RA_MASK, 1)
    UPDATE_INT("channel", channel, 1)
    UPDATE_HEX("panid", pan_id, 1)
#if CETIC_6LBR_MAC_WRAPPER
    UPDATE_INT("mac", mac_layer, 1)
#endif
    UPDATE_INT("llsec", security_layer, 1)
    UPDATE_INT("llsec_level", security_level, 1)
    UPDATE_KEY("psk", noncoresec_key, 16, 1)
    UPDATE_FLAG( "sec_dis_ar", noncoresec_flags, CETIC_6LBR_NONCORESEC_DISABLE_ANTIREPLAY, 1)
    UPDATE_FLAG( "sec_ar_wa", noncoresec_flags, CETIC_6LBR_NONCORESEC_ANTIREPLAY_WORKAROUND, 1)
    UPDATE_IPADDR("wsn_pre", wsn_net_prefix, 1)
    UPDATE_INT("wsn_pre_len", wsn_net_prefix_len, 1)
    UPDATE_IPADDR("wsn_context_0", wsn_6lowpan_context_0, 1)
    UPDATE_FLAG("wsn_auto", mode, CETIC_MODE_WSN_AUTOCONF, 1)
    UPDATE_IPADDR("wsn_addr", wsn_ip_addr, 1)
    UPDATE_IPADDR("dns", dns_server, 1)
    UPDATE_IPADDR("eth_pre", eth_net_prefix, 1)
    UPDATE_INT("eth_pre_len", eth_net_prefix_len, 1)
    UPDATE_FLAG("eth_auto", mode, CETIC_MODE_ETH_AUTOCONF, 1)
    UPDATE_IPADDR("eth_addr", eth_ip_addr, 1)
    UPDATE_IPADDR("eth_dft", eth_dft_router, 1)
    UPDATE_FLAG("ra_daemon", mode, CETIC_MODE_ROUTER_RA_DAEMON, 1)
    UPDATE_FLAG("rewrite", mode, CETIC_MODE_REWRITE_ADDR_MASK, 1)
#if CETIC_6LBR_IP64
    UPDATE_FLAG("ip64", global_flags, CETIC_GLOBAL_IP64, 1)
    UPDATE_FLAG("ip64_dhcp", eth_ip64_flags, CETIC_6LBR_IP64_DHCP, 1)
    UPDATE_IP4ADDR("ip64_addr", eth_ip64_addr, 1)
    UPDATE_IP4ADDR("ip64_netmask", eth_ip64_netmask, 1)
    UPDATE_IP4ADDR("ip64_gateway", eth_ip64_gateway, 1)
    UPDATE_FLAG("ip64_port_map", eth_ip64_flags, CETIC_6LBR_IP64_SPECIAL_PORTS, 1)
    UPDATE_FLAG("ip64_6052", eth_ip64_flags, CETIC_6LBR_IP64_RFC6052_PREFIX, 1)
#endif
#if RESOLV_CONF_SUPPORTS_MDNS
    UPDATE_FLAG("mdns", global_flags, CETIC_GLOBAL_MDNS, 1)
    UPDATE_STRING("hostname", dns_host_name, NVM_DATA_DNS_HOST_NAME_SIZE, 1)
#if RESOLV_CONF_SUPPORTS_DNS_SD
    UPDATE_FLAG("dns_sd", dns_flags, CETIC_6LBR_DNS_DNS_SD, 1)
#endif
#endif
#if CETIC_NODE_CONFIG
    UPDATE_FLAG("nc_filter", global_flags, CETIC_GLOBAL_FILTER_NODES, 1)
#endif
    UPDATE_INT( "ra_lifetime", ra_router_lifetime, 1)
    UPDATE_INT( "ra_max_interval", ra_max_interval, 1)
    UPDATE_INT( "ra_min_interval", ra_min_interval, 1)
    UPDATE_INT( "ra_min_delay", ra_min_delay, 1)

    UPDATE_FLAG( "ra_pio", ra_prefix_flags, CETIC_6LBR_MODE_SEND_PIO, 1)
    UPDATE_FLAG( "ra_prefix_o", ra_prefix_flags, UIP_ND6_RA_FLAG_ONLINK, 1)
    UPDATE_FLAG( "ra_prefix_a", ra_prefix_flags, UIP_ND6_RA_FLAG_AUTONOMOUS, 1)
    UPDATE_INT( "ra_prefix_vtime", ra_prefix_vtime, 1)
    UPDATE_INT( "ra_prefix_ptime", ra_prefix_ptime, 1)

    UPDATE_FLAG( "ra_rio_en", ra_rio_flags, CETIC_6LBR_MODE_SEND_RIO, 1)
    UPDATE_INT( "ra_rio_lifetime", ra_rio_lifetime, 1)

    UPDATE_INT( "rpl_instance_id", rpl_instance_id, 1)
    UPDATE_FLAG("dodag_manual", rpl_config, CETIC_6LBR_MODE_MANUAL_DODAG, 1)
    UPDATE_FLAG("dodag_global", rpl_config, CETIC_6LBR_MODE_GLOBAL_DODAG, 1)
    UPDATE_IPADDR("dodag_id", rpl_dodag_id, 1)
    UPDATE_INT( "rpl_preference", rpl_preference, 1)
    UPDATE_INT( "rpl_dio_intdoubl", rpl_dio_intdoubl, 1)
    UPDATE_INT( "rpl_dio_intmin", rpl_dio_intmin, 1)
    UPDATE_INT( "rpl_dio_redundancy", rpl_dio_redundancy, 1)
    UPDATE_INT( "rpl_default_lifetime", rpl_default_lifetime, 1)
    UPDATE_INT( "rpl_min_hoprankinc", rpl_min_hoprankinc, 1)
    UPDATE_INT( "rpl_max_rankinc", rpl_max_rankinc, 1)
    UPDATE_INT( "rpl_lifetime_unit", rpl_lifetime_unit, 1)

#if !LOG6LBR_STATIC
    UPDATE_INT( "log_level", log_level, 0)
    UPDATE_HEX( "log_services", log_services, 0)
#endif
    else {
      LOG6LBR_WARN("Unknown parameter '%s'\n", param);
      do_update=0;
    }
  }
  if(do_update) {
    store_nvm_config();
#if !LOG6LBR_STATIC
    if(nvm_data.log_level != 0xFF) {
      Log6lbr_level = nvm_data.log_level;
      Log6lbr_services = nvm_data.log_services;
    }
#endif
  }
  return do_update;
}
コード例 #2
0
		//*************************************************************//
		// UPDATE
		bool InputManager::Update( void )
		{
			// Sanity-check the wrapper's status
			assert( m_eStatus == E_INITIALIZED && "InputManager::Update - wrapper has not been initialized" );
			if( m_eStatus != E_INITIALIZED )
				return false;


			// Store cursor position
			POINT cursor = { };
			RECT clip = { };

			GetCursorPos( &cursor );
			ScreenToClient( m_hWnd, &cursor );

			GetClipCursor( &clip );
			if( clip.left > 0 ) 
				cursor.x -= clip.left;
			if( clip.top > 0 )
				cursor.y -= clip.top;

			m_vCursorMovement = Vector{ (float)cursor.x - m_ptCursor.x, (float)cursor.y - m_ptCursor.y };
			m_ptCursor = Point{ (float)cursor.x, (float)cursor.y };


			// Poll keyboard/mouse key states ONLY if window has focus
			BYTE keyboard[256] = { };
			GetKeyState( 0 );

			if( GetForegroundWindow() == m_hWnd )
				GetKeyboardState( keyboard );

			// Ignore: 0, 7, 10-11, 14-15, 21-26, 28-31, 58-64, 94, 136-143, 146-159, 184-185, 193-218, 224-225, 227-245, 252, 255
#define UPDATE_KEY( key )			m_aKeyboard[ key ] = ((m_aKeyboard[ key ] & Bit_Current) >> 1) | (keyboard[ key ])
#define UPDATE_KEYS( start, stop )	for( int i = start; i <= stop; i++ )	UPDATE_KEY(i);

			UPDATE_KEYS( 1, 6 );
			UPDATE_KEYS( 8, 9 );
			UPDATE_KEYS( 12, 13 );
			UPDATE_KEYS( 16, 20 );
			UPDATE_KEY( 27 );
			UPDATE_KEYS( 32, 57 );
			UPDATE_KEYS( 65, 93 );
			UPDATE_KEYS( 95, 135 );
			UPDATE_KEYS( 144, 145 );
			UPDATE_KEYS( 160, 183 );
			UPDATE_KEYS( 186, 192 );
			UPDATE_KEYS( 219, 223 );
			UPDATE_KEY( 226 );
			UPDATE_KEYS( 246, 251 );
			UPDATE_KEYS( 253, 254 );

#undef UPDATE_KEYS
#undef UPDATE_KEY



			// Update gamepads
			for( unsigned int i = 0; i < m_vGamepads.size(); i++ )
			{
				GamepadInfo& info = m_vGamepads[ i ];

				// Read device state
				DIJOYSTATE state;
				HRESULT hResult = info.pDevice->GetDeviceState( sizeof( DIJOYSTATE ), &state );
				if( FAILED( hResult ) )
				{
					hResult = info.pDevice->Acquire();
					if( FAILED( hResult ) )
					{
						info = GamepadInfo{ info.id, info.pDevice, info.wszName, info.bHasTriggerAxis, false };
						continue;
					}
				}
				
				info.bConnected = true;

				
				// Interpret the dpad / point-of-view hat
				info.ePreviousDPad = info.eDPad;

				DWORD dpad0 = state.rgdwPOV[ 0 ];
				if( dpad0 == 0xFFFFFFFF || dpad0 == 0xFFFF )
					info.eDPad = DPad::Neutral;
				else if( dpad0 < 2250 )
					info.eDPad = DPad::Up;
				else if( dpad0 < 6750 )
					info.eDPad = DPad::UpRight;
				else if( dpad0 < 11250 )
					info.eDPad = DPad::Right;
				else if( dpad0 < 15750 )
					info.eDPad = DPad::DownRight;
				else if( dpad0 < 20250 )
					info.eDPad = DPad::Down;
				else if( dpad0 < 24750 )
					info.eDPad = DPad::DownLeft;
				else if( dpad0 < 29250 )
					info.eDPad = DPad::Left;
				else if( dpad0 < 33750 )
					info.eDPad = DPad::UpLeft;
				else if( dpad0 <= 36000 )
					info.eDPad = DPad::Up;
				else	// invalid?
					info.eDPad = DPad::Neutral;


				// Interpret the buttons
				for( int b = 0; b < 32; b++ )
					info.aButtons[ b ] = ((info.aButtons[ b ] & Bit_Current) >> 1) | state.rgbButtons[ b ];


				// Interpret the joysticks
				info.fLeftX = state.lX * 0.001f;
				info.fLeftY = state.lY * 0.001f;

				if( info.bHasTriggerAxis == true )
				{
					// Right stick *should* be separate
					info.fRightX = state.lRx * 0.001f;
					info.fRightY = state.lRy * 0.001f;
					info.fTrigger = -state.lZ * 0.001f;		// left is negative
				}
				else 
				{
					// Right stick uses left z ... somehow
					info.fRightX = state.lZ  * 0.001f;
					info.fRightY = state.lRz * 0.001f;
					info.fTrigger = 0.0f;
				}
			}

			return true;
		}