static public ControllerState ReadFromPacket(byte[] packet) { if (packet.Length < PACKET_SIZE) { return(null); } byte[] data = new byte[PACKET_SIZE / 8]; for (int i = 0; i < PACKET_SIZE / 8; i++) { data[i] = unencrypt(SignalTool.readByte(packet, i * 8)); } var state = new ControllerStateBuilder(); for (int i = 0; i < BUTTONS.Length; ++i) { if (string.IsNullOrEmpty(BUTTONS[i])) { continue; } state.SetButton(BUTTONS[i], (data[4 + i / 8] & (0x01 << (i % 8))) == 0x00); } state.SetAnalog("lstick_x", readLeftStick(data[0] & 0x3F)); state.SetAnalog("lstick_y", readLeftStick(data[1] & 0x3F)); state.SetAnalog("rstick_x", readRightStick(((data[0] & 0xC0) >> 3) | ((data[1] & 0xC0) >> 5) | ((data[2] & 0x80) >> 7))); state.SetAnalog("rstick_y", readRightStick(data[2] & 0x1F)); state.SetAnalog("trig_l", readTrigger(((data[2] & 0x60) >> 2) | ((data[3] & 0xE0) >> 5))); state.SetAnalog("trig_r", readTrigger(data[3] & 0x1F)); return(state.Build()); }
static public ControllerState ReadFromPacket(byte[] packet) { if (packet.Length < PACKET_SIZE) { return(null); } var state = new ControllerStateBuilder(); for (int i = 0; i < BUTTONS.Length; ++i) { if (string.IsNullOrEmpty(BUTTONS [i])) { continue; } state.SetButton(BUTTONS[i], packet[i] != 0x00); } state.SetAnalog("lstick_x", readStick(SignalTool.readByte(packet, BUTTONS.Length))); state.SetAnalog("lstick_y", readStick(SignalTool.readByte(packet, BUTTONS.Length + 8))); state.SetAnalog("cstick_x", readStick(SignalTool.readByte(packet, BUTTONS.Length + 16))); state.SetAnalog("cstick_y", readStick(SignalTool.readByte(packet, BUTTONS.Length + 24))); state.SetAnalog("trig_l", readTrigger(SignalTool.readByte(packet, BUTTONS.Length + 32))); state.SetAnalog("trig_r", readTrigger(SignalTool.readByte(packet, BUTTONS.Length + 40))); return(state.Build()); }
static public ControllerState ReadFromPacket(byte[] packet) { if (packet.Length < PACKET_SIZE) { return(null); } var state = new ControllerStateBuilder(); for (int i = 0; i < BUTTONS.Length; ++i) { if (string.IsNullOrEmpty(BUTTONS [i])) { continue; } state.SetButton(BUTTONS[i], packet[i] != 0x00); } state.SetAnalog("stick_x", readStick(SignalTool.readByte(packet, BUTTONS.Length))); state.SetAnalog("stick_y", readStick(SignalTool.readByte(packet, BUTTONS.Length + 8))); byte[] newPacket = new byte[4]; newPacket[0] = SignalTool.readByte(packet, 0); newPacket[1] = SignalTool.readByte(packet, 8); newPacket[2] = SignalTool.readByte(packet, 16); newPacket[3] = SignalTool.readByte(packet, 24); return(state.Build(newPacket)); }
static public ControllerState ReadFromPacket(byte[] packet) { var state = new ControllerStateBuilder(); switch (packet.Length) { // Standard 64 bit packet size case PACKET_SIZE: for (int i = 0; i < BUTTONS.Length; ++i) { if (string.IsNullOrEmpty(BUTTONS[i])) { continue; } state.SetButton(BUTTONS[i], packet[i] != 0x00); Console.WriteLine(i + ": " + packet[i]); } state.SetAnalog("lstick_x", readStick(SignalTool.readByte(packet, BUTTONS.Length))); state.SetAnalog("lstick_y", readStick(SignalTool.readByte(packet, BUTTONS.Length + 8))); state.SetAnalog("cstick_x", readStick(SignalTool.readByte(packet, BUTTONS.Length + 16))); state.SetAnalog("cstick_y", readStick(SignalTool.readByte(packet, BUTTONS.Length + 24))); state.SetAnalog("trig_l", readTrigger(SignalTool.readByte(packet, BUTTONS.Length + 32))); state.SetAnalog("trig_r", readTrigger(SignalTool.readByte(packet, BUTTONS.Length + 40))); break; // Packets are written as bytes when writing from the NicoHood API, so we're looking for a packet size of 8 (interpreted as bytes) case NICOHOOD_PACKET_SIZE: for (int i = 0; i < 16; i++) { if (string.IsNullOrEmpty(NICOHOOD_BUTTONS[i])) { continue; } int bitPacket = (packet[i / 8] >> (i % 8)) & 0x1; state.SetButton(NICOHOOD_BUTTONS[i], bitPacket != 0x00); } state.SetAnalog("lstick_x", readStick(packet[2])); state.SetAnalog("lstick_y", readStick(packet[3])); state.SetAnalog("cstick_x", readStick(packet[4])); state.SetAnalog("cstick_y", readStick(packet[5])); state.SetAnalog("trig_l", readTrigger(packet[6])); state.SetAnalog("trig_r", readTrigger(packet[7])); break; default: return(null); } return(state.Build()); }