internal DsPacket Load(byte[] Native) { Array.Copy(Native, (int)DsOffset.Address, m_Local, 0, m_Local.Length); m_Detail.Load( (DsPadId)Native[(int)DsOffset.Pad], (DsState)Native[(int)DsOffset.State], (DsModel)Native[(int)DsOffset.Model], m_Local, (DsConnection)Native[(int)DsOffset.Connection], (DsBattery)Native[(int)DsOffset.Battery] ); m_Packet = Native[4] << 0 | Native[5] << 8 | Native[6] << 16 | Native[7] << 24; Array.Copy(Native, m_Native, m_Native.Length); switch (m_Detail.Model) { case DsModel.DS3: m_Ds3Button = (Ds3Button)((Native[10] << 0) | (Native[11] << 8) | (Native[12] << 16) | (Native[13] << 24)); break; case DsModel.DS4: m_Ds4Button = (Ds4Button)((Native[13] << 0) | (Native[14] << 8) | ((Native[15] & 0x03) << 16)); break; } return(this); }