Revert to commit 5510652

Dispatch changes should have only been commited to a development branch.
Here we revert to the original switch statement dispatchers
This commit is contained in:
Dave committed 2026-02-08 10:59:01 -06:00
1 parent 1e624399a0
commit 73573faa39
27 files changed
+1759 -1612

No files matched your search

-648
View File
@@ -1,648 +0,0 @@
{
"_meta": {
"hash": {
"sha256": "e545fc317859b9d6139d16c20fc24844e9931cdf9f4e9e277e1ec1ba335c7256"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.org/simple",
"verify_ssl": true
}
]
},
"default": {
"alabaster": {
"hashes": [
"sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e",
"sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b"
],
"markers": "python_version >= '3.10'",
"version": "==1.0.0"
},
"babel": {
"hashes": [
"sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d",
"sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"
],
"markers": "python_version >= '3.8'",
"version": "==2.17.0"
},
"certifi": {
"hashes": [
"sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b",
"sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316"
],
"markers": "python_version >= '3.7'",
"version": "==2025.11.12"
},
"charset-normalizer": {
"hashes": [
"sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad",
"sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93",
"sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394",
"sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89",
"sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc",
"sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86",
"sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63",
"sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d",
"sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f",
"sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8",
"sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0",
"sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505",
"sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161",
"sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af",
"sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152",
"sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318",
"sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72",
"sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4",
"sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e",
"sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3",
"sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576",
"sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c",
"sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1",
"sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8",
"sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1",
"sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2",
"sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44",
"sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26",
"sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88",
"sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016",
"sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede",
"sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf",
"sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a",
"sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc",
"sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0",
"sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84",
"sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db",
"sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1",
"sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7",
"sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed",
"sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8",
"sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133",
"sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e",
"sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef",
"sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14",
"sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2",
"sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0",
"sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d",
"sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828",
"sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f",
"sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf",
"sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6",
"sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328",
"sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090",
"sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa",
"sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381",
"sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c",
"sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb",
"sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc",
"sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a",
"sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec",
"sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc",
"sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac",
"sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e",
"sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313",
"sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569",
"sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3",
"sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d",
"sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525",
"sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894",
"sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3",
"sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9",
"sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a",
"sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9",
"sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14",
"sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25",
"sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50",
"sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf",
"sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1",
"sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3",
"sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac",
"sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e",
"sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815",
"sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c",
"sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6",
"sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6",
"sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e",
"sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4",
"sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84",
"sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69",
"sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15",
"sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191",
"sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0",
"sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897",
"sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd",
"sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2",
"sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794",
"sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d",
"sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074",
"sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3",
"sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224",
"sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838",
"sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a",
"sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d",
"sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d",
"sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f",
"sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8",
"sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490",
"sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966",
"sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9",
"sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3",
"sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e",
"sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"
],
"markers": "python_version >= '3.7'",
"version": "==3.4.4"
},
"docutils": {
"hashes": [
"sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f",
"sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"
],
"markers": "python_version >= '3.9'",
"version": "==0.21.2"
},
"idna": {
"hashes": [
"sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea",
"sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"
],
"markers": "python_version >= '3.8'",
"version": "==3.11"
},
"imagesize": {
"hashes": [
"sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b",
"sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==1.4.1"
},
"intelhex": {
"hashes": [
"sha256:87cc5225657524ec6361354be928adfd56bcf2a3dcc646c40f8f094c39c07db4",
"sha256:892b7361a719f4945237da8ccf754e9513db32f5628852785aea108dcd250093"
],
"index": "pypi",
"version": "==2.3.0"
},
"jinja2": {
"hashes": [
"sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d",
"sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"
],
"markers": "python_version >= '3.7'",
"version": "==3.1.6"
},
"markupsafe": {
"hashes": [
"sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f",
"sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a",
"sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf",
"sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19",
"sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf",
"sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c",
"sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175",
"sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219",
"sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb",
"sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6",
"sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab",
"sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26",
"sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1",
"sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce",
"sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218",
"sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634",
"sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695",
"sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad",
"sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73",
"sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c",
"sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe",
"sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa",
"sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559",
"sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa",
"sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37",
"sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758",
"sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f",
"sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8",
"sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d",
"sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c",
"sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97",
"sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a",
"sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19",
"sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9",
"sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9",
"sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc",
"sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2",
"sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4",
"sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354",
"sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50",
"sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698",
"sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9",
"sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b",
"sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc",
"sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115",
"sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e",
"sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485",
"sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f",
"sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12",
"sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025",
"sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009",
"sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d",
"sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b",
"sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a",
"sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5",
"sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f",
"sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d",
"sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1",
"sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287",
"sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6",
"sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f",
"sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581",
"sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed",
"sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b",
"sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c",
"sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026",
"sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8",
"sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676",
"sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6",
"sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e",
"sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d",
"sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d",
"sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01",
"sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7",
"sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419",
"sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795",
"sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1",
"sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5",
"sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d",
"sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42",
"sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe",
"sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda",
"sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e",
"sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737",
"sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523",
"sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591",
"sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc",
"sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a",
"sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"
],
"markers": "python_version >= '3.9'",
"version": "==3.0.3"
},
"packaging": {
"hashes": [
"sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484",
"sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"
],
"markers": "python_version >= '3.8'",
"version": "==25.0"
},
"pygments": {
"hashes": [
"sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887",
"sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"
],
"markers": "python_version >= '3.8'",
"version": "==2.19.2"
},
"requests": {
"hashes": [
"sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6",
"sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"
],
"markers": "python_version >= '3.9'",
"version": "==2.32.5"
},
"roman-numerals-py": {
"hashes": [
"sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c",
"sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d"
],
"markers": "python_version >= '3.9'",
"version": "==3.1.0"
},
"snowballstemmer": {
"hashes": [
"sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064",
"sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"
],
"markers": "python_version not in '3.0, 3.1, 3.2'",
"version": "==3.0.1"
},
"sphinx": {
"hashes": [
"sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348",
"sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3"
],
"index": "pypi",
"markers": "python_version >= '3.11'",
"version": "==8.2.3"
},
"sphinx-autodoc-typehints": {
"hashes": [
"sha256:0accd043619f53c86705958e323b419e41667917045ac9215d7be1b493648d8c",
"sha256:5fcd4a3eb7aa89424c1e2e32bedca66edc38367569c9169a80f4b3e934171fdb"
],
"index": "pypi",
"markers": "python_version >= '3.11'",
"version": "==3.5.2"
},
"sphinx-rtd-theme": {
"hashes": [
"sha256:422ccc750c3a3a311de4ae327e82affdaf59eb695ba4936538552f3b00f4ee13",
"sha256:b7457bc25dda723b20b086a670b9953c859eab60a2a03ee8eb2bb23e176e5f85"
],
"index": "pypi",
"markers": "python_version >= '3.8'",
"version": "==3.0.2"
},
"sphinxcontrib-applehelp": {
"hashes": [
"sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1",
"sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"
],
"markers": "python_version >= '3.9'",
"version": "==2.0.0"
},
"sphinxcontrib-devhelp": {
"hashes": [
"sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad",
"sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"
],
"markers": "python_version >= '3.9'",
"version": "==2.0.0"
},
"sphinxcontrib-htmlhelp": {
"hashes": [
"sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8",
"sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"
],
"markers": "python_version >= '3.9'",
"version": "==2.1.0"
},
"sphinxcontrib-jquery": {
"hashes": [
"sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a",
"sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"
],
"markers": "python_version >= '2.7'",
"version": "==4.1"
},
"sphinxcontrib-jsmath": {
"hashes": [
"sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178",
"sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"
],
"markers": "python_version >= '3.5'",
"version": "==1.0.1"
},
"sphinxcontrib-qthelp": {
"hashes": [
"sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab",
"sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"
],
"markers": "python_version >= '3.9'",
"version": "==2.0.0"
},
"sphinxcontrib-serializinghtml": {
"hashes": [
"sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331",
"sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"
],
"markers": "python_version >= '3.9'",
"version": "==2.0.0"
},
"toml": {
"hashes": [
"sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b",
"sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"
],
"index": "pypi",
"markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2'",
"version": "==0.10.2"
},
"urllib3": {
"hashes": [
"sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760",
"sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"
],
"markers": "python_version >= '3.9'",
"version": "==2.5.0"
}
},
"develop": {
"astroid": {
"hashes": [
"sha256:ac8fb7ca1c08eb9afec91ccc23edbd8ac73bb22cbdd7da1d488d9fb8d6579070",
"sha256:d7546c00a12efc32650b19a2bb66a153883185d3179ab0d4868086f807338b9b"
],
"markers": "python_full_version >= '3.10.0'",
"version": "==4.0.2"
},
"black": {
"hashes": [
"sha256:0a1d40348b6621cc20d3d7530a5b8d67e9714906dfd7346338249ad9c6cedf2b",
"sha256:0c0f7c461df55cf32929b002335883946a4893d759f2df343389c4396f3b6b37",
"sha256:1032639c90208c15711334d681de2e24821af0575573db2810b0763bcd62e0f0",
"sha256:35690a383f22dd3e468c85dc4b915217f87667ad9cce781d7b42678ce63c4170",
"sha256:43945853a31099c7c0ff8dface53b4de56c41294fa6783c0441a8b1d9bf668bc",
"sha256:51c65d7d60bb25429ea2bf0731c32b2a2442eb4bd3b2afcb47830f0b13e58bfd",
"sha256:5bd4a22a0b37401c8e492e994bce79e614f91b14d9ea911f44f36e262195fdda",
"sha256:6cb2d54a39e0ef021d6c5eef442e10fd71fcb491be6413d083a320ee768329dd",
"sha256:6cced12b747c4c76bc09b4db057c319d8545307266f41aaee665540bc0e04e96",
"sha256:7eebd4744dfe92ef1ee349dc532defbf012a88b087bb7ddd688ff59a447b080e",
"sha256:80e7486ad3535636657aa180ad32a7d67d7c273a80e12f1b4bfa0823d54e8fac",
"sha256:895571922a35434a9d8ca67ef926da6bc9ad464522a5fe0db99b394ef1c0675a",
"sha256:92285c37b93a1698dcbc34581867b480f1ba3a7b92acf1fe0467b04d7a4da0dc",
"sha256:936c4dd07669269f40b497440159a221ee435e3fddcf668e0c05244a9be71993",
"sha256:9815ccee1e55717fe9a4b924cae1646ef7f54e0f990da39a34fc7b264fcf80a2",
"sha256:9a323ac32f5dc75ce7470501b887250be5005a01602e931a15e45593f70f6e08",
"sha256:a3bb5ce32daa9ff0605d73b6f19da0b0e6c1f8f2d75594db539fdfed722f2b06",
"sha256:aa211411e94fdf86519996b7f5f05e71ba34835d8f0c0f03c00a26271da02664",
"sha256:ae263af2f496940438e5be1a0c1020e13b09154f3af4df0835ea7f9fe7bfa409",
"sha256:cb4f4b65d717062191bdec8e4a442539a8ea065e6af1c4f4d36f0cdb5f71e170",
"sha256:d81a44cbc7e4f73a9d6ae449ec2317ad81512d1e7dce7d57f6333fd6259737bc",
"sha256:dae49ef7369c6caa1a1833fd5efb7c3024bb7e4499bf64833f65ad27791b1545",
"sha256:e3f562da087791e96cefcd9dda058380a442ab322a02e222add53736451f604b",
"sha256:ec311e22458eec32a807f029b2646f661e6859c3f61bc6d9ffb67958779f392e",
"sha256:f42c0ea7f59994490f4dccd64e6b2dd49ac57c7c84f38b8faab50f8759db245c",
"sha256:f9786c24d8e9bd5f20dc7a7f0cdd742644656987f6ea6947629306f937726c03"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==25.11.0"
},
"click": {
"hashes": [
"sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a",
"sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6"
],
"markers": "python_version >= '3.10'",
"version": "==8.3.1"
},
"dill": {
"hashes": [
"sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0",
"sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049"
],
"markers": "python_version >= '3.11'",
"version": "==0.4.0"
},
"flake8": {
"hashes": [
"sha256:b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e",
"sha256:fe044858146b9fc69b551a4b490d69cf960fcb78ad1edcb84e7fbb1b4a8e3872"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==7.3.0"
},
"isort": {
"hashes": [
"sha256:1bcabac8bc3c36c7fb7b98a76c8abb18e0f841a3ba81decac7691008592499c1",
"sha256:5513527951aadb3ac4292a41a16cbc50dd1642432f5e8c20057d414bdafb4187"
],
"markers": "python_full_version >= '3.10.0'",
"version": "==7.0.0"
},
"mccabe": {
"hashes": [
"sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325",
"sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"
],
"markers": "python_version >= '3.6'",
"version": "==0.7.0"
},
"mypy": {
"hashes": [
"sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914",
"sha256:030c52d0ea8144e721e49b1f68391e39553d7451f0c3f8a7565b59e19fcb608b",
"sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b",
"sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc",
"sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544",
"sha256:1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86",
"sha256:1379451880512ffce14505493bd9fe469e0697543717298242574882cf8cdb8d",
"sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075",
"sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e",
"sha256:22f27105f1525ec024b5c630c0b9f36d5c1cc4d447d61fe51ff4bd60633f47ac",
"sha256:25a9c8fb67b00599f839cf472713f54249a62efd53a54b565eb61956a7e3296b",
"sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34",
"sha256:3ca30b50a51e7ba93b00422e486cbb124f1c56a535e20eff7b2d6ab72b3b2e37",
"sha256:448acd386266989ef11662ce3c8011fd2a7b632e0ec7d61a98edd8e27472225b",
"sha256:592ec214750bc00741af1f80cbf96b5013d81486b7bb24cb052382c19e40b428",
"sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893",
"sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce",
"sha256:664dc726e67fa54e14536f6e1224bcfce1d9e5ac02426d2326e2bb4e081d1ce8",
"sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c",
"sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf",
"sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341",
"sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e",
"sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba",
"sha256:7fb95f97199ea11769ebe3638c29b550b5221e997c63b14ef93d2e971606ebed",
"sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f",
"sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d",
"sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8",
"sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764",
"sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d",
"sha256:aa5e07ac1a60a253445797e42b8b2963c9675563a94f11291ab40718b016a7a0",
"sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c",
"sha256:c2b9c7e284ee20e7598d6f42e13ca40b4928e6957ed6813d1ab6348aa3f47133",
"sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986",
"sha256:d6985ed057513e344e43a26cc1cd815c7a94602fb6a3130a34798625bc2f07b6",
"sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074",
"sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb",
"sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e",
"sha256:f9e171c465ad3901dc652643ee4bffa8e9fef4d7d0eece23b428908c77a76a66"
],
"index": "pypi",
"markers": "python_version >= '3.9'",
"version": "==1.18.2"
},
"mypy-extensions": {
"hashes": [
"sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505",
"sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"
],
"markers": "python_version >= '3.8'",
"version": "==1.1.0"
},
"packaging": {
"hashes": [
"sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484",
"sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"
],
"markers": "python_version >= '3.8'",
"version": "==25.0"
},
"pathspec": {
"hashes": [
"sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08",
"sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"
],
"markers": "python_version >= '3.8'",
"version": "==0.12.1"
},
"platformdirs": {
"hashes": [
"sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312",
"sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"
],
"markers": "python_version >= '3.10'",
"version": "==4.5.0"
},
"pycodestyle": {
"hashes": [
"sha256:c4b5b517d278089ff9d0abdec919cd97262a3367449ea1c8b49b91529167b783",
"sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d"
],
"markers": "python_version >= '3.9'",
"version": "==2.14.0"
},
"pyflakes": {
"hashes": [
"sha256:b24f96fafb7d2ab0ec5075b7350b3d2d2218eab42003821c06344973d3ea2f58",
"sha256:f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f"
],
"markers": "python_version >= '3.9'",
"version": "==3.4.0"
},
"pylint": {
"hashes": [
"sha256:896d09afb0e78bbf2e030cd1f3d8dc92771a51f7e46828cbc3948a89cd03433a",
"sha256:a427fe76e0e5355e9fb9b604fd106c419cafb395886ba7f3cebebb03f30e081d"
],
"index": "pypi",
"markers": "python_full_version >= '3.10.0'",
"version": "==4.0.3"
},
"pytokens": {
"hashes": [
"sha256:2f932b14ed08de5fcf0b391ace2642f858f1394c0857202959000b68ed7a458a",
"sha256:95b2b5eaf832e469d141a378872480ede3f251a5a5041b8ec6e581d3ac71bbf3"
],
"markers": "python_version >= '3.8'",
"version": "==0.3.0"
},
"tomlkit": {
"hashes": [
"sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1",
"sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0"
],
"markers": "python_version >= '3.8'",
"version": "==0.13.3"
},
"typing-extensions": {
"hashes": [
"sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466",
"sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"
],
"markers": "python_version >= '3.9'",
"version": "==4.15.0"
}
}
}
+1
View File
@@ -17,6 +17,7 @@ add_valid_target() {
add_valid_target test
add_valid_target atmega328p
add_valid_target atmega168p
add_valid_target atmega88p
add_valid_target atmega2560
add_valid_target atmega1280
add_valid_target atmega640
@@ -549,7 +549,7 @@ void asdf_arch_out3_open_lo_set(uint8_t value)
}
}
// PROCEDURE: asdf_arch_set_pos_strobe
// PROCEDURE: asdf_arch_pos_strobe
// INPUTS: none
// OUTPUTS: none
//
@@ -562,14 +562,13 @@ void asdf_arch_out3_open_lo_set(uint8_t value)
//
// COMPLEXITY: 1
//
void asdf_arch_set_pos_strobe(uint8_t unused)
void asdf_arch_set_pos_strobe(void)
{
(void) unused;
clear_bit(&ASDF_STROBE_PORT, ASDF_STROBE_BIT);
set_bit(&ASDF_STROBE_DDR, ASDF_STROBE_BIT);
}
// PROCEDURE: asdf_arch_set_neg_strobe
// PROCEDURE: asdf_arch_neg_strobe
// INPUTS: none
// OUTPUTS: none
//
@@ -577,13 +576,12 @@ void asdf_arch_set_pos_strobe(uint8_t unused)
//
// SIDE EFFECTS: See DESCRIPTION
//
// SCOPE: public
// SCOPE: private
//
// COMPLEXITY: 1
//
void asdf_arch_set_neg_strobe(uint8_t unused)
void asdf_arch_set_neg_strobe(void)
{
(void) unused;
set_bit(&ASDF_STROBE_PORT, ASDF_STROBE_BIT);
set_bit(&ASDF_STROBE_DDR, ASDF_STROBE_BIT);
}
@@ -733,9 +731,9 @@ void asdf_arch_init(void)
data_polarity = ASDF_DEFAULT_DATA_POLARITY;
if (ASDF_DEFAULT_STROBE_POLARITY == ASDF_POSITIVE_POLARITY) {
asdf_arch_set_pos_strobe(0);
asdf_arch_set_pos_strobe();
} else {
asdf_arch_set_neg_strobe(0);
asdf_arch_set_neg_strobe();
}
asdf_arch_init_leds();
@@ -358,17 +358,18 @@
#define ASDF_ARCH_DIPSWITCH_ROW 8
// PROCEDURE: asdf_arch_set_pos_strobe
// PROCEDURE: asdf_arch_pos_strobe
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Initialize strobe output to positive polarity. Initial state is LOW
void asdf_arch_set_pos_strobe(uint8_t unused);
// DESCRIPTION: Initialize strobe output to positive polarity. Initial state is
// LOW
void asdf_arch_set_pos_strobe(void);
// PROCEDURE: asdf_arch_set_neg_strobe
// PROCEDURE: asdf_arch_neg_strobe
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Initialize strobe output
void asdf_arch_set_neg_strobe(uint8_t unused);
void asdf_arch_set_neg_strobe(void);
// PROCEDURE: asdf_arch_null_output
@@ -535,7 +535,7 @@ void asdf_arch_out3_open_lo_set(uint8_t value)
}
}
// PROCEDURE: asdf_arch_set_pos_strobe
// PROCEDURE: asdf_arch_pos_strobe
// INPUTS: none
// OUTPUTS: none
//
@@ -548,14 +548,13 @@ void asdf_arch_out3_open_lo_set(uint8_t value)
//
// COMPLEXITY: 1
//
void asdf_arch_set_pos_strobe(uint8_t unused)
void asdf_arch_set_pos_strobe(void)
{
(void) unused;
clear_bit(&ASDF_STROBE_PORT, ASDF_STROBE_BIT);
set_bit(&ASDF_STROBE_DDR, ASDF_STROBE_BIT);
}
// PROCEDURE: asdf_arch_set_neg_strobe
// PROCEDURE: asdf_arch_neg_strobe
// INPUTS: none
// OUTPUTS: none
//
@@ -563,13 +562,12 @@ void asdf_arch_set_pos_strobe(uint8_t unused)
//
// SIDE EFFECTS: See DESCRIPTION
//
// SCOPE: public
// SCOPE: private
//
// COMPLEXITY: 1
//
void asdf_arch_set_neg_strobe(uint8_t unused)
void asdf_arch_set_neg_strobe(void)
{
(void) unused;
set_bit(&ASDF_STROBE_PORT, ASDF_STROBE_BIT);
set_bit(&ASDF_STROBE_DDR, ASDF_STROBE_BIT);
}
@@ -729,9 +727,9 @@ void asdf_arch_init(void)
data_polarity = ASDF_DEFAULT_DATA_POLARITY;
if (ASDF_DEFAULT_STROBE_POLARITY == ASDF_POSITIVE_POLARITY) {
asdf_arch_set_pos_strobe(0);
asdf_arch_set_pos_strobe();
} else {
asdf_arch_set_neg_strobe(0);
asdf_arch_set_neg_strobe();
}
asdf_arch_init_leds();
@@ -262,17 +262,18 @@
// DIP switch is on row 8
#define ASDF_ARCH_DIPSWITCH_ROW 8
// PROCEDURE: asdf_arch_set_pos_strobe
// PROCEDURE: asdf_arch_pos_strobe
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Initialize strobe output to positive polarity. Initial state is LOW
void asdf_arch_set_pos_strobe(uint8_t unused);
// DESCRIPTION: Initialize strobe output to positive polarity. Initial state is
// LOW
void asdf_arch_set_pos_strobe(void);
// PROCEDURE: asdf_arch_set_neg_strobe
// PROCEDURE: asdf_arch_neg_strobe
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Initialize strobe output
void asdf_arch_set_neg_strobe(uint8_t unused);
void asdf_arch_set_neg_strobe(void);
// PROCEDURE: asdf_arch_null_output
// INPUTS: (uint8_t) value - ignored
+6 -7
View File
@@ -603,23 +603,22 @@ void asdf_arch_pulse_delay_short(void)
asdf_arch_pulse_delay();
}
// PROCEDURE: asdf_arch_set_pos_strobe
// PROCEDURE: asdf_arch_pos_strobe
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Initialize strobe output to positive polarity. Initial state is LOW
void asdf_arch_set_pos_strobe(uint8_t unused)
// DESCRIPTION: Initialize strobe output to positive polarity. Initial state is
// LOW
void asdf_arch_set_pos_strobe(void)
{
(void) unused;
strobe_is_positive = 1;
}
// PROCEDURE: asdf_arch_set_neg_strobe
// PROCEDURE: asdf_arch_neg_strobe
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Initialize strobe output
void asdf_arch_set_neg_strobe(uint8_t unused)
void asdf_arch_set_neg_strobe(void)
{
(void) unused;
strobe_is_positive = 0;
}
+7 -5
View File
@@ -59,17 +59,18 @@ typedef enum {
#define ASDF_ARCH_DEFAULT_ROW_SCANNER asdf_arch_read_row
#define ASDF_ARCH_DEFAULT_OUTPUT asdf_arch_send_code
// PROCEDURE: asdf_arch_set_pos_strobe
// PROCEDURE: asdf_arch_pos_strobe
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Initialize strobe output to positive polarity. Initial state is LOW
void asdf_arch_set_pos_strobe(uint8_t unused);
// DESCRIPTION: Initialize strobe output to positive polarity. Initial state is
// LOW
void asdf_arch_set_pos_strobe(void);
// PROCEDURE: asdf_arch_set_neg_strobe
// PROCEDURE: asdf_arch_neg_strobe
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Initialize strobe output
void asdf_arch_set_neg_strobe(uint8_t unused);
void asdf_arch_set_neg_strobe(void);
// PROCEDURE: asdf_arch_is_strobe_positive
// OUTPUTS: returns non-zero if test arch currently uses positive strobe polarity
@@ -246,3 +247,4 @@ void asdf_arch_init(void);
//-------|---------|---------+---------+---------+---------+---------+---------+
// Above line is 80 columns, and should display completely in the editor.
@@ -81,7 +81,7 @@ void setup_ace1000_keymap(void)
asdf_virtual_assign(ACE1000_VIRTUAL_CLR_SCR, ACE1000_CLR_SCR_OUT, V_PULSE_LONG, !ACE1000_CLR_SCR_ACTIVE_VALUE);
// turn on caps lock
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
}
@@ -80,7 +80,7 @@ void setup_apple2_keymap(void)
// assign the CLRSCR output to the virtual CLRSCR output, configure to produce a long pulse when activated
asdf_virtual_assign(APPLE_VIRTUAL_CLR_SCR, APPLE_CLR_SCR_OUTPUT, V_PULSE_LONG, !APPLE_CLR_SCR_ACTIVE_VALUE);
asdf_modifier_capslock_activate(0); // For Apple 2, start with CAPS active
asdf_modifier_capslock_activate(); // For Apple 2, start with CAPS active
}
@@ -0,0 +1,304 @@
// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*-
//
// Unfified Keyboard Project
// ASDF keyboard firmware
//
// asdf_keymaps_apple2.h
//
// Apple 2 keymaps
//
// Copyright 2019 David Fenyes
//
// This program is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation, either version 3 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program. If not, see <https://www.gnu.org/licenses/>.
// This file supplies the Apple 2 ASCII keyboard keymap. Two variants are provided:
//
// 1) An Upper/Lowercase variant. This variant moves the @ and ^ symbols from
// the P and N keys to the REPEAT key, since the P and N keys need to reserve
// the shifted value for the uppercase characters. Also, the "Power" key
// doubles as a caps-lock key.
//
// 2) A CAPS only keyboard, following the standard Apple II conventions and
// layout, with ^ above the N key and @ above the P key, and a functioning
// REPEAT key.
//
// For both variants, CTRL+RESET is required for a system reset.
#if !defined(ASDF_KEYMAP_DEFS_APPLE2_H)
#define ASDF_KEYMAP_DEFS_APPLE2_H
// include DIP switch definitions
#include "asdf_keymap_defs_dipswitch.h"
// Edit the number of rows and columns used in this map. If the number is less
// than the maxium, the unused elements will be initialized to 0.
#define ASDF_APPLE2_NUM_ROWS 9 // DIP switches are row 8 (zero-based)
#define ASDF_APPLE2_NUM_COLS 8
#define APPLE_ACTION_RESET ACTION_VOUT1
#define APPLE_VIRTUAL_RESET VOUT1
#define APPLE_RESET_OUTPUT PHYSICAL_OUT3_OPEN_HI
#define APPLE_RESET_ACTIVE_VALUE 0
#define APPLE_ACTION_CLEAR ACTION_VOUT2
#define APPLE_VIRTUAL_CLR_SCR VOUT2
#define APPLE_CLR_SCR_OUTPUT PHYSICAL_OUT1_OPEN_LO
#define APPLE_CLR_SCR_ACTIVE_VALUE 1
#define APPLE_VIRTUAL_POWER_LED VLED1
#define APPLE_POWER_LED PHYSICAL_LED1
#define APPLE_POWER_LED_INIT_VALUE 1
#define APPLE_VIRTUAL_DISABLED_LED VLED2
#define APPLE_DISABLED_LED PHYSICAL_LED3
#define APPLE_DISABLED_INIT_VALUE 0
#define ASDF_APPLE2_KEYMAP_INITIALIZER_LENGTH 4
// The PLAIN map uses the "power" button as a caps-lock, so map the CAPS LED to
// the power button LED.
#define ASDF_APPLE2_PLAIN_KEYMAP_INITIALIZER \
{ \
{ .virtual_device = VCAPS_LED, .physical_device = APPLE_POWER_LED, .initial_value = 0 }, \
{ .virtual_device = APPLE_VIRTUAL_DISABLED_LED, \
.physical_device = APPLE_DISABLED_LED, \
.initial_value = 0 }, \
{ .virtual_device = APPLE_VIRTUAL_RESET, \
.physical_device = APPLE_RESET_OUTPUT, \
.function = V_PULSE_SHORT, \
.initial_value = !APPLE_RESET_ACTIVE_VALUE }, \
{ \
.virtual_device = APPLE_VIRTUAL_CLR_SCR, .physical_device = APPLE_CLR_SCR_OUTPUT, \
.function = V_PULSE_LONG, .initial_value = !APPLE_CLR_SCR_ACTIVE_VALUE \
} \
}
// The ALL CAPS map is the classic Apple II/II+ map. There is no CAPS LED, since
// CAPS doesn't matter in the ALL CAPS keymap.
#define ASDF_APPLE2_CAPS_KEYMAP_INITIALIZER \
{ \
{ .virtual_device = APPLE_VIRTUAL_POWER_LED, \
.physical_device = APPLE_POWER_LED, \
.initial_value = APPLE_POWER_LED_INIT_VALUE }, \
{ .virtual_device = APPLE_VIRTUAL_DISABLED_LED, \
.physical_device = APPLE_DISABLED_LED, \
.initial_value = 0 }, \
{ .virtual_device = APPLE_VIRTUAL_RESET, \
.physical_device = APPLE_RESET_OUTPUT, \
.function = V_PULSE_SHORT, \
.initial_value = !APPLE_RESET_ACTIVE_VALUE }, \
{ \
.virtual_device = APPLE_VIRTUAL_CLR_SCR, .physical_device = APPLE_CLR_SCR_OUTPUT, \
.function = V_PULSE_LONG, .initial_value = !APPLE_CLR_SCR_ACTIVE_VALUE \
} \
}
#define ASDF_APPLE2_KEYMAP_INITIALIZER \
ASDF_APPLE2_PLAIN_KEYMAP_INITIALIZER, ASDF_APPLE2_CAPS_KEYMAP_INITIALIZER
// Structure to initialize hooks. No hook functions are needed for APPLE2 keyboard.
#define ASDF_APPLE2_KEYMAP_HOOK_INITIALIZER_LENGTH 0
#define ASDF_APPLE2_PLAIN_KEYMAP_HOOK_INITIALIZER \
{ \
}
#define ASDF_APPLE2_CAPS_KEYMAP_HOOK_INITIALIZER \
{ \
}
#define ASDF_APPLE2_KEYMAP_HOOK_INITIALIZER \
ASDF_APPLE2_PLAIN_KEYMAP_HOOK_INITIALIZER, ASDF_APPLE2_CAPS_KEYMAP_HOOK_INITIALIZER
// Key Matrix for combination of ASCII controller and Classic ASCII matrix
//
// Col-> 0 1 2 3 4 5 6 7
// Row 0 POWER R-Shift L-Shift (no key) ESC TAB CTRL \(backslash)
// Row 1 Rubout P ; / SPACEBAR Z A Q
// Row 2 Break ,(comma) M N B V C X
// Row 3 Spare K J H G F D A
// Row 4 Rt arrow I U Y T R E W
// Row 5 LT arrow Repeat CapsLock Return LineFeed O(alpha) L .(period)
// Row 6 ~(tilde) ] [ -(dash) :(colon) 0(numeral) 9 8
// Row 7 @(at) 7 6 5 4 3 2 1
//
// Row 9 DIP switches 0-7
//
// Notes:
//
// 1) The keys above correspond to the silk screen on the PCB. For the OSI and
// Apple layouts, the keys may not all match the silk screen. When creating a
// layout different from the silk screen, look up the row and column for the
// silk screen label at the desired position, and then place the desired
// function in the keymap definition at the desired row and column. For
// example, the Apple 2 keymap places the "RESET" key at the "[" silk-screen
// position, Row 6, Col 2. The keymap places ACTION_RESET at Row 6, Col 2 in
// the "ASDF_APPLE2_CTRL_MAP" to map the RESET function to the CTRL-RESET key
// combination.
//
// 2) To ensure consistent DIP switch operation within the keymap, a
// ASDF_ASCII_DIP_SWITCHES macro is defined. Keeping the ACTION_MAPSEL0-3
// definitions in positions 0-3 ensures consistent map selection among all
// keymaps.
#define ASDF_APPLE2_DIP_SWITCHES ASDF_KEYMAP_DIP_SWITCHES
#define APPLE_LEFT_ARROW ASCII_CTRL_H
#define APPLE_RIGHT_ARROW ASCII_CTRL_U
// clang-format off
#define ASDF_APPLE2_PLAIN_MAP \
{ \
[0] = { ACTION_CAPS, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, APPLE_RIGHT_ARROW }, \
[1] = { ASCII_DEL, 'p', ';', '/', ASCII_SPACE, 'z', 'a', 'q' }, \
[2] = { ACTION_NOTHING, ASCII_COMMA, 'm', 'n', 'b', 'v', 'c', 'x' }, \
[3] = { ACTION_NOTHING, 'k', 'j', 'h', 'g', 'f', 'd', 's' }, \
[4] = { ACTION_NOTHING, 'i', 'u', 'y', 't', 'r', 'e', 'w' }, \
[5] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ASCII_CR, '^', 'o', 'l', ASCII_PERIOD }, \
[6] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, '-', ':', ASCII_ZERO, '9', '8' }, \
[7] = { APPLE_LEFT_ARROW, '7', '6', '5', '4', '3', '2', '1' }, \
ASDF_APPLE2_DIP_SWITCHES \
}
#define ASDF_APPLE2_SHIFT_MAP \
{ \
[0] = { ACTION_CAPS, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, APPLE_RIGHT_ARROW }, \
[1] = { ACTION_NOTHING, 'P', '+', '?', ASCII_SPACE, 'Z', 'A', 'Q' }, \
[2] = { ACTION_NOTHING, '<', 'M', 'N', 'B', 'V', 'C', 'X' }, \
[3] = { ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \
[4] = { ACTION_NOTHING, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, \
[5] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ASCII_CR, ASCII_AT, 'O', 'L', '>' }, \
[6] = { ACTION_NOTHING, ACTION_NOTHING, APPLE_ACTION_CLEAR, '=', \
'*', ASCII_ZERO, ASCII_RT_PAREN, ASCII_LT_PAREN }, \
[7] = { APPLE_LEFT_ARROW, ASCII_SINGLE_QUOTE, '&', '%', '$', '#', ASCII_DOUBLE_QUOTE, '!' }, \
ASDF_APPLE2_DIP_SWITCHES \
}
#define ASDF_APPLE2_CAPS_MAP \
{ \
[0] = { ACTION_CAPS, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, APPLE_RIGHT_ARROW }, \
[1] = { ACTION_NOTHING, 'P', ';', '/', ASCII_SPACE, 'Z', 'A', 'Q' }, \
[2] = { ACTION_NOTHING, ASCII_COMMA, 'M', 'N', 'B', 'V', 'C', 'X' }, \
[3] = { ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \
[4] = { ACTION_NOTHING, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, \
[5] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ASCII_CR, ACTION_REPEAT, 'O', 'L', ASCII_PERIOD }, \
[6] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, '-', ':', ASCII_ZERO, '9', '8' }, \
[7] = { APPLE_LEFT_ARROW, '7', '6', '5', '4', '3', '2', '1' }, \
ASDF_APPLE2_DIP_SWITCHES \
}
#define ASDF_APPLE2_SHIFT_CAPS_MAP \
{ \
[0] = { ACTION_CAPS, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, APPLE_RIGHT_ARROW }, \
[1] = { ACTION_NOTHING, ASCII_AT, '+', '?', ASCII_SPACE, 'Z', 'A', 'Q' }, \
[2] = { ACTION_NOTHING, '<', 'M', '^', 'B', 'V', 'C', 'X' }, \
[3] = { ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \
[4] = { ACTION_NOTHING, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, \
[5] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ASCII_CR, ACTION_REPEAT, 'O', 'L', '>' }, \
[6] = { ACTION_NOTHING, ACTION_NOTHING, APPLE_ACTION_CLEAR, '=', \
'*', ASCII_ZERO, ASCII_RT_PAREN, ASCII_LT_PAREN }, \
[7] = { APPLE_LEFT_ARROW, ASCII_SINGLE_QUOTE, '&', '%', '$', '#', ASCII_DOUBLE_QUOTE, '!' }, \
ASDF_APPLE2_DIP_SWITCHES \
}
#define ASDF_APPLE2_CTRL_MAP \
{ \
[0] = { ACTION_CAPS, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, APPLE_RIGHT_ARROW }, \
[1] = { ACTION_NOTHING, ASCII_CTRL_P, ACTION_NOTHING, ACTION_NOTHING, \
ASCII_SPACE, ASCII_CTRL_Z, ASCII_CTRL_A, ASCII_CTRL_Q }, \
[2] = { ACTION_NOTHING, ASCII_COMMA, ASCII_CTRL_M, ASCII_CTRL_N, \
ASCII_CTRL_B, ASCII_CTRL_V, ASCII_CTRL_C, ASCII_CTRL_X }, \
[3] = { ACTION_NOTHING, ASCII_CTRL_K, ASCII_CTRL_J, ASCII_CTRL_H, \
ASCII_CTRL_G, ASCII_CTRL_F, ASCII_CTRL_D, ASCII_CTRL_S }, \
[4] = { ACTION_NOTHING, ASCII_CTRL_I, ASCII_CTRL_U, ASCII_CTRL_Y, \
ASCII_CTRL_T, ASCII_CTRL_R, ASCII_CTRL_E, ASCII_CTRL_W }, \
[5] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ASCII_CR, \
ACTION_REPEAT, ASCII_CTRL_O, ASCII_CTRL_L, ACTION_NOTHING }, \
[6] = { ACTION_NOTHING, ACTION_NOTHING, APPLE_ACTION_RESET, ACTION_NOTHING, \
ACTION_NOTHING, ACTION_FN_10, ACTION_FN_9, ACTION_FN_8 }, \
[7] = { APPLE_LEFT_ARROW, ACTION_FN_7, ACTION_FN_6, ACTION_FN_5, \
ACTION_FN_4, ACTION_FN_3, ACTION_FN_2, ACTION_FN_1 }, \
ASDF_APPLE2_DIP_SWITCHES \
}
// clang-format on
#define ASDF_APPLE2_MAP_DECLARATIONS \
static const FLASH keycode_matrix_t apple2_plain_matrix = ASDF_APPLE2_PLAIN_MAP; \
static const FLASH keycode_matrix_t apple2_shift_matrix = ASDF_APPLE2_SHIFT_MAP; \
static const FLASH keycode_matrix_t apple2_caps_matrix = ASDF_APPLE2_CAPS_MAP; \
static const FLASH keycode_matrix_t apple2_caps_shift_matrix = ASDF_APPLE2_SHIFT_CAPS_MAP; \
static const FLASH keycode_matrix_t apple2_ctrl_matrix = ASDF_APPLE2_CTRL_MAP;
// Here, you can specify which maps are associated with which modifier keys.
// There can be multiple definitions. For example, as shown here, an ALL CAPS
// keymap can be made by assigning the caps map to the "no modifier" position.
// Or, more additional keymaps can be defined above, and keymap sets can be
// defined below that pick and choose between them. The modifiers are assigned as follows:
//
// [0]: plain (no modifiers)
// [1]: shift (shift key or shift lock active)
// [2]: caps (caps lock active)
// [3]: ctrl: (control key active)
#define ASDF_APPLE2_PLAIN_MAP_DEFS \
{ \
[MOD_PLAIN_MAP] = &apple2_plain_matrix, [MOD_SHIFT_MAP] = &apple2_shift_matrix, \
[MOD_CAPS_MAP] = &apple2_caps_matrix, [MOD_CTRL_MAP] = &apple2_ctrl_matrix \
}
#define ASDF_APPLE2_CAPS_MAP_DEFS \
{ \
[MOD_PLAIN_MAP] = &apple2_caps_matrix, [MOD_SHIFT_MAP] = &apple2_caps_shift_matrix, \
[MOD_CAPS_MAP] = &apple2_caps_matrix, [MOD_CTRL_MAP] = &apple2_ctrl_matrix \
}
#define ASDF_APPLE2_ALL_MAPS ASDF_APPLE2_PLAIN_MAP_DEFS, ASDF_APPLE2_CAPS_MAP_DEFS
#define ASDF_APPLE2_ALL_MAPS_COUNT 2
#if !defined(ASDF_NUM_ROWS) || (ASDF_NUM_ROWS < ASDF_APPLE2_NUM_ROWS)
#undef ASDF_NUM_ROWS
#define ASDF_NUM_ROWS ASDF_APPLE2_NUM_ROWS
#endif
#if !defined(ASDF_NUM_COLS) || (ASDF_NUM_COLS < ASDF_APPLE2_NUM_COLS)
#undef ASDF_NUM_COLS
#define ASDF_NUM_COLS ASDF_APPLE2_NUM_COLS
#endif
#if !defined(ASDF_KEYMAP_INITIALIZER_LENGTH) \
|| (ASDF_KEYMAP_INITIALIZER_LENGTH < ASDF_APPLE2_KEYMAP_INITIALIZER_LENGTH)
#undef ASDF_KEYMAP_INITIALIZER_LENGTH
#define ASDF_KEYMAP_INITIALIZER_LENGTH ASDF_APPLE2_KEYMAP_INITIALIZER_LENGTH
#endif
#if !defined(ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH) \
|| (ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH < ASDF_APPLE2_KEYMAP_HOOK_INITIALIZER_LENGTH)
#undef ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH
#define ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH ASDF_APPLE2_KEYMAP_HOOK_INITIALIZER_LENGTH
#endif
#endif /* !defined (ASDF_KEYMAP_DEFS_APPLE2_H) */
//-------|---------|---------+---------+---------+---------+---------+---------+
// Above line is 80 columns, and should display completely in the editor.
@@ -0,0 +1,311 @@
// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*-
//
// Unfified Keyboard Project
// ASDF keyboard firmware
//
// asdf_keymaps_sol.h
//
// Ascii keymaps
//
// Copyright 2019 David Fenyes
//
// This program is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation, either version 3 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program. If not, see <https://www.gnu.org/licenses/>.
// To use this ascii for a new keymap, edit the keymaps definitions as
// desired. The keymaps are organized from row 0, counting upward, and each row
// includes the columns from 0-NUM_COLS.
//
#if !defined(ASDF_KEYMAP_DEFS_SOL20_H)
#define ASDF_KEYMAP_DEFS_SOL20_H
// include DIP switch definitions
#include "asdf_keymap_defs_dipswitch.h"
// Edit the number of rows and columns used in this map. If the number is less
// than the maxium, the unused elements will be initialized to 0.
#define ASDF_SOL_NUM_ROWS 13 // DIP switches are row 9
#define ASDF_SOL_NUM_COLS 8
// Key Matrix for combination of ASCII controller (ATMega328P version) and Classic ASCII matrix
//
// Col-> 0 1 2 3 4 5 6 7
// Row 0 Lt Ctrl ShiftLock A S D F G(alpha) H
// Row 1 J K L ;(semi) :(colon) DEL Repeat Rt Ctrl
// Row 2 UpperCase Lt Shift Z X C V B(alpha) N
// Row 3 M ,(comma) .(period) /(slash) Rt Shift ModeSelect
// Row 4 ESC 1 2 3 4 5 6(six) 7
// Row 5 8(eight) 9 0(zero) -(Dash) ^(Caret) [ \ ]
// Row 6 BREAK TAB Q W E R T Y
// Row 7 U I O(alpha) P @(at) Return LineFeed Load
// Row 9 LOCAL UpArrow LtArrow Spacebar RtArrow DnArrow Home Clear
// Row 10 NP-Minus NP-7 NP-Times NP-8 NP-Divide NP-9 (none) (none)
// Row 11 NP-4 NP-1 NP-5 NP-2 NP-6 NP-3 (none) (none)
// Row 12 NP-0 NP-period NP-Plus
//
// Row 8 DIP switches 0-7
//
// Physical Resource mapping:
// LED1: UPPER CASE
// LED2: LOCAL
// LED3: SHIFT LOCK
// OUT1: RESET
// OUT2: BREAK
// OUT3: LOCAL
// Notes:
//
// 1) To ensure consistent DIP switch operation within the keymap, a
// ASDF_SOL_DIP_SWITCHES macro is defined. Keeping the ACTION_MAPSEL0-3
// definitions in positions 0-3 ensures consistent map selection among all
// keymaps.
#define SOL_KBD_VRESET VOUT1
#define SOL_KBD_VBREAK VOUT2
#define SOL_KBD_VLOCAL VOUT3
#define SOL_KBD_LED_ON 1
#define SOL_KBD_LED_OFF 0
// The SOL manual (sec. 7.7.8) indicates shiftlock locks SHIFT on, and SHIFT
// returns to unshifted. For Toggle behavior, change to ACTION_SHIFTLOCK_TOGGLE.
#define SOL_KBD_SHIFTLOCK_ACTION ACTION_SHIFTLOCK_ON
// The weird C preprocessor expansion behavior requires one dereference for each
// expansion.
#define SOL_KBD_VIRTUAL_SUB1(SOL_VDEVICE) ACTION_ ## SOL_VDEVICE
#define SOL_KBD_VIRTUAL_SUB(SOL_VDEVICE) SOL_KBD_VIRTUAL_SUB1(SOL_VDEVICE)
#define SOL_KBD_LOCAL_ACTION SOL_KBD_VIRTUAL_SUB(SOL_KBD_VLOCAL)
#define SOL_KBD_RESET_ACTION SOL_KBD_VIRTUAL_SUB(SOL_KBD_VRESET)
#define SOL_KBD_BREAK_ACTION SOL_KBD_VIRTUAL_SUB(SOL_KBD_VBREAK)
#define SOL_ASCII_LOAD 0x8C
#define SOL_ASCII_MODE_SELECT 0x80
#define SOL_ASCII_UP_ARROW 0x97
#define SOL_ASCII_LT_ARROW 0x81
#define SOL_ASCII_RT_ARROW 0x93
#define SOL_ASCII_DN_ARROW 0x9a
#define SOL_ASCII_HOME 0x8e
#define SOL_ASCII_CLEAR 0x8b
#define SOL_KBD_TTL_HIGH 1
#define SOL_KBD_TTL_LOW 0
#define SOL_KBD_LED_UPPERCASE PHYSICAL_LED1
#define SOL_KBD_LED_LOCAL PHYSICAL_LED2
#define SOL_KBD_LED_SHIFTLOCK PHYSICAL_LED3
#define SOL_KBD_TTLOUT_RESET PHYSICAL_OUT3_OPEN_HI // Emulate open collector output.
#define SOL_KBD_TTLOUT_BREAK PHYSICAL_OUT2
#define SOL_KBD_TTLOUT_LOCAL PHYSICAL_OUT1
#define ASDF_SOL_KEYMAP_INITIALIZER_LENGTH 6
// Notice that TTLOUT_LOCAL (OUT3) and LED_LOCAL (PHYSICAL_LED2) are both bound
// to the VLOCAL_OUT virtual device.
#define ASDF_SOL_KEYMAP_INITIALIZER \
{ \
{ .virtual_device = VCAPS_LED, \
.physical_device = SOL_KBD_LED_UPPERCASE, \
.initial_value = SOL_KBD_LED_OFF }, \
{ .virtual_device = VSHIFT_LED, \
.physical_device = SOL_KBD_LED_SHIFTLOCK, \
.initial_value = SOL_KBD_LED_OFF }, \
{ .virtual_device = SOL_KBD_VLOCAL, \
.physical_device = SOL_KBD_TTLOUT_LOCAL, \
.function = V_TOGGLE, \
.initial_value = SOL_KBD_TTL_HIGH }, \
{ .virtual_device = SOL_KBD_VLOCAL, \
.physical_device = SOL_KBD_LED_LOCAL, \
.function = V_TOGGLE, \
.initial_value = SOL_KBD_LED_OFF }, \
{ .virtual_device = SOL_KBD_VRESET, \
.physical_device = SOL_KBD_TTLOUT_RESET, \
.function = V_PULSE_SHORT, \
.initial_value = SOL_KBD_TTL_HIGH }, \
{ .virtual_device = SOL_KBD_VBREAK, \
.physical_device = SOL_KBD_TTLOUT_BREAK, \
.function = V_PULSE_LONG, \
.initial_value = SOL_KBD_TTL_HIGH }, \
}
// function hooks for the SOL keyboard:
// - At Setup, activate CAPSLOCK to emulate original keyboard.
// - At Setup, configure negative strobe
#define ASDF_SOL_KEYMAP_HOOK_INITIALIZER_LENGTH 2
#define ASDF_SOL_KEYMAP_HOOK_INITIALIZER \
{ \
{ .hook_id = ASDF_HOOK_KEYMAP_SETUP, \
.hook_func = asdf_modifier_capslock_activate, \
}, \
{ .hook_id = ASDF_HOOK_KEYMAP_SETUP, \
.hook_func = asdf_arch_set_neg_strobe, \
}, \
}
#define ASDF_SOL_DIP_SWITCHES ASDF_KEYMAP_DIP_SWITCHES
// clang-format off
#define ASDF_SOL_PLAIN_MAP \
{ \
[0] = { ACTION_CTRL, SOL_KBD_SHIFTLOCK_ACTION, 'a', 's', 'd', 'f', 'g', 'h' }, \
[1] = { 'j', 'k', 'l', ';', ':', ASCII_DEL, ACTION_REPEAT, ACTION_CTRL }, \
[2] = { ACTION_CAPS, ACTION_SHIFT, 'z', 'x', 'c', 'v', 'b', 'n' }, \
[3] = { 'm', ASCII_COMMA, ASCII_PERIOD, '/', \
ACTION_SHIFT, SOL_ASCII_MODE_SELECT, ACTION_NOTHING, ACTION_NOTHING }, \
[4] = { ASCII_ESC, '1', '2', '3', '4', '5', '6', '7' }, /**/ \
[5] = { '8', '9', ASCII_ZERO, '-', '^', \
ASCII_LT_SQUARE_BRACE, ASCII_BACKSLASH, ASCII_RT_SQUARE_BRACE }, \
[6] = { SOL_KBD_BREAK_ACTION, ASCII_TAB, 'q', 'w', 'e', 'r', 't', 'y' }, /**/ \
[7] = { 'u', 'i', 'o', 'p', ASCII_AT, ASCII_CR, ASCII_LF, SOL_ASCII_LOAD }, \
[9] = { SOL_KBD_LOCAL_ACTION, SOL_ASCII_UP_ARROW, SOL_ASCII_LT_ARROW, \
ASCII_SPACE, SOL_ASCII_RT_ARROW, SOL_ASCII_DN_ARROW, \
SOL_ASCII_HOME, SOL_ASCII_CLEAR }, \
[10] = { '-', '7', '*', '8', '/', '9', ACTION_NOTHING, ACTION_NOTHING }, \
[11] = { '4', '1', '5', '2', '6', '3', ACTION_NOTHING, ACTION_NOTHING }, \
[12] = { '0', ASCII_PERIOD, '+', ACTION_NOTHING, \
ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING }, \
ASDF_SOL_DIP_SWITCHES, \
}
#define ASDF_SOL_CAPS_MAP \
{ \
[0] = { ACTION_CTRL, SOL_KBD_SHIFTLOCK_ACTION, 'A', 'S', 'D', 'F', 'G', 'H' }, \
[1] = { 'J', 'K', 'L', ';', ':', ASCII_DEL, ACTION_REPEAT, ACTION_CTRL }, \
[2] = { ACTION_CAPS, ACTION_SHIFT, 'Z', 'X', 'C', 'V', 'B', 'N' }, \
[3] = { 'M', ASCII_COMMA, ASCII_PERIOD, '/', \
ACTION_SHIFT, SOL_ASCII_MODE_SELECT, ACTION_NOTHING, ACTION_NOTHING }, \
[4] = { ASCII_ESC, '1', '2', '3', '4', '5', '6', '7' }, /**/ \
[5] = { '8', '9', ASCII_ZERO, '-', '^', \
ASCII_LT_SQUARE_BRACE, ASCII_BACKSLASH, ASCII_RT_SQUARE_BRACE }, \
[6] = { SOL_KBD_BREAK_ACTION, ASCII_TAB, 'Q', 'W', 'E', 'R', 'T', 'Y' }, /**/ \
[7] = { 'U', 'I', 'O', 'P', ASCII_AT, ASCII_CR, ASCII_LF, SOL_ASCII_LOAD }, \
[9] = { SOL_KBD_LOCAL_ACTION, SOL_ASCII_UP_ARROW, SOL_ASCII_LT_ARROW, \
ASCII_SPACE, SOL_ASCII_RT_ARROW, SOL_ASCII_DN_ARROW, \
SOL_ASCII_HOME, SOL_ASCII_CLEAR }, \
[10] = { '-', '7', '*', '8', '/', '9', ACTION_NOTHING, ACTION_NOTHING }, \
[11] = { '4', '1', '5', '2', '6', '3', ACTION_NOTHING, ACTION_NOTHING }, \
[12] = { '0', ASCII_PERIOD, '+', ACTION_NOTHING, \
ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING }, \
ASDF_SOL_DIP_SWITCHES, \
}
#define ASDF_SOL_SHIFT_MAP \
{ \
[0] = { ACTION_CTRL, SOL_KBD_SHIFTLOCK_ACTION, 'A', 'S', 'D', 'F', 'G', 'H' }, \
[1] = { 'J', 'K', 'L', ';', ':', ASCII_UNDERSCORE, ACTION_REPEAT, ACTION_CTRL }, \
[2] = { ACTION_CAPS, ACTION_SHIFT, 'Z', 'X', 'C', 'V', 'B', 'N' }, \
[3] = { 'M', '<', '>', '?', \
ACTION_SHIFT, SOL_ASCII_MODE_SELECT, ACTION_NOTHING, ACTION_NOTHING }, \
[4] = { ASCII_ESC, '!', ASCII_DOUBLE_QUOTE, '#', '$', '%', '&', ASCII_SINGLE_QUOTE }, \
[5] = { ASCII_LT_PAREN, ASCII_RT_PAREN, ASCII_SPACE, '=', ASCII_TILDE, \
ASCII_LT_SQUARE_BRACE, ASCII_BACKSLASH, ASCII_RT_SQUARE_BRACE }, \
[6] = { SOL_KBD_BREAK_ACTION, ASCII_TAB, 'Q', 'W', 'E', 'R', 'T', 'Y' }, \
[7] = { 'U', 'I', 'O', 'P', ASCII_GRAVE_ACCENT, ASCII_CR, ASCII_LF, SOL_ASCII_LOAD }, \
[9] = { SOL_KBD_LOCAL_ACTION, SOL_ASCII_UP_ARROW, SOL_ASCII_LT_ARROW, \
ASCII_SPACE, SOL_ASCII_RT_ARROW, SOL_ASCII_DN_ARROW, \
SOL_ASCII_HOME, SOL_ASCII_CLEAR }, \
[10] = { '-', '7', '*', '8', '/', '9', ACTION_NOTHING, ACTION_NOTHING }, \
[11] = { '4', '1', '5', '2', '6', '3', ACTION_NOTHING, ACTION_NOTHING }, \
[12] = { '0', ASCII_PERIOD, '+', ACTION_NOTHING, \
ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING }, \
ASDF_SOL_DIP_SWITCHES, \
}
#define ASDF_SOL_CTRL_MAP \
{ \
[0] = { ACTION_CTRL, SOL_KBD_SHIFTLOCK_ACTION, ASCII_CTRL_A, ASCII_CTRL_S, \
ASCII_CTRL_D, ASCII_CTRL_F, ASCII_CTRL_G, ASCII_CTRL_H }, \
[1] = { ASCII_CTRL_J, ASCII_CTRL_K, ASCII_CTRL_L, ASCII_VT, \
ASCII_LF, ASCII_DEL, SOL_KBD_RESET_ACTION, ACTION_CTRL }, \
[2] = { ACTION_CAPS, ACTION_SHIFT, ASCII_CTRL_Z, ASCII_CTRL_X, \
ASCII_CTRL_C, ASCII_CTRL_V, ASCII_CTRL_B, ASCII_CTRL_N }, \
[3] = { ASCII_CTRL_M, ASCII_FF, ASCII_SO, ASCII_SI, \
ACTION_SHIFT, SOL_ASCII_MODE_SELECT, ACTION_NOTHING, ACTION_NOTHING }, \
[4] = { ASCII_ESC, ASCII_SOH, ASCII_STX, ASCII_ETX, \
ASCII_EOT, ASCII_ENQ, ASCII_ACK, ASCII_BEL }, \
[5] = { ASCII_BS, ASCII_TAB, ASCII_NULL, ASCII_CR, ASCII_RS, \
ASCII_ESC, ASCII_FS, ASCII_GS }, \
[6] = { SOL_KBD_BREAK_ACTION, ASCII_TAB, ASCII_CTRL_Q, ASCII_CTRL_W, \
ASCII_CTRL_E, ASCII_CTRL_R, ASCII_CTRL_T, ASCII_CTRL_Y }, \
[7] = { ASCII_CTRL_U, ASCII_CTRL_I, ASCII_CTRL_O, ASCII_CTRL_P, \
ASCII_NULL, ASCII_CR, ASCII_LF, SOL_ASCII_LOAD }, \
[9] = { SOL_KBD_LOCAL_ACTION, SOL_ASCII_UP_ARROW, SOL_ASCII_LT_ARROW, \
ASCII_SPACE, SOL_ASCII_RT_ARROW, SOL_ASCII_DN_ARROW, \
SOL_ASCII_HOME, SOL_ASCII_CLEAR }, \
[10] = { '-', '7', '*', '8', '/', '9', ACTION_NOTHING, ACTION_NOTHING }, \
[11] = { '4', '1', '5', '2', '6', '3', ACTION_NOTHING, ACTION_NOTHING }, \
[12] = { '0', ASCII_PERIOD, '+', ACTION_NOTHING, \
ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING }, \
ASDF_SOL_DIP_SWITCHES, \
}
// clang-format on
#define ASDF_SOL_MAP_DECLARATIONS \
static const FLASH keycode_matrix_t asdf_sol_plain_matrix = ASDF_SOL_PLAIN_MAP; \
static const FLASH keycode_matrix_t asdf_sol_shift_matrix = ASDF_SOL_SHIFT_MAP; \
static const FLASH keycode_matrix_t asdf_sol_caps_matrix = ASDF_SOL_CAPS_MAP; \
static const FLASH keycode_matrix_t asdf_sol_ctrl_matrix = ASDF_SOL_CTRL_MAP;
// Here, you can specify which maps are associated with which modifier keys.
// There can be multiple definitions. For example, as shown here, an ALL CAPS
// keymap can be made by assigning the caps map to the "no modifier" position.
// Or, more additional keymaps can be defined above, and keymap sets can be
// defined below that pick and choose between them. The modifiers are assigned as follows:
//
// [0]: plain (no modifiers)
// [1]: shift (shift key or shift lock active)
// [2]: caps (caps lock active)
// [3]: ctrl: (control key active)
#define ASDF_SOL_MAP_DEFS \
{ \
[MOD_PLAIN_MAP] = &asdf_sol_plain_matrix, [MOD_SHIFT_MAP] = &asdf_sol_shift_matrix, \
[MOD_CAPS_MAP] = &asdf_sol_caps_matrix, [MOD_CTRL_MAP] = &asdf_sol_ctrl_matrix \
}
#define ASDF_SOL_ALL_MAPS ASDF_SOL_MAP_DEFS
#define ASDF_SOL_ALL_MAPS_COUNT 1
#if !defined(ASDF_NUM_ROWS) || (ASDF_NUM_ROWS < ASDF_SOL_NUM_ROWS)
#undef ASDF_NUM_ROWS
#define ASDF_NUM_ROWS ASDF_SOL_NUM_ROWS
#endif
#if !defined(ASDF_NUM_COLS) || (ASDF_NUM_COLS < ASDF_SOL_NUM_COLS)
#undef ASDF_NUM_COLS
#define ASDF_NUM_COLS ASDF_SOL_NUM_COLS
#endif
#if !defined(ASDF_KEYMAP_INITIALIZER_LENGTH) \
|| (ASDF_KEYMAP_INITIALIZER_LENGTH < ASDF_SOL_KEYMAP_INITIALIZER_LENGTH)
#undef ASDF_KEYMAP_INITIALIZER_LENGTH
#define ASDF_KEYMAP_INITIALIZER_LENGTH ASDF_SOL_KEYMAP_INITIALIZER_LENGTH
#endif
#if !defined(ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH) \
|| (ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH < ASDF_SOL_KEYMAP_HOOK_INITIALIZER_LENGTH)
#undef ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH
#define ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH ASDF_SOL_KEYMAP_HOOK_INITIALIZER_LENGTH
#endif
#endif /* !defined (ASDF_KEYMAP_DEFS_SOL20_H) */
//-------|---------|---------+---------+---------+---------+---------+---------+
// Above line is 80 columns, and should display completely in the editor.
@@ -0,0 +1,275 @@
// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*-
//
// Unfified Keyboard Project
// ASDF keyboard firmware
//
// asdf_keymaps.h
//
// Copyright 2019 David Fenyes
//
// This program is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation, either version 3 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program. If not, see <https://www.gnu.org/licenses/>.
// While there is nothing preventing a standard keyboard from having both a
// "Shift Lock" key and a "Caps Lock" key, usually only one will be present. For
// testing, both must be present to test their functionality.
#if !defined(ASDF_KEYMAP_DEFS_TEST_H)
#define ASDF_KEYMAP_DEFS_TEST_H
#define ASDF_TEST_NUM_ROWS 9
#define ASDF_TEST_NUM_COLS 8
// The first value in each row serves two purposes:
//
// 1) Indicate a valid row of codes if the value is nonzero.
// 2) Indicate the physical row number corresponding to the keymap row.
//
// Multiple keymaps may be combined, some of which use more rows than other
// keymaps. The keymap with the most rows determines how many rows are allocated
// for each keymap. Since each keymap only initializes the rows it uses, then
// the shorter keymaps may have multiple uninitialized rows that should not be
// scanned. The C99 standard guarantees that all elements no explicitly
// initialized shall be initialized to 0 (C99 Standard 6.7.8.21). Therefore,
// keymap rows starting with a 0 are not valid and are not scanned.
//
// Some hardware may contain blank physical rows To avoid having unused empty
// rows, the first column of each row indicates the physical row. For example, 8
// rows of switches (0-7), and a bank of DIP switches on row 15. In this case,
// only 9 rows need be allocated.
#define PLAIN_MATRIX_1 RESERVED_1
#define CAPS_MATRIX_1 RESERVED_2
#define SHIFT_MATRIX_1 RESERVED_3
#define CTRL_MATRIX_1 RESERVED_4
#define ASDF_LAST_ROW (ASDF_NUM_ROWS - 1)
#define ASDF_TEST_MAP_DIP_SWITCHES \
[ASDF_LAST_ROW] = { ACTION_MAPSEL_0, ACTION_MAPSEL_1, ACTION_MAPSEL_2, ACTION_MAPSEL_3 }
#define ASDF_TEST_PLAIN_MAP \
{ \
{ PLAIN_MATRIX_1, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_CAPS, ASCII_ESC, ACTION_CTRL, ASCII_BACKSLASH }, \
{ ACTION_NOTHING, 'p', ';', '/', ASCII_SPACE, 'z', 'a', 'q' }, \
{ ACTION_NOTHING, ASCII_COMMA, 'm', 'n', 'b', 'v', 'c', 'x' }, \
{ ACTION_NOTHING, 'k', 'j', 'h', 'g', 'f', 'd', 's' }, \
{ ACTION_NOTHING, 'i', 'u', 'y', 't', 'r', 'e', 'w' }, \
/**/ { ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFTLOCK_ON, ASCII_CR, ASCII_LF, 'o', \
'l', ASCII_PERIOD }, \
{ ASCII_TILDE, ASCII_RT_SQUARE_BRACE, ASCII_LT_SQUARE_BRACE, '-', ':', '0', '9', '8' }, \
{ ACTION_NOTHING, '7', '6', '5', '4', '3', '2', '1' }, ASDF_TEST_MAP_DIP_SWITCHES \
}
#define ASDF_TEST_CAPS_MAP \
{ \
{ CAPS_MATRIX_1, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_BACKSLASH }, \
{ ACTION_NOTHING, 'P', ';', '/', ASCII_SPACE, 'Z', 'A', 'Q' }, \
{ ACTION_NOTHING, ASCII_COMMA, 'M', 'N', 'B', 'V', 'C', 'X' }, \
{ ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \
{ ACTION_NOTHING, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, \
/**/ { ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFTLOCK_ON, ASCII_CR, ASCII_LF, 'O', \
'L', ASCII_PERIOD }, \
{ ASCII_TILDE, ASCII_RT_SQUARE_BRACE, ASCII_LT_SQUARE_BRACE, '-', ':', '0', '9', '8' }, \
{ ACTION_NOTHING, '7', '6', '5', '4', '3', '2', '1' }, ASDF_TEST_MAP_DIP_SWITCHES \
}
#define ASDF_TEST_SHIFT_MAP \
{ \
\
{ SHIFT_MATRIX_1, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_VERT_BAR }, \
{ ACTION_NOTHING, 'P', '+', '?', ASCII_SPACE, 'Z', 'A', 'Q' }, \
{ ACTION_NOTHING, '>', 'M', 'N', 'B', 'V', 'C', 'X' }, \
{ ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \
{ ACTION_NOTHING, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, \
{ ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFTLOCK_ON, ASCII_CR, ASCII_LF, 'O', 'L', '<' }, \
{ ASCII_TILDE, ASCII_RT_CURLY_BRACE, ASCII_LT_CURLY_BRACE, '=', '*', \
'0', ASCII_RT_PAREN, ASCII_LT_PAREN }, \
{ ACTION_NOTHING, ASCII_SINGLE_QUOTE, '&', '%', '$', '#', ASCII_DOUBLE_QUOTE, '!' }, \
ASDF_TEST_MAP_DIP_SWITCHES \
}
#define ASDF_TEST_CTRL_MAP \
{ \
{ CTRL_MATRIX_1, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, 0x1c }, \
{ ACTION_NOTHING, ASCII_CTRL_P, ACTION_NOTHING, ACTION_NOTHING, \
ASCII_SPACE, ASCII_CTRL_Z, ASCII_CTRL_A, ASCII_CTRL_Q }, \
{ ACTION_NOTHING, ASCII_COMMA, ASCII_CTRL_M, ASCII_CTRL_N, \
ASCII_CTRL_B, ASCII_CTRL_V, ASCII_CTRL_C, ASCII_CTRL_X }, \
{ ACTION_NOTHING, ASCII_CTRL_K, ASCII_CTRL_J, ASCII_CTRL_H, \
ASCII_CTRL_G, ASCII_CTRL_F, ASCII_CTRL_D, ASCII_CTRL_S }, \
{ ACTION_NOTHING, ASCII_CTRL_I, ASCII_CTRL_U, ASCII_CTRL_Y, \
ASCII_CTRL_T, ASCII_CTRL_R, ASCII_CTRL_E, ASCII_CTRL_W }, \
{ ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFTLOCK_ON, ASCII_CR, \
ASCII_LF, ASCII_CTRL_O, ASCII_CTRL_L, ACTION_NOTHING }, \
{ ACTION_NOTHING, 0x1d, ASCII_ESC, ACTION_NOTHING, \
ACTION_NOTHING, ACTION_FN_1, ACTION_FN_9, ACTION_FN_8 }, \
{ ACTION_NOTHING, ACTION_FN_7, ACTION_FN_6, ACTION_FN_5, \
ACTION_FN_4, ACTION_FN_3, ACTION_FN_2, ACTION_FN_2 }, \
ASDF_TEST_MAP_DIP_SWITCHES \
}
#define ASDF_TEST_DECLARATIONS \
static const FLASH keycode_matrix_t test_PLAIN_matrix = ASDF_TEST_PLAIN_MAP; \
static const FLASH keycode_matrix_t test_SHIFT_matrix = ASDF_TEST_SHIFT_MAP; \
static const FLASH keycode_matrix_t test_CAPS_matrix = ASDF_TEST_CAPS_MAP; \
static const FLASH keycode_matrix_t test_CTRL_matrix = ASDF_TEST_CTRL_MAP;
#define ASDF_TEST_MAP_DEFS \
{ \
&test_PLAIN_matrix, &test_SHIFT_matrix, &test_CAPS_matrix, &test_CTRL_matrix \
}
#define ASDF_TEST_CAPS_MAP_DEFS \
{ \
&test_CAPS_matrix, &test_SHIFT_matrix, &test_CAPS_matrix, &test_CTRL_matrix \
}
#define ASDF_TEST_KEYMAPS ASDF_TEST_MAP_DEFS, ASDF_TEST_CAPS_MAP_DEFS
#define ASDF_TEST_KEYMAPS_COUNT 2
#define ASDF_TEST_PLAIN_MAP_INDEX ASDF_TEST_BASE + 0
#define ASDF_TEST_CAPS_MAP_INDEX ASDF_TEST_BASE + 1
#define SINGLE_TESTS_KEYMAP ASDF_TEST_PLAIN_MAP_INDEX
#define DOUBLE_ASSIGN_TEST_KEYMAP ASDF_TEST_PLAIN_MAP_INDEX
#define TRIPLE_TESTS_KEYMAP ASDF_TEST_CAPS_MAP_INDEX
#define ASDF_TEST_KEYMAP_INITIALIZER_LENGTH 5
#define ASDF_TEST_KEYMAP_INITIALIZER_1 \
{ \
{ \
/* Single assignment */ \
.virtual_device = VOUT1, \
.physical_device = PHYSICAL_OUT1, \
.function = V_NOFUNC, \
.initial_value = 0, \
}, \
{ \
/* single toggle */ \
.virtual_device = VOUT2, \
.physical_device = PHYSICAL_OUT2, \
.function = V_TOGGLE, \
.initial_value = 0, \
}, \
{ \
/* single pulse */ \
.virtual_device = VOUT3, \
.physical_device = PHYSICAL_OUT3, \
.function = V_PULSE_SHORT, \
.initial_value = 0, \
}, \
{ /* first of double assignment attempt */ \
.virtual_device = VOUT4, \
.physical_device = PHYSICAL_LED1, \
.initial_value = 0 \
}, \
{ /* second of double assignment attempt */ \
.virtual_device = VOUT5, .physical_device = PHYSICAL_LED1, .initial_value = 1 \
} \
}
#define ASDF_TEST_KEYMAP_INITIALIZER_2 \
{ \
{ \
/* Triple assignment */ \
.virtual_device = VOUT1, \
.physical_device = PHYSICAL_OUT1, \
.function = V_TOGGLE, \
.initial_value = 0, \
}, \
{ \
.virtual_device = VOUT1, \
.physical_device = PHYSICAL_OUT2, \
.function = V_TOGGLE, \
.initial_value = 1, \
}, \
{ \
.virtual_device = VOUT1, .physical_device = PHYSICAL_OUT3, .function = V_TOGGLE, \
.initial_value = 0, \
} \
}
#define ASDF_TEST_KEYMAP_INITIALIZER ASDF_TEST_KEYMAP_INITIALIZER_1, ASDF_TEST_KEYMAP_INITIALIZER_2
#define ASDF_TEST_KEYMAP_HOOK_INITIALIZER_LENGTH 2
#define ASDF_TEST_KEYMAP_HOOK_INITIALIZER_1 \
{ \
{ \
.hook_id = ASDF_HOOK_KEYMAP_SETUP, \
.hook_func = &test_hook_1, \
}, \
{ \
.hook_id = ASDF_HOOK_KEYMAP_SETUP, \
.hook_func = &test_hook_2, \
}, \
}
#define ASDF_TEST_KEYMAP_HOOK_INITIALIZER_2 \
{ \
{ \
.hook_id = ASDF_HOOK_KEYMAP_SETUP, \
.hook_func = &test_hook_3, \
}, \
{ \
.hook_id = ASDF_HOOK_KEYMAP_SETUP, \
.hook_func = &test_hook_4, \
}, \
}
#define ASDF_TEST_KEYMAP_HOOK_INITIALIZER \
ASDF_TEST_KEYMAP_HOOK_INITIALIZER_1, ASDF_TEST_KEYMAP_HOOK_INITIALIZER_2
// The following preprocessor "code" permits various keymaps to be created and
// included without generating a lot of complicating code dependencies. The use
// of macros in this way is a bit ugly, I realize, and stretches the intention
// of the C preprocessor. The C preprocessor is used to store a bit of state to
// keep track of the number and ordering of the keymaps as they are added, and
// to keep track of the array sizes to be allocated at compile time.
#if !defined(ASDF_NUM_ROWS) || (ASDF_NUM_ROWS < ASDF_TEST_NUM_ROWS)
#undef ASDF_NUM_ROWS
#define ASDF_NUM_ROWS ASDF_TEST_NUM_ROWS
#endif
#if !defined(ASDF_NUM_COLS) || (ASDF_NUM_COLS < ASDF_TEST_NUM_COLS)
#undef ASDF_NUM_COLS
#define ASDF_NUM_COLS ASDF_TEST_NUM_COLS
#endif
#if !defined(ASDF_KEYMAP_INITIALIZER_LENGTH) \
|| (ASDF_KEYMAP_INITIALIZER_LENGTH < ASDF_TEST_KEYMAP_INITIALIZER_LENGTH)
#undef ASDF_KEYMAP_INITIALIZER_LENGTH
#define ASDF_KEYMAP_INITIALIZER_LENGTH ASDF_TEST_KEYMAP_INITIALIZER_LENGTH
#endif
#if !defined(ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH) \
|| (ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH < ASDF_TEST2_KEYMAP_HOOK_INITIALIZER_LENGTH)
#undef ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH
#define ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH ASDF_TEST2_KEYMAP_HOOK_INITIALIZER_LENGTH
#endif
#endif /* !defined (ASDF_KEYMAP_DEFS_TEST_H) */
//-------|---------|---------+---------+---------+---------+---------+---------+
// Above line is 80 columns, and should display completely in the editor.
@@ -0,0 +1,239 @@
// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*-
//
// Unfified Keyboard Project
// ASDF keyboard firmware
//
// asdf_keymaps.h
//
// Copyright 2019 David Fenyes
//
// This program is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software
// Foundation, either version 3 of the License, or (at your option) any later
// version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
// details.
//
// You should have received a copy of the GNU General Public License along with
// this program. If not, see <https://www.gnu.org/licenses/>.
// While there is nothing preventing a standard keyboard from having both a
// "Shift Lock" key and a "Caps Lock" key, usually only one will be present. For
// testing, both must be present to test their functionality.
#if !defined(ASDF_KEYMAP_DEFS_TEST2_H)
#define ASDF_KEYMAP_DEFS_TEST2_H
#define ASDF_TEST2_NUM_ROWS 16
#define ASDF_TEST2_NUM_COLS 8
// The first value in each row serves two purposes:
//
// 1) Indicate a valid row of codes if the value is nonzero.
// 2) Indicate the physical row number corresponding to the keymap row.
//
// Multiple keymaps may be combined, some of which use more rows than other
// keymaps. The keymap with the most rows determines how many rows are allocated
// for each keymap. Since each keymap only initializes the rows it uses, then
// the shorter keymaps may have multiple uninitialized rows that should not be
// scanned. The C99 standard guarantees that all elements no explicitly
// initialized shall be initialized to 0 (C99 Standard 6.7.8.21). Therefore,
// keymap rows starting with a 0 are not valid and are not scanned.
//
// Some hardware may contain blank physical rows To avoid having unused empty
// rows, the first column of each row indicates the physical row. For example, 8
// rows of switches (0-7), and a bank of DIP switches on row 15. In this case,
// only 9 rows need be allocated.
#define PLAIN_MATRIX_2 RESERVED_5
#define CAPS_MATRIX_2 RESERVED_6
#define SHIFT_MATRIX_2 RESERVED_7
#define CTRL_MATRIX_2 RESERVED_8
#define ASDF_LAST_ROW (ASDF_NUM_ROWS - 1)
#define ASDF_TEST_MAP_DIP_SWITCHES \
[ASDF_LAST_ROW] = { ACTION_MAPSEL_0, ACTION_MAPSEL_1, ACTION_MAPSEL_2, ACTION_MAPSEL_3 }
#define ASDF_TEST2_PLAIN_MAP \
{ \
{ PLAIN_MATRIX_2, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_CAPS, ASCII_ESC, ACTION_CTRL, ASCII_BACKSLASH }, \
{ ACTION_NOTHING, 'p', ';', '/', ASCII_SPACE, 'z', 'a', 'q' }, \
{ ACTION_NOTHING, ASCII_COMMA, 'm', 'n', 'b', 'v', 'c', 'x' }, \
{ ACTION_NOTHING, 'k', 'j', 'h', 'g', 'f', 'd', 's' }, \
{ ACTION_NOTHING, 'i', 'u', 'y', 't', 'r', 'e', 'w' }, \
/**/ { ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFTLOCK_ON, ASCII_CR, ASCII_LF, 'o', \
'l', ASCII_PERIOD }, \
{ ASCII_TILDE, ASCII_RT_SQUARE_BRACE, ASCII_LT_SQUARE_BRACE, '-', ':', '0', '9', '8' }, \
{ ACTION_NOTHING, '7', '6', '5', '4', '3', '2', '1' }, ASDF_TEST_MAP_DIP_SWITCHES \
}
#define ASDF_TEST2_CAPS_MAP \
{ \
{ CAPS_MATRIX_2, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_BACKSLASH }, \
{ ACTION_NOTHING, 'P', ';', '/', ASCII_SPACE, 'Z', 'A', 'Q' }, \
{ ACTION_NOTHING, ASCII_COMMA, 'M', 'N', 'B', 'V', 'C', 'X' }, \
{ ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \
{ ACTION_NOTHING, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, \
/**/ { ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFTLOCK_ON, ASCII_CR, ASCII_LF, 'O', \
'L', ASCII_PERIOD }, \
{ ASCII_TILDE, ASCII_RT_SQUARE_BRACE, ASCII_LT_SQUARE_BRACE, '-', ':', '0', '9', '8' }, \
{ ACTION_NOTHING, '7', '6', '5', '4', '3', '2', '1' }, ASDF_TEST_MAP_DIP_SWITCHES \
}
#define ASDF_TEST2_SHIFT_MAP \
{ \
\
{ SHIFT_MATRIX_2, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, ASCII_VERT_BAR }, \
{ ACTION_NOTHING, 'P', '+', '?', ASCII_SPACE, 'Z', 'A', 'Q' }, \
{ ACTION_NOTHING, '>', 'M', 'N', 'B', 'V', 'C', 'X' }, \
{ ACTION_NOTHING, 'K', 'J', 'H', 'G', 'F', 'D', 'S' }, \
{ ACTION_NOTHING, 'I', 'U', 'Y', 'T', 'R', 'E', 'W' }, \
{ ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFTLOCK_ON, ASCII_CR, ASCII_LF, 'O', 'L', '<' }, \
{ ASCII_TILDE, ASCII_RT_CURLY_BRACE, ASCII_LT_CURLY_BRACE, '=', '*', \
'0', ASCII_RT_PAREN, ASCII_LT_PAREN }, \
{ ACTION_NOTHING, ASCII_SINGLE_QUOTE, '&', '%', '$', '#', ASCII_DOUBLE_QUOTE, '!' }, \
ASDF_TEST_MAP_DIP_SWITCHES \
}
#define ASDF_TEST2_CTRL_MAP \
{ \
{ CTRL_MATRIX_2, ACTION_SHIFT, ACTION_SHIFT, ACTION_NOTHING, \
ACTION_NOTHING, ASCII_ESC, ACTION_CTRL, 0x1c }, \
{ ACTION_NOTHING, ASCII_CTRL_P, ACTION_NOTHING, ACTION_NOTHING, \
ASCII_SPACE, ASCII_CTRL_Z, ASCII_CTRL_A, ASCII_CTRL_Q }, \
{ ACTION_NOTHING, ASCII_COMMA, ASCII_CTRL_M, ASCII_CTRL_N, \
ASCII_CTRL_B, ASCII_CTRL_V, ASCII_CTRL_C, ASCII_CTRL_X }, \
{ ACTION_NOTHING, ASCII_CTRL_K, ASCII_CTRL_J, ASCII_CTRL_H, \
ASCII_CTRL_G, ASCII_CTRL_F, ASCII_CTRL_D, ASCII_CTRL_S }, \
{ ACTION_NOTHING, ASCII_CTRL_I, ASCII_CTRL_U, ASCII_CTRL_Y, \
ASCII_CTRL_T, ASCII_CTRL_R, ASCII_CTRL_E, ASCII_CTRL_W }, \
{ ACTION_REPEAT, ACTION_HERE_IS, ACTION_SHIFTLOCK_ON, ASCII_CR, \
ASCII_LF, ASCII_CTRL_O, ASCII_CTRL_L, ACTION_NOTHING }, \
{ ACTION_NOTHING, 0x1d, ASCII_ESC, ACTION_NOTHING, \
ACTION_NOTHING, ACTION_FN_1, ACTION_FN_9, ACTION_FN_8 }, \
{ ACTION_NOTHING, ACTION_FN_7, ACTION_FN_6, ACTION_FN_5, \
ACTION_FN_4, ACTION_FN_3, ACTION_FN_2, ACTION_FN_2 }, \
ASDF_TEST_MAP_DIP_SWITCHES \
}
#define ASDF_TEST2_DECLARATIONS \
static const FLASH keycode_matrix_t test2_PLAIN_matrix = ASDF_TEST2_PLAIN_MAP; \
static const FLASH keycode_matrix_t test2_SHIFT_matrix = ASDF_TEST2_SHIFT_MAP; \
static const FLASH keycode_matrix_t test2_CAPS_matrix = ASDF_TEST2_CAPS_MAP; \
static const FLASH keycode_matrix_t test2_CTRL_matrix = ASDF_TEST2_CTRL_MAP;
#define ASDF_TEST2_MAP_DEFS \
{ \
&test2_PLAIN_matrix, &test2_SHIFT_matrix, &test2_CAPS_matrix, &test2_CTRL_matrix \
}
#define ASDF_TEST2_CAPS_MAP_DEFS \
{ \
&test2_CAPS_matrix, &test2_SHIFT_matrix, &test2_CAPS_matrix, &test2_CTRL_matrix \
}
#define ASDF_TEST2_KEYMAPS ASDF_TEST2_MAP_DEFS, ASDF_TEST2_CAPS_MAP_DEFS
#define ASDF_TEST2_KEYMAPS_COUNT 2
#define ASDF_TEST2_PLAIN_MAP_INDEX (ASDF_TEST2_BASE + 0)
#define ASDF_TEST2_CAPS_MAP_INDEX (ASDF_TEST2_BASE + 1)
#define VCAPS_TEST_KEYMAP ASDF_TEST2_PLAIN_MAP_INDEX
#define VSHIFT_TEST_KEYMAP ASDF_TEST2_PLAIN_MAP_INDEX
#define ASDF_TEST2_KEYMAP_INITIALIZER_LENGTH 4
#define ASDF_TEST2_KEYMAP_INITIALIZER_1 \
{ \
{ .virtual_device = VCAPS_LED, .physical_device = PHYSICAL_LED1, .initial_value = 0 }, \
{ .virtual_device = VSHIFT_LED, .physical_device = PHYSICAL_LED2, .initial_value = 0 }, \
{ .virtual_device = VOUT2, .physical_device = PHYSICAL_OUT3, .initial_value = 0 }, \
{ \
.virtual_device = VOUT2, .physical_device = ASDF_PHYSICAL_NUM_RESOURCES, .initial_value = 0 \
} \
}
#define ASDF_TEST2_KEYMAP_INITIALIZER_2 \
{ \
{ .virtual_device = VCAPS_LED, .physical_device = PHYSICAL_LED1, .initial_value = 0 }, \
{ .virtual_device = VSHIFT_LED, .physical_device = PHYSICAL_LED2, .initial_value = 0 }, \
{ .virtual_device = VOUT2, .physical_device = PHYSICAL_OUT3, .initial_value = 0 }, \
{ \
.virtual_device = VOUT2, .physical_device = ASDF_PHYSICAL_NUM_RESOURCES, .initial_value = 0 \
} \
}
#define ASDF_TEST2_KEYMAP_INITIALIZER \
ASDF_TEST2_KEYMAP_INITIALIZER_1, ASDF_TEST2_KEYMAP_INITIALIZER_2
#define ASDF_TEST_ALTERNATE_SCANNER_MAP (ASDF_TEST2_BASE + 0)
#define ASDF_TEST_ALTERNATE_OUTPUT_MAP (ASDF_TEST2_BASE + 0)
#define ASDF_TEST_EACH_SCAN_MAP (ASDF_TEST2_BASE + 1)
#define ASDF_TEST2_KEYMAP_HOOK_INITIALIZER_LENGTH 2
#define ASDF_TEST2_KEYMAP_HOOK_INITIALIZER_1 \
{ \
{ \
.hook_id = ASDF_HOOK_SCANNER, \
.hook_func = (asdf_hook_function_t) test_hook_read_row, \
}, \
{ \
.hook_id = ASDF_HOOK_OUTPUT, \
.hook_func = (asdf_hook_function_t) test_hook_output, \
}, \
}
#define ASDF_TEST2_KEYMAP_HOOK_INITIALIZER_2 \
{ \
{ \
.hook_id = ASDF_HOOK_EACH_SCAN, \
.hook_func = (asdf_hook_function_t) test_hook_each_scan, \
}, \
}
#define ASDF_TEST2_KEYMAP_HOOK_INITIALIZER \
ASDF_TEST2_KEYMAP_HOOK_INITIALIZER_1, ASDF_TEST2_KEYMAP_HOOK_INITIALIZER_2
// The following preprocessor "code" permits various keymaps to be created and
// included without generating a lot of complicating code dependencies. The use
// of macros in this way is a bit ugly, I realize, and stretches the intention
// of the C preprocessor. The C preprocessor is used to store a bit of state to
// keep track of the number and ordering of the keymaps as they are added, and
// to keep track of the array sizes to be allocated at compile time.
#if !defined(ASDF_NUM_ROWS) || (ASDF_NUM_ROWS < ASDF_TEST2_NUM_ROWS)
#undef ASDF_NUM_ROWS
#define ASDF_NUM_ROWS ASDF_TEST2_NUM_ROWS
#endif
#if !defined(ASDF_NUM_COLS) || (ASDF_NUM_COLS < ASDF_TEST2_NUM_COLS)
#undef ASDF_NUM_COLS
#define ASDF_NUM_COLS ASDF_TEST2_NUM_COLS
#endif
#if !defined(ASDF_KEYMAP_INITIALIZER_LENGTH) \
|| (ASDF_KEYMAP_INITIALIZER_LENGTH < ASDF_TEST2_KEYMAP_INITIALIZER_LENGTH)
#undef ASDF_KEYMAP_INITIALIZER_LENGTH
#define ASDF_KEYMAP_INITIALIZER_LENGTH ASDF_TEST2_KEYMAP_INITIALIZER_LENGTH
#endif
#if !defined(ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH) \
|| (ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH < ASDF_TEST_KEYMAP_HOOK_INITIALIZER_LENGTH)
#undef ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH
#define ASDF_KEYMAP_HOOK_INITIALIZER_LENGTH ASDF_TEST_KEYMAP_HOOK_INITIALIZER_LENGTH
#endif
#endif /* !defined (ASDF_KEYMAP_DEFS_TEST2_H) */
//-------|---------|---------+---------+---------+---------+---------+---------+
// Above line is 80 columns, and should display completely in the editor.
+2 -2
View File
@@ -174,10 +174,10 @@ void setup_sol_keymap(void)
asdf_virtual_assign(SOL_KBD_VBREAK, SOL_KBD_TTLOUT_BREAK, V_PULSE_LONG, SOL_KBD_TTL_HIGH);
// Activate the ALL CAPS mode to emulate the original keyboard:
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
// Configure negative strobe
asdf_arch_set_neg_strobe(0);
asdf_arch_set_neg_strobe();
asdf_hook_assign(SOL_ID_MESSAGE_HOOK, sol_id_message);
}
+224 -698
View File
@@ -185,720 +185,245 @@ asdf_keycode_t asdf_lookup_keycode(uint8_t row, uint8_t col) {
return asdf_keymaps_get_code(row, col, asdf_modifier_index());
}
// Handler structure for unified dispatch table
typedef struct {
void (*activate)(uint8_t param);
void (*deactivate)(uint8_t param);
uint8_t parameter;
uint8_t flags; // Behavioral flags for the handler
} asdf_key_handler_t;
// Handler flags
#define ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT \
0x01 // Apply this action when initializing a keyboard
// PROCEDURE: asdf_emit_keycode
// INPUTS: keycode - the ASCII code to emit
// PROCEDURE: asdf_activate_action
// INPUTS: keycode: an action key code
// OUTPUTS: none
//
// DESCRIPTION: Handles activation of ASCII keycodes. Buffers the keycode for
// output and manages repeat state.
// DESCRIPTION: This routine is called when a key bound to an action code is
// pressed, and maps the action code to a function call, or other action
// appropriate for activation of the function.
//
// SIDE EFFECTS: Updates last_key and repeat count
// SIDE EFFECTS: All the actions may have side effects, depending on the
// function called.
//
// SCOPE: private
//
// COMPLEXITY: 2
// NOTES: The switch() could be implemented as an array of function pointers,
// essentially a jump table. However, the switch statement will also be
// implemented as a jump table, and may be more efficiently implemented as a
// code jump table than an array of pointers stored in flash that would require
// an additional flash-read operation. Also, the switch jumptable will make more
// efficient use of space than a sparse array of function pointers. The
// reduction in cyclometric complexity by using an array is a technicality,
// since the elements must still be entered as lines of code in some part of the
// program. Here, they are arranged in the place they are used.
//
static void asdf_emit_keycode(uint8_t keycode) {
asdf_put_code(keycode);
if (last_key != keycode) {
last_key = keycode;
asdf_repeat_reset_count();
// COMPLEXITY: 1 (+18 for the switch)
//
static void asdf_activate_action(action_t keycode) {
switch (keycode) {
case ACTION_SHIFT: {
asdf_modifier_shift_activate();
break;
}
case ACTION_SHIFTLOCK_ON: {
asdf_modifier_shiftlock_on_activate();
break;
}
case ACTION_SHIFTLOCK_TOGGLE: {
asdf_modifier_shiftlock_toggle_activate();
break;
}
case ACTION_CAPS: {
asdf_modifier_capslock_activate();
break;
}
case ACTION_CTRL: {
asdf_modifier_ctrl_activate();
break;
}
case ACTION_REPEAT: {
asdf_repeat_activate();
break;
}
case ACTION_MAPSEL_0: {
asdf_keymaps_map_select_0_set();
break;
}
case ACTION_MAPSEL_1: {
asdf_keymaps_map_select_1_set();
break;
}
case ACTION_MAPSEL_2: {
asdf_keymaps_map_select_2_set();
break;
}
case ACTION_MAPSEL_3: {
asdf_keymaps_map_select_3_set();
break;
}
case ACTION_STROBE_POLARITY_SELECT: {
asdf_arch_set_pos_strobe();
break;
}
case ACTION_AUTOREPEAT_SELECT: {
asdf_repeat_auto_on();
break;
}
case ACTION_VLED1: {
asdf_virtual_activate(VLED1);
break;
}
case ACTION_VLED2: {
asdf_virtual_activate(VLED2);
break;
}
case ACTION_VLED3: {
asdf_virtual_activate(VLED3);
break;
}
case ACTION_VOUT1: {
asdf_virtual_activate(VOUT1);
break;
}
case ACTION_VOUT2: {
asdf_virtual_activate(VOUT2);
break;
}
case ACTION_VOUT3: {
asdf_virtual_activate(VOUT3);
break;
}
case ACTION_VOUT4: {
asdf_virtual_activate(VOUT4);
break;
}
case ACTION_VOUT5: {
asdf_virtual_activate(VOUT5);
break;
}
case ACTION_VOUT6: {
asdf_virtual_activate(VOUT6);
break;
}
case ACTION_NOTHING:
case ACTION_HERE_IS:
case ACTION_FN_1:
asdf_hook_execute(ASDF_HOOK_USER_1);
break;
case ACTION_FN_2:
asdf_hook_execute(ASDF_HOOK_USER_2);
break;
case ACTION_FN_3:
asdf_hook_execute(ASDF_HOOK_USER_3);
break;
case ACTION_FN_4:
asdf_hook_execute(ASDF_HOOK_USER_4);
break;
case ACTION_FN_5:
asdf_hook_execute(ASDF_HOOK_USER_5);
break;
case ACTION_FN_6:
asdf_hook_execute(ASDF_HOOK_USER_6);
break;
case ACTION_FN_7:
asdf_hook_execute(ASDF_HOOK_USER_7);
break;
case ACTION_FN_8:
asdf_hook_execute(ASDF_HOOK_USER_8);
break;
case ACTION_FN_9:
asdf_hook_execute(ASDF_HOOK_USER_9);
break;
case ACTION_FN_10:
asdf_hook_execute(ASDF_HOOK_USER_10);
break;
default:
break;
}
}
// PROCEDURE: asdf_clear_last_keycode
// INPUTS: keycode - the ASCII code being released
// PROCEDURE: asdf_deactivate_action
// INPUTS: keycode: an action key code
// OUTPUTS: none
//
// DESCRIPTION: Handles deactivation of ASCII keycodes. Clears last_key if it
// matches the released keycode.
// DESCRIPTION: This routine is called when a key bound to an action code is
// released, and maps the action code to a function call, or other action
// appropriate for deactivation of the function.
//
// SIDE EFFECTS: May clear last_key
// SIDE EFFECTS: All the actions may have side effects, depending on the
// function called.
//
// SCOPE: private
//
// COMPLEXITY: 1
// NOTES: See NOTE for asdf_activate_action(). The Virtual Outputs have
// activate() functions, but no deactivate() functions, and are handled by the
// default case.
//
static void asdf_clear_last_keycode(uint8_t keycode) {
if (last_key == keycode) {
last_key = ACTION_NOTHING;
// COMPLEXITY: 1 (+9 for the switch, see note)
//
static void asdf_deactivate_action(action_t keycode) {
switch (keycode) {
case ACTION_SHIFT: {
asdf_modifier_shift_deactivate();
break;
}
case ACTION_CTRL: {
asdf_modifier_ctrl_deactivate();
break;
}
case ACTION_REPEAT: {
asdf_repeat_deactivate();
break;
}
case ACTION_MAPSEL_0: {
asdf_keymaps_map_select_0_clear();
break;
}
case ACTION_MAPSEL_1: {
asdf_keymaps_map_select_1_clear();
break;
}
case ACTION_MAPSEL_2: {
asdf_keymaps_map_select_2_clear();
break;
}
case ACTION_MAPSEL_3: {
asdf_keymaps_map_select_3_clear();
break;
}
case ACTION_STROBE_POLARITY_SELECT: {
asdf_arch_set_neg_strobe();
break;
}
case ACTION_AUTOREPEAT_SELECT: {
asdf_repeat_auto_off();
break;
}
case ACTION_NOTHING:
default:
break;
}
}
// Unified dispatch table for all keycodes (ASCII and actions)
// This table maps every possible keycode value to its handler functions
static const asdf_key_handler_t asdf_handlers[256] = {
// ASCII control characters (0x00 - 0x1F) using named constants for clarity
[ASCII_NULL] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_NULL,
.flags = 0},
[ASCII_SOH] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_SOH},
[ASCII_STX] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_STX},
[ASCII_ETX] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_ETX},
[ASCII_EOT] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_EOT},
[ASCII_ENQ] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_ENQ},
[ASCII_ACK] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_ACK},
[ASCII_BEL] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_BEL},
[ASCII_BS] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_BS},
[ASCII_TAB] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_TAB},
[ASCII_LF] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_LF},
[ASCII_VT] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_VT},
[ASCII_FF] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_FF},
[ASCII_CR] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_CR},
[ASCII_SO] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_SO},
[ASCII_SI] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_SI},
[ASCII_DLE] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_DLE},
[ASCII_DC1] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_DC1},
[ASCII_DC2] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_DC2},
[ASCII_DC3] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_DC3},
[ASCII_DC4] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_DC4},
[ASCII_NAK] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_NAK},
[ASCII_SYN] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_SYN},
[ASCII_ETB] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_ETB},
[ASCII_CAN] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_CAN},
[ASCII_EM] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_EM},
[ASCII_SUB] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_SUB},
[ASCII_ESC] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_ESC},
[ASCII_FS] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_FS},
[ASCII_GS] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_GS},
[ASCII_RS] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_RS},
[ASCII_US] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_US},
// ASCII printable characters (0x20 - 0x7E)
[' '] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ' '},
['!'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '!'},
['"'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '"'},
['#'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '#'},
['$'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '$'},
['%'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '%'},
['&'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '&'},
['\''] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '\''},
['('] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '('},
[')'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ')'},
['*'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '*'},
['+'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '+'},
[','] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ','},
['-'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '-'},
['.'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '.'},
['/'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '/'},
['0'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '0'},
['1'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '1'},
['2'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '2'},
['3'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '3'},
['4'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '4'},
['5'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '5'},
['6'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '6'},
['7'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '7'},
['8'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '8'},
['9'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '9'},
[':'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ':'},
[';'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ';'},
['<'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '<'},
['='] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '='},
['>'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '>'},
['?'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '?'},
['@'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '@'},
['A'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'A'},
['B'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'B'},
['C'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'C'},
['D'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'D'},
['E'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'E'},
['F'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'F'},
['G'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'G'},
['H'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'H'},
['I'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'I'},
['J'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'J'},
['K'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'K'},
['L'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'L'},
['M'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'M'},
['N'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'N'},
['O'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'O'},
['P'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'P'},
['Q'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'Q'},
['R'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'R'},
['S'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'S'},
['T'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'T'},
['U'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'U'},
['V'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'V'},
['W'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'W'},
['X'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'X'},
['Y'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'Y'},
['Z'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'Z'},
['['] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '['},
['\\'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '\\'},
[']'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ']'},
['^'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '^'},
['_'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '_'},
['`'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '`'},
['a'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'a'},
['b'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'b'},
['c'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'c'},
['d'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'd'},
['e'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'e'},
['f'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'f'},
['g'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'g'},
['h'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'h'},
['i'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'i'},
['j'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'j'},
['k'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'k'},
['l'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'l'},
['m'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'm'},
['n'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'n'},
['o'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'o'},
['p'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'p'},
['q'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'q'},
['r'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'r'},
['s'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 's'},
['t'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 't'},
['u'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'u'},
['v'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'v'},
['w'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'w'},
['x'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'x'},
['y'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'y'},
['z'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 'z'},
['{'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '{'},
['|'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '|'},
['}'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '}'},
['~'] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = '~'},
// DEL character
[ASCII_DEL] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = ASCII_DEL},
// SOL-20 extended ASCII codes (0x80-0x9F)
// These are special character codes used by the SOL-20 keyboard for
// cursor movement, etc.
[0x80] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x80}, // SOL_ASCII_MODE_SELECT
[0x81] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x81}, // SOL_ASCII_LT_ARROW
[0x82] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x82},
[0x83] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x83},
[0x84] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x84},
[0x85] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x85},
[0x86] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x86},
[0x87] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x87},
[0x88] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x88},
[0x89] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x89},
[0x8A] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x8A},
[0x8B] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x8B}, // SOL_ASCII_CLEAR
[0x8C] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x8C}, // SOL_ASCII_LOAD
[0x8D] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x8D},
[0x8E] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x8E}, // SOL_ASCII_HOME
[0x8F] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x8F},
[0x90] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x90},
[0x91] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x91},
[0x92] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x92},
[0x93] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x93}, // SOL_ASCII_RT_ARROW
[0x94] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x94},
[0x95] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x95},
[0x96] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x96},
[0x97] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x97}, // SOL_ASCII_UP_ARROW
[0x98] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x98},
[0x99] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x99},
[0x9A] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x9A}, // SOL_ASCII_DN_ARROW
[0x9B] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x9B},
[0x9C] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x9C},
[0x9D] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x9D},
[0x9E] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x9E},
[0x9F] = {.activate = asdf_emit_keycode,
.deactivate = asdf_clear_last_keycode,
.parameter = 0x9F},
// Action codes start at 0xA0 (ASDF_ACTION)
// ACTION_NOTHING = 0xA0
[ACTION_NOTHING] = {.activate = NULL, .deactivate = NULL, .parameter = 0},
// Modifier actions - these affect keyboard state and should be reapplied on
// init
[ACTION_SHIFT] = {.activate = asdf_modifier_shift_activate,
.deactivate = asdf_modifier_shift_deactivate,
.parameter = 0,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_SHIFTLOCK_ON] = {.activate =
asdf_modifier_shiftlock_on_activate,
.deactivate = NULL,
.parameter = 0,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_SHIFTLOCK_TOGGLE] =
{.activate = asdf_modifier_shiftlock_toggle_activate,
.deactivate = NULL,
.parameter = 0,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_CAPS] = {.activate = asdf_modifier_capslock_activate,
.deactivate = NULL,
.parameter = 0,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_CTRL] = {.activate = asdf_modifier_ctrl_activate,
.deactivate = asdf_modifier_ctrl_deactivate,
.parameter = 0,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
// Repeat control - affects keyboard state
[ACTION_REPEAT] = {.activate = asdf_repeat_activate,
.deactivate = asdf_repeat_deactivate,
.parameter = 0,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
// HERE_IS action (maps to USER_1 hook)
[ACTION_HERE_IS] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_1},
// Keymap selection - these are DIP switches that should be reapplied on
// keyboard init
[ACTION_MAPSEL_0] = {.activate = asdf_keymaps_map_select_set,
.deactivate = asdf_keymaps_map_select_clear,
.parameter = 0,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_MAPSEL_1] = {.activate = asdf_keymaps_map_select_set,
.deactivate = asdf_keymaps_map_select_clear,
.parameter = 1,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_MAPSEL_2] = {.activate = asdf_keymaps_map_select_set,
.deactivate = asdf_keymaps_map_select_clear,
.parameter = 2,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_MAPSEL_3] = {.activate = asdf_keymaps_map_select_set,
.deactivate = asdf_keymaps_map_select_clear,
.parameter = 3,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
// Auto-repeat control - DIP switch setting
[ACTION_AUTOREPEAT_SELECT] = {.activate = asdf_repeat_auto_on,
.deactivate = asdf_repeat_auto_off,
.parameter = 0,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
// Strobe polarity control - DIP switch setting
[ACTION_STROBE_POLARITY_SELECT] =
{.activate = asdf_arch_set_pos_strobe,
.deactivate = asdf_arch_set_neg_strobe,
.parameter = 0,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
// Virtual LEDs - reapply if toggle switches are pressed
[ACTION_VLED1] = {.activate = (void (*)(uint8_t))asdf_virtual_activate,
.deactivate = NULL,
.parameter = VLED1,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_VLED2] = {.activate = (void (*)(uint8_t))asdf_virtual_activate,
.deactivate = NULL,
.parameter = VLED2,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_VLED3] = {.activate = (void (*)(uint8_t))asdf_virtual_activate,
.deactivate = NULL,
.parameter = VLED3,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
// Virtual outputs - reapply if toggle switches are pressed
[ACTION_VOUT1] = {.activate = (void (*)(uint8_t))asdf_virtual_activate,
.deactivate = NULL,
.parameter = VOUT1,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_VOUT2] = {.activate = (void (*)(uint8_t))asdf_virtual_activate,
.deactivate = NULL,
.parameter = VOUT2,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_VOUT3] = {.activate = (void (*)(uint8_t))asdf_virtual_activate,
.deactivate = NULL,
.parameter = VOUT3,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_VOUT4] = {.activate = (void (*)(uint8_t))asdf_virtual_activate,
.deactivate = NULL,
.parameter = VOUT4,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_VOUT5] = {.activate = (void (*)(uint8_t))asdf_virtual_activate,
.deactivate = NULL,
.parameter = VOUT5,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
[ACTION_VOUT6] = {.activate = (void (*)(uint8_t))asdf_virtual_activate,
.deactivate = NULL,
.parameter = VOUT6,
.flags = ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT},
// User function hooks
[ACTION_FN_1] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_1},
[ACTION_FN_2] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_2},
[ACTION_FN_3] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_3},
[ACTION_FN_4] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_4},
[ACTION_FN_5] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_5},
[ACTION_FN_6] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_6},
[ACTION_FN_7] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_7},
[ACTION_FN_8] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_8},
[ACTION_FN_9] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_9},
[ACTION_FN_10] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_10},
[ACTION_FN_11] = {.activate = (void (*)(uint8_t))asdf_hook_execute,
.deactivate = NULL,
.parameter = ASDF_HOOK_USER_11},
// Note: RESERVED actions are not handled
};
// PROCEDURE: asdf_activate_key
// INPUTS: keycode - the code for a key that has been pressed.
// OUTPUTS: none
//
// DESCRIPTION: Called when a key has been pressed. Uses a unified dispatch
// table to handle both ASCII keycodes and action codes with a single lookup.
// DESCRIPTION: Called when a key has been pressed. If the key is bound to a
// value, output the value. If the key is bound to an action, call the activate
// action handler with the keycode.
//
// SIDE EFFECTS: Depends on the handler - ASCII codes update last_key and
// reset repeat timer. Action codes produce various side effects.
// SIDE EFFECTS: If the code is a value, the last key is updated to the current
// value, and repeat timer is reset. If the code is an action code, the activate
// action dispatcher produces side effects. See asdf_activate_action()
//
// SCOPE: private
//
// COMPLEXITY: 1
// COMPLEXITY: 3
//
static void asdf_activate_key(asdf_keycode_t keycode) {
const asdf_key_handler_t *handler = &asdf_handlers[keycode];
if (handler->activate) {
handler->activate(handler->parameter);
if (keycode > ASDF_ACTION) { // ASDF_ACTION = ASDF_NOTHING = no action.
asdf_activate_action((action_t)keycode);
} else {
// activate a new codable keypress
asdf_put_code(keycode);
if (last_key != keycode) {
last_key = keycode;
asdf_repeat_reset_count();
}
}
}
@@ -906,20 +431,26 @@ static void asdf_activate_key(asdf_keycode_t keycode) {
// INPUTS: keycode - the code for a key that has been released
// OUTPUTS: none
//
// DESCRIPTION: Called when a key has been released. Uses a unified dispatch
// table to handle both ASCII keycodes and action codes with a single lookup.
// DESCRIPTION: Called when a key has been released. If the key is bound to a
// value, output the value. If the key is bound to an action, call the
// deactivate action handler with the keycode.
//
// SIDE EFFECTS: Depends on the handler - ASCII codes may clear last_key.
// Action codes produce various side effects.
// SIDE EFFECTS: If the code is a value, the last key is set to ACTION_NOTHING,
// which is effectively a NOP. If the code is an action code, the deactivate
// action dispatcher produces side effects. See asdf_deactivate_action()
//
// SCOPE: private
//
// COMPLEXITY: 1
// COMPLEXITY: 3
//
static void asdf_deactivate_key(asdf_keycode_t keycode) {
const asdf_key_handler_t *handler = &asdf_handlers[keycode];
if (handler->deactivate) {
handler->deactivate(handler->parameter);
if (keycode > ASDF_ACTION) {
asdf_deactivate_action((action_t)keycode);
} else {
// deactivate a released keypress
if (last_key == keycode) {
last_key = ACTION_NOTHING;
}
}
}
@@ -1074,12 +605,7 @@ void asdf_apply_all_actions(void) {
for (uint8_t col = 0; col < asdf_keymaps_num_cols(); col++) {
if (row_key_state & 1) {
asdf_keycode_t code = asdf_lookup_keycode(row, col);
const asdf_key_handler_t *handler = &asdf_handlers[code];
// Only apply handlers that should be reapplied on keyboard init
if ((handler->flags & ASDF_HANDLER_APPLY_ON_KEYBOARD_INIT) &&
handler->activate) {
handler->activate(handler->parameter);
}
asdf_activate_action(code);
}
row_key_state >>= 1;
}
+124 -21
View File
@@ -236,38 +236,141 @@ void asdf_keymaps_init(void) { asdf_keymaps_switch(0); }
//
// COMPLEXITY: 1
//
// PROCEDURE: asdf_keymaps_map_select_set
// INPUTS: bit_num - bit number to set (0-3)
// OUTPUTS: none
//
// DESCRIPTION: Sets the specified bit in the keymap selection index.
//
// SIDE EFFECTS: changes selected keymap
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_keymaps_map_select_set(uint8_t bit_num) {
uint8_t bit_mask = 1 << (bit_num & 0x03); // Mask to 0-3 range for safety
asdf_keymaps_select(current_keyboard_index | bit_mask);
void asdf_keymaps_map_select_0_clear(void) {
asdf_keymaps_select(current_keyboard_index & (~ASDF_KEYMAP_BIT_0));
}
// PROCEDURE: asdf_keymaps_map_select_clear
// INPUTS: bit_num - bit number to clear (0-3)
// PROCEDURE: asdf_keymaps_map_select_0_set
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: Clears the specified bit in the keymap selection index.
// DESCRIPTION: called when map select 0 switch is closed. Sets the 0 bit in the
// keymap index.
//
// SIDE EFFECTS: changes selected keymap
//
// NOTES:
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_keymaps_map_select_clear(uint8_t bit_num) {
uint8_t bit_mask = 1 << (bit_num & 0x03); // Mask to 0-3 range for safety
asdf_keymaps_select(current_keyboard_index & (~bit_mask));
void asdf_keymaps_map_select_0_set(void) {
asdf_keymaps_select(current_keyboard_index | ASDF_KEYMAP_BIT_0);
}
// PROCEDURE: asdf_keymaps_map_select_1_clear
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: called when map select 1 switch is open. Clears the 1 bit in the
// keymap index.
//
// SIDE EFFECTS: changes selected keymap
//
// NOTES:
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_keymaps_map_select_1_clear(void) {
asdf_keymaps_select(current_keyboard_index & (~ASDF_KEYMAP_BIT_1));
}
// PROCEDURE: asdf_keymaps_map_select_1_set
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: called when map select 1 switch is closed. Sets the 1 bit in the
// keymap index.
//
// SIDE EFFECTS: changes selected keymap
//
// NOTES:
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_keymaps_map_select_1_set(void) {
asdf_keymaps_select(current_keyboard_index | ASDF_KEYMAP_BIT_1);
}
// PROCEDURE: asdf_keymaps_map_select_2_clear
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: called when map select 2 switch is open. Clears the 2 bit in the
// keymap index.
//
// SIDE EFFECTS: changes selected keymap
//
// NOTES:
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_keymaps_map_select_2_clear(void) {
asdf_keymaps_select(current_keyboard_index & (~ASDF_KEYMAP_BIT_2));
}
// PROCEDURE: asdf_keymaps_map_select_2_set
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: called when map select 2 switch is closed. Sets the 2 bit in the
// keymap index.
//
// SIDE EFFECTS: changes selected keymap
//
// NOTES:
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_keymaps_map_select_2_set(void) {
asdf_keymaps_select(current_keyboard_index | ASDF_KEYMAP_BIT_2);
}
// PROCEDURE: asdf_keymaps_map_select_3_clear
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: called when map select 3 switch is open. Clears the 3 bit in the
// keymap index.
//
// SIDE EFFECTS: changes selected keymap
//
// NOTES:
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_keymaps_map_select_3_clear(void) {
asdf_keymaps_select(current_keyboard_index & (~ASDF_KEYMAP_BIT_3));
}
// PROCEDURE: asdf_keymaps_map_select_3_set
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: called when map select 3 switch is closed. Sets the 3 bit in the
// keymap index.
//
// SIDE EFFECTS: changes selected keymap
//
// NOTES:
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_keymaps_map_select_3_set(void) {
asdf_keymaps_select(current_keyboard_index | ASDF_KEYMAP_BIT_3);
}
// PROCEDURE: asdf_keymaps_get_code
+52 -8
View File
@@ -84,17 +84,61 @@ uint8_t asdf_keymaps_num_cols(void);
// requested index is not valid then do nothing.
void asdf_keymaps_select(uint8_t index);
// PROCEDURE: asdf_keymaps_map_select_set
// INPUTS: bit_num - bit number to set (0-3)
// PROCEDURE: asdf_keymaps_map_select_0_clear
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Sets the specified bit in the keymap selection index.
void asdf_keymaps_map_select_set(uint8_t bit_num);
// DESCRIPTION: called when map select 0 switch is open. Clears the 0 bit in the
// keymap index.
void asdf_keymaps_map_select_0_clear(void);
// PROCEDURE: asdf_keymaps_map_select_clear
// INPUTS: bit_num - bit number to clear (0-3)
// PROCEDURE: asdf_keymaps_map_select_0_set
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Clears the specified bit in the keymap selection index.
void asdf_keymaps_map_select_clear(uint8_t bit_num);
// DESCRIPTION: called when map select 0 switch is closed. Sets the 0 bit in the
// keymap index, if the resulting keymap index is valid. Otherwise do nothing.
void asdf_keymaps_map_select_0_set(void);
// PROCEDURE: asdf_keymaps_map_select_1_clear
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: called when map select 1 switch is open. Clears the 1 bit in the
// keymap index.
void asdf_keymaps_map_select_1_clear(void);
// PROCEDURE: asdf_keymaps_map_select_1_set
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: called when map select 1 switch is closed. Sets the 0 bit in the
// keymap index, if the resulting keymap index is valid. Otherwise do nothing.
void asdf_keymaps_map_select_1_set(void);
// PROCEDURE: asdf_keymaps_map_select_2_clear
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: called when map select 2 switch is open. Clears the 2 bit in the
// keymap index.
void asdf_keymaps_map_select_2_clear(void);
// PROCEDURE: asdf_keymaps_map_select_2_set
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: called when map select 2 switch is closed. Sets the 0 bit in the
// keymap index, if the resulting keymap index is valid. Otherwise do nothing.
void asdf_keymaps_map_select_2_set(void);
// PROCEDURE: asdf_keymaps_map_select_3_clear
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: called when map select 3 switch is open. Clears the 3 bit in the
// keymap index.
void asdf_keymaps_map_select_3_clear(void);
// PROCEDURE: asdf_keymaps_map_select_3_set
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: called when map select 3 switch is closed. Sets the 0 bit in the
// keymap index, if the resulting keymap index is valid. Otherwise do nothing.
void asdf_keymaps_map_select_3_set(void);
// PROCEDURE: asdf_keymaps_init
// INPUTS: none
+14 -21
View File
@@ -66,7 +66,7 @@ void asdf_modifier_set_shift_state(uint8_t new_state)
}
// PROCEDURE: asdf_modifier_shift_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: sets SHIFT state to ON
@@ -75,15 +75,14 @@ void asdf_modifier_set_shift_state(uint8_t new_state)
//
// COMPLEXITY: 1
//
void asdf_modifier_shift_activate(uint8_t unused)
void asdf_modifier_shift_activate(void)
{
(void) unused;
asdf_modifier_set_shift_state(SHIFT_ON_ST);
}
// PROCEDURE: asdf_modifier_shiftlock_on_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: sets SHIFTLOCK state to ON
@@ -94,14 +93,13 @@ void asdf_modifier_shift_activate(uint8_t unused)
//
// COMPLEXITY: 1
//
void asdf_modifier_shiftlock_on_activate(uint8_t unused)
void asdf_modifier_shiftlock_on_activate(void)
{
(void) unused;
asdf_modifier_set_shift_state(shift_state | SHIFT_LOCKED_ST);
}
// PROCEDURE: asdf_modifier_shiftlock_toggle_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: Toggles SHIFTLOCK state.
@@ -112,9 +110,8 @@ void asdf_modifier_shiftlock_on_activate(uint8_t unused)
//
// COMPLEXITY: 1
//
void asdf_modifier_shiftlock_toggle_activate(uint8_t unused)
void asdf_modifier_shiftlock_toggle_activate(void)
{
(void) unused;
asdf_modifier_set_shift_state(shift_state ^ SHIFT_LOCKED_ST);
}
@@ -135,7 +132,7 @@ static void asdf_modifier_set_caps_state(uint8_t new_state)
}
// PROCEDURE: asdf_modifier_capslock_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: Toggles Capslock state
@@ -144,14 +141,13 @@ static void asdf_modifier_set_caps_state(uint8_t new_state)
//
// COMPLEXITY: 1
//
void asdf_modifier_capslock_activate(uint8_t unused)
void asdf_modifier_capslock_activate(void)
{
(void) unused;
asdf_modifier_set_caps_state(caps_state ^= CAPS_LOCKED_ST);
}
// PROCEDURE: asdf_modifier_ctrl_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: Turns on CTRL mode
@@ -160,14 +156,13 @@ void asdf_modifier_capslock_activate(uint8_t unused)
//
// COMPLEXITY: 1
//
void asdf_modifier_ctrl_activate(uint8_t unused)
void asdf_modifier_ctrl_activate(void)
{
(void) unused;
ctrl_state = CTRL_ON_ST;
}
// PROCEDURE: asdf_modifier_shift_deactivate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: Turns off shift mode.
@@ -178,14 +173,13 @@ void asdf_modifier_ctrl_activate(uint8_t unused)
//
// COMPLEXITY: 1
//
void asdf_modifier_shift_deactivate(uint8_t unused)
void asdf_modifier_shift_deactivate(void)
{
(void) unused;
asdf_modifier_set_shift_state(SHIFT_OFF_ST);
}
// PROCEDURE: asdf_modifier_ctrl_deactivate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: Turns off CTRL mode
@@ -194,9 +188,8 @@ void asdf_modifier_shift_deactivate(uint8_t unused)
//
// COMPLEXITY: 1
//
void asdf_modifier_ctrl_deactivate(uint8_t unused)
void asdf_modifier_ctrl_deactivate(void)
{
(void) unused;
ctrl_state = CTRL_OFF_ST;
}
+14 -16
View File
@@ -23,8 +23,6 @@
#if !defined(ASDF_MODIFIERS_H)
#define ASDF_MODIFIERS_H
#include <stdint.h>
// The active modifiers are used to build an index into a map that determinds
// which modifier map is selected. The following define the bit position for each modifier.
// For example, if SHIFT and CTRL are active, the modifier index would be
@@ -76,51 +74,51 @@ typedef enum {
} modifier_index_t;
// PROCEDURE: asdf_modifier_shift_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: sets SHIFT state to ON
//
void asdf_modifier_shift_activate(uint8_t unused);
void asdf_modifier_shift_activate(void);
// PROCEDURE: asdf_modifier_shiftlock_on_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: sets SHIFTLOCK state to ON
void asdf_modifier_shiftlock_on_activate(uint8_t unused);
void asdf_modifier_shiftlock_on_activate(void);
// PROCEDURE: asdf_modifier_shiftlock_toggle_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Toggles SHIFTLOCK state.
void asdf_modifier_shiftlock_toggle_activate(uint8_t unused);
void asdf_modifier_shiftlock_toggle_activate(void);
// PROCEDURE: asdf_modifier_capslock_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Turns on Capslock state
//
void asdf_modifier_capslock_activate(uint8_t unused);
void asdf_modifier_capslock_activate(void);
// PROCEDURE: asdf_modifier_ctrl_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Turns on CTRL mode
//
void asdf_modifier_ctrl_activate(uint8_t unused);
void asdf_modifier_ctrl_activate(void);
// PROCEDURE: asdf_modifier_shift_deactivate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Turns off shift mode.
//
void asdf_modifier_shift_deactivate(uint8_t unused);
void asdf_modifier_shift_deactivate(void);
// PROCEDURE: asdf_modifier_ctrl_deactivate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Turns off CTRL mode
//
void asdf_modifier_ctrl_deactivate(uint8_t unused);
void asdf_modifier_ctrl_deactivate(void);
// PROCEDURE: asdf_modifiers_init
// INPUTS: none
+49 -50
View File
@@ -100,9 +100,54 @@ void asdf_repeat_reset_count(void)
key_repeat_timer = (key_timer_t) repeat_state;
}
// PROCEDURE: asdf_repeat_auto_off
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: Turns Autorepeat mode off by setting the base state to
// autorepeat. If key is repeating, then the new behavior will be realized after
// the repeat key is released. This function can be bound to a key or DIP switch
// to turn autorepeat off.
//
// SIDE EFFECTS: See DESCRIPTION
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_repeat_auto_off(void)
{
base_repeat_state = REPEAT_OFF;
if (REPEAT_ON != repeat_state) {
key_repeat_timer = repeat_state = base_repeat_state;
}
}
// PROCEDURE: asdf_repeat_auto_on
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: Turns Autorepeat mode on by setting the base state to
// autorepeat. If key is repeating, then the new behavior will be realized after
// the repeat key is released. This function can be bound to a key or DIP switch
// to turn autorepeat on.
//
// SIDE EFFECTS: see above
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_repeat_auto_on(void)
{
base_repeat_state = REPEAT_AUTO;
if (REPEAT_ON != repeat_state) {
key_repeat_timer = repeat_state = base_repeat_state;
}
}
// PROCEDURE: asdf_repeat_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: set repeat state machine to repeat mode. Called when REPEAT key
@@ -116,16 +161,15 @@ void asdf_repeat_reset_count(void)
//
// COMPLEXITY: 1
//
void asdf_repeat_activate(uint8_t unused)
void asdf_repeat_activate(void)
{
(void) unused;
if (key_repeat_timer > REPEAT_ON || REPEAT_OFF == repeat_state) {
key_repeat_timer = repeat_state = REPEAT_ON;
}
}
// PROCEDURE: asdf_repeat_deactivate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
//
// DESCRIPTION: Reset repeat state to default state. Called when REPEAT
@@ -141,9 +185,8 @@ void asdf_repeat_activate(uint8_t unused)
//
// COMPLEXITY: 1
//
void asdf_repeat_deactivate(uint8_t unused)
void asdf_repeat_deactivate(void)
{
(void) unused;
key_repeat_timer = repeat_state = base_repeat_state;
}
@@ -179,49 +222,5 @@ uint8_t asdf_repeat(void)
return timeout;
}
// PROCEDURE: asdf_repeat_auto_on
// INPUTS: unused - parameter required for dispatch table but not used
// OUTPUTS: none
//
// DESCRIPTION: Enables auto-repeat mode. Used as activate function for
// ACTION_AUTOREPEAT_SELECT DIP switch.
//
// SIDE EFFECTS: Sets auto-repeat mode to enabled
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_repeat_auto_on(uint8_t unused)
{
(void) unused;
base_repeat_state = REPEAT_AUTO;
if (REPEAT_ON != repeat_state) {
key_repeat_timer = repeat_state = base_repeat_state;
}
}
// PROCEDURE: asdf_repeat_auto_off
// INPUTS: unused - parameter required for dispatch table but not used
// OUTPUTS: none
//
// DESCRIPTION: Disables auto-repeat mode. Used as deactivate function for
// ACTION_AUTOREPEAT_SELECT DIP switch.
//
// SIDE EFFECTS: Sets auto-repeat mode to disabled
//
// SCOPE: public
//
// COMPLEXITY: 1
//
void asdf_repeat_auto_off(uint8_t unused)
{
(void) unused;
base_repeat_state = REPEAT_OFF;
if (REPEAT_ON != repeat_state) {
key_repeat_timer = repeat_state = base_repeat_state;
}
}
//-------|---------|---------+---------+---------+---------+---------+---------+
// Above line is 80 columns, and should display completely in the editor.
+15 -18
View File
@@ -40,38 +40,35 @@ void asdf_repeat_init(void);
// repeat cycle. Resest is based on repeat state (no repeat, autorepeat, normal repeat).
void asdf_repeat_reset_count(void);
// PROCEDURE: asdf_repeat_auto_off
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Turns Autorepeat mode off
void asdf_repeat_auto_off(void);
// PROCEDURE: asdf_repeat_auto_on
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Turns Autorepeat mode on
void asdf_repeat_auto_on(void);
// PROCEDURE: asdf_repeat_is_autorepeat_enabled
// OUTPUTS: returns non-zero if autorepeat mode is enabled
uint8_t asdf_repeat_is_autorepeat_enabled(void);
// PROCEDURE: asdf_repeat_activate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: set repeat state machine to repeat mode. Called when REPEAT key
// is pressed.
void asdf_repeat_activate(uint8_t unused);
void asdf_repeat_activate(void);
// PROCEDURE: asdf_repeat_deactivate
// INPUTS: unused - parameter required for dispatch table but not used
// INPUTS: none
// OUTPUTS: none
// DESCRIPTION: Reset repeat state machine to default state. Called when REPEAT
// key is released.
void asdf_repeat_deactivate(uint8_t unused);
// PROCEDURE: asdf_repeat_auto_on
// INPUTS: unused - parameter required for dispatch table but not used
// OUTPUTS: none
// DESCRIPTION: Enables auto-repeat mode. Used as activate function for
// ACTION_AUTOREPEAT_SELECT DIP switch.
void asdf_repeat_auto_on(uint8_t unused);
// PROCEDURE: asdf_repeat_auto_off
// INPUTS: unused - parameter required for dispatch table but not used
// OUTPUTS: none
// DESCRIPTION: Disables auto-repeat mode. Used as deactivate function for
// ACTION_AUTOREPEAT_SELECT DIP switch.
void asdf_repeat_auto_off(uint8_t unused);
void asdf_repeat_deactivate(void);
// PROCEDURE: asdf_repeat
// INPUTS: none
+2 -2
View File
@@ -75,7 +75,7 @@ void test_dip_strobe_action_toggles_polarity(void)
void test_dip_autorepeat_action_toggles_mode(void)
{
asdf_repeat_auto_off(0);
asdf_repeat_auto_off();
TEST_ASSERT_FALSE(asdf_repeat_is_autorepeat_enabled());
press_dip(AUTOREPEAT_COL);
@@ -87,7 +87,7 @@ void test_dip_autorepeat_action_toggles_mode(void)
void test_keymap_switch_reapplies_dip_actions(void)
{
asdf_repeat_auto_off(0);
asdf_repeat_auto_off();
TEST_ASSERT_FALSE(asdf_repeat_is_autorepeat_enabled());
TEST_ASSERT_FALSE(asdf_arch_is_strobe_positive());
+9 -3
View File
@@ -142,12 +142,18 @@ void tearDown(void) {}
// set a keymap using the asdf_keymap dip-switch functions
void complicated_set_keymap(uint8_t mapnum)
{
void (*set_funcs[])(void) = { &asdf_keymaps_map_select_0_set, &asdf_keymaps_map_select_1_set,
&asdf_keymaps_map_select_2_set, &asdf_keymaps_map_select_3_set };
void (*clr_funcs[])(void) = { &asdf_keymaps_map_select_0_clear, &asdf_keymaps_map_select_1_clear,
&asdf_keymaps_map_select_2_clear,
&asdf_keymaps_map_select_3_clear };
for (uint8_t i = 0; i < NUM_DIPSWITCHES; i++) {
if (mapnum & 1) {
asdf_keymaps_map_select_set(i);
set_funcs[i]();
}
else {
asdf_keymaps_map_select_clear(i);
clr_funcs[i]();
}
mapnum >>= 1;
}
@@ -217,7 +223,7 @@ void keymap2_ctrl_gives_ctrl_values(void)
void keymap1_capsmap_plain_maps_to_caps(void)
{
// set bit 0 to select keymap 1
asdf_keymaps_map_select_set(0);
asdf_keymaps_map_select_0_set();
TEST1CAPS(alpha_sample.row, alpha_sample.col);
TEST1CAPS(num_sample.row, num_sample.col);
}
+46 -46
View File
@@ -27,31 +27,31 @@ void initial_map_is_plain(void)
// SHIFT gives shift map
void shift_gives_shiftmap(void)
{
asdf_modifier_shift_activate(0);
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// SHIFT press & release gives plain map
void shift_and_release_gives_plain(void)
{
asdf_modifier_shift_activate(0);
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_deactivate(0);
asdf_modifier_shift_deactivate();
TESTMAP(MOD_PLAIN_MAP);
}
// CAPSLOCK gives caps map
void capslock_gives_caps(void)
{
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
}
// CAPLOCK press and release gives caps map
void capslock_and_release_gives_caps(void)
{
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
TESTMAP(MOD_CAPS_MAP);
@@ -60,10 +60,10 @@ void capslock_and_release_gives_caps(void)
// CAPS-release-CAPS give plain
void caps_release_caps_gives_plain(void)
{
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_PLAIN_MAP);
}
@@ -71,56 +71,56 @@ void caps_release_caps_gives_plain(void)
// resulting in final plain map.
void caps_release_caps_release_gives_plain(void)
{
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_PLAIN_MAP);
}
// If SHIFT and CAPS are activated, the SHIFT map results
void shift_and_caps_gives_shift(void)
{
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shift_activate(0);
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// IF CAPS map is active, pressing and releasing SHIFT reverts to CAPS
void caps_shift_unshift_gives_caps(void)
{
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shift_activate(0);
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_deactivate(0);
asdf_modifier_shift_deactivate();
TESTMAP(MOD_CAPS_MAP);
}
// Capslock and SHiftlock gives SHIFT
void capslock_shiftlock_gives_shift(void)
{
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// Pressing CAPSLOCK and SHIFTLOCK, then CAPSLOCK again gives shift map.
void capslock_shiftlock_capslock_gives_shift(void)
{
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_SHIFT_MAP);
}
@@ -128,28 +128,28 @@ void capslock_shiftlock_capslock_gives_shift(void)
// the shiftlock) again gives shift map.
void capslock_shiftlock_shift_gives_caps(void)
{
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CAPS_MAP);
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_activate(0);
asdf_modifier_shift_deactivate(0);
asdf_modifier_shift_activate();
asdf_modifier_shift_deactivate();
TESTMAP(MOD_CAPS_MAP);
}
// SHIFTLOCK press gives shift map
void shiftlock_gives_shift(void)
{
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// SHIFTLOCK press and release gives shift map
void shiftlock_and_release_gives_shift(void)
{
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
}
@@ -157,39 +157,39 @@ void shiftlock_and_release_gives_shift(void)
// SHIFTLOCK and SHIFT gives shift map
void shiftlock_shift_gives_shift(void)
{
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_activate(0);
asdf_modifier_shift_activate();
TESTMAP(MOD_SHIFT_MAP);
}
// SHIFTLOCK and SHIFT press and release gives plain map
void shiftlock_shift_release_gives_plain(void)
{
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_SHIFT_MAP);
asdf_modifier_shift_activate(0);
asdf_modifier_shift_deactivate(0);
asdf_modifier_shift_activate();
asdf_modifier_shift_deactivate();
TESTMAP(MOD_PLAIN_MAP);
}
// CTRL gives ctrl map
void ctrl_gives_ctrl_map(void)
{
asdf_modifier_ctrl_activate(0);
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
}
// CTRL press and release gives plain map
void ctrl_release_gives_plain_map(void)
{
asdf_modifier_ctrl_activate(0);
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_ctrl_activate(0);
asdf_modifier_ctrl_deactivate(0);
asdf_modifier_ctrl_activate();
asdf_modifier_ctrl_deactivate();
TESTMAP(MOD_PLAIN_MAP);
}
@@ -197,20 +197,20 @@ void ctrl_release_gives_plain_map(void)
// SHIFT + CTRL is ctrl map
void ctrl_shift_gives_ctrl_map(void)
{
asdf_modifier_ctrl_activate(0);
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_shift_activate(0);
asdf_modifier_shift_activate();
TESTMAP(MOD_CTRL_MAP);
}
// CAPSLOCK and CTRL is ctrl map
void ctrl_caps_gives_ctrl_map(void)
{
asdf_modifier_ctrl_activate(0);
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CTRL_MAP);
}
@@ -218,34 +218,34 @@ void ctrl_caps_gives_ctrl_map(void)
// SHIFTLOCK and CTRL is ctrl map
void ctrl_shiftlock_gives_ctrl_map(void)
{
asdf_modifier_ctrl_activate(0);
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_CTRL_MAP);
}
void ctrl_double_caps_returns_to_ctrl_map(void)
{
asdf_modifier_ctrl_activate(0);
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TESTMAP(MOD_CTRL_MAP);
}
void ctrl_double_shiftlock_returns_to_ctrl_map(void)
{
asdf_modifier_ctrl_activate(0);
asdf_modifier_ctrl_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_CTRL_MAP);
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TESTMAP(MOD_CTRL_MAP);
}
+32 -32
View File
@@ -41,7 +41,7 @@ void test_asdf_repeat_init_resets_to_autorepeat_default(void)
void test_asdf_repeat_no_repeat_if_auto_turned_off(void)
{
uint32_t delay;
asdf_repeat_auto_off(0);
asdf_repeat_auto_off();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -53,8 +53,8 @@ void test_asdf_repeat_no_repeat_if_auto_turned_off(void)
void test_asdf_repeat_autorepeat_if_auto_turned_on(void)
{
uint32_t delay;
asdf_repeat_auto_off(0);
asdf_repeat_auto_on(0);
asdf_repeat_auto_off();
asdf_repeat_auto_on();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -86,14 +86,14 @@ void test_asf_repeat_autorepeat_fast_repeat_after_delay(void)
void test_asdf_repeat_auto_repeat_if_auto_turned_on(void)
{
uint32_t delay;
asdf_repeat_auto_on(0);
asdf_repeat_auto_on(0);
asdf_repeat_auto_on();
asdf_repeat_auto_on();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
TEST_ASSERT_EQUAL_INT(ASDF_AUTOREPEAT_TIME_MS, delay);
asdf_repeat_auto_off(0);
asdf_repeat_auto_on(0);
asdf_repeat_auto_off();
asdf_repeat_auto_on();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -124,7 +124,7 @@ void test_asdf_repeat_reset_count_works_in_repeat_mode(void)
uint32_t delay;
// wait 1/2 of autorepeat time and release a key
asdf_repeat_activate(0);
asdf_repeat_activate();
delay = count_repeat_ticks(ASDF_REPEAT_TIME_MS / 2);
@@ -144,9 +144,9 @@ void test_asdf_repeat_reset_count_works_in_repeat_mode(void)
void test_asdf_repeat_activate_with_auto_on(void)
{
uint32_t delay;
asdf_repeat_auto_on(0);
asdf_repeat_auto_on();
asdf_repeat_activate(0);
asdf_repeat_activate();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS, delay);
@@ -157,8 +157,8 @@ void test_asdf_repeat_activate_with_auto_on(void)
void test_asdf_repeat_activate_with_auto_off(void)
{
uint32_t delay;
asdf_repeat_auto_off(0);
asdf_repeat_activate(0);
asdf_repeat_auto_off();
asdf_repeat_activate();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -172,12 +172,12 @@ void test_asdf_repeat_deactivate_returns_to_baseline_no_repeat(void)
{
uint32_t delay;
asdf_repeat_auto_off(0);
asdf_repeat_auto_off();
// simulate a brief REPEAT key press (3 repeat cycles)
asdf_repeat_activate(0);
asdf_repeat_activate();
delay = 0;
for (uint32_t i = 0; i < NUM_REPETITIONS; i++) {
@@ -186,7 +186,7 @@ void test_asdf_repeat_deactivate_returns_to_baseline_no_repeat(void)
TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay);
asdf_repeat_deactivate(0);
asdf_repeat_deactivate();
// now that repeat is deactivated, we should time out before hitting a repeat
// event:
@@ -203,7 +203,7 @@ void test_asdf_repeat_deactivate_returns_to_baseline_autorepeat(void)
uint32_t delay;
// simulate a brief REPEAT key press (1/2 autorepeat time)
asdf_repeat_activate(0);
asdf_repeat_activate();
delay = 0;
for (uint32_t i = 0; i < NUM_REPETITIONS; i++) {
@@ -212,7 +212,7 @@ void test_asdf_repeat_deactivate_returns_to_baseline_autorepeat(void)
TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay);
asdf_repeat_deactivate(0);
asdf_repeat_deactivate();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -233,7 +233,7 @@ void test_asdf_repeat_repeat_key_circumvents_initial_autorepeat_delay(void)
TEST_ASSERT_EQUAL_INT((ASDF_AUTOREPEAT_TIME_MS / 2), delay);
// simulate pressing the REPEAT key in the middle of an autorepeat interval
asdf_repeat_activate(0);
asdf_repeat_activate();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -246,13 +246,13 @@ void test_asdf_repeat_repeat_key_circumvents_initial_autorepeat_delay(void)
void test_asdf_repeat_turning_off_auto_cancels_autorepeat_delay_in_progress(void)
{
uint32_t delay;
asdf_repeat_auto_on(0);
asdf_repeat_auto_on();
// simulate a brief keypress (1/2 autorepeat time)
delay = count_repeat_ticks(ASDF_AUTOREPEAT_TIME_MS / 2);
TEST_ASSERT_EQUAL_INT((ASDF_AUTOREPEAT_TIME_MS / 2), delay);
asdf_repeat_auto_off(0);
asdf_repeat_auto_off();
// simulate continued holding down key
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -267,7 +267,7 @@ void test_asdf_repeat_turning_off_auto_cancels_autorepeating_keypress(void)
{
uint32_t delay;
asdf_repeat_auto_on(0);
asdf_repeat_auto_on();
// simulate an autorepeating key. Wait out entire autorepeat delay.
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -280,7 +280,7 @@ void test_asdf_repeat_turning_off_auto_cancels_autorepeating_keypress(void)
}
TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay);
asdf_repeat_auto_off(0);
asdf_repeat_auto_off();
for (delay = 0; !asdf_repeat() && (delay < REPEAT_TIMED_OUT); delay++) {
}
@@ -295,7 +295,7 @@ void test_asdf_repeat_activate_while_autorepeating_wont_affect_timing(void)
{
uint32_t delay;
asdf_repeat_auto_on(0);
asdf_repeat_auto_on();
// simulate an autorepeating key. Wait out entire autorepeat delay.
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -308,7 +308,7 @@ void test_asdf_repeat_activate_while_autorepeating_wont_affect_timing(void)
TEST_ASSERT_EQUAL_INT((ASDF_REPEAT_TIME_MS / 2), delay);
// turn on repeat mode (press REPEAT key)
asdf_repeat_activate(0);
asdf_repeat_activate();
// now verify the repeat interval was not affected. Finish the current repeat
// interval
@@ -324,8 +324,8 @@ void test_asdf_repeat_deactivate_while_repeating_resets_autorepeat_counter(void)
{
uint32_t delay;
asdf_repeat_auto_on(0);
asdf_repeat_activate(0);
asdf_repeat_auto_on();
asdf_repeat_activate();
// wait NUM_REPETITIONS repeat cycles:
delay = 0;
@@ -335,7 +335,7 @@ void test_asdf_repeat_deactivate_while_repeating_resets_autorepeat_counter(void)
TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay);
// releast REPEAT key:
asdf_repeat_deactivate(0);
asdf_repeat_deactivate();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -349,8 +349,8 @@ void test_asdf_repeat_deactivate_while_repeating_stops_repeating(void)
{
uint32_t delay;
asdf_repeat_auto_off(0);
asdf_repeat_activate(0);
asdf_repeat_auto_off();
asdf_repeat_activate();
// wait NUM_REPETITIONS repeat cycles:
delay = 0;
@@ -360,7 +360,7 @@ void test_asdf_repeat_deactivate_while_repeating_stops_repeating(void)
TEST_ASSERT_EQUAL_INT(ASDF_REPEAT_TIME_MS * NUM_REPETITIONS, delay);
// releast REPEAT key:
asdf_repeat_deactivate(0);
asdf_repeat_deactivate();
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
@@ -374,7 +374,7 @@ void test_asdf_repeat_new_key_while_repeat_active_keeps_repeating(void)
{
uint32_t delay;
asdf_repeat_activate(0);
asdf_repeat_activate();
// wait NUM_REPETITIONS repeat cycles:
delay = 0;
@@ -401,7 +401,7 @@ void test_asdf_repeat_new_key_while_autorepeating_starts_new_autorepeat(void)
{
uint32_t delay;
asdf_repeat_auto_on(0);
asdf_repeat_auto_on();
// simulate an autorepeating key. Wait out entire autorepeat delay.
delay = count_repeat_ticks(REPEAT_TIMED_OUT);
+5 -5
View File
@@ -244,13 +244,13 @@ void test_virtual_capslock_indicator(void)
TEST_ASSERT_EQUAL_INT32(0, asdf_arch_check_output(PHYSICAL_LED1));
// emulate capslock press and release. Should set LED1
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TEST_ASSERT_EQUAL_INT32(1, asdf_arch_check_output(PHYSICAL_LED1));
// emulate capslock press and release. clear LED1
asdf_modifier_capslock_activate(0);
asdf_modifier_capslock_activate();
TEST_ASSERT_EQUAL_INT32(0, asdf_arch_check_output(PHYSICAL_LED1));
}
@@ -264,14 +264,14 @@ void test_virtual_shiftlock_indicator(void)
TEST_ASSERT_EQUAL_INT32(0, asdf_arch_check_output(PHYSICAL_LED2));
// emulate shiftlock press and release. Should set LED2
asdf_modifier_shiftlock_on_activate(0);
asdf_modifier_shiftlock_on_activate();
TEST_ASSERT_EQUAL_INT32(1, asdf_arch_check_output(PHYSICAL_LED2));
// emulate shift press and release. clear LED2
asdf_modifier_shift_activate(0);
asdf_modifier_shift_deactivate(0);
asdf_modifier_shift_activate();
asdf_modifier_shift_deactivate();
TEST_ASSERT_EQUAL_INT32(0, asdf_arch_check_output(PHYSICAL_LED2));
}