Beispiel #1
0
sockAddrBase::sockAddrBase(bool allowPort, const sockaddr *addr, socklen_t addrlen) : m_allowPort(allowPort)
{
  if (!addr || (addrlen < sizeof(sockaddr_in) && addrlen < sizeof(sockaddr_in6)))
  {
    init(Addr::Invalid);
    return;
  }

  int family = ((sockaddr_in *)addr)->sin_family;

  if (family == AF_INET)
    init(Addr::IPv4);
  else if (family == AF_INET6)
    init(Addr::IPv6);
  else
  {
    init(Addr::Invalid);
    return;
  }

  if (addrlen < GetSize())
    return;
  memcpy(&m_addr, addr, GetSize());
  if (!m_allowPort)
    clearPort();
}
Beispiel #2
0
void AuthScope::setPort(unsigned short port)
{
    if (0 == port)
    {
        clearPort();
    }
    else
    {
        _port = port;
        _hasPort = true;
    }
}
Beispiel #3
0
sockAddrBase::sockAddrBase(bool allowPort, const sockaddr_in *addr) : m_allowPort(allowPort)
{
  sockaddr_in *storage = getIPv4Storage();

  if (!addr || addr->sin_family != AF_INET)
  {
    init(Addr::IPv4);
    return;
  }

  memcpy(storage, addr, sizeof(sockaddr_in));
  if (!m_allowPort)
    clearPort();
}
Beispiel #4
0
void sockAddrBase::copy(const sockAddrBase &src)
{
  if (!src.IsValid())
  {
    init(Addr::Invalid);
    return;
  }

  // Note that GetSize will work, because
  // we already made sure src was valid.
  memcpy(&m_addr, &src.m_addr, src.GetSize());
  if (!m_allowPort)
    clearPort();
}
void txPacket1(int port_num)
{
  int idx;

  uint8_t checksum = 0;
  uint8_t total_packet_length = packetData[port_num].tx_packet[PKT_LENGTH] + 4; // 4: HEADER0 HEADER1 ID LENGTH
  uint8_t written_packet_length = 0;

  if (g_is_using[port_num])
  {
    packetData[port_num].communication_result = COMM_PORT_BUSY;
    return ;
  }
  g_is_using[port_num] = True;

  // check max packet length
  if (total_packet_length > TXPACKET_MAX_LEN)
  {
    g_is_using[port_num] = False;
    packetData[port_num].communication_result = COMM_TX_ERROR;
    return;
  }

  // make packet header
  packetData[port_num].tx_packet[PKT_HEADER0] = 0xFF;
  packetData[port_num].tx_packet[PKT_HEADER1] = 0xFF;

  // add a checksum to the packet
  for (idx = 2; idx < total_packet_length - 1; idx++)   // except header, checksum
  {
    checksum += packetData[port_num].tx_packet[idx];
  }
  packetData[port_num].tx_packet[total_packet_length - 1] = ~checksum;

  // tx packet
  clearPort(port_num);
  written_packet_length = writePort(port_num, packetData[port_num].tx_packet, total_packet_length);
  if (total_packet_length != written_packet_length)
  {
    g_is_using[port_num] = False;
    packetData[port_num].communication_result = COMM_TX_FAIL;
    return;
  }

  packetData[port_num].communication_result = COMM_SUCCESS;
}
Beispiel #6
0
/* a little test program */
int main(int argc, char *argv[])
{
	int  joy_file, received, serial_file;
	int  done = 0;
	char joy_address[32] = "/dev/input/\0";
	int  axis_values[8] = {0};
	int  button_values[11] = {0};

	struct js_event jse;

	if(argc > 2)
	{
		printf("Too many arguments, exiting.");
		return 0;
	}
	if(argc == 2)
	{
		strcat(joy_address, argv[1]);
		joy_file = open_joystick(joy_address);
	}
	else if(argc == 1)
	{
		joy_file = open_joystick("/dev/input/js0");
	}
	
	if (joy_file < 0) 
	{
		printf("Joystick open failed.\n");
		exit(1);
	}

	serial_file = serialport_init(ARDUINO_COMM_LOCATION, ROBOT_BAUDRATE);
	
	if(serial_file < 0)
	{
		printf("Can't open serial port.");
		exit(2);
	}

	clearPort(serial_file);

	while (!done) {
		received = read_joystick_event(&jse);
		usleep(1000);
		if (received == 1) {
			switch(jse.type)
			{
				case TYPE_NOT_BUTTON:
					if(axis_values[jse.number] != jse.value)
						axis_values[jse.number] = jse.value;
					break;	
				case TYPE_BUTTON:
					if(button_values[jse.number] != jse.value)
					{
						button_values[jse.number] = jse.value;
						send_button_update(&jse, serial_file);
					}
					break;
			}	
		}
	}
}