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(); }
void AuthScope::setPort(unsigned short port) { if (0 == port) { clearPort(); } else { _port = port; _hasPort = true; } }
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(); }
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; }
/* 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; } } } }