{"action":"created","issue":{"url":"https://api.github.com/repos/lentinj/tp-compact-keyboard/issues/32","repository_url":"https://api.github.com/repos/lentinj/tp-compact-keyboard","labels_url":"https://api.github.com/repos/lentinj/tp-compact-keyboard/issues/32/labels{/name}","comments_url":"https://api.github.com/repos/lentinj/tp-compact-keyboard/issues/32/comments","events_url":"https://api.github.com/repos/lentinj/tp-compact-keyboard/issues/32/events","html_url":"https://github.com/lentinj/tp-compact-keyboard/issues/32","id":125231289,"node_id":"MDU6SXNzdWUxMjUyMzEyODk=","number":32,"title":"Create a custom firmware","user":{"login":"agoode","id":59842,"node_id":"MDQ6VXNlcjU5ODQy","avatar_url":"https://avatars3.githubusercontent.com/u/59842?v=4","gravatar_id":"","url":"https://api.github.com/users/agoode","html_url":"https://github.com/agoode","followers_url":"https://api.github.com/users/agoode/followers","following_url":"https://api.github.com/users/agoode/following{/other_user}","gists_url":"https://api.github.com/users/agoode/gists{/gist_id}","starred_url":"https://api.github.com/users/agoode/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/agoode/subscriptions","organizations_url":"https://api.github.com/users/agoode/orgs","repos_url":"https://api.github.com/users/agoode/repos","events_url":"https://api.github.com/users/agoode/events{/privacy}","received_events_url":"https://api.github.com/users/agoode/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":17,"created_at":"2016-01-06T18:13:44Z","updated_at":"2019-05-08T07:53:42Z","closed_at":null,"author_association":"NONE","body":"(I am only half joking here)\n\nThe keyboard has an upgradable firmware and a documented microcontroller:\nhttps://support.lenovo.com/us/en/documents/pd026745\nhttp://www.sonix.com.tw/article-en-1002-3048\n\nIt would be great to have a keyboard with a working middle mouse button. A completely clean room firmware would allow this.\n\nAs a bonus, it would be great to implement proper negative inertia, which has disappeared from newer TrackPoint devices:\nhttp://blogs.epfl.ch/icenet/documents/Ykt3Eext.pdf\n"},"comment":{"url":"https://api.github.com/repos/lentinj/tp-compact-keyboard/issues/comments/490387129","html_url":"https://github.com/lentinj/tp-compact-keyboard/issues/32#issuecomment-490387129","issue_url":"https://api.github.com/repos/lentinj/tp-compact-keyboard/issues/32","id":490387129,"node_id":"MDEyOklzc3VlQ29tbWVudDQ5MDM4NzEyOQ==","user":{"login":"vpelletier","id":191204,"node_id":"MDQ6VXNlcjE5MTIwNA==","avatar_url":"https://avatars1.githubusercontent.com/u/191204?v=4","gravatar_id":"","url":"https://api.github.com/users/vpelletier","html_url":"https://github.com/vpelletier","followers_url":"https://api.github.com/users/vpelletier/followers","following_url":"https://api.github.com/users/vpelletier/following{/other_user}","gists_url":"https://api.github.com/users/vpelletier/gists{/gist_id}","starred_url":"https://api.github.com/users/vpelletier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vpelletier/subscriptions","organizations_url":"https://api.github.com/users/vpelletier/orgs","repos_url":"https://api.github.com/users/vpelletier/repos","events_url":"https://api.github.com/users/vpelletier/events{/privacy}","received_events_url":"https://api.github.com/users/vpelletier/received_events","type":"User","site_admin":false},"created_at":"2019-05-08T07:53:42Z","updated_at":"2019-05-08T07:53:42Z","author_association":"NONE","body":"I am making enough progress on the analysis that I think I can prepare a description for a clean-room reimplementation:\r\n- general microcontroler settings (clock source frequency, clock ratios, ...) as these cannot be modified by reflashing and need to be known to respect timing constraints\r\n- port settings & what is connected on which (4 pins are still resisting my attempts at the moment)\r\n- keyboard matrix (scancodes for each cell)\r\n- structure of i²c messages exchanged with the mouse controler\r\n- flash general layout (where is built-in flasher, where is persistent storage and what is stored)\r\n- flashing protocol (I may be able to provide one implemented in python)\r\n(maybe a bit more ?)\r\n\r\nThe rest should be available already: CPU doc, USB HID doc. A libre assembler tool should be easy to implement. A libre C compiler should be a lot more effort, and I doubt it would be worth it (unless we have an sdcc dev in the audience maybe ? But then it will be another arch costing in maintenance for very few known device types...). So the implementation will likely have to be done in pure assembler.\r\n\r\nTo give a very general idea of the amount of effort needed, the proprietary firmware has around 6500 assembler instructions (flasher included). This chip's assembly dialect is very simple (a bit simpler than the 8051, to give a more widely known example). I believe this would require a few weeks of work, maybe a few days in collaborative sprint mode.\r\n\r\nIs anyone motivated to take this on, and non-tainted by the proprietary implementation ?\r\n\r\nFun discovery of the day: if you press \"return\" while plugging the keyboard, it boots in flash mode. It's still under firmware control, but that means that if we do not touch the early initialisation code & flashing program, we can have a quite fail-safe setup for experimenting."}}
{"actor":{"display_login":"vpelletier"}}