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; }
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; }