Backlight abstraction and other changes (#439)

* redoes matrix pins, abstracts backlight code for B5,6,7

* slimming down keyboard stuff, backlight breathing implemented

* don't call backlight init when no pin

* cleans up user/kb/quantum calls, keyboard files

* fix pvc atomic

* replaces CHANNEL with correct var in breathing

* removes .hexs, updates readmes, updates template

* cleans-up clueboards, readmes to lowercase

* updates readme
This commit is contained in:
Jack Humbert
2016-06-23 22:18:20 -04:00
committed by GitHub
parent ba116ceb49
commit 13bb6b4b7f
239 changed files with 1146 additions and 139888 deletions

View File

@@ -1 +0,0 @@
tags

View File

@@ -37,6 +37,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
#define UNUSED_PINS
#define BACKLIGHT_PIN B7
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
@@ -59,15 +61,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
/* ws2812 RGB LED */
#define ws2812_PORTREG PORTD
#define ws2812_DDRREG DDRD
#define ws2812_pin PD1
#define RGBLED_NUM 28 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
/*
* Feature disable options
* These options are also useful to firmware size reduction.

View File

@@ -1 +0,0 @@
.build

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,970 +0,0 @@
:100000000C9401020C9445020C9445020C94450298
:100010000C9445020C9445020C9445020C94450244
:100020000C9445020C9445020C94780B0C944A0CE9
:100030000C946E190C9445020C9445020C944502E4
:100040000C9445020C9445020C9445020C94450214
:100050000C9445020C94D6190C9445020C9445025C
:100060000C9445020C9445020C9445020C944502F4
:100070000C9445020C9445020C9445020C944502E4
:100080000C9445020C9445020C9445020C944502D4
:100090000C9445020C9445020C9445020C944502C4
:1000A0000C9445020C9445020C944502B70CD90CF3
:1000B000C70DD90CC70D1E0D410DC70D960DA90D0D
:1000C00086108610B510B510F410141144124412A5
:1000D0001F114412CF11CF113512441244123E1297
:1000E000DC11DC11DC11DC11DC11DC11DC11DC11A8
:1000F000DC11DC11DC11DC11DC11DC11DC11DC1198
:10010000EC11FA110112081212122B0014001A003D
:100110000800150017001C0018000C001200130046
:100120002A00290004001600070009000A000B003D
:100130000D000E000F0033003400E1001D001B0015
:1001400006001900050011001000360037003800C5
:100150002800E500E000E200E30001302C002C0064
:1001600002305000510052004F0035021E021F02A3
:100170002002210222022302240225022602270253
:100180002A004C003A003B003C003D003E003F008E
:100190002D022E022F0230023102010040004100E8
:1001A00042004300440045003202640201000100A5
:1001B00001000050010001000100010001000100E8
:1001C0000100AB00AA00A900AE0035001E001F0010
:1001D0002000210022002300240025002600270003
:1001E0002A004C003A003B003C003D003E003F002E
:1001F0002D002E002F003000310001004000410092
:100200004200430044004500320064000100010048
:100210000100005001000100010001000100010087
:100220000100AB00AA00A900AE002803540068003A
:100230006500200050006C0061006E0063006B00E0
:1002400020004B006500790062006F0061007200C1
:10025000640000002C034F007200740068006F00FF
:100260006C0069006E0065006100720020004B00A8
:100270006500790062006F00610072006400730025
:1002800000000403090409026D00040100A0FA093A
:1002900004000001030101000921110100012240B5
:1002A000000705810308000A090401000103010297
:1002B00000092111010001224D00070582030800F9
:1002C0000A090402000103000000092111010001D4
:1002D0002236000705830308000A0904030001030E
:1002E00000000009211101000122390007058403E3
:1002F0001000011201100100000008EDFE60600115
:10030000000102000105010906A101050719E02904
:10031000E7150025019508750181020508190129D5
:100320000595057501910295017503910105071960
:1003300000297715002501957875018102C0050116
:100340000980A101850216010026B7001A01002AC2
:10035000B700751095018100C0050C0901A1018548
:1003600003160100269C021A01002A9C02751095B2
:10037000018100C005010902A1010901A1000509CF
:1003800019012905150025019505750181029501C1
:10039000750381010501093009311581257F950219
:1003A0007508810609381581257F95017508810634
:1003B000050C0A38021581257F950175088106C054
:1003C000C005010906A101050719E029E715002567
:1003D00001950875018102950175088101050819CB
:1003E0000129059505750191029501750391010596
:1003F00007190029FF150026FF00950675088100E2
:10040000C00011241FBECFEFDAE0DEBFCDBF04B6BF
:1004100003FE24C08091E9019091EA01A091EB01D3
:10042000B091EC018730904BA740B04BB9F41092DB
:10043000E9011092EA011092EB011092EC0114BE56
:1004400084B7877F84BF88E10FB6F89480936000FB
:10045000109260000FBEE0E0F8E3099511E0A0E023
:10046000B1E0E4E4FCE302C005900D92AA33B107C9
:10047000D9F711E0AAE3B1E001C01D92A93EB1078E
:10048000E1F70E94C2080C94201E0C94000008950D
:10049000089581E0089508956E9A769A0C94470223
:1004A0000C9448020C9449020C944B02613019F0F0
:1004B000623049F013C0FC018281882311F081E091
:1004C00007C081E009C0FC018281882321F082E01D
:1004D0000E94EC1603C082E00E940D1780E090E0BD
:1004E000089581E008950C94710208950F931F936D
:1004F000CF93DF938C01FC01C081D181CE010E949A
:10050000A817BE010E942303EC01B8010E947302E8
:10051000882309F48DC0F8018281882309F44AC038
:100520008091450181111FC0C431F0E5DF0709F05A
:1005300051C00E94750281E0809345010E94A0197C
:10054000909344018093430110923C0110923E012C
:1005500010923D011092400110923F011092420111
:100560001092410165C080914301909144010E9425
:10057000AC19883C910570F480913C01E82FF0E0C3
:10058000EE0FFF1FE35CFE4FD183C0838F5F80932C
:100590003C014EC0C43880E5D80721F0C538D045AD
:1005A00001F13AC0F8018281882341F010923A01AA
:1005B00082E01EC0C438E0E5DE0759F580913A01BB
:1005C000811106C086E20E94350F86E20E94F20F7A
:1005D00082E01CC0C438F0E5DF0741F3C538D045E0
:1005E000D9F4F8018281882331F010923B0180E236
:1005F0000E9441101DC080913B01811106C087E21D
:100600000E94350F87E20E94F20F80E20E9448109C
:100610000FC0C538D04529F381E080933A0180931B
:100620003B01C801DF91CF911F910F910C945202B1
:1006300080E0DF91CF911F910F9108950C944C02AF
:100640000C94500208959CE0799FF001112490E3EE
:10065000899FE00DF11D1124E60FF11DEE0FFF1F24
:10066000E65FFE4F859194910895880F991FFC01D4
:10067000E657F040859194910895880F991FFC01E9
:10068000E65FFE4F8591949108950F931F93CF934A
:10069000DF93EC01811520E3920750F5C11580E24C
:1006A000D80708F0C3C0CB3BD10590F4C83AD105B8
:1006B00008F06AC0C53AD10508F05BC0C430D10566
:1006C00008F0D0C1219709F0CAC101E010E00AC2C8
:1006D000CF3FD10511F008F0C5C1C03FD10508F0EA
:1006E000A2C0CE01805E9109089708F4BBC1B7C1D2
:1006F000C13090E5D90709F4A2C020F5C0318FE4DC
:10070000D80770F4C11590E4D90708F094C0C1155A
:1007100021E3D20708F0A3C1DD278E01106CE2C1EE
:10072000C115D04509F09BC10E94AF128FEF94E331
:100730002CE0815090402040E1F700C000000E9472
:10074000FB19D0C1C11597E5D90758F4C03121E58F
:10075000D20708F01CC1C43180E5D80708F475C081
:100760007EC1CE0190578115904108F078C1DF70AD
:1007700073C1C53AD10509F477C1C63AD10509F06C
:1007800076C102E810E4AEC1C83AD10509F472C1DD
:10079000C93AD10509F471C1CA3AD10509F470C149
:1007A000CB3AD10509F46FC1CC3AD10509F46EC139
:1007B000CD3AD10509F46DC1C03BD10509F46CC136
:1007C000CE3AD10509F46BC1CF3AD10509F46AC11B
:1007D000C13BD10509F469C1C23BD10509F468C127
:1007E000C33BD10509F467C1C43BD10509F466C117
:1007F000C53BD10509F465C1C63BD10509F464C107
:10080000C73BD10509F463C1C83BD10509F462C1F6
:10081000C93BD10509F461C1CA3BD10509F460C1E6
:1008200000E014E45FC18E0110655CC1CE019F70D1
:100830000E943D0358C1DF708E01106A53C1809140
:10084000CC0181608093CC014DC10E94521A81116C
:1008500002C00E94381A0E94651A90E09093E90144
:100860008093E801C23080E5D80721F48091E80147
:10087000816086C0C43090E5D90721F48091E801F9
:1008800082607EC0C63020E5D20721F48091E80165
:10089000846076C0C83080E5D80719F48091E801FB
:1008A00027C0CA3090E5D90721F48091E801806122
:1008B00067C0CC3020E5D20721F48091E801806246
:1008C0005FC0CE3080E5D80721F48091E8018064D4
:1008D00057C0C03190E5D90721F48091E8018068C4
:1008E0004FC0C23120E5D20729F48091E80184602D
:1008F000886046C0C33080E5D80721F48091E801C4
:100900008E7F3EC0C53090E5D90721F48091E80183
:100910008D7F36C0C73020E5D20721F48091E801F1
:100920008B7F2EC0C93080E5D80719F48091E8018B
:1009300026C0CB3090E5D90721F48091E8018F7E65
:100940001FC0CD3020E5D20721F48091E8018F7DD2
:1009500017C0CF3080E5D80721F48091E8018F7B64
:100960000FC0C13190E5D90721F48091E8018F775C
:1009700007C0C331D04531F48091E8018B7F877F78
:100980008093E8018091E8010E94691AABC08D2F25
:1009900099278F70992781309105D9F49E01237092
:1009A000332702C0880F991F2A95E2F79C688E01B1
:1009B00044E0000F111F4A95E1F700271370802BC8
:1009C000912B53E0CC0FDD1F5A95E1F7C076DD2760
:1009D0002FC08230910531F4DC2FCC278E01016FBE
:1009E000106A80C08330910569F4CE018370992725
:1009F00001E010E002C0000F111F8A95E2F7C80164
:100A00009C680FC084309105B9F4CE01837099279A
:100A100001E010E002C0000F111F8A95E2F7C80143
:100A20009A6823E0CC0FDD1F2A95E1F7C07ED770CE
:100A30008C010C2B1D2B56C08530910531F4DC2F19
:100A4000CC278E01046F106A4DC0069709F04AC08A
:100A5000CF71DD27DC2FCC278E01106243C000E070
:100A600010E040C08E013EC001E810E43BC003E846
:100A700010E438C002EE14E435C009EE14E432C0CC
:100A80000AEE14E42FC005EB14E42CC006EB14E4CA
:100A900029C007EB14E426C00CEC14E423C00DECD1
:100AA00014E420C003E815E41DC00AE815E41AC0E8
:100AB00002E915E417C004E915E414C001E216E4E4
:100AC00011C003E216E40EC004E216E40BC005E216
:100AD00016E408C006E216E405C007E216E402C008
:100AE0000AE216E4C801DF91CF911F910F9108959A
:100AF0009CE0799FF001112490E3899FE00DF11DA6
:100B00001124E60FF11DEE0FFF1FE65FFE4F8591EA
:100B10009491803E9105E0F4803C910558F5813335
:100B2000910509F46FC048F48932910509F463C056
:100B30008A32910509F46DC072C089339105E9F0DC
:100B400082389105D1F08533910509F44DC067C015
:100B5000833E910581F138F4803E9105B9F0823EE3
:100B60009105D9F05CC0863E910561F1873E910503
:100B7000A1F155C00E94350308952091E80120FDA0
:100B800002C021FF4CC080EE90E049C08091E80196
:100B900080FFF9CF89E390E042C08091E80182FFB5
:100BA0000EC08091E80184FF03C080E090E037C070
:100BB00083EE90E034C08091E80182FFF2CF82EEB4
:100BC00090E02DC08091E80183FF0BC08091E80187
:100BD00084FDEBCF87EE90E022C08091E80183FF97
:100BE000F5CF86EE90E01BC08091E80185FF07C03D
:100BF00089E290E014C08091E80185FFF9CF85E398
:100C000090E00DC08091E80186FF07C08AE290E085
:100C100006C08091E80186FFF9CF81E390E00E9451
:100C2000450308950C945402E82FF0E0EF5DFE4F69
:100C30008081E82FEF70F0E082958F7021E030E046
:100C4000A90102C0440F551F8A95E2F740A30895F9
:100C50000F931F93CF93DF9385B7806885BF85B7C8
:100C6000806885BFC3E0D0E001E010E0FE01EF5DE9
:100C7000FE4F8081E82FEF70F0E021A182958F7008
:100C8000A80102C0440F551F8A95E2F7CA01822BC2
:100C900081A38C2F0E941406219740F78BE090E0EF
:100CA00061E070E0FC01EB5EFE4F2081E22FEF700F
:100CB000F0E042A122952F70DB0102C0AA0FBB1FFA
:100CC0002A95E2F79D01242B22A3019758F7DF9183
:100CD000CF911F910F910C941E03EF92FF920F93EF
:100CE0001F93CF93DF930EE411E0C3E0EE24E3946F
:100CF000F12CD5E08C2F0E9414068BE090E040E0B0
:100D000050E0FC01EB5EFE4F6081E62FEF70F0E0FB
:100D100020A130E062956F7002C0359527956A95E5
:100D2000E2F720FD09C09701082E02C0220F331FF1
:100D30000A94E2F7422B532B019718F7F80192918E
:100D400082918F018417950721F051834083D093BE
:100D500000018C2F0E941406C15060F680910001A2
:100D600087FD2CC08150809300018F3F39F08FE9BF
:100D70009FE00197F1F700C0000020C080914C0176
:100D800090914D01909355018093540180914A01B7
:100D900090914B01909353018093520180914801AF
:100DA00090914901909351018093500180914601A7
:100DB0009091470190934F0180934E010E94200330
:100DC00081E0DF91CF911F910F91FF90EF900895F7
:100DD000E82FF0E0EE0FFF1FE25BFE4F8081918174
:100DE000089508950F931F93CF9306E511E0C0E097
:100DF000F801929182918F010E942319C80FF1E0AE
:100E00000E341F07A9F78C2FCF911F910F910895D2
:100E1000809166010895CF93DF9300D01F92CDB7E4
:100E2000DEB79C018091DF01843019F593E099834E
:100E30003B832A839093E9008FEF9091E8008150E3
:100E400095FD06C095ED9A95F1F700008111F5CF5B
:100E50008091E80085FF0DC040E050E063E070E065
:100E6000CE0101960E9468098091E8008E778093F8
:100E7000E8000F900F900F90DF91CF910895CF93DE
:100E8000DF9300D01F92CDB7DEB72091DF01243071
:100E900021F522E029839B838A8383E08093E90004
:100EA0008FEF9091E800815095FD06C095ED9A95E1
:100EB000F1F700008111F5CF8091E80085FF0DC0AA
:100EC00040E050E063E070E0CE0101960E946809C6
:100ED0008091E8008E778093E8000F900F900F903C
:100EE000DF91CF9108952091DF012430F1F422E0C9
:100EF0002093E9002FEF3091E800215035FD06C026
:100F000035ED3A95F1F700002111F5CF2091E80079
:100F100025FF0BC040E050E065E070E00E946809EA
:100F20008091E8008E778093E8000895CF93DF9357
:100F3000EC019091DF01943009F046C080910B01E3
:100F40008823D9F080910C018823B9F09093E900AF
:100F50008FEF9091E800815095FD06C095E19A953C
:100F6000F1F700008111F5CF8091E80085FF2CC0DA
:100F700040E050E060E170E017C081E08093E9005C
:100F80008FEF9091E800815095FD06C095ED9A9500
:100F9000F1F700008111F5CF8091E80085FF14C0C2
:100FA00040E050E068E070E0CE010E946809809166
:100FB000E8008E778093E80080E1FE01A6E5B1E0CD
:100FC00001900D928A95E1F7DF91CF91089580917C
:100FD000DE01811109C00E94FD0A0E945A0B809116
:100FE000E20084608093E20008951092DE0108958B
:100FF000089508950C94681942E061EC81E00E9424
:10100000770A42E061EC82E00E94770A42E061ECFC
:1010100083E00E94770A42E161EC84E00C94770A55
:101020008091E101833009F455C030F4813071F0D2
:10103000823009F48EC008958A3009F47AC08B306A
:1010400009F460C0893009F09CC020C08091E001A3
:10105000813A09F096C08091E800877F8093E8008C
:101060008091E4019091E501892B21F460E186E50E
:1010700091E003C060E080E090E070E00E94B3097E
:101080008091E8008B778093E80008958091E001DB
:10109000813209F076C08091E4019091E5010097DA
:1010A00019F0039709F06DC08091E800877F809365
:1010B000E8008091E80082FD05C08091DF01811188
:1010C000F8CF5FC08091F100809366018091E800C5
:1010D0008B7753C08091E001813A09F052C0809132
:1010E000E4019091E501892B09F04BC08091E80063
:1010F000877F8093E8008091E80080FFFCCF80919B
:101100000B0136C08091E0018132D9F58091E40174
:101110009091E501892BA9F58091E800877F809364
:10112000E8000E94AC0A8091E20180930B010C94CC
:10113000AF128091E001813221F58091E800877F34
:101140008093E8000E94AC0A8091E30180936701DC
:1011500008958091E001813AA1F48091E800877FB1
:101160008093E8008091E80080FFFCCF80916701C8
:101170008093F1008091E8008E778093E8000C94D2
:10118000AC0A089584B7877F84BF88E10FB6F894CE
:1011900080936000109260000FBE80E88093610031
:1011A000109261000E944F0E0E94FD0A0E945A0B8D
:1011B0008091E20084608093E20078940E94E00DC8
:1011C0000E94510E81E091E00E94FB0D8091DF01B1
:1011D000853069F40E942F198091DD018823B1F3D5
:1011E0000E945A19882391F30E945209EFCF0E945E
:1011F000570EECCF292F332723303105C9F064F483
:101200002130310581F02230310509F043C08DE6EF
:1012100090E026E832E042C021323105F1F022327E
:10122000310541F137C082E190E023EF32E036C072
:1012300099278130910541F08230910541F0892B49
:1012400049F5E2E8F2E005C0E4E5F2E002C0EAE2D6
:10125000F2E0849190E09F0121C06430D8F4E62F41
:10126000F0E0EE0FFF1FEF5CFE4F2081318189E03F
:1012700090E014C0643070F470E0FB01EE0FFF1FCB
:10128000E75DFE4F20813181FB01EB5DFE4F8081E8
:1012900090E004C080E090E020E030E0FA0131838B
:1012A0002083089580E189BD82E189BD09B400FEF3
:1012B000FDCF8091D8008F7D8093D8008091E00091
:1012C00082608093E0008091E00081FDFCCF089572
:1012D000CF92DF92EF92FF920F931F93CF93DF9302
:1012E000EC018B016A010E94CB0A811133C0C11449
:1012F000D10439F0F60180819181081B190BC80FC8
:10130000D91FE12CF12C0115110519F18091E8008C
:1013100085FD16C08091E8008E778093E800C114A7
:10132000D10449F0F60180819181E80EF91EF18225
:10133000E08285E00FC00E94CB0A882321F30AC017
:1013400089918093F10001501109FFEFEF1AFF0A14
:10135000DACF80E0DF91CF911F910F91FF90EF9056
:10136000DF90CF9008952091E6013091E701261794
:10137000370748F06115710539F42091E8002E77A0
:101380002093E80001C0B90140E061157105A9F1A1
:101390002091DF01222309F443C0253009F442C023
:1013A0002091E80023FD40C02091E80022FD32C0DA
:1013B0002091E80020FFE9CF4091F3002091F20056
:1013C00030E0342BFC01CF016115710559F0283054
:1013D000310540F481918093F100615071092F5FD4
:1013E0003F4FF1CF41E02830310509F040E0209136
:1013F000E8002E772093E800C8CF4111C9CF0AC07A
:101400008091DF01882361F0853061F08091E800F0
:1014100083FD0AC08091E80082FFF2CF80E008954A
:1014200082E0089583E0089581E008952091E60127
:101430003091E7012617370748F06115710539F437
:101440002091E8002E772093E80001C0B901FC014B
:1014500020E06115710591F18091DF01882309F485
:1014600040C0853009F43FC08091E80083FD3DC055
:101470008091E80082FD2FC08091E80080FFE9CFD5
:101480002091F3008091F20090E0922B611571059C
:1014900059F08830910540F424912093F100319661
:1014A000615071090196F2CF21E0089709F020E020
:1014B0008091E8008E778093E800CBCF2111CCCFCC
:1014C0000AC08091DF01882361F0853061F080914E
:1014D000E80083FD0AC08091E80082FFF2CF80E03F
:1014E000089582E0089583E0089581E00895982F9B
:1014F000973058F59093E900981739F07091EC0007
:101500002091ED005091F00003C0242F762F50E081
:1015100021FF19C03091EB003E7F3093EB003091FA
:10152000ED003D7F3093ED003091EB003160309362
:10153000EB007093EC002093ED005093F0002091AD
:10154000EE0027FF07C09F5FD3CF8F708093E90025
:1015500081E0089580E008958091E00187FF11C047
:101560008091E80082FD05C08091DF018111F8CFF4
:1015700011C08091E8008B770BC08091DF01882338
:1015800049F08091E80080FFF8CF8091E8008E77E5
:101590008093E80008952091E4003091E50095E6FD
:1015A0004091EC00842F817040FF22C08091E800C0
:1015B00080FD1CC08091DF01882391F0853091F07F
:1015C0008091EB0085FD10C04091E4005091E50052
:1015D0004217530729F39A01915011F784E00895B7
:1015E00082E0089583E0089581E0089580E0089501
:1015F0004091E80042FFDECF08950E946B0B0E94ED
:10160000730BE0EEF0E0808181608083E8EDF0E034
:1016100080818F77808319BCA7EDB0E08C918E7F9D
:101620008C9380818F7E80831092DE0108950F93CA
:101630001F93CF93DF930E946B0B0E94730BC8ED37
:10164000D0E088818F7788838881806888838881CB
:101650008F7D888319BC1092DF011092DB011092FC
:10166000DD011092DC0100EE10E0F80180818B7F3B
:10167000808388818160888342E060E080E00E940E
:10168000770AE1EEF0E080818E7F8083E2EEF0E089
:10169000808181608083808188608083F80180817F
:1016A0008E7F8083888180618883DF91CF911F91B5
:1016B0000F910895E8EDF0E080818F7E8083E7ED63
:1016C000F0E080818160808384E082BF81E080934C
:1016D000DE010C94170BE8EDF0E080818E7F8083B3
:1016E0001092E20008951092DA001092E10008953D
:1016F0001F920F920FB60F9211242F933F934F9387
:101700005F936F937F938F939F93AF93BF93EF9369
:10171000FF938091E10082FF0BC08091E20082FF85
:1017200007C08091E1008B7F8093E1000E94DF0D74
:101730008091DA0080FF1FC08091D80080FF1BC01D
:101740008091DA008E7F8093DA008091D90080FF4B
:101750000DC080E189BD82E189BD09B400FEFDCFE5
:1017600081E08093DF010E94E70705C019BC109259
:10177000DF010E94F5078091E10080FF19C0809190
:10178000E20080FF15C08091E2008E7F8093E2002E
:101790008091E20080618093E2008091D8008062B5
:1017A0008093D80019BC85E08093DF010E94F9077F
:1017B0008091E10084FF30C08091E20084FF2CC062
:1017C00080E189BD82E189BD09B400FEFDCF809131
:1017D000D8008F7D8093D8008091E1008F7E809328
:1017E000E1008091E2008F7E8093E2008091E20030
:1017F00081608093E2008091DB01882311F084E016
:1018000007C08091E30087FD02C081E001C083E052
:101810008093DF010E94FA078091E10083FF29C0D5
:101820008091E20083FF25C08091E100877F809353
:10183000E10082E08093DF011092DB018091E10002
:101840008E7F8093E1008091E2008E7F8093E200A2
:101850008091E20080618093E20042E060E080E0FD
:101860000E94770A8091F00088608093F0000E94C7
:10187000F807FF91EF91BF91AF919F918F917F9169
:101880006F915F914F913F912F910F900FBE0F90ED
:101890001F9018951F920F920FB60F9211242F933D
:1018A0003F934F935F936F937F938F939F93AF93E8
:1018B000BF93CF93DF93EF93FF93C091E900CF7075
:1018C0008091EC00D82FD17080FDD0E81092E90013
:1018D0008091F000877F8093F00078940E948E0CB6
:1018E0001092E9008091F00088608093F000CD2B89
:1018F000CF70C093E900FF91EF91DF91CF91BF913D
:10190000AF919F918F917F916F915F914F913F9197
:101910002F910F900FBE0F901F9018951F93CF938C
:10192000DF93CDB7DEB7AA970FB6F894DEBF0FBE30
:10193000CDBFE0EEF1E088E08E0F9091F100919341
:101940008E13FBCF0E9410088091E80083FF1FC117
:101950008091E0019091E101492F50E04A3051051A
:1019600008F015C1FA01EA5AFF4F0C94D01D8038D7
:1019700081F0823809F00BC18091E4018F7080936F
:10198000E9008091EB0085FB882780F91092E9003F
:1019900006C08091DC019091DD01911182609091EF
:1019A000E800977F9093E8008093F1001092F10097
:1019B000C8C0282F2D7F09F0EAC0882319F0823093
:1019C00061F0E5C08091E201813009F0E0C0933020
:1019D00009F080E08093DD012BC08091E20181114C
:1019E00027C08091E4018F7009F4D1C08093E90091
:1019F0002091EB0020FF1CC0933021F48091EB007C
:101A0000806214C09091EB0090619093EB0021E014
:101A100030E0A90102C0440F551F8A95E2F74093B8
:101A2000EA001092EA008091EB0088608093EB005E
:101A30001092E9008091E800877F86C08111A7C0DD
:101A40001091E2011F778091E3008078812B8093D1
:101A5000E3008091E800877F8093E8000E94AC0A51
:101A60008091E80080FFFCCF8091E3008068809344
:101A7000E300111102C082E001C083E08093DF0126
:101A800086C08058823008F082C08091E201909137
:101A9000E3018C3D53E0950779F583E08A838AE280
:101AA00089834FB7F894DE01139620E03EE051E2BF
:101AB000E32FF0E050935700E49120FF03C0E2953C
:101AC000EF703F5FEF708E2F90E0EA3010F0C79616
:101AD00001C0C0968D939D932F5F243149F74FBF6E
:101AE0008091E800877F8093E8006AE270E0CE0191
:101AF00001960E94B30914C0AE014F5F5F4F609121
:101B0000E4010E94FA08BC01009709F440C09091DA
:101B1000E800977F9093E80089819A810E94160AD5
:101B20008091E8008B778093E80031C0803879F5A8
:101B30008091E800877F8093E8008091DB018093AB
:101B4000F1008091E8008E778093E8000E94AC0A53
:101B50001EC081111CC09091E2019230C0F48091AE
:101B6000E800877F8093E8009093DB010E94AC0A35
:101B70008091DB01811106C08091E30087FD02C0E6
:101B800081E001C084E08093DF010E94FC07809126
:101B9000E80083FF0AC08091E800877F8093E80017
:101BA0008091EB0080628093EB00AA960FB6F894C8
:101BB000DEBF0FBECDBFDF91CF911F910895089575
:101BC000CF938091DF018823A1F0C091E900CF700D
:101BD0009091EC00892F817090FD80E8C82B1092C5
:101BE000E9008091E80083FD0E948E0CCF70C093C5
:101BF000E900CF91089590936D0180936C01089551
:101C0000E0916C01F0916D01309721F00190F0812D
:101C1000E02D099480E00895E0916C01F0916D0150
:101C2000309721F00280F381E02D09940895E0912E
:101C30006C01F0916D01309721F00480F581E02D69
:101C40000994089520916A0130916B0182179307DE
:101C500071F090936B0180936A01E0916C01F091B7
:101C60006D01309721F00680F781E02D09940895E9
:101C700020916801309169018217930771F0909368
:101C8000690180936801E0916C01F0916D013097DA
:101C900021F00084F185E02D0994089508950C94B5
:101CA0004E0E0E9497190E9428060C941D1A5F92EE
:101CB0006F927F928F929F92AF92BF92CF92DF925C
:101CC000EF92FF920F931F93CF93DF9300D000D03A
:101CD0001F92CDB7DEB70E946D0697E7C92E91E03F
:101CE000D92E03E010E0AA24A394B12C502E802F0B
:101CF0000E94E8064C01F601729062906F0168261E
:101D0000792661147104A1F40150110978F78FEF5D
:101D100089838A831B820E94A0198160782F9D830A
:101D20008C8349815A816B818D810E94070F38C055
:101D30008091CC0181FD0E94F1062BE030E075011D
:101D4000022E02C0EE0CFF1C0A94E2F7C7018621A6
:101D50009721892B09F129835A828E209F2091E0B7
:101D6000892809F490E09B830E94A0198160782F54
:101D70009D838C8349815A816B818D810E94070FDD
:101D8000000F111FF801E159FE4F80819181E82673
:101D9000F926F182E08204C02150310980F6B4CFE7
:101DA0000E94E81B10916E010E94000E1817D1F0DE
:101DB0000E94000E80936E010F900F900F900F9075
:101DC0000F90DF91CF911F910F91FF90EF90DF90D7
:101DD000CF90BF90AF909F908F907F906F905F90CB
:101DE0000C9412060F900F900F900F900F90DF91B0
:101DF000CF911F910F91FF90EF90DF90CF90BF9008
:101E0000AF909F908F907F906F905F900895CF9349
:101E1000DF93CDB7DEB72B970FB6F894DEBF0FBEBA
:101E2000CDBF4F83588769877A878B87DE011196EC
:101E300086E0FD0111928A95E9F785E0FE0137966B
:101E400001900D928A95E1F749815A816B817C81DD
:101E50008D819E810E944D152B960FB6F894DEBFA2
:101E60000FBECDBFDF91CF910895882309F4B9C08B
:101E7000823859F40E94000E81FDB3C089E30E94AC
:101E800027180E94F41889E30CC0833871F40E946B
:101E9000000E80FDA6C083E50E9427180E94F4185A
:101EA00083E50E9469180C94F418843859F40E9450
:101EB000000E82FD96C087E40E9427180E94F41845
:101EC00087E4EFCF9CEF980F913A18F40E942718FF
:101ED000EACF90E2980F983050F4877091E001C0FB
:101EE000990F8A95EAF7892F0E94AD18DCCF9BE500
:101EF000980F933070F4853A29F0863A31F083E8F0
:101F000090E005C081E890E002C082E890E00C9487
:101F1000220E98E5980F933108F063C0883A39F1A2
:101F2000893A41F18A3A49F18B3A51F18C3A59F1A7
:101F30008D3A61F1803B69F18E3A71F18F3A79F116
:101F4000813B81F1823B89F1833B91F1843B99F1A3
:101F5000853BA1F1863BA9F1873BB1F1883BB9F103
:101F6000893BC1F18A3BC9F180E090E038C082EE44
:101F700090E035C089EE90E032C08AEE90E02FC04C
:101F800085EB90E02CC086EB90E029C087EB90E0D9
:101F900026C08CEC90E023C08DEC90E020C083E85C
:101FA00091E01DC08AE891E01AC082E991E017C073
:101FB00084E991E014C081E292E011C083E292E0F2
:101FC0000EC084E292E00BC085E292E008C086E297
:101FD00092E005C087E292E002C08AE292E00C94AF
:101FE000380E0895882309F44BC0823859F40E94B2
:101FF000000E81FF45C089E30E9427180E94F41853
:1020000089E30CC0833871F40E94000E80FF38C051
:1020100083E50E9427180E94F41883E50E9469183E
:102020000C94F418843859F40E94000E82FF28C0E2
:1020300087E40E9427180E94F41887E4EFCF9CEFF2
:10204000980F913A58F390E2980F983050F48770B7
:1020500091E001C0990F8A95EAF7892F0E94B31881
:10206000DFCF9BE5980F933020F480E090E00C9454
:10207000220E885A833120F480E090E00C94380ED0
:102080000895882321F00E94AD180C94F418089547
:10209000882321F00E94B3180C94F41808957F92BD
:1020A0008F929F92AF92BF92CF92DF92EF92FF9268
:1020B0000F931F93CF93DF931F92CDB7DEB77C01B1
:1020C000C62E772EFC01058102950F701281111129
:1020D0000E94CA180E942018882379F0112369F001
:1020E00080E28C0D883048F082E00E9409180E943E
:1020F000201891E0D82ED92601C0D12CE72DE295E9
:10210000EF70F0E0E05AFF4F0C94D01D872D807FD8
:10211000072D0F70882311F00295007F112389F09D
:10212000002309F498C180E28C0D883020F4802FC0
:102130000E94AD1803C0802F0E94BD180E94F418A1
:102140008AC18C2D0E94F20F002309F49DC180E208
:102150008C0D883020F4802F0E94B31803C0802F8C
:102160000E94C3180E94F4188FC1872D807F972D7D
:102170009F70803211F4892F03C0892F8295807F50
:10218000CC2021F0F1E0CF16A1F01DC0112339F0D1
:10219000002319F1013009F50E94DD1875C10023F3
:1021A00019F0013009F470C189830E94E018898117
:1021B00010C1112321F0063008F066C10EC00530B1
:1021C00008F062C106C1112359F0002331F0F70174
:1021D000958190FF40C19F7095830E94411054C12A
:1021E000002309F4F6C03DC1872D8695869583703E
:1021F00090E0009719F0019761F046C1112321F09A
:102200008C2D972D937002C080E090E00E94220EEA
:102210003BC1112321F08C2D972D937002C080E0DB
:1022200090E00E94380E30C18C2D112319F00E94CD
:10223000F01A02C00E94581B0E94DD1B25C1872D89
:10224000837009F052C011111FC18C2D82958695A3
:102250008770880F880F9C2D9F70892E912CA12C40
:10226000B12C082E04C0880C991CAA1CBB1C0A9413
:10227000D2F7C4FE14C00FE010E020E030E0B90156
:10228000A80104C0440F551F661F771F8A95D2F717
:10229000CB01BA01609570958095909503C060E080
:1022A00070E0CB01272D26952695237030E0223053
:1022B000310569F02330310589F0682979298A29A7
:1022C0009B292130310571F00E949516DDC06829E7
:1022D00079298A299B290E94B116D6C00E94951699
:1022E000C501B4010E947916CFC0112319F0872DC2
:1022F000817001C08695882309F4C6C08C2D829513
:1023000086958770880F880F9C2D9F70892E912C41
:10231000A12CB12C082E04C0880C991CAA1CBB1C33
:102320000A94D2F7C4FE14C00FE010E020E030E0C1
:10233000B901A80104C0440F551F661F771F8A9575
:10234000D2F7CB01BA01609570958095909503C046
:1023500060E070E0CB01272D269526952370422F53
:1023600050E04230510569F04330510589F0682949
:1023700079298A299B294130510571F00E946F17F4
:1023800083C0682979298A299B290E948B177CC0E0
:102390000E946F17C501B4010E94531775C08C2DA0
:1023A00090E0FC01E05EF109E531F10508F04FC075
:1023B000E059FF4F0C94D01D0C2D0F70872D8F719D
:1023C000112321F00E94EC16802F07CF0E940D17D9
:1023D000802F0E94481058C0112341F0053008F0AA
:1023E00053C0872D8F710E9432174EC0063008F0FF
:1023F0004BC0F7CF112339F0872D8F710E94EC1657
:1024000043C01123C9F3872D8F710E940D173CC063
:10241000112329F0872D8F710E94D71635C00E9495
:10242000CD1632C0112351F0172D1F71812F0E943C
:10243000EC1663E0812F0E94001826C081E00E9404
:102440000918023008F182E00E9409181DC011230A
:1024500031F0002389F28C2D0E94350F15C0002326
:1024600091F28C2D0E94F20F0FC0472D4F706C2DF2
:10247000C7010E9456020E94F11506C0472D4F70F9
:102480006C2DC7010E942203DD20F9F00E94FC1789
:1024900080FD1BC0F70112820E94F6170E94EC1605
:1024A000C7010E9474120E94F6170F90DF91CF911E
:1024B0001F910F91FF90EF90DF90CF90BF90AF9062
:1024C0009F908F907F900C940D170F90DF91CF917C
:1024D0001F910F91FF90EF90DF90CF90BF90AF9042
:1024E0009F908F907F9008950F931F93CF93DF93CA
:1024F000EC01888199812B813C81232BB9F09F3F8E
:1025000011F48F3F99F0CE010E947602882371F07A
:10251000688179818A810E94F2178C010E94A71735
:102520000E946E16B801CE010E944F10DF91CF912C
:102530001F910F9108950E94CA180E94DA180E94F4
:102540009F180E94F4180E948E1C0E94DD1B80E0E0
:1025500090E00E94220E80E090E00C94380E0E94E1
:10256000BA180C949B120E94E717292F22952F70FE
:1025700030E02C3031054CF42A3031056CF4225017
:10258000310922303105A8F407C02C30310569F03B
:102590002F30310551F00DC0803F69F018F4803EB6
:1025A00040F409C0843F29F406C093FB882780F9D2
:1025B000089580E0089581E00895CF93DF9300D0DF
:1025C00000D01F92CDB7DEB70F900F900F900F90F5
:1025D0000F90DF91CF910895CF93DF9300D000D07B
:1025E00000D0CDB7DEB726960FB6F894DEBF0FBE8B
:1025F000CDBFDF91CF9108951F93CF93DF93C0910B
:10260000770116E080917801C81799F0D0E01C9FFF
:10261000F0011D9FF00D1124E758FE4F40815181BC
:1026200062817381848195810E94EC122196C7702A
:10263000E9CFDF91CF911F9108954091A901509169
:10264000AA016091AB017091AC018091AD019091B4
:10265000AE010C94EC128091AE0182958F7009F05E
:1026600054C08091AB01882309F44FC08091770159
:10267000A09178016091A9017091AA014091AC01EB
:102680005091AD01B6E08A1709F43FC090E04115C2
:102690005105C1F17F3F11F46F3FA1F1B89FF001E7
:1026A000B99FF00D1124E758FE4F218172132AC003
:1026B0002081621327C02281211124C0238134810B
:1026C0002417350710F421503109241B350B283C01
:1026D0003105C0F42091AE012F7020612093AE012E
:1026E00026E0289FF001299FF00D1124E258FE4FAB
:1026F00080818F708061808389EA91E00E947412EA
:102700000C94FC1201968770BECF0895CF92DF9291
:10271000EF92FF920F931F93CF93DF93CDB7DEB766
:1027200062970FB6F894DEBF0FBECDBF8C0185E077
:10273000F801DE011D9601900D928A95E1F7D8010E
:102740004C9111965C91119712966C911297139679
:10275000CD90DC9014973091A9017091AA018091DD
:10276000AC019091AD01009709F46BC17F3F19F462
:102770003F3F09F466C1E090AB01EE2009F4C0C010
:102780002091AE01C816D90628F0F601E81BF90B16
:10279000CF0104C0809590958C0D9D1DFF24F3946E
:1027A000883C910578F0F12C207F09F0C6C07C2D83
:1027B000D98AC88A89890E94DD1289EA91E00E943B
:1027C0007412B1C0822F807F09F046C0751314C007
:1027D000341312C0611110C02F7020612093AE011C
:1027E0000E941D1389EA91E00E9474128091AE014B
:1027F000D80115968C932EC0CD2819F15F3F11F4A6
:102800004F3FF9F0F62E61111CC0809177012091A5
:10281000780136E0821709F45AC090E0389FF00141
:10282000399FF00D1124E758FE4F7181571306C0F0
:102830007081471303C07281711103C001968770C4
:10284000E9CFF62E662309F418C18091AE018160AC
:102850008093AE01F12C11C1751308C0341306C06A
:10286000611104C08091AE01D801C3C04D875E875D
:102870008D859E856A8B0E94B3126A898823E1F157
:102880006623D1F12091AE01822F82958F7090E066
:10289000029774F08091A9019091AA0198878F8383
:1028A0001986DB86CA862C87CE0107960E94741291
:1028B00086E0F801A9EAB1E001900D928A95E1F76E
:1028C0000E942B130E941D13FF24F394D6C04D8742
:1028D0005E878D859E850E94E717292F22952F7090
:1028E00030E0223031050CF0BCC09F7009F0B6C05A
:1028F000805E883008F4C1C0C8010E947412E4CF21
:10290000C816D90608F453C0F601E81BF90BCF012D
:10291000883C910508F450C0F12C7C2DD98AC88AD6
:1029200089890E94DD12E9EAF1E086E0DF011D926B
:102930008A95E9F70E941D13A0C0751314C03413C3
:1029400012C0611110C08091AE01F8018583C801E9
:102950000E94741286E0E9EAF1E0DF011D928A9597
:10296000E9F7FE2C8AC04D875E878D859E856A8B30
:102970000E94B3126A89882309F4BECF662309F442
:10298000BBCF2091AE01822F82958F7090E002978D
:102990000CF48ECF8091A9019091AA019A8389832A
:1029A0001B82DD82CC822E83CE0101967FCF809563
:1029B00090958C0D9D1DACCFF62E662309F49CCF0F
:1029C00075132EC034132CC02091AE0120FD1FC002
:1029D000822F82958F70D9F0D80115962C93159778
:1029E0008F3049F08F5F982F9295907F822F8F7054
:1029F000892B15968C93C8010E94741286E0F80109
:102A0000A9EAB1E001900D928A95E1F793CF86E0B3
:102A1000F801A9EAB1E001900D928A95E1F72DC085
:102A20004D875E878D859E850E94B312811140CFB0
:102A30008091AE0181608093AE01C8010E94741242
:102A40001CC0662309F458CF4D875E878D859E850F
:102A50000E94B312882309F44FCF2ACF811148CFA7
:102A60000CC0243031050CF047CF9F7009F440CFE3
:102A7000F8019581907F09F03BCF8F2D62960FB6BC
:102A8000F894DEBF0FBECDBFDF91CF911F910F91A4
:102A9000FF90EF90DF90CF9008951F93CF93DF9337
:102AA000CDB7DEB72C970FB6F894DEBF0FBECDBF03
:102AB0004F83588769877A878B879C87CE010796D3
:102AC0000E948613882369F08F8198852A853B852B
:102AD000232BF1F19F3F09F063C08F3F09F060C0E5
:102AE00037C086E0FE013796DE01119601900D9207
:102AF0008A95E1F76F817885EA85FB85309741F10A
:102B00007F3F11F46F3F21F12091780130E0C9013E
:102B10000196877099274091770150E084179507B7
:102B200009F447C069837A83FD83EC8396E0929F22
:102B3000D001939FB00D1124A758BE4FFE013196CE
:102B400001900D929A95E1F7809378010E94FC1212
:102B500016E080917701909178018917C1F1189F53
:102B6000C001112487589E4F0E948613882379F153
:102B7000E09177011E9FF0011124E758FE4F40813C
:102B8000518162817381848195810E94EC128091D0
:102B9000770190E001968770992780937701D9CFCC
:102BA0004F81588569857A858B859C850E94EC12BA
:102BB000CFCF0E94AF121092780110927701E9EA0C
:102BC000F1E086E0DF011D928A95E9F7C1CF2C96EE
:102BD0000FB6F894DEBF0FBECDBFDF91CF911F912E
:102BE0000895EF92FF920F931F93CF93DF938C0181
:102BF000009709F46CC0F12CEE24E394E8012196CF
:102C0000F8018491843740F4843008F051C0813059
:102C100081F0823019F15BC0853709F444C0A8F116
:102C20009CE7980F903708F052C08F770E94F20F00
:102C300041C00E5F1F4FFE01C49180E28C0F8830AF
:102C400048F4C7708E2D01C0880FCA95EAF70E941C
:102C5000CD1814C08C2F0E94350F2DC00E5F1F4F52
:102C6000FE01C49180E28C0F883058F4C7708E2D1D
:102C700001C0880FCA95EAF70E94D3180E94F41881
:102C80001AC08C2F0E94F20F16C00E5F1F4FFE015C
:102C9000C491CC2381F08FE99FE00197F1F700C048
:102CA0000000C150F6CF0E5F1F4FFE01F49003C02D
:102CB0000E94350F8E018F2D882309F49FCFEFE9F5
:102CC000FFE03197F1F700C000008150F5CFDF91B0
:102CD000CF911F910F91FF90EF9008950895609309
:102CE000B3017093B4018093B5019093B6010C9435
:102CF0009B120F931F930091B3011091B401209187
:102D0000B5013091B601DC01CB01802B912BA22BB8
:102D1000B32B8093B3019093B401A093B501B0930A
:102D2000B6011F910F910C949B120F931F9300916A
:102D3000B3011091B4012091B5013091B601DC01CD
:102D4000CB0180239123A223B3238093B3019093DB
:102D5000B401A093B501B093B6011F910F910C94EB
:102D60009B120F931F930091B3011091B401209116
:102D7000B5013091B601DC01CB0180279127A22754
:102D8000B3278093B3019093B401A093B501B0939E
:102D9000B6011F910F910C949B121092AF011092EB
:102DA000B0011092B1011092B2010C949B1241E05B
:102DB00050E060E070E004C0440F551F661F771FAD
:102DC0008A95D2F74093AF015093B0016093B1015F
:102DD0007093B2010C949B1241E050E060E070E00F
:102DE00004C0440F551F661F771F8A95D2F7809144
:102DF000AF019091B001A091B101B091B201482B07
:102E0000592B6A2B7B2B4093AF015093B0016093F9
:102E1000B1017093B2010C949B1241E050E060E06C
:102E200070E004C0440F551F661F771F8A95D2F7C4
:102E300040955095609570958091AF019091B0014B
:102E4000A091B101B091B201482359236A237B2399
:102E50004093AF015093B0016093B1017093B20100
:102E60000C949B1241E050E060E070E004C0440F1D
:102E7000551F661F771F8A95D2F78091AF019091F9
:102E8000B001A091B101B091B201482759276A273A
:102E90007B274093AF015093B0016093B1017093D1
:102EA000B2010C949B120F931F930091AF011091EC
:102EB000B0012091B1013091B201DC01CB01802B36
:102EC000912BA22BB32B8093AF019093B001A093D1
:102ED000B101B093B2011F910F910C949B120F930B
:102EE0001F930091AF011091B0012091B101309179
:102EF000B201DC01CB0180239123A223B323809371
:102F0000AF019093B001A093B101B093B2011F91B2
:102F10000F910C949B120F931F930091AF0110918E
:102F2000B0012091B1013091B201DC01CB018027C9
:102F30009127A227B3278093AF019093B001A0936C
:102F4000B101B093B2011F910F910C949B1208959F
:102F5000CF92DF92EF92FF920F931F93CF93DF9365
:102F60008C01C090B301D090B401E090B501F09015
:102F7000B6018091AF019091B001A091B101B091E3
:102F8000B201C82AD92AEA2AFB2ACFE1D0E0D70128
:102F9000C6010C2E04C0B695A795979587950A94FF
:102FA000D2F780FF06C0B8018C2F0E9478050197E8
:102FB00021F4219760F780E001C08C2FDF91CF9141
:102FC0001F910F91FF90EF90DF90CF900895CF93D6
:102FD000DF93EC010E94A817BE010E947805DF91E3
:102FE000CF910895CB010E94E71708958091B70112
:102FF00085958595859508958091B7018770089589
:1030000098E0899F90011124262B2093B7010C94FE
:10301000EC162091B701809582238093B701982FF9
:10302000977069F430E0482F552747FD50952417D5
:10303000350729F08595859585950C940D1708958C
:103040009091B701977081E009F480E00895909124
:103050000B01992321F090910C01911109C020914D
:103060000D0130910E01F90132969FEF40E01FC033
:10307000982F9695969596959F3050F5E0910D0175
:10308000F0910E01E90FF11D877021E030E0A901F8
:1030900002C0440F551F8A95E2F7CA019181892B1E
:1030A000818308959F3F39F04F5F4E3041F0519139
:1030B0005813F8CF0DC05111F7CF942FF5CF9F3F84
:1030C00039F0F901E90FF11D97FDFA958283089512
:1030D000089590910B01992321F090910C01911189
:1030E00009C020910D0130910E01F9013296205F47
:1030F0003F4F1FC0982F9695969596959F30F0F468
:10310000E0910D01F0910E01E90FF11D877021E0B2
:1031100030E0A90102C0440F551F8A95E2F7CA01A9
:10312000809591818923818308953196E217F30771
:1031300029F090819813F9CF1082F7CF089581E09C
:1031400090E0E0910D01F0910E01E80FF91F10825F
:10315000019680319105A9F708959091CB01892BB3
:103160008093CB01089580959091CB018923809322
:10317000CB0108951092CB0108959091CA01892B3B
:103180008093CA01089580959091CA018923809304
:10319000CA0108951092CA0108959091C901892B1E
:1031A0008093C901089580959091C90189238093E6
:1031B000C90108951092C90108958093B801089536
:1031C0001092B801089580910D0190910E01FC01BB
:1031D00031969C01205F3F4F80E0919191118F5F6C
:1031E000E217F307D1F70895E0910D01F0910E0178
:1031F0008091CB018083E0910D01F0910E019081CF
:103200008091CA01892B8083E0910D01F0910E011C
:1032100090818091C901892B80838091B801882396
:1032200061F0E0910D01F0910E019081892B808376
:103230000E94E31881111092B80180910D019091C4
:103240000E010C940C0E20E0009739F0AC014150B7
:103250005109842395232F5FF7CF822F0895809102
:10326000DF01843021F11092CD0120E488E190E06B
:103270000FB6F894A895809360000FBE209360006D
:1032800080E00E94120683B7817F846083BF83B78A
:10329000816083BF7894889583B78E7F83BF88E1F0
:1032A0000FB6F89480936000109260000FBE0895EE
:1032B000089508950E9458190E946D060E94591998
:1032C0000E94F20691E0811101C090E0892F0895DB
:1032D0000E94AF120E94000E0C9412061F920F92D1
:1032E0000FB60F9211248F939F93AF93BF9380914A
:1032F000CD01811113C08091CE019091CF01A09199
:10330000D001B091D1014196A11DB11D8093CE0194
:103310009093CF01A093D001B093D101BF91AF9111
:103320009F918F910F900FBE0F901F90189582E084
:1033300084BD93E095BD9AEF97BD80936E0008958C
:103340002FB7F8948091CE019091CF01A091D00138
:10335000B091D1012FBF0895CF92DF92EF92FF92EB
:103360000F931F932FB7F8944091CE015091CF0146
:103370006091D0017091D1012FBF6A017B01EE24D1
:10338000FF248C0120E030E0C016D106E206F306EF
:1033900010F4415051099A01281B390BC9011F91A2
:1033A0000F91FF90EF90DF90CF9008951F920F92B2
:1033B0000FB60F9211248F939F93AF93BF93809179
:1033C000CE019091CF01A091D001B091D101019691
:1033D000A11DB11D8093CE019093CF01A093D00188
:1033E000B093D101BF91AF919F918F910F900FBE7C
:1033F0000F901F9018950E94FD0AF8942FEF87EA0E
:1034000091E6215080409040E1F700C0000087E045
:1034100090EBDC018093E9019093EA01A093EB012A
:10342000B093EC019CE088E10FB6F894A8958093E6
:1034300060000FBE90936000FFCF0E94521A81116E
:1034400002C00E94381A0E945D1A8093CC010E942B
:10345000651A8093E80187FB882780F980930C0127
:103460000E94611A682F70E080E090E00C946F1663
:103470006DEE7EEF80E090E00E940A1E60E082E048
:1034800090E00E94F81D60E083E090E00E94F81D4B
:1034900060E084E090E00E94F81D60E085E090E04C
:1034A0000C94F81D80E090E00E94F21D21E08D3E1A
:1034B0009E4F09F020E0822F089582E090E00C9466
:1034C000EA1D83E090E00C94EA1D84E090E00C9407
:1034D000EA1D682F84E090E00C94F81D8091D401DF
:1034E00080FF0BC06091120185E0689FB00111243C
:1034F00075956795759567952BC081FF09C060919B
:10350000120185E0689FB00111247595679520C070
:1035100082FF07C06091120185E0689FB00111240D
:1035200017C09091D5019923D1F0609111019617A0
:1035300088F72091120185E0289F90011124929F25
:10354000A001939F500D112470E0CA010E94BC1D80
:103550006038710540F46115710539F002C065E00D
:1035600070E0862F08958FE7089581E00895809197
:10357000D40180FF08C06091100170E075956795D7
:103580007595679521C081FF06C06091100170E0BC
:103590007595679519C082FF04C06091100170E0B5
:1035A00010C09091D5019923C1F060910F01961739
:1035B000A0F780911001899FC001112470E00E9442
:1035C000BC1D6038710528F46115710521F0862F46
:1035D00008958FE7089581E0089561E070E0F4CFE9
:1035E000803F21F40E946E1A819504C0813F29F426
:1035F0000E946E1A8093D8010895823F21F40E94A0
:103600006E1A819504C0833F29F40E946E1A80933C
:10361000D7010895893F19F40E94B71A05C08A3F5F
:1036200031F40E94B71A81958093D90108958B3F98
:1036300021F40E94B71A819504C08C3F29F40E949E
:10364000B71A8093DA010895843F21F48091D6015E
:10365000816017C0853F21F48091D601826011C03E
:10366000863F21F48091D60184600BC0873F21F40E
:103670008091D601886005C0883F31F48091D601E1
:1036800080618093D60108958D3F21F48091D4010B
:1036900081600BC08E3F21F48091D401826005C00F
:1036A0008F3F29F48091D40184608093D4010895E0
:1036B000803F39F48091D80187FF6CC01092D80107
:1036C00069C0813F29F48091D8011816BCF362C00B
:1036D0009091D701823F29F497FF5CC01092D701E7
:1036E00059C0833F19F41916CCF354C0893F41F4F3
:1036F0008091D90118160CF04DC01092D9014AC022
:103700008A3F29F48091D90187FF44C0F6CF8B3FCF
:1037100039F48091DA0187FF3DC01092DA013AC096
:103720008C3F29F48091DA011816BCF333C0843F32
:1037300021F48091D6018E7F17C0853F21F48091BE
:10374000D6018D7F11C0863F21F48091D6018B7FF9
:103750000BC0873F21F48091D601877F05C0883F49
:1037600031F48091D6018F7E8093D60113C08D3FB6
:1037700021F48091D4018E7F0BC08E3F21F4809183
:10378000D4018D7F05C08F3F29F48091D4018B7FB8
:103790008093D4018091D70181110EC08091D8010E
:1037A00081110AC08091D901811106C08091DA018E
:1037B000811102C01092D501089586ED91E00E941A
:1037C000170E0E94A0199093D3018093D2010895FF
:1037D0001F93CF93DF938091D2019091D3010E94E8
:1037E000AC19AC019091D501992321F020911301DE
:1037F00030E006C0209114018AE0289F9001112436
:103800004217530708F486C08091D701C091D801B0
:10381000D091D9011091DA01811107C0C11176C090
:10382000D11174C0111172C075C09F3F19F09F5F14
:103830009093D501181624F40E946E1A8093D70134
:103840008091D70187FF05C00E946E1A81958093F1
:10385000D7011C1624F40E946E1A8093D80180911F
:10386000D80187FF05C00E946E1A81958093D80108
:103870006091D701662339F1C091D801CC2319F1A9
:10388000772767FD7095872F972F0E94CD1C23E324
:1038900033E343E35FE30E94311D0E949A1C60936F
:1038A000D7016C2F772767FD7095872F972F0E9480
:1038B000CD1C23E333E343E35FE30E94311D0E9409
:1038C0009A1C6093D8011D1624F40E94B71A8093A5
:1038D000D9018091D90187FF05C00E94B71A81954F
:1038E0008093D901111624F40E94B71A8093DA014B
:1038F0008091DA0187FF05C00E94B71A81958093F5
:10390000DA01DF91CF911F910C94DD1B9F3F09F0ED
:103910008ECF96CFDF91CF911F910895E6EDF1E024
:1039200085E0DF011D928A95E9F71092D50110928A
:10393000D401089504D06894B1118DC0089570D059
:1039400088F09F5790F0B92F9927B751A0F0D1F088
:10395000660F771F881F991F1AF0BA95C9F712C012
:10396000B13081F077D0B1E0089574C0672F782F1F
:103970008827B85F39F0B93FCCF38695779567957E
:10398000B395D9F73EF490958095709561957F4FEA
:103990008F4F9F4F0895E89409C097FB3EF4909590
:1039A0008095709561957F4F8F4F9F4F9923A9F018
:1039B000F92F96E9BB279395F695879577956795A7
:1039C000B795F111F8CFFAF4BB0F11F460FF1BC0EB
:1039D0006F5F7F4F8F4F9F4F16C0882311F096E97E
:1039E00011C0772321F09EE8872F762F05C066232C
:1039F00071F096E8862F70E060E02AF09A95660FE5
:103A0000771F881FDAF7880F9695879597F908959D
:103A100057FD9058440F551F59F05F3F71F047957F
:103A2000880F97FB991F61F09F3F79F08795089564
:103A3000121613061406551FF2CF4695F1DF08C083
:103A4000161617061806991FF1CF869571056105A0
:103A500008940895E894BB2766277727CB0197F948
:103A600008950BD078C069D028F06ED018F0952357
:103A700009F05AC05FC01124EECFCADFA0F3959FB2
:103A8000D1F3950F50E0551F629FF001729FBB2745
:103A9000F00DB11D639FAA27F00DB11DAA1F649FF1
:103AA0006627B00DA11D661F829F2227B00DA11DA4
:103AB000621F739FB00DA11D621F839FA00D611D2A
:103AC000221F749F3327A00D611D231F849F600D4B
:103AD000211D822F762F6A2F11249F5750408AF084
:103AE000E1F088234AF0EE0FFF1FBB1F661F771F10
:103AF000881F91505040A9F79E3F510570F014C0A7
:103B0000AACF5F3FECF3983EDCF3869577956795F7
:103B1000B795F795E7959F5FC1F7FE2B880F911D2D
:103B20009695879597F9089597F99F6780E870E0D3
:103B300060E008959FEF80EC089500240A94161623
:103B4000170618060906089500240A94121613068B
:103B5000140605060895092E0394000C11F4882319
:103B600052F0BB0F40F4BF2B11F460FF04C06F5F35
:103B70007F4F8F4F9F4F089597FB072E16F40094A9
:103B800007D077FD09D00E94D61D07FC05D03EF472
:103B9000909581959F4F0895709561957F4F0895F9
:103BA000EE0FFF1F0590F491E02D0994AA1BBB1B9B
:103BB00051E107C0AA1FBB1FA617B70710F0A61B2D
:103BC000B70B881F991F5A95A9F780959095BC014E
:103BD000CD010895F999FECF92BD81BDF89A99273C
:103BE00080B50895A8E1B0E042E050E00C94121EC8
:103BF000262FF999FECF92BD81BDF89A019700B4A6
:103C0000021639F01FBA20BD0FB6F894FA9AF99A45
:103C10000FBE08950196272F0E94F91D0C94F81DE0
:103C2000DC01CB01FC01F999FECF06C0F2BDE1BD7C
:103C3000F89A319600B40D9241505040B8F708956B
:043C4000F894FFCF26
:103C4400FF0807960773073F070B070101B901280F
:103C540008140A321E1F0F03764F5F6F7F496943B2
:103C64007909595363404D3639C10374033E030542
:0A3C7400039802B102CA02E3020045
:00000001FF

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
compiled.hex

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -154,7 +154,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | |Voice-|Voice+|Mus on|Musoff| | | | | | | |
* | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
@@ -194,92 +194,92 @@ void persistant_default_layer_set(uint16_t default_layer) {
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
switch(id) {
case _QWERTY:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
#endif
persistant_default_layer_set(1UL<<_QWERTY);
}
break;
case _COLEMAK:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_colemak, false, 0);
#endif
persistant_default_layer_set(1UL<<_COLEMAK);
}
break;
case _DVORAK:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
#endif
persistant_default_layer_set(1UL<<_DVORAK);
}
break;
case _LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
break;
case _RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
break;
case M_BL:
if (record->event.pressed) {
register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
} else {
unregister_code(KC_RSFT);
}
break;
case 12:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
stop_all_notes();
PLAY_NOTE_ARRAY(tone_plover, false, 0);
#endif
layer_off(_RAISE);
layer_off(_LOWER);
layer_off(_ADJUST);
layer_on(_PLOVER);
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
keymap_config.raw = eeconfig_read_keymap();
keymap_config.nkro = 1;
eeconfig_update_keymap(keymap_config.raw);
}
break;
case 13:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
#endif
layer_off(_PLOVER);
}
break;
case 14:
if (record->event.pressed) {
return MACRO( D(E), D(R), D(F), D(V), D(O), D(L), U(E), U(R), U(F), U(V), U(O), U(L), END );
}
break;
switch(id) {
case _QWERTY:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
#endif
persistant_default_layer_set(1UL<<_QWERTY);
}
return MACRO_NONE;
break;
case _COLEMAK:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_colemak, false, 0);
#endif
persistant_default_layer_set(1UL<<_COLEMAK);
}
break;
case _DVORAK:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
#endif
persistant_default_layer_set(1UL<<_DVORAK);
}
break;
case _LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
break;
case _RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
break;
case M_BL:
if (record->event.pressed) {
register_code(KC_RSFT);
#ifdef BACKLIGHT_ENABLE
backlight_step();
#endif
} else {
unregister_code(KC_RSFT);
}
break;
case 12:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
stop_all_notes();
PLAY_NOTE_ARRAY(tone_plover, false, 0);
#endif
layer_off(_RAISE);
layer_off(_LOWER);
layer_off(_ADJUST);
layer_on(_PLOVER);
if (!eeconfig_is_enabled()) {
eeconfig_init();
}
keymap_config.raw = eeconfig_read_keymap();
keymap_config.nkro = 1;
eeconfig_update_keymap(keymap_config.raw);
}
break;
case 13:
if (record->event.pressed) {
#ifdef AUDIO_ENABLE
PLAY_NOTE_ARRAY(tone_plover_gb, false, 0);
#endif
layer_off(_PLOVER);
}
break;
case 14:
if (record->event.pressed) {
return MACRO( D(E), D(R), D(F), D(V), D(O), D(L), U(E), U(R), U(F), U(V), U(O), U(L), END );
}
break;
}
return MACRO_NONE;
};
void matrix_init_user(void) {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,15 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#include "../../config.h"
/* ws2812 RGB LED */
#define ws2812_PORTREG PORTD
#define ws2812_DDRREG DDRD
#define ws2812_pin PD1
#define RGBLED_NUM 28 // Number of LEDs
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
#endif

View File

@@ -1,302 +1,9 @@
#include "planck.h"
__attribute__ ((weak))
void matrix_init_user(void) {}
__attribute__ ((weak))
void matrix_scan_user(void) {}
__attribute__ ((weak))
bool process_action_user(keyrecord_t *record) {
return true;
}
__attribute__ ((weak))
void led_set_user(uint8_t usb_led) {}
void matrix_init_kb(void) {
#ifdef BACKLIGHT_ENABLE
backlight_init_ports();
#endif
// Turn status LED on
DDRE |= (1<<6);
PORTE |= (1<<6);
matrix_init_user();
}
void matrix_scan_kb(void) {
matrix_scan_user();
}
bool process_action_kb(keyrecord_t *record) {
return process_action_user(record);
}
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
led_set_user(usb_led);
}
#ifdef BACKLIGHT_ENABLE
#define CHANNEL OCR1C
#define BREATHING_NO_HALT 0
#define BREATHING_HALT_OFF 1
#define BREATHING_HALT_ON 2
static uint8_t breath_intensity;
static uint8_t breath_speed;
static uint16_t breathing_index;
static uint8_t breathing_halt;
void backlight_init_ports()
{
// Setup PB7 as output and output low.
DDRB |= (1<<7);
PORTB &= ~(1<<7);
// Use full 16-bit resolution.
ICR1 = 0xFFFF;
// I could write a wall of text here to explain... but TL;DW
// Go read the ATmega32u4 datasheet.
// And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
// Pin PB7 = OCR1C (Timer 1, Channel C)
// Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
// (i.e. start high, go low when counter matches.)
// WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
// Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
backlight_init();
breathing_defaults();
}
void backlight_set(uint8_t level)
{
// Prevent backlight blink on lowest level
PORTB &= ~(_BV(PORTB7));
if ( level == 0 )
{
// Turn off PWM control on PB7, revert to output low.
TCCR1A &= ~(_BV(COM1C1));
CHANNEL = 0x0;
}
else if ( level == BACKLIGHT_LEVELS )
{
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF;
}
else
{
// Turn on PWM control of PB7
TCCR1A |= _BV(COM1C1);
// Set the brightness
CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
}
breathing_intensity_default();
}
void breathing_enable(void)
{
if (get_backlight_level() == 0)
{
breathing_index = 0;
}
else
{
// Set breathing_index to be at the midpoint (brightest point)
breathing_index = 0x20 << breath_speed;
}
breathing_halt = BREATHING_NO_HALT;
// Enable breathing interrupt
TIMSK1 |= _BV(OCIE1A);
}
void breathing_pulse(void)
{
if (get_backlight_level() == 0)
{
breathing_index = 0;
}
else
{
// Set breathing_index to be at the midpoint + 1 (brightest point)
breathing_index = 0x21 << breath_speed;
}
breathing_halt = BREATHING_HALT_ON;
// Enable breathing interrupt
TIMSK1 |= _BV(OCIE1A);
}
void breathing_disable(void)
{
// Disable breathing interrupt
TIMSK1 &= ~_BV(OCIE1A);
backlight_set(get_backlight_level());
}
void breathing_self_disable(void)
{
if (get_backlight_level() == 0)
{
breathing_halt = BREATHING_HALT_OFF;
}
else
{
breathing_halt = BREATHING_HALT_ON;
}
//backlight_set(get_backlight_level());
}
void breathing_toggle(void)
{
if (!is_breathing())
{
if (get_backlight_level() == 0)
{
breathing_index = 0;
}
else
{
// Set breathing_index to be at the midpoint + 1 (brightest point)
breathing_index = 0x21 << breath_speed;
}
breathing_halt = BREATHING_NO_HALT;
}
// Toggle breathing interrupt
TIMSK1 ^= _BV(OCIE1A);
// Restore backlight level
if (!is_breathing())
{
backlight_set(get_backlight_level());
}
}
bool is_breathing(void)
{
return (TIMSK1 && _BV(OCIE1A));
}
void breathing_intensity_default(void)
{
//breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS);
breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2));
}
void breathing_intensity_set(uint8_t value)
{
breath_intensity = value;
}
void breathing_speed_default(void)
{
breath_speed = 4;
}
void breathing_speed_set(uint8_t value)
{
bool is_breathing_now = is_breathing();
uint8_t old_breath_speed = breath_speed;
if (is_breathing_now)
{
// Disable breathing interrupt
TIMSK1 &= ~_BV(OCIE1A);
}
breath_speed = value;
if (is_breathing_now)
{
// Adjust index to account for new speed
breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed;
// Enable breathing interrupt
TIMSK1 |= _BV(OCIE1A);
}
}
void breathing_speed_inc(uint8_t value)
{
if ((uint16_t)(breath_speed - value) > 10 )
{
breathing_speed_set(0);
}
else
{
breathing_speed_set(breath_speed - value);
}
}
void breathing_speed_dec(uint8_t value)
{
if ((uint16_t)(breath_speed + value) > 10 )
{
breathing_speed_set(10);
}
else
{
breathing_speed_set(breath_speed + value);
}
}
void breathing_defaults(void)
{
breathing_intensity_default();
breathing_speed_default();
breathing_halt = BREATHING_NO_HALT;
}
/* Breathing Sleep LED brighness(PWM On period) table
* (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle
*
* http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63
* (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i }
*/
static const uint8_t breathing_table[64] PROGMEM = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10,
15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252,
255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23,
15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
ISR(TIMER1_COMPA_vect)
{
// CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity;
uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F;
if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F)))
{
// Disable breathing interrupt
TIMSK1 &= ~_BV(OCIE1A);
}
CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity;
}
#endif
}

View File

@@ -2,7 +2,6 @@
#define PLANCK_H
#include "quantum.h"
#include <avr/interrupt.h>
#define PLANCK_MIT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
@@ -30,26 +29,4 @@
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b } \
}
void matrix_init_user(void);
void matrix_scan_user(void);
bool process_action_user(keyrecord_t *record);
void led_set_user(uint8_t usb_led);
void backlight_init_ports(void);
void breathing_enable(void);
void breathing_pulse(void);
void breathing_disable(void);
void breathing_self_disable(void);
void breathing_toggle(void);
bool is_breathing(void);
void breathing_defaults(void);
void breathing_intensity_default(void);
void breathing_speed_default(void);
void breathing_speed_set(uint8_t value);
void breathing_speed_inc(uint8_t value);
void breathing_speed_dec(uint8_t value);
#endif

View File

@@ -4,7 +4,7 @@ DIY/Assembled compact ortholinear 40% keyboard by [Ortholinear Keyboards](http:/
## Quantum MK Firmware
For the full Quantum feature list, see [the parent README.md](/README.md).
For the full Quantum feature list, see [the parent readme.md](/readme.md).
## Building
@@ -16,7 +16,7 @@ Depending on which keymap you would like to use, you will have to compile slight
To build with the default keymap, simply run `make`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top README.md) and existent keymap files.
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
```