|
@@ -77,13 +77,20 @@ func (d * Device) Id() (linux.INPUT_id, error) {
|
|
|
const SIZEOF_LONG = uint(unsafe.Sizeof(*((*linux.UnsignedLong)(nil))))
|
|
|
const BITS_PER_LONG = SIZEOF_LONG * 8
|
|
|
|
|
|
-func BitsToLong(ebits uint) uint {
|
|
|
- bits := uint(ebits)
|
|
|
- return ((bits) + 8 * SIZEOF_LONG - 1) / (8 * SIZEOF_LONG)
|
|
|
+func BitsToLong(bits uint) uint {
|
|
|
+ return ((bits) + (8 * SIZEOF_LONG) - 1) / (8 * SIZEOF_LONG)
|
|
|
}
|
|
|
|
|
|
func TestBit(bit uint, array []linux.UnsignedLong) bool {
|
|
|
- return ((array[ bit / BITS_PER_LONG ]) >> (bit%BITS_PER_LONG)) & 1 != 0
|
|
|
+ elem := array[ bit / ( 8 * SIZEOF_LONG)]
|
|
|
+ flag := linux.UnsignedLong(1) << linux.UnsignedLong(bit % (8 * SIZEOF_LONG))
|
|
|
+ return (elem & flag ) != 0
|
|
|
+}
|
|
|
+
|
|
|
+func (d * Device) Topology() (string, error) {
|
|
|
+ buffer := [256]byte{}
|
|
|
+ err := d.Ioctl(linux.EVIOCGPHYS(uintptr(len(buffer))), unsafe.Pointer(&buffer))
|
|
|
+ return string(buffer[0:len(buffer)]), err
|
|
|
}
|
|
|
|
|
|
func (d * Device) SupportedEvents() ([]uint, error) {
|