view src/protocol.rs @ 19:ba09079686a0

Add support for different endianness between client and server.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Thu, 26 Aug 2021 23:43:36 +0200
parents 3f7b7a3ad8fe
children
line wrap: on
line source

// Tablet emulator, for people who don’t own one
// Copyright © 2020 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

use serde::{Serialize, Deserialize};
use bitflags::bitflags;

bitflags! {
    /// This is the memory layout of the buttons on the 3DS.
    #[derive(Serialize, Deserialize, Default)]
    pub struct Buttons: u32 {
        const A = 0x00000001;
        const B = 0x00000002;
        const SELECT = 0x00000004;
        const START = 0x00000008;
        const RIGHT = 0x00000010;
        const LEFT = 0x00000020;
        const UP = 0x00000040;
        const DOWN = 0x00000080;
        const R = 0x00000100;
        const L = 0x00000200;
        const X = 0x00000400;
        const Y = 0x00000800;
        // Nothing
        // Nothing
        const ZL = 0x00004000;
        const ZR = 0x00008000;
        const RESIZE = 0x00010000; // Not an actual 3DS button!
        // Nothing
        // Nothing
        // Nothing
        const TOUCH = 0x00100000;
        // Nothing
        // Nothing
        // Nothing
        const C_RIGHT = 0x01000000;
        const C_LEFT = 0x02000000;
        const C_UP = 0x04000000;
        const C_DOWN = 0x08000000;
        const CIRCLE_RIGHT = 0x10000000;
        const CIRCLE_LEFT = 0x20000000;
        const CIRCLE_UP = 0x40000000;
        const CIRCLE_DOWN = 0x80000000;
    }
}

#[derive(Serialize, Deserialize, Debug, Default)]
pub struct Event {
    pub buttons: Buttons,
    pad: (i16, i16),
    c_pad: (i16, i16),
    pub touch: (u16, u16),
}