Merge branch 'scottot9-pcb'

This commit is contained in:
Joe Scotto
2025-12-09 09:20:28 -05:00
50 changed files with 7579 additions and 0 deletions
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
@@ -0,0 +1,595 @@
ISO-10303-21;
HEADER;
/* File generated by Shapr3D Version 5.1001.9950.0 */
FILE_DESCRIPTION(('HOOPS Exchange Step'),'2;1');
FILE_NAME('C:\\Users\\me\\AppData\\Local\\Packages\\Shapr3D.Shapr3D_dvv5p1vgwv6mp\\TempState\\export\\temp_export',
'2025-12-08T18:21:51-05:00',
('me'),
('Shapr3D Limited'),
'HOOPS Exchange 2025.7',
'Shapr3D',
'Authorized');
FILE_SCHEMA( ('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF {1 0 10303 442 1 1 4}') );
ENDSEC;
DATA;
#3=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
#4=PLANE_ANGLE_MEASURE_WITH_UNIT(PLANE_ANGLE_MEASURE(0.0174532925),#3);
#5=(CONVERSION_BASED_UNIT('DEGREE',#4)NAMED_UNIT(#6)PLANE_ANGLE_UNIT());
#6=DIMENSIONAL_EXPONENTS(0.,0.,0.,0.,0.,0.,0.);
#7=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
#8=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
#9=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.000000E-05),#8,'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
#10=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#9))GLOBAL_UNIT_ASSIGNED_CONTEXT((#8,#5,#7))REPRESENTATION_CONTEXT('','root'));
#12=CARTESIAN_POINT('',(0.,0.,0.));
#13=DIRECTION('',(0.,0.,1.));
#14=DIRECTION('',(1.,0.,0.));
#15=AXIS2_PLACEMENT_3D('',#12,#13,#14);
#27=CARTESIAN_POINT('',(0.65001043,44.303937115,17.2));
#28=DIRECTION('',(0.,1.,0.));
#29=DIRECTION('',(0.,0.,1.));
#30=AXIS2_PLACEMENT_3D('',#27,#28,#29);
#31=PLANE('',#30);
#32=CARTESIAN_POINT('',(-10.09998957,44.303937115,17.2));
#33=VERTEX_POINT('',#32);
#34=CARTESIAN_POINT('',(10.40001043,44.303937115,17.2));
#35=VERTEX_POINT('',#34);
#36=CARTESIAN_POINT('',(-10.09998957,44.303937115,17.2));
#37=DIRECTION('',(1.,0.,-0.));
#38=VECTOR('',#37,20.5);
#39=LINE('',#36,#38);
#40=EDGE_CURVE('',#33,#35,#39,.T.);
#41=ORIENTED_EDGE('',*,*,#40,.T.);
#42=CARTESIAN_POINT('',(10.40001043,44.303937115,16.2));
#43=VERTEX_POINT('',#42);
#44=CARTESIAN_POINT('',(10.40001043,44.303937115,17.2));
#45=DIRECTION('',(-0.,-0.,-1.));
#46=VECTOR('',#45,1.);
#47=LINE('',#44,#46);
#48=EDGE_CURVE('',#35,#43,#47,.T.);
#49=ORIENTED_EDGE('',*,*,#48,.T.);
#50=CARTESIAN_POINT('',(-10.09998957,44.303937115,16.2));
#51=VERTEX_POINT('',#50);
#52=CARTESIAN_POINT('',(-10.09998957,44.303937115,16.2));
#53=DIRECTION('',(1.,0.,-0.));
#54=VECTOR('',#53,20.5);
#55=LINE('',#52,#54);
#56=EDGE_CURVE('',#51,#43,#55,.T.);
#57=ORIENTED_EDGE('',*,*,#56,.F.);
#58=CARTESIAN_POINT('',(-10.09998957,44.303937115,16.2));
#59=DIRECTION('',(-0.,-0.,1.));
#60=VECTOR('',#59,1.);
#61=LINE('',#58,#60);
#62=EDGE_CURVE('',#51,#33,#61,.T.);
#63=ORIENTED_EDGE('',*,*,#62,.T.);
#64=EDGE_LOOP('',(#41,#49,#57,#63));
#65=FACE_BOUND('',#64,.T.);
#66=ADVANCED_FACE('',(#65),#31,.T.);
#67=CARTESIAN_POINT('',(0.15,32.5,17.2));
#68=DIRECTION('',(0.,0.,1.));
#69=DIRECTION('',(1.,0.,0.));
#70=AXIS2_PLACEMENT_3D('',#67,#68,#69);
#71=PLANE('',#70);
#72=CARTESIAN_POINT('',(9.30001043,42.203937115,17.2));
#73=VERTEX_POINT('',#72);
#74=CARTESIAN_POINT('',(11.50001043,42.203937115,17.2));
#75=VERTEX_POINT('',#74);
#76=CARTESIAN_POINT('',(10.40001043,42.203937115,17.2));
#77=DIRECTION('',(0.,0.,1.));
#78=DIRECTION('',(1.,0.,-0.));
#79=AXIS2_PLACEMENT_3D('',#76,#77,#78);
#80=CIRCLE('',#79,1.1);
#81=EDGE_CURVE('',#73,#75,#80,.T.);
#82=ORIENTED_EDGE('',*,*,#81,.F.);
#83=CARTESIAN_POINT('',(10.40001043,42.203937115,17.2));
#84=DIRECTION('',(0.,0.,1.));
#85=DIRECTION('',(1.,0.,-0.));
#86=AXIS2_PLACEMENT_3D('',#83,#84,#85);
#87=CIRCLE('',#86,1.1);
#88=EDGE_CURVE('',#75,#73,#87,.T.);
#89=ORIENTED_EDGE('',*,*,#88,.F.);
#90=EDGE_LOOP('',(#82,#89));
#91=FACE_BOUND('',#90,.T.);
#92=CARTESIAN_POINT('',(9.30001043,19.203937115,17.2));
#93=VERTEX_POINT('',#92);
#94=CARTESIAN_POINT('',(11.50001043,19.203937115,17.2));
#95=VERTEX_POINT('',#94);
#96=CARTESIAN_POINT('',(10.40001043,19.203937115,17.2));
#97=DIRECTION('',(0.,0.,1.));
#98=DIRECTION('',(1.,0.,-0.));
#99=AXIS2_PLACEMENT_3D('',#96,#97,#98);
#100=CIRCLE('',#99,1.1);
#101=EDGE_CURVE('',#93,#95,#100,.T.);
#102=ORIENTED_EDGE('',*,*,#101,.F.);
#103=CARTESIAN_POINT('',(10.40001043,19.203937115,17.2));
#104=DIRECTION('',(0.,0.,1.));
#105=DIRECTION('',(1.,0.,-0.));
#106=AXIS2_PLACEMENT_3D('',#103,#104,#105);
#107=CIRCLE('',#106,1.1);
#108=EDGE_CURVE('',#95,#93,#107,.T.);
#109=ORIENTED_EDGE('',*,*,#108,.F.);
#110=EDGE_LOOP('',(#102,#109));
#111=FACE_BOUND('',#110,.T.);
#112=CARTESIAN_POINT('',(-11.19998957,42.203937115,17.2));
#113=VERTEX_POINT('',#112);
#114=CARTESIAN_POINT('',(-8.99998957,42.203937115,17.2));
#115=VERTEX_POINT('',#114);
#116=CARTESIAN_POINT('',(-10.09998957,42.203937115,17.2));
#117=DIRECTION('',(0.,0.,1.));
#118=DIRECTION('',(1.,0.,-0.));
#119=AXIS2_PLACEMENT_3D('',#116,#117,#118);
#120=CIRCLE('',#119,1.1);
#121=EDGE_CURVE('',#113,#115,#120,.T.);
#122=ORIENTED_EDGE('',*,*,#121,.F.);
#123=CARTESIAN_POINT('',(-10.09998957,42.203937115,17.2));
#124=DIRECTION('',(0.,0.,1.));
#125=DIRECTION('',(1.,0.,-0.));
#126=AXIS2_PLACEMENT_3D('',#123,#124,#125);
#127=CIRCLE('',#126,1.1);
#128=EDGE_CURVE('',#115,#113,#127,.T.);
#129=ORIENTED_EDGE('',*,*,#128,.F.);
#130=EDGE_LOOP('',(#122,#129));
#131=FACE_BOUND('',#130,.T.);
#132=CARTESIAN_POINT('',(-11.19998957,19.203937115,17.2));
#133=VERTEX_POINT('',#132);
#134=CARTESIAN_POINT('',(-8.99998957,19.203937115,17.2));
#135=VERTEX_POINT('',#134);
#136=CARTESIAN_POINT('',(-10.09998957,19.203937115,17.2));
#137=DIRECTION('',(0.,0.,1.));
#138=DIRECTION('',(1.,0.,-0.));
#139=AXIS2_PLACEMENT_3D('',#136,#137,#138);
#140=CIRCLE('',#139,1.1);
#141=EDGE_CURVE('',#133,#135,#140,.T.);
#142=ORIENTED_EDGE('',*,*,#141,.F.);
#143=CARTESIAN_POINT('',(-10.09998957,19.203937115,17.2));
#144=DIRECTION('',(0.,0.,1.));
#145=DIRECTION('',(1.,0.,-0.));
#146=AXIS2_PLACEMENT_3D('',#143,#144,#145);
#147=CIRCLE('',#146,1.1);
#148=EDGE_CURVE('',#135,#133,#147,.T.);
#149=ORIENTED_EDGE('',*,*,#148,.F.);
#150=EDGE_LOOP('',(#142,#149));
#151=FACE_BOUND('',#150,.T.);
#152=CARTESIAN_POINT('',(-12.19998957,19.203937115,17.2));
#153=VERTEX_POINT('',#152);
#154=CARTESIAN_POINT('',(-12.19998957,42.203937115,17.2));
#155=VERTEX_POINT('',#154);
#156=CARTESIAN_POINT('',(-12.19998957,19.203937115,17.2));
#157=DIRECTION('',(0.,1.,0.));
#158=VECTOR('',#157,23.);
#159=LINE('',#156,#158);
#160=EDGE_CURVE('',#153,#155,#159,.T.);
#161=ORIENTED_EDGE('',*,*,#160,.F.);
#162=CARTESIAN_POINT('',(-10.09998957,17.103937115,17.2));
#163=VERTEX_POINT('',#162);
#164=CARTESIAN_POINT('',(-10.09998957,19.203937115,17.2));
#165=DIRECTION('',(0.,0.,1.));
#166=DIRECTION('',(1.,0.,-0.));
#167=AXIS2_PLACEMENT_3D('',#164,#165,#166);
#168=CIRCLE('',#167,2.1);
#169=EDGE_CURVE('',#153,#163,#168,.T.);
#170=ORIENTED_EDGE('',*,*,#169,.T.);
#171=CARTESIAN_POINT('',(10.40001043,17.103937115,17.2));
#172=VERTEX_POINT('',#171);
#173=CARTESIAN_POINT('',(10.40001043,17.103937115,17.2));
#174=DIRECTION('',(-1.,0.,0.));
#175=VECTOR('',#174,20.5);
#176=LINE('',#173,#175);
#177=EDGE_CURVE('',#172,#163,#176,.T.);
#178=ORIENTED_EDGE('',*,*,#177,.F.);
#179=CARTESIAN_POINT('',(12.50001043,19.203937115,17.2));
#180=VERTEX_POINT('',#179);
#181=CARTESIAN_POINT('',(10.40001043,19.203937115,17.2));
#182=DIRECTION('',(0.,0.,1.));
#183=DIRECTION('',(1.,0.,-0.));
#184=AXIS2_PLACEMENT_3D('',#181,#182,#183);
#185=CIRCLE('',#184,2.1);
#186=EDGE_CURVE('',#172,#180,#185,.T.);
#187=ORIENTED_EDGE('',*,*,#186,.T.);
#188=CARTESIAN_POINT('',(12.50001043,42.203937115,17.2));
#189=VERTEX_POINT('',#188);
#190=CARTESIAN_POINT('',(12.50001043,42.203937115,17.2));
#191=DIRECTION('',(0.,-1.,0.));
#192=VECTOR('',#191,23.);
#193=LINE('',#190,#192);
#194=EDGE_CURVE('',#189,#180,#193,.T.);
#195=ORIENTED_EDGE('',*,*,#194,.F.);
#196=CARTESIAN_POINT('',(10.40001043,42.203937115,17.2));
#197=DIRECTION('',(0.,0.,1.));
#198=DIRECTION('',(1.,0.,-0.));
#199=AXIS2_PLACEMENT_3D('',#196,#197,#198);
#200=CIRCLE('',#199,2.1);
#201=EDGE_CURVE('',#189,#35,#200,.T.);
#202=ORIENTED_EDGE('',*,*,#201,.T.);
#203=ORIENTED_EDGE('',*,*,#40,.F.);
#204=CARTESIAN_POINT('',(-10.09998957,42.203937115,17.2));
#205=DIRECTION('',(0.,0.,1.));
#206=DIRECTION('',(1.,0.,-0.));
#207=AXIS2_PLACEMENT_3D('',#204,#205,#206);
#208=CIRCLE('',#207,2.1);
#209=EDGE_CURVE('',#33,#155,#208,.T.);
#210=ORIENTED_EDGE('',*,*,#209,.T.);
#211=EDGE_LOOP('',(#161,#170,#178,#187,#195,#202,#203,#210));
#212=FACE_BOUND('',#211,.T.);
#213=ADVANCED_FACE('',(#91,#111,#131,#151,#212),#71,.T.);
#214=CARTESIAN_POINT('',(0.15,32.5,16.2));
#215=DIRECTION('',(0.,0.,1.));
#216=DIRECTION('',(1.,0.,0.));
#217=AXIS2_PLACEMENT_3D('',#214,#215,#216);
#218=PLANE('',#217);
#219=CARTESIAN_POINT('',(-8.99998957,19.203937115,16.2));
#220=VERTEX_POINT('',#219);
#221=CARTESIAN_POINT('',(-11.19998957,19.203937115,16.2));
#222=VERTEX_POINT('',#221);
#223=CARTESIAN_POINT('',(-10.09998957,19.203937115,16.2));
#224=DIRECTION('',(0.,0.,1.));
#225=DIRECTION('',(1.,0.,-0.));
#226=AXIS2_PLACEMENT_3D('',#223,#224,#225);
#227=CIRCLE('',#226,1.1);
#228=EDGE_CURVE('',#220,#222,#227,.T.);
#229=ORIENTED_EDGE('',*,*,#228,.T.);
#230=CARTESIAN_POINT('',(-10.09998957,19.203937115,16.2));
#231=DIRECTION('',(0.,0.,1.));
#232=DIRECTION('',(1.,0.,-0.));
#233=AXIS2_PLACEMENT_3D('',#230,#231,#232);
#234=CIRCLE('',#233,1.1);
#235=EDGE_CURVE('',#222,#220,#234,.T.);
#236=ORIENTED_EDGE('',*,*,#235,.T.);
#237=EDGE_LOOP('',(#229,#236));
#238=FACE_BOUND('',#237,.T.);
#239=CARTESIAN_POINT('',(-8.99998957,42.203937115,16.2));
#240=VERTEX_POINT('',#239);
#241=CARTESIAN_POINT('',(-11.19998957,42.203937115,16.2));
#242=VERTEX_POINT('',#241);
#243=CARTESIAN_POINT('',(-10.09998957,42.203937115,16.2));
#244=DIRECTION('',(0.,0.,1.));
#245=DIRECTION('',(1.,0.,-0.));
#246=AXIS2_PLACEMENT_3D('',#243,#244,#245);
#247=CIRCLE('',#246,1.1);
#248=EDGE_CURVE('',#240,#242,#247,.T.);
#249=ORIENTED_EDGE('',*,*,#248,.T.);
#250=CARTESIAN_POINT('',(-10.09998957,42.203937115,16.2));
#251=DIRECTION('',(0.,0.,1.));
#252=DIRECTION('',(1.,0.,-0.));
#253=AXIS2_PLACEMENT_3D('',#250,#251,#252);
#254=CIRCLE('',#253,1.1);
#255=EDGE_CURVE('',#242,#240,#254,.T.);
#256=ORIENTED_EDGE('',*,*,#255,.T.);
#257=EDGE_LOOP('',(#249,#256));
#258=FACE_BOUND('',#257,.T.);
#259=CARTESIAN_POINT('',(11.50001043,19.203937115,16.2));
#260=VERTEX_POINT('',#259);
#261=CARTESIAN_POINT('',(9.30001043,19.203937115,16.2));
#262=VERTEX_POINT('',#261);
#263=CARTESIAN_POINT('',(10.40001043,19.203937115,16.2));
#264=DIRECTION('',(0.,0.,1.));
#265=DIRECTION('',(1.,0.,-0.));
#266=AXIS2_PLACEMENT_3D('',#263,#264,#265);
#267=CIRCLE('',#266,1.1);
#268=EDGE_CURVE('',#260,#262,#267,.T.);
#269=ORIENTED_EDGE('',*,*,#268,.T.);
#270=CARTESIAN_POINT('',(10.40001043,19.203937115,16.2));
#271=DIRECTION('',(0.,0.,1.));
#272=DIRECTION('',(1.,0.,-0.));
#273=AXIS2_PLACEMENT_3D('',#270,#271,#272);
#274=CIRCLE('',#273,1.1);
#275=EDGE_CURVE('',#262,#260,#274,.T.);
#276=ORIENTED_EDGE('',*,*,#275,.T.);
#277=EDGE_LOOP('',(#269,#276));
#278=FACE_BOUND('',#277,.T.);
#279=CARTESIAN_POINT('',(11.50001043,42.203937115,16.2));
#280=VERTEX_POINT('',#279);
#281=CARTESIAN_POINT('',(9.30001043,42.203937115,16.2));
#282=VERTEX_POINT('',#281);
#283=CARTESIAN_POINT('',(10.40001043,42.203937115,16.2));
#284=DIRECTION('',(0.,0.,1.));
#285=DIRECTION('',(1.,0.,-0.));
#286=AXIS2_PLACEMENT_3D('',#283,#284,#285);
#287=CIRCLE('',#286,1.1);
#288=EDGE_CURVE('',#280,#282,#287,.T.);
#289=ORIENTED_EDGE('',*,*,#288,.T.);
#290=CARTESIAN_POINT('',(10.40001043,42.203937115,16.2));
#291=DIRECTION('',(0.,0.,1.));
#292=DIRECTION('',(1.,0.,-0.));
#293=AXIS2_PLACEMENT_3D('',#290,#291,#292);
#294=CIRCLE('',#293,1.1);
#295=EDGE_CURVE('',#282,#280,#294,.T.);
#296=ORIENTED_EDGE('',*,*,#295,.T.);
#297=EDGE_LOOP('',(#289,#296));
#298=FACE_BOUND('',#297,.T.);
#299=CARTESIAN_POINT('',(10.40001043,17.103937115,16.2));
#300=VERTEX_POINT('',#299);
#301=CARTESIAN_POINT('',(-10.09998957,17.103937115,16.2));
#302=VERTEX_POINT('',#301);
#303=CARTESIAN_POINT('',(10.40001043,17.103937115,16.2));
#304=DIRECTION('',(-1.,0.,0.));
#305=VECTOR('',#304,20.5);
#306=LINE('',#303,#305);
#307=EDGE_CURVE('',#300,#302,#306,.T.);
#308=ORIENTED_EDGE('',*,*,#307,.T.);
#309=CARTESIAN_POINT('',(-12.19998957,19.203937115,16.2));
#310=VERTEX_POINT('',#309);
#311=CARTESIAN_POINT('',(-10.09998957,19.203937115,16.2));
#312=DIRECTION('',(-0.,-0.,-1.));
#313=DIRECTION('',(1.,0.,-0.));
#314=AXIS2_PLACEMENT_3D('',#311,#312,#313);
#315=CIRCLE('',#314,2.1);
#316=EDGE_CURVE('',#302,#310,#315,.T.);
#317=ORIENTED_EDGE('',*,*,#316,.T.);
#318=CARTESIAN_POINT('',(-12.19998957,42.203937115,16.2));
#319=VERTEX_POINT('',#318);
#320=CARTESIAN_POINT('',(-12.19998957,19.203937115,16.2));
#321=DIRECTION('',(0.,1.,0.));
#322=VECTOR('',#321,23.);
#323=LINE('',#320,#322);
#324=EDGE_CURVE('',#310,#319,#323,.T.);
#325=ORIENTED_EDGE('',*,*,#324,.T.);
#326=CARTESIAN_POINT('',(-10.09998957,42.203937115,16.2));
#327=DIRECTION('',(0.,0.,1.));
#328=DIRECTION('',(1.,0.,-0.));
#329=AXIS2_PLACEMENT_3D('',#326,#327,#328);
#330=CIRCLE('',#329,2.1);
#331=EDGE_CURVE('',#51,#319,#330,.T.);
#332=ORIENTED_EDGE('',*,*,#331,.F.);
#333=ORIENTED_EDGE('',*,*,#56,.T.);
#334=CARTESIAN_POINT('',(12.50001043,42.203937115,16.2));
#335=VERTEX_POINT('',#334);
#336=CARTESIAN_POINT('',(10.40001043,42.203937115,16.2));
#337=DIRECTION('',(-0.,-0.,-1.));
#338=DIRECTION('',(1.,0.,-0.));
#339=AXIS2_PLACEMENT_3D('',#336,#337,#338);
#340=CIRCLE('',#339,2.1);
#341=EDGE_CURVE('',#43,#335,#340,.T.);
#342=ORIENTED_EDGE('',*,*,#341,.T.);
#343=CARTESIAN_POINT('',(12.50001043,19.203937115,16.2));
#344=VERTEX_POINT('',#343);
#345=CARTESIAN_POINT('',(12.50001043,42.203937115,16.2));
#346=DIRECTION('',(0.,-1.,0.));
#347=VECTOR('',#346,23.);
#348=LINE('',#345,#347);
#349=EDGE_CURVE('',#335,#344,#348,.T.);
#350=ORIENTED_EDGE('',*,*,#349,.T.);
#351=CARTESIAN_POINT('',(10.40001043,19.203937115,16.2));
#352=DIRECTION('',(-0.,-0.,-1.));
#353=DIRECTION('',(1.,0.,-0.));
#354=AXIS2_PLACEMENT_3D('',#351,#352,#353);
#355=CIRCLE('',#354,2.1);
#356=EDGE_CURVE('',#344,#300,#355,.T.);
#357=ORIENTED_EDGE('',*,*,#356,.T.);
#358=EDGE_LOOP('',(#308,#317,#325,#332,#333,#342,#350,#357));
#359=FACE_BOUND('',#358,.T.);
#360=ADVANCED_FACE('',(#238,#258,#278,#298,#359),#218,.F.);
#361=CARTESIAN_POINT('',(12.50001043,17.603937115,17.2));
#362=DIRECTION('',(1.,0.,0.));
#363=DIRECTION('',(0.,0.,-1.));
#364=AXIS2_PLACEMENT_3D('',#361,#362,#363);
#365=PLANE('',#364);
#366=ORIENTED_EDGE('',*,*,#194,.T.);
#367=CARTESIAN_POINT('',(12.50001043,19.203937115,17.2));
#368=DIRECTION('',(-0.,-0.,-1.));
#369=VECTOR('',#368,1.);
#370=LINE('',#367,#369);
#371=EDGE_CURVE('',#180,#344,#370,.T.);
#372=ORIENTED_EDGE('',*,*,#371,.T.);
#373=ORIENTED_EDGE('',*,*,#349,.F.);
#374=CARTESIAN_POINT('',(12.50001043,42.203937115,16.2));
#375=DIRECTION('',(0.,0.,1.));
#376=VECTOR('',#375,1.);
#377=LINE('',#374,#376);
#378=EDGE_CURVE('',#335,#189,#377,.T.);
#379=ORIENTED_EDGE('',*,*,#378,.T.);
#380=EDGE_LOOP('',(#366,#372,#373,#379));
#381=FACE_BOUND('',#380,.T.);
#382=ADVANCED_FACE('',(#381),#365,.T.);
#383=CARTESIAN_POINT('',(-12.19998957,30.703937115,17.2));
#384=DIRECTION('',(-1.,0.,0.));
#385=DIRECTION('',(0.,0.,1.));
#386=AXIS2_PLACEMENT_3D('',#383,#384,#385);
#387=PLANE('',#386);
#388=ORIENTED_EDGE('',*,*,#324,.F.);
#389=CARTESIAN_POINT('',(-12.19998957,19.203937115,16.2));
#390=DIRECTION('',(0.,0.,1.));
#391=VECTOR('',#390,1.);
#392=LINE('',#389,#391);
#393=EDGE_CURVE('',#310,#153,#392,.T.);
#394=ORIENTED_EDGE('',*,*,#393,.T.);
#395=ORIENTED_EDGE('',*,*,#160,.T.);
#396=CARTESIAN_POINT('',(-12.19998957,42.203937115,16.2));
#397=DIRECTION('',(0.,0.,1.));
#398=VECTOR('',#397,1.);
#399=LINE('',#396,#398);
#400=EDGE_CURVE('',#319,#155,#399,.T.);
#401=ORIENTED_EDGE('',*,*,#400,.F.);
#402=EDGE_LOOP('',(#388,#394,#395,#401));
#403=FACE_BOUND('',#402,.T.);
#404=ADVANCED_FACE('',(#403),#387,.T.);
#405=CARTESIAN_POINT('',(-10.09998957,19.203937115,17.2));
#406=DIRECTION('',(0.,0.,-1.));
#407=DIRECTION('',(-1.,0.,0.));
#408=AXIS2_PLACEMENT_3D('',#405,#406,#407);
#409=CYLINDRICAL_SURFACE('',#408,1.1);
#410=CARTESIAN_POINT('',(-11.19998957,19.203937115,16.2));
#411=DIRECTION('',(-0.,-0.,1.));
#412=VECTOR('',#411,1.);
#413=LINE('',#410,#412);
#414=EDGE_CURVE('',#222,#133,#413,.T.);
#415=ORIENTED_EDGE('',*,*,#414,.F.);
#416=ORIENTED_EDGE('',*,*,#228,.F.);
#417=ORIENTED_EDGE('',*,*,#235,.F.);
#418=ORIENTED_EDGE('',*,*,#414,.T.);
#419=ORIENTED_EDGE('',*,*,#141,.T.);
#420=ORIENTED_EDGE('',*,*,#148,.T.);
#421=EDGE_LOOP('',(#415,#416,#417,#418,#419,#420));
#422=FACE_BOUND('',#421,.T.);
#423=ADVANCED_FACE('',(#422),#409,.F.);
#424=CARTESIAN_POINT('',(-10.09998957,42.203937115,17.2));
#425=DIRECTION('',(0.,0.,-1.));
#426=DIRECTION('',(-1.,0.,0.));
#427=AXIS2_PLACEMENT_3D('',#424,#425,#426);
#428=CYLINDRICAL_SURFACE('',#427,1.1);
#429=CARTESIAN_POINT('',(-11.19998957,42.203937115,16.2));
#430=DIRECTION('',(-0.,-0.,1.));
#431=VECTOR('',#430,1.);
#432=LINE('',#429,#431);
#433=EDGE_CURVE('',#242,#113,#432,.T.);
#434=ORIENTED_EDGE('',*,*,#433,.F.);
#435=ORIENTED_EDGE('',*,*,#248,.F.);
#436=ORIENTED_EDGE('',*,*,#255,.F.);
#437=ORIENTED_EDGE('',*,*,#433,.T.);
#438=ORIENTED_EDGE('',*,*,#121,.T.);
#439=ORIENTED_EDGE('',*,*,#128,.T.);
#440=EDGE_LOOP('',(#434,#435,#436,#437,#438,#439));
#441=FACE_BOUND('',#440,.T.);
#442=ADVANCED_FACE('',(#441),#428,.F.);
#443=CARTESIAN_POINT('',(10.40001043,19.203937115,17.2));
#444=DIRECTION('',(0.,0.,-1.));
#445=DIRECTION('',(-1.,0.,0.));
#446=AXIS2_PLACEMENT_3D('',#443,#444,#445);
#447=CYLINDRICAL_SURFACE('',#446,1.1);
#448=CARTESIAN_POINT('',(9.30001043,19.203937115,16.2));
#449=DIRECTION('',(-0.,-0.,1.));
#450=VECTOR('',#449,1.);
#451=LINE('',#448,#450);
#452=EDGE_CURVE('',#262,#93,#451,.T.);
#453=ORIENTED_EDGE('',*,*,#452,.F.);
#454=ORIENTED_EDGE('',*,*,#268,.F.);
#455=ORIENTED_EDGE('',*,*,#275,.F.);
#456=ORIENTED_EDGE('',*,*,#452,.T.);
#457=ORIENTED_EDGE('',*,*,#101,.T.);
#458=ORIENTED_EDGE('',*,*,#108,.T.);
#459=EDGE_LOOP('',(#453,#454,#455,#456,#457,#458));
#460=FACE_BOUND('',#459,.T.);
#461=ADVANCED_FACE('',(#460),#447,.F.);
#462=CARTESIAN_POINT('',(10.40001043,42.203937115,17.2));
#463=DIRECTION('',(0.,0.,-1.));
#464=DIRECTION('',(-1.,0.,0.));
#465=AXIS2_PLACEMENT_3D('',#462,#463,#464);
#466=CYLINDRICAL_SURFACE('',#465,1.1);
#467=CARTESIAN_POINT('',(9.30001043,42.203937115,16.2));
#468=DIRECTION('',(-0.,-0.,1.));
#469=VECTOR('',#468,1.);
#470=LINE('',#467,#469);
#471=EDGE_CURVE('',#282,#73,#470,.T.);
#472=ORIENTED_EDGE('',*,*,#471,.F.);
#473=ORIENTED_EDGE('',*,*,#288,.F.);
#474=ORIENTED_EDGE('',*,*,#295,.F.);
#475=ORIENTED_EDGE('',*,*,#471,.T.);
#476=ORIENTED_EDGE('',*,*,#81,.T.);
#477=ORIENTED_EDGE('',*,*,#88,.T.);
#478=EDGE_LOOP('',(#472,#473,#474,#475,#476,#477));
#479=FACE_BOUND('',#478,.T.);
#480=ADVANCED_FACE('',(#479),#466,.F.);
#481=CARTESIAN_POINT('',(0.15001043,17.103937115,17.2));
#482=DIRECTION('',(0.,-1.,0.));
#483=DIRECTION('',(0.,0.,-1.));
#484=AXIS2_PLACEMENT_3D('',#481,#482,#483);
#485=PLANE('',#484);
#486=ORIENTED_EDGE('',*,*,#177,.T.);
#487=CARTESIAN_POINT('',(-10.09998957,17.103937115,17.2));
#488=DIRECTION('',(-0.,-0.,-1.));
#489=VECTOR('',#488,1.);
#490=LINE('',#487,#489);
#491=EDGE_CURVE('',#163,#302,#490,.T.);
#492=ORIENTED_EDGE('',*,*,#491,.T.);
#493=ORIENTED_EDGE('',*,*,#307,.F.);
#494=CARTESIAN_POINT('',(10.40001043,17.103937115,16.2));
#495=DIRECTION('',(0.,0.,1.));
#496=VECTOR('',#495,1.);
#497=LINE('',#494,#496);
#498=EDGE_CURVE('',#300,#172,#497,.T.);
#499=ORIENTED_EDGE('',*,*,#498,.T.);
#500=EDGE_LOOP('',(#486,#492,#493,#499));
#501=FACE_BOUND('',#500,.T.);
#502=ADVANCED_FACE('',(#501),#485,.T.);
#503=CARTESIAN_POINT('',(-10.09998957,42.203937115,17.2));
#504=DIRECTION('',(0.,0.,-1.));
#505=DIRECTION('',(-1.,0.,0.));
#506=AXIS2_PLACEMENT_3D('',#503,#504,#505);
#507=CYLINDRICAL_SURFACE('',#506,2.1);
#508=ORIENTED_EDGE('',*,*,#331,.T.);
#509=ORIENTED_EDGE('',*,*,#400,.T.);
#510=ORIENTED_EDGE('',*,*,#209,.F.);
#511=ORIENTED_EDGE('',*,*,#62,.F.);
#512=EDGE_LOOP('',(#508,#509,#510,#511));
#513=FACE_BOUND('',#512,.T.);
#514=ADVANCED_FACE('',(#513),#507,.T.);
#515=CARTESIAN_POINT('',(-10.09998957,19.203937115,17.2));
#516=DIRECTION('',(0.,0.,1.));
#517=DIRECTION('',(1.,0.,-0.));
#518=AXIS2_PLACEMENT_3D('',#515,#516,#517);
#519=CYLINDRICAL_SURFACE('',#518,2.1);
#520=ORIENTED_EDGE('',*,*,#169,.F.);
#521=ORIENTED_EDGE('',*,*,#393,.F.);
#522=ORIENTED_EDGE('',*,*,#316,.F.);
#523=ORIENTED_EDGE('',*,*,#491,.F.);
#524=EDGE_LOOP('',(#520,#521,#522,#523));
#525=FACE_BOUND('',#524,.T.);
#526=ADVANCED_FACE('',(#525),#519,.T.);
#527=CARTESIAN_POINT('',(10.40001043,19.203937115,17.2));
#528=DIRECTION('',(0.,0.,1.));
#529=DIRECTION('',(1.,0.,-0.));
#530=AXIS2_PLACEMENT_3D('',#527,#528,#529);
#531=CYLINDRICAL_SURFACE('',#530,2.1);
#532=ORIENTED_EDGE('',*,*,#186,.F.);
#533=ORIENTED_EDGE('',*,*,#498,.F.);
#534=ORIENTED_EDGE('',*,*,#356,.F.);
#535=ORIENTED_EDGE('',*,*,#371,.F.);
#536=EDGE_LOOP('',(#532,#533,#534,#535));
#537=FACE_BOUND('',#536,.T.);
#538=ADVANCED_FACE('',(#537),#531,.T.);
#539=CARTESIAN_POINT('',(10.40001043,42.203937115,17.2));
#540=DIRECTION('',(0.,0.,1.));
#541=DIRECTION('',(1.,0.,-0.));
#542=AXIS2_PLACEMENT_3D('',#539,#540,#541);
#543=CYLINDRICAL_SURFACE('',#542,2.1);
#544=ORIENTED_EDGE('',*,*,#201,.F.);
#545=ORIENTED_EDGE('',*,*,#378,.F.);
#546=ORIENTED_EDGE('',*,*,#341,.F.);
#547=ORIENTED_EDGE('',*,*,#48,.F.);
#548=EDGE_LOOP('',(#544,#545,#546,#547));
#549=FACE_BOUND('',#548,.T.);
#550=ADVANCED_FACE('',(#549),#543,.T.);
#551=CLOSED_SHELL('',(#66,#213,#360,#382,#404,#423,#442,#461,#480,#502,#514,#526,#538,#550));
#552=MANIFOLD_SOLID_BREP('OLED Cover',#551);
#553=COLOUR_RGB('',0.627451003,0.627451003,0.643137276);
#554=FILL_AREA_STYLE_COLOUR('',#553);
#555=FILL_AREA_STYLE('',(#554));
#556=SURFACE_STYLE_FILL_AREA(#555);
#557=SURFACE_SIDE_STYLE('',(#556));
#558=SURFACE_STYLE_USAGE(.BOTH.,#557);
#559=PRESENTATION_STYLE_ASSIGNMENT((#558));
#26=STYLED_ITEM('',(#559),#552);
#16=SHAPE_REPRESENTATION('root',(#15),#10);
#17=ADVANCED_BREP_SHAPE_REPRESENTATION('root',(#552),#10);
#567=SHAPE_REPRESENTATION_RELATIONSHIP('','',#16,#17);
#568=CARTESIAN_POINT('',(0.,0.,0.));
#569=DIRECTION('',(0.,0.,1.));
#570=DIRECTION('',(1.,0.,0.));
#571=AXIS2_PLACEMENT_3D('',#568,#569,#570);
#573=MAPPED_ITEM('',#572,#571);
#572=REPRESENTATION_MAP(#571,#16);
#574=APPLICATION_CONTEXT('Managed model based 3d engineering');
#575=APPLICATION_PROTOCOL_DEFINITION('international standard','ap242_managed_model_based_3d_engineering',2014,#574);
#576=PRODUCT_CONTEXT('',#574,'mechanical');
#577=PRODUCT_DEFINITION_CONTEXT('part definition',#574,'design');
#24=PRODUCT('root','root','',(#576));
#578=PRODUCT_RELATED_PRODUCT_CATEGORY('part','',(#24));
#579=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#24,.NOT_KNOWN.);
#25=PRODUCT_DEFINITION('design','',#579,#577);
#23=PRODUCT_DEFINITION_SHAPE('','',#25);
#580=SHAPE_DEFINITION_REPRESENTATION(#23,#16);
#11=DRAUGHTING_MODEL('',(#573),#10);
#581=DESCRIPTIVE_REPRESENTATION_ITEM('KEY','C:\\Users\\me\\AppData\\Local\\Packages\\Shapr3D.Shapr3D_dvv5p1vgwv6mp\\TempState\\89b63c18-09b5-4b50-a048-264623e15c4c.tmp');
#582=PROPERTY_DEFINITION('KEY','',#25);
#583=REPRESENTATION('',(#581),#10);
#584=PROPERTY_DEFINITION_REPRESENTATION(#582,#583);
#585=GENERAL_PROPERTY('','KEY','');
#586=GENERAL_PROPERTY_ASSOCIATION('','',#585,#582);
#1=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#26),#10);
ENDSEC;
END-ISO-10303-21;
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
+29
View File
@@ -0,0 +1,29 @@
[
[
"0,0",
{
"x": 1
},
"0,2"
],
[
"1,0",
"1,1",
"1,2"
],
[
"2,0",
"2,1",
"2,2"
],
[
"3,0",
"3,1",
"3,2"
],
[
"4,0",
"4,1",
"4,2"
]
]
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
#pragma once
// OLED
#define OLED_DISPLAY_128X64
#define I2C_DRIVER I2CD1
#define I2C1_SCL_PIN GP27
#define I2C1_SDA_PIN GP26
+5
View File
@@ -0,0 +1,5 @@
#pragma once
#define HAL_USE_I2C TRUE
#include_next <halconf.h>
+47
View File
@@ -0,0 +1,47 @@
{
"manufacturer": "ScottoKeebs",
"keyboard_name": "ScottoT9 (PCB Edition)",
"maintainer": "joe-scotto",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"oled": true
},
"matrix_pins": {
"cols": ["GP29", "GP11", "GP3"],
"rows": ["GP9", "GP5", "GP6", "GP7", "GP8"]
},
"processor": "RP2040",
"url": "https://scottokeebs.com",
"usb": {
"device_version": "1.0.0",
"pid": "0x0039",
"vid": "0x534B"
},
"layouts": {
"LAYOUT_ortho_2_4x3": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [1, 0], "x": 0, "y": 1 },
{ "matrix": [1, 1], "x": 1, "y": 1 },
{ "matrix": [1, 2], "x": 2, "y": 1 },
{ "matrix": [2, 0], "x": 0, "y": 2 },
{ "matrix": [2, 1], "x": 1, "y": 2 },
{ "matrix": [2, 2], "x": 2, "y": 2 },
{ "matrix": [3, 0], "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1, "y": 3 },
{ "matrix": [3, 2], "x": 2, "y": 3 },
{ "matrix": [4, 0], "x": 0, "y": 4 },
{ "matrix": [4, 1], "x": 1, "y": 4 },
{ "matrix": [4, 2], "x": 2, "y": 4 }
]
}
}
}
+24
View File
@@ -0,0 +1,24 @@
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ┌──────┐ ┌──────┐
// │ left │ │ rght │
// ├──────┼───┼──────┤
// │ 1 │ 2 │ 3 │
// ├──────┼───┼──────┤
// │ 4 │ 5 │ 6 │
// ├──────┼───┼──────┤
// │ 7 │ 8 │ 9 │
// ├──────┼───┼──────┤
// │ * │ 0 │ # │
// └──────┴───┴──────┘
[0] = LAYOUT_ortho_2_4x3(
KC_LEFT , KC_RIGHT,
KC_1 , KC_2 , KC_3 ,
KC_4 , KC_5 , KC_6 ,
KC_7 , KC_8 , KC_9 ,
KC_ASTERISK , KC_0 , KC_HASH
)
};
// clang-format on
+11
View File
@@ -0,0 +1,11 @@
#include QMK_KEYBOARD_H
enum combos {
ENTER,
};
const uint16_t PROGMEM enter[] = {KC_RSFT, LT(1, KC_BSPC), COMBO_END};
combo_t key_combos[] = {
[ENTER] = COMBO(enter, KC_ENTER),
};
+353
View File
@@ -0,0 +1,353 @@
#include "combos.c"
#include "tapdance.c"
#include QMK_KEYBOARD_H
#include <stdio.h>
char wpm_str[10];
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ┌──────────┐ ┌─────────────┐
// │ left │ │ rght │
// ├──────────┼──────────┼─────────────┤
// │ TD(TD_1) │ TD(TD_2) │ TD(TD_3) │
// ├──────────┼──────────┼─────────────┤
// │ TD(TD_4) │ TD(TD_5) │ TD(TD_6) │
// ├──────────┼──────────┼─────────────┤
// │ TD(TD_7) │ TD(TD_8) │ TD(TD_9) │
// ├──────────┼──────────┼─────────────┤
// │ rsft │ TD(TD_0) │ LT(1, bspc) │
// └──────────┴──────────┴─────────────┘
[0] = LAYOUT_ortho_2_4x3(
KC_LEFT , KC_RIGHT ,
TD(TD_1) , TD(TD_2) , TD(TD_3) ,
TD(TD_4) , TD(TD_5) , TD(TD_6) ,
TD(TD_7) , TD(TD_8) , TD(TD_9) ,
KC_RSFT , TD(TD_0) , LT(1, KC_BSPC)
),
// ┌──────┐ ┌──────┐
// │ left │ │ rght │
// ├──────┼─────────┼──────┤
// │ tab │ up │ ent │
// ├──────┼─────────┼──────┤
// │ left │ down │ rght │
// ├──────┼─────────┼──────┤
// │ caps │ QK_BOOT │ del │
// ├──────┼─────────┼──────┤
// │ │ │ │
// └──────┴─────────┴──────┘
[1] = LAYOUT_ortho_2_4x3(
KC_LEFT , KC_RIGHT ,
KC_TAB , KC_UP , KC_ENTER ,
KC_LEFT , KC_DOWN , KC_RIGHT ,
KC_CAPS , QK_BOOT , KC_DELETE,
KC_TRNS , KC_TRNS , KC_TRNS
)
};
// clang-format on
#if OLED_ENABLE
// WPM-responsive animation stuff here
#define IDLE_FRAMES 5
#define IDLE_SPEED 20 // below this wpm value your animation will idle
// #define PREP_FRAMES 1 // uncomment if >1
#define TAP_FRAMES 2
#define TAP_SPEED 40 // above this wpm value typing animation to trigger
#define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing
#define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024
uint32_t anim_timer = 0;
uint32_t anim_sleep = 0;
uint8_t current_idle_frame = 0;
// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1
uint8_t current_tap_frame = 0;
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; }
// Code containing pixel art, contains:
// 5 idle frames, 1 prep frame, and 2 tap frames
// To make your own pixel art:
// save a png/jpeg of an 128x32 image (resource: https://www.pixilart.com/draw )
// follow this guide up to and including "CONVERT YOUR IMAGE"
// https://docs.splitkb.com/hc/en-us/articles/360013811280-How-do-I-convert-an-image-for-use-on-an-OLED-display- replace
// numbers in brackets with your own if you start getting errors when compiling make sure you didn't accedentally delete
// a bracket
static void render_anim(void) {
static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02,
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02,
0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00,
0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80,
0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83,
0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04,
0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04,
0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02,
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02,
0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00,
0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80,
0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86,
0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04,
0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04,
0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04,
0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04,
0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00,
0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80,
0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86,
0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04,
0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04,
0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04,
0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04,
0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00,
0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80,
0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83,
0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04,
0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04,
0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02,
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02,
0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00,
0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80,
0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83,
0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04,
0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04,
0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
static const char PROGMEM prep[][ANIM_SIZE] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04,
0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42,
0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00,
0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80,
0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83,
0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04,
0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04,
0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02,
0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00,
0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80,
0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83,
0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04,
0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04,
0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88,
0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04,
0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42,
0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00,
0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80,
0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83,
0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04,
0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04,
0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0,
0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
};
// assumes 1 frame prep stage
void animation_phase(void) {
if (get_current_wpm() <= IDLE_SPEED) {
current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE);
}
if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) {
// oled_write_raw_P(prep[abs((PREP_FRAMES-1)-current_prep_frame)], ANIM_SIZE); // uncomment if IDLE_FRAMES >1
oled_write_raw_P(prep[0], ANIM_SIZE); // remove if IDLE_FRAMES >1
}
if (get_current_wpm() >= TAP_SPEED) {
current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE);
}
}
if (get_current_wpm() != 000) {
oled_on(); // not essential but turns on animation OLED with any alpha keypress
if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
anim_timer = timer_read32();
animation_phase();
}
anim_sleep = timer_read32();
} else {
if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
oled_off();
} else {
if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
anim_timer = timer_read32();
animation_phase();
}
}
}
}
// Used to draw on to the oled screen
bool oled_task_user(void) {
render_anim(); // renders pixelart
oled_set_cursor(0, 0); // sets cursor to (row, column) using charactar spacing (5 rows on 128x32 screen, anything more
// will overflow back to the top)
sprintf(wpm_str,
"WPM:%03d",
get_current_wpm()); // edit the string to change wwhat shows up, edit %03d to change how many digits show up
oled_write(wpm_str, false); // writes wpm on top left corner of string
led_t led_state = host_keyboard_led_state(); // caps lock stuff, prints CAPS on new line if caps led is on
oled_set_cursor(0, 1);
oled_write_P(led_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false);
return false;
}
#endif
+135
View File
@@ -0,0 +1,135 @@
#include QMK_KEYBOARD_H
enum tap_dance {
SFT_LOCK,
CMD_LOCK,
CTRL_LOCK,
ALT_LOCK
};
typedef enum {
TD_NONE,
TD_UNKNOWN,
TD_SINGLE_HOLD,
TD_SINGLE_TAP,
} td_state_t;
typedef struct {
bool is_press_action;
td_state_t state;
} td_tap_t;
static td_tap_t xtap_state = {.is_press_action = true, .state = TD_NONE};
static bool shift_locked = false;
static bool cmd_locked = false;
static bool ctrl_locked = false;
static bool alt_locked = false;
// Determine state of tap dance
td_state_t cur_dance(tap_dance_state_t *state) {
if (state->count == 1) {
if (state->interrupted || !state->pressed) {
return TD_SINGLE_TAP;
} else {
return TD_SINGLE_HOLD;
}
}
return TD_UNKNOWN;
}
// Shift lock
void sft_lock_finished(tap_dance_state_t *state, void *user_data) {
xtap_state.state = cur_dance(state);
switch (xtap_state.state) {
case TD_SINGLE_TAP:
if (shift_locked) {
unregister_code(KC_LSFT);
shift_locked = false;
} else {
register_code(KC_LSFT);
shift_locked = true;
}
break;
case TD_SINGLE_HOLD:
register_code(KC_LSFT);
break;
default:
break;
}
}
// CMD lock
void cmd_lock_finished(tap_dance_state_t *state, void *user_data) {
xtap_state.state = cur_dance(state);
switch (xtap_state.state) {
case TD_SINGLE_TAP:
if (cmd_locked) {
unregister_code(KC_LGUI);
cmd_locked = false;
} else {
register_code(KC_LGUI);
cmd_locked = true;
}
break;
default:
break;
}
}
// CTRL lock
void ctrl_lock_finished(tap_dance_state_t *state, void *user_data) {
xtap_state.state = cur_dance(state);
switch (xtap_state.state) {
case TD_SINGLE_TAP:
if (ctrl_locked) {
unregister_code(KC_LCTL);
ctrl_locked = false;
} else {
register_code(KC_LCTL);
ctrl_locked = true;
}
break;
default:
break;
}
}
// ALT lock
void alt_lock_finished(tap_dance_state_t *state, void *user_data) {
xtap_state.state = cur_dance(state);
switch (xtap_state.state) {
case TD_SINGLE_TAP:
if (alt_locked) {
unregister_code(KC_LALT);
alt_locked = false;
} else {
register_code(KC_LALT);
alt_locked = true;
}
break;
default:
break;
}
}
// Tap dance end
void sft_lock_reset(tap_dance_state_t *state, void *user_data) {
switch (xtap_state.state) {
case TD_SINGLE_HOLD:
unregister_code(KC_LSFT);
break;
default:
break;
}
xtap_state.state = TD_NONE;
}
void generic_reset(tap_dance_state_t *state, void *user_data) { xtap_state.state = TD_NONE; }
// Define tap dance actions
tap_dance_action_t tap_dance_actions[] = {
[SFT_LOCK] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, sft_lock_finished, sft_lock_reset),
[CMD_LOCK] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, cmd_lock_finished, generic_reset),
[CTRL_LOCK] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrl_lock_finished, generic_reset),
[ALT_LOCK] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, alt_lock_finished, generic_reset),
};
+3
View File
@@ -0,0 +1,3 @@
TAP_DANCE_ENABLE = yes
COMBO_ENABLE = yes
WPM_ENABLE = yes
+159
View File
@@ -0,0 +1,159 @@
#include QMK_KEYBOARD_H
enum tap_dance_keycodes {
TD_1,
TD_2,
TD_3,
TD_4,
TD_5,
TD_6,
TD_7,
TD_8,
TD_9,
TD_0,
};
typedef enum {
TD_NONE,
TD_UNKNOWN,
TD_SINGLE_HOLD,
TD_DOUBLE_HOLD,
TD_TRIPLE_HOLD,
TD_QUAD_HOLD,
TD_SINGLE_TAP,
TD_DOUBLE_TAP,
TD_TRIPLE_TAP,
TD_QUAD_TAP
} td_state_t;
static td_state_t td_state = TD_NONE;
// Determine current tap-dance state
td_state_t cur_dance(tap_dance_state_t *state) {
switch (state->count) {
case 1:
return (state->interrupted || !state->pressed) ? TD_SINGLE_TAP : TD_SINGLE_HOLD;
case 2:
return (state->interrupted || !state->pressed) ? TD_DOUBLE_TAP : TD_DOUBLE_HOLD;
case 3:
return (state->interrupted || !state->pressed) ? TD_TRIPLE_TAP : TD_TRIPLE_HOLD;
case 4:
return (state->interrupted || !state->pressed) ? TD_QUAD_TAP : TD_QUAD_HOLD;
default:
return TD_UNKNOWN;
}
}
void symbol_finished(tap_dance_state_t *state, void *user_data) {
td_state = cur_dance(state);
switch (td_state) {
case TD_SINGLE_TAP:
tap_code(KC_QUOTE);
break;
case TD_SINGLE_HOLD:
tap_code(KC_1);
break;
case TD_DOUBLE_TAP:
tap_code(KC_COMMA);
break;
case TD_TRIPLE_TAP:
tap_code(KC_SEMICOLON);
break;
case TD_QUAD_TAP:
tap_code(KC_SLSH);
break;
default:
break;
}
}
void space_finished(tap_dance_state_t *state, void *user_data) {
td_state = cur_dance(state);
switch (td_state) {
case TD_SINGLE_TAP:
tap_code(KC_SPC);
break;
case TD_SINGLE_HOLD:
tap_code(KC_0);
break;
case TD_DOUBLE_TAP:
tap_code(KC_DOT);
break;
case TD_TRIPLE_TAP:
tap_code16(S(KC_SLSH));
break;
case TD_QUAD_TAP:
tap_code16(S(KC_1));
break;
default:
break;
}
}
void td_reset(tap_dance_state_t *state, void *user_data) { td_state = TD_NONE; }
static void t9_handler(td_state_t state, bool press, uint16_t kc1, uint16_t kc2, uint16_t kc3, uint16_t kc4,
uint16_t kc_num) {
uint16_t key = KC_NO;
switch (state) {
case TD_SINGLE_TAP:
key = kc1;
break;
case TD_SINGLE_HOLD:
key = kc_num;
break;
case TD_DOUBLE_TAP:
key = kc2;
break;
case TD_TRIPLE_TAP:
key = kc3;
break;
case TD_QUAD_TAP:
key = kc4;
break;
default:
return;
}
if (key != KC_NO) {
if (press)
register_code(key);
else
unregister_code(key);
}
}
// Helper macro for T9 declaration
#define T9(name, kc1, kc2, kc3, kc4, kc_num) \
void td_##name##_finished(tap_dance_state_t *state, void *user_data) { \
td_state = cur_dance(state); \
t9_handler(td_state, true, kc1, kc2, kc3, kc4, kc_num); \
} \
\
void td_##name##_reset(tap_dance_state_t *state, void *user_data) { \
t9_handler(td_state, false, kc1, kc2, kc3, kc4, kc_num); \
td_state = TD_NONE; \
}
// Tap-dance key definitions
T9(2, KC_A, KC_B, KC_C, KC_NO, KC_2);
T9(3, KC_D, KC_E, KC_F, KC_NO, KC_3);
T9(4, KC_G, KC_H, KC_I, KC_NO, KC_4);
T9(5, KC_J, KC_K, KC_L, KC_NO, KC_5);
T9(6, KC_M, KC_N, KC_O, KC_NO, KC_6);
T9(7, KC_P, KC_Q, KC_R, KC_S, KC_7);
T9(8, KC_T, KC_U, KC_V, KC_NO, KC_8);
T9(9, KC_W, KC_X, KC_Y, KC_Z, KC_9);
tap_dance_action_t tap_dance_actions[] = {
[TD_1] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, symbol_finished, td_reset),
[TD_2] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_2_finished, td_2_reset),
[TD_3] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_3_finished, td_3_reset),
[TD_4] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_4_finished, td_4_reset),
[TD_5] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_5_finished, td_5_reset),
[TD_6] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_6_finished, td_6_reset),
[TD_7] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_7_finished, td_7_reset),
[TD_8] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_8_finished, td_8_reset),
[TD_9] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_9_finished, td_9_reset),
[TD_0] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, space_finished, td_reset),
};
+6
View File
@@ -0,0 +1,6 @@
#pragma once
// Vial
#define VIAL_KEYBOARD_UID {0x2A, 0x7D, 0x49, 0xE7, 0x63, 0xC0, 0x9B, 0x8A}
#define VIAL_UNLOCK_COMBO_ROWS {3, 3}
#define VIAL_UNLOCK_COMBO_COLS {0, 2}
+24
View File
@@ -0,0 +1,24 @@
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// ┌──────┐ ┌──────┐
// │ left │ │ rght │
// ├──────┼───┼──────┤
// │ 1 │ 2 │ 3 │
// ├──────┼───┼──────┤
// │ 4 │ 5 │ 6 │
// ├──────┼───┼──────┤
// │ 7 │ 8 │ 9 │
// ├──────┼───┼──────┤
// │ * │ 0 │ # │
// └──────┴───┴──────┘
[0] = LAYOUT_ortho_2_4x3(
KC_LEFT , KC_RIGHT,
KC_1 , KC_2 , KC_3 ,
KC_4 , KC_5 , KC_6 ,
KC_7 , KC_8 , KC_9 ,
KC_ASTERISK , KC_0 , KC_HASH
)
};
// clang-format on
+2
View File
@@ -0,0 +1,2 @@
VIA_ENABLE = yes
VIAL_ENABLE = yes
+15
View File
@@ -0,0 +1,15 @@
{
"matrix": {
"rows": 5,
"cols": 3
},
"layouts": {
"keymap": [
["0,0", { "x": 1 }, "0,2"],
["1,0", "1,1", "1,2"],
["2,0", "2,1", "2,2"],
["3,0", "3,1", "3,2"],
["4,0", "4,1", "4,2"]
]
}
}
+6
View File
@@ -0,0 +1,6 @@
#pragma once
#include_next <mcuconf.h>
#undef RP_I2C_USE_I2C
#define RP_I2C_USE_I2C1 TRUE
+27
View File
@@ -0,0 +1,27 @@
# ScottoT9
![ScottoT9](https://i.imgur.com/kJeIEhAh.jpeg)
A 14-key macropad. Case files available [here](https://github.com/joe-scotto/scottokeebs).
- Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
- Hardware Supported: RP2040
- Hardware Availability: [Amazon](https://amazon.com)
Make example for this keyboard (after setting up your build environment):
make scottokeebs/scottot9:default
Flashing example for this keyboard:
make scottokeebs/scottot9:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
- **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
- **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
+7
View File
@@ -0,0 +1,7 @@
# ScottoT9 (SK39)
The ScottoT9 (PCB Edition) is a 14-key macropad based on the T9 keyboard layout with a 128x64 OLED display.
You can read more about the components and how to build it [here](https://scottokeebs.com/blogs/macropads/scottot9-pcb-macropad).
<!-- ![ScottoT9](https://github.com/user-attachments/assets/f09831e9-9147-4eb2-963f-50c954531a01) -->
View File