Exemplo n.º 1
0
        public Hid(Switch device, long hidPosition)
        {
            _device     = device;
            HidPosition = hidPosition;

            device.Memory.FillWithZeros(hidPosition, Horizon.HidSize);

            _currentTouchHeader = new TouchHeader()
            {
                CurrentEntryIndex = -1,
            };

            _currentKeyboardHeader = new KeyboardHeader()
            {
                CurrentEntryIndex = -1,
            };

            _currentKeyboardEntry = new KeyboardEntry()
            {
                SamplesTimestamp  = -1,
                SamplesTimestamp2 = -1
            };

            _touchScreenOffset  = HidPosition + HidTouchScreenOffset;
            _touchEntriesOffset = _touchScreenOffset + HidTouchHeaderSize;
            _keyboardOffset     = HidPosition + HidKeyboardOffset;
        }
Exemplo n.º 2
0
        public void SetTouchPoints(params TouchPoint[] points)
        {
            long timestamp     = GetTimestamp();
            long sampleCounter = _currentTouchHeader.SamplesTimestamp + 1;

            var newTouchHeader = new TouchHeader
            {
                CurrentEntryIndex = (_currentTouchHeader.CurrentEntryIndex + 1) % HidEntryCount,
                EntryCount        = HidEntryCount,
                MaxEntries        = HidEntryCount - 1,
                SamplesTimestamp  = sampleCounter,
                Timestamp         = timestamp,
            };

            long currentTouchEntryOffset = _touchEntriesOffset + newTouchHeader.CurrentEntryIndex * HidTouchEntrySize;

            TouchEntry touchEntry = new TouchEntry()
            {
                SamplesTimestamp = sampleCounter,
                TouchCount       = points.Length
            };

            _device.Memory.WriteStruct(currentTouchEntryOffset, touchEntry);

            currentTouchEntryOffset += HidTouchEntryHeaderSize;

            for (int i = 0; i < points.Length; i++)
            {
                TouchData touch = new TouchData()
                {
                    Angle           = points[i].Angle,
                    DiameterX       = points[i].DiameterX,
                    DiameterY       = points[i].DiameterY,
                    Index           = i,
                    SampleTimestamp = sampleCounter,
                    X = points[i].X,
                    Y = points[i].Y
                };

                _device.Memory.WriteStruct(currentTouchEntryOffset, touch);

                currentTouchEntryOffset += HidTouchEntryTouchSize;
            }

            _device.Memory.WriteStruct(_touchScreenOffset, newTouchHeader);

            _currentTouchHeader = newTouchHeader;
        }