News for hackers. Stuff that matters.
Re:Libinput's bus factor is 1 (2019) by robertely on Friday May 22, 2020 @03:21AM (#23269481)
Given how ubiquitous the capacitive touch senors have become I'm surprised no one has put together an open source option. I've gone down something of a rabbit hole searching and haven't found any prior work.

The closest I have seen is the Snowpad[1] but it's been discontinued by the maker and they pulled down the source as well.

I'd try duplicating it but it used the Microchip MTCH6301 and it's been marked `Not recommended for use in new designs.` I'm hunting for an easy to use alternative if anyone knows one. I may still take a stab at the MTCH6301 just because of how easy it looks to use.

[1][https://www.kitronyx.com/snowpad.html]

Re:Libinput's bus factor is 1 (2019) by solarkraft on Friday May 22, 2020 @04:35AM (#23269869)
What does "Open Source" mean in this context? Isn't the goal "just" to have an understandable interface?

Also: Can you recommend some reading material as an introduction to using a capacitive digitizer? I am planning to use one in an upcoming project (either one from a tablet glass replacement or a stand alone one) and really have no idea what to look out for yet in terms of communication with my Linux board (bonus: Something about DIYing one because I need a special format, but I guess that's especially hard because it's supposed to go on to a screen).

Re:Libinput's bus factor is 1 (2019) by robertely on Friday May 22, 2020 @03:47PM (#23276110)
Having a tidy interface is certainly a primary goal but there are others.

- Control over the size/shape of the sensor pad.

- Control over communication (i2c/spi/usb)

- Ability to explore gesture behaviors and expose simplified interfaces to the OS.

- Control over click feel/behaviors by customizing snap switch style, mount, and locations.

- Control over the touch surface finish. (Did you know you can laser cut glass screen protectors? Why are none of these touch pads glass outside of macbooks?)

- Open documentation on all of the above.

As for reading material I can't recommend anything as a summery (see my last bullet). Manufacture design guidelines are probably where you should start.

Case in point: MTCH6301: https://www.microchip.com/wwwproducts/en/MTCH6301 Microchip Sensor design guide: http://ww1.microchip.com/downloads/en/DeviceDoc/FAQs%20-%20S...

Re:Libinput's bus factor is 1 (2019) by seltzered_ on Friday May 22, 2020 @01:22PM (#23274577)
It's not just the sensor. I'd warn people trying to DIY from scratch to make sure you really think of the full gestalt of a touch / gesture experience which spans:

- Mechanics (a good surface, sensing)

- Robustly designed state machines to track states even before your finger lands.

- Math (to deal with finger acceleration, stabilization)

- Feedback! Mechanical clicking, piezo, weight actuation, etc. I cringe when I see projects lacking feedback.

As a teaser here's my messy breakdown of the macbook trackpad states, based on things done back around 2008/2009 (http://blog.sendapatch.se/2009/november/multitouch-on-unibod...):

    enum RawTouchStateOneValues {
        TOUCH_STARTED_STATE = 1,       // initial touch started state - i.e. first frame of a touch. warning on this state: StateTwoValues seem invalid here
        TOUCH_HOVERING_STATE = 2,      // multi-frame: typically occurs when a touch is about to land. 
        TOUCH_LANDED_ON_PAD_STATE = 3, // usually single-frame, but can occur multiple times if a touch hovers and returns (from state 6,2,1) - you can also go here from state 6, which means a hanging touch can 'return'
        TOUCH_ON_PAD_STATE = 4,        // typical duration of a touch - moving around on pad
        TOUCH_LEAVING_PAD_STATE = 5,   // usually single-frame - 
        TOUCH_LEFT_NOW_HOVERING_STATE = 6, // multi-frame: occurs when a touch occurred but then left pad (state 5), and is now hovering
        TOUCH_ENDED_STATE = 7          // single-frame: touch finally ends
    };

    enum RawTouchStateTwoValues {
        TOUCH_DETECTED_ALTSTATE = 0, //state only seems to occur on initial touch (stateOne's TOUCH_STARTED_STATE), which I filter out 
        TOUCH_RESTING = 1,
        TOUCH_NON_RESTING = 2,
        TOUCH_NON_RESTING_AGAIN = 3,
        TOUCH_THIRD_TOUCH = 4,
        TOUCH_EDGE_REGION = 5, //only observed on magic trackpad - seems to occur when starting at the edge.
        TOUCH_SIXTH_TOUCH = 6,
        TOUCH_GROWING_FROM_EDGE = 7, //both cases 12 and 7 seem be used for palm-rejection scenarios
        TOUCH_EIGHTH_TOUCH = 8,
        TOUCH_NINTH_TOUCH = 9,
        TOUCH_TENTH_TOUCH = 10,
        TOUCH_ELEVENTH_TOUCH = 11,
        TOUCH_COMING_FROM_EDGE = 12 //both cases 12 and 7 seem be used for palm-rejection scenarios
        
        //other states observed but unknown - 4 (seems to consistently occur when I have three fingers down. 
        //                                         likely occurs in certain pad regions)
        // 
    };