| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- using __u32 = System.UInt32;
- using __s32 = System.Int32;
- using __u16 = System.UInt16;
- using System;
- using System.Runtime.InteropServices;
- // ReSharper disable FieldCanBeMadeReadOnly.Local
- // ReSharper disable ArrangeTypeMemberModifiers
- // ReSharper disable BuiltInTypeReferenceStyle
- // ReSharper disable InconsistentNaming
- namespace Avalonia.LinuxFramebuffer
- {
- unsafe class NativeUnsafeMethods
- {
- [DllImport("libc", EntryPoint = "open", SetLastError = true)]
- public static extern int open(string pathname, int flags, int mode);
- [DllImport("libc", EntryPoint = "close", SetLastError = true)]
- public static extern int close(int fd);
- [DllImport("libc", EntryPoint = "ioctl", SetLastError = true)]
- public static extern int ioctl(int fd, FbIoCtl code, void* arg);
- [DllImport("libc", EntryPoint = "mmap", SetLastError = true)]
- public static extern IntPtr mmap(IntPtr addr, IntPtr length, int prot, int flags,
- int fd, IntPtr offset);
- [DllImport("libc", EntryPoint = "munmap", SetLastError = true)]
- public static extern int munmap(IntPtr addr, IntPtr length);
- [DllImport("libc", EntryPoint = "memcpy", SetLastError = true)]
- public static extern int memcpy(IntPtr dest, IntPtr src, IntPtr length);
- [DllImport("libc", EntryPoint = "select", SetLastError = true)]
- public static extern int select(int nfds, void* rfds, void* wfds, void* exfds, IntPtr* timevals);
- [DllImport("libevdev.so.2", EntryPoint = "libevdev_new_from_fd", SetLastError = true)]
- public static extern int libevdev_new_from_fd(int fd, out IntPtr dev);
- [DllImport("libevdev.so.2", EntryPoint = "libevdev_has_event_type", SetLastError = true)]
- public static extern int libevdev_has_event_type(IntPtr dev, EvType type);
- [DllImport("libevdev.so.2", EntryPoint = "libevdev_next_event", SetLastError = true)]
- public static extern int libevdev_next_event(IntPtr dev, int flags, out input_event ev);
- [DllImport("libevdev.so.2", EntryPoint = "libevdev_get_name", SetLastError = true)]
- public static extern IntPtr libevdev_get_name(IntPtr dev);
- [DllImport("libevdev.so.2", EntryPoint = "libevdev_get_abs_info", SetLastError = true)]
- public static extern input_absinfo* libevdev_get_abs_info(IntPtr dev, int code);
- }
- enum FbIoCtl : uint
- {
- FBIOGET_VSCREENINFO = 0x4600,
- FBIOPUT_VSCREENINFO = 0x4601,
- FBIOGET_FSCREENINFO = 0x4602,
- FBIOGET_VBLANK = 0x80204612u,
- FBIO_WAITFORVSYNC = 0x40044620,
- FBIOPAN_DISPLAY = 0x4606
- }
- [Flags]
- enum VBlankFlags
- {
- FB_VBLANK_VBLANKING = 0x001 /* currently in a vertical blank */,
- FB_VBLANK_HBLANKING = 0x002 /* currently in a horizontal blank */,
- FB_VBLANK_HAVE_VBLANK = 0x004 /* vertical blanks can be detected */,
- FB_VBLANK_HAVE_HBLANK = 0x008 /* horizontal blanks can be detected */,
- FB_VBLANK_HAVE_COUNT = 0x010 /* global retrace counter is available */,
- FB_VBLANK_HAVE_VCOUNT = 0x020 /* the vcount field is valid */,
- FB_VBLANK_HAVE_HCOUNT = 0x040 /* the hcount field is valid */,
- FB_VBLANK_VSYNCING = 0x080 /* currently in a vsync */,
- FB_VBLANK_HAVE_VSYNC = 0x100 /* verical syncs can be detected */
- }
- unsafe struct fb_vblank {
- public VBlankFlags flags; /* FB_VBLANK flags */
- __u32 count; /* counter of retraces since boot */
- __u32 vcount; /* current scanline position */
- __u32 hcount; /* current scandot position */
- fixed __u32 reserved[4]; /* reserved for future compatibility */
- };
- [StructLayout(LayoutKind.Sequential)]
- unsafe struct fb_fix_screeninfo
- {
- public fixed byte id[16]; /* identification string eg "TT Builtin" */
- public IntPtr smem_start; /* Start of frame buffer mem */
- /* (physical address) */
- public __u32 smem_len; /* Length of frame buffer mem */
- public __u32 type; /* see FB_TYPE_* */
- public __u32 type_aux; /* Interleave for interleaved Planes */
- public __u32 visual; /* see FB_VISUAL_* */
- public __u16 xpanstep; /* zero if no hardware panning */
- public __u16 ypanstep; /* zero if no hardware panning */
- public __u16 ywrapstep; /* zero if no hardware ywrap */
- public __u32 line_length; /* length of a line in bytes */
- public IntPtr mmio_start; /* Start of Memory Mapped I/O */
- /* (physical address) */
- public __u32 mmio_len; /* Length of Memory Mapped I/O */
- public __u32 accel; /* Type of acceleration available */
- public fixed __u16 reserved[3]; /* Reserved for future compatibility */
- };
- [StructLayout(LayoutKind.Sequential)]
- struct fb_bitfield
- {
- public __u32 offset; /* beginning of bitfield */
- public __u32 length; /* length of bitfield */
- public __u32 msb_right; /* != 0 : Most significant bit is */
- /* right */
- };
- [StructLayout(LayoutKind.Sequential)]
- unsafe struct fb_var_screeninfo
- {
- public __u32 xres; /* visible resolution */
- public __u32 yres;
- public __u32 xres_virtual; /* virtual resolution */
- public __u32 yres_virtual;
- public __u32 xoffset; /* offset from virtual to visible */
- public __u32 yoffset; /* resolution */
- public __u32 bits_per_pixel; /* guess what */
- public __u32 grayscale; /* != 0 Graylevels instead of colors */
- public fb_bitfield red; /* bitfield in fb mem if true color, */
- public fb_bitfield green; /* else only length is significant */
- public fb_bitfield blue;
- public fb_bitfield transp; /* transparency */
- public __u32 nonstd; /* != 0 Non standard pixel format */
- public __u32 activate; /* see FB_ACTIVATE_* */
- public __u32 height; /* height of picture in mm */
- public __u32 width; /* width of picture in mm */
- public __u32 accel_flags; /* acceleration flags (hints) */
- /* Timing: All values in pixclocks, except pixclock (of course) */
- public __u32 pixclock; /* pixel clock in ps (pico seconds) */
- public __u32 left_margin; /* time from sync to picture */
- public __u32 right_margin; /* time from picture to sync */
- public __u32 upper_margin; /* time from sync to picture */
- public __u32 lower_margin;
- public __u32 hsync_len; /* length of horizontal sync */
- public __u32 vsync_len; /* length of vertical sync */
- public __u32 sync; /* see FB_SYNC_* */
- public __u32 vmode; /* see FB_VMODE_* */
- public fixed __u32 reserved[6]; /* Reserved for future compatibility */
- };
- enum EvType
- {
- EV_SYN = 0x00,
- EV_KEY = 0x01,
- EV_REL = 0x02,
- EV_ABS = 0x03,
- EV_MSC = 0x04,
- EV_SW = 0x05,
- EV_LED = 0x11,
- EV_SND = 0x12,
- EV_REP = 0x14,
- EV_FF = 0x15,
- EV_PWR = 0x16,
- EV_FF_STATUS = 0x17,
- }
- [StructLayout(LayoutKind.Sequential)]
- struct input_event
- {
- private IntPtr crap1, crap2;
- public ushort type, code;
- public int value;
- }
- [StructLayout(LayoutKind.Sequential)]
- unsafe struct fd_set
- {
- public int count;
- public fixed int fds [256];
- }
- enum AxisEventCode
- {
- REL_X = 0x00,
- REL_Y = 0x01,
- REL_Z = 0x02,
- REL_RX = 0x03,
- REL_RY = 0x04,
- REL_RZ = 0x05,
- REL_HWHEEL = 0x06,
- REL_DIAL = 0x07,
- REL_WHEEL = 0x08,
- REL_MISC = 0x09,
- REL_MAX = 0x0f
- }
- enum AbsAxis
- {
- ABS_X = 0x00,
- ABS_Y = 0x01,
- ABS_Z = 0x02,
- ABS_RX = 0x03,
- ABS_RY = 0x04,
- ABS_RZ = 0x05,
- ABS_THROTTLE = 0x06,
- ABS_RUDDER = 0x07,
- ABS_WHEEL = 0x08,
- ABS_GAS = 0x09,
- ABS_BRAKE = 0x0a,
- ABS_HAT0X = 0x10,
- ABS_HAT0Y = 0x11,
- ABS_HAT1X = 0x12,
- ABS_HAT1Y = 0x13,
- ABS_HAT2X = 0x14,
- ABS_HAT2Y = 0x15,
- ABS_HAT3X = 0x16,
- ABS_HAT3Y = 0x17,
- ABS_PRESSURE = 0x18,
- ABS_DISTANCE = 0x19,
- ABS_TILT_X = 0x1a,
- ABS_TILT_Y = 0x1b,
- ABS_TOOL_WIDTH = 0x1c
- }
- enum EvKey
- {
- BTN_LEFT = 0x110,
- BTN_RIGHT = 0x111,
- BTN_MIDDLE = 0x112
- }
- [StructLayout(LayoutKind.Sequential)]
- struct input_absinfo
- {
- public __s32 value;
- public __s32 minimum;
- public __s32 maximum;
- public __s32 fuzz;
- public __s32 flat;
- public __s32 resolution;
- }
- }
|