From 651cce696a517290c13a01115bb2294f44677181 Mon Sep 17 00:00:00 2001 From: Portisch Date: Wed, 30 Jan 2019 16:00:36 +0100 Subject: [PATCH] fix 0xB0/0xB1 high/low bucket marking improved filtering of 0xB1 sniffing --- BitBucketConverter.py | 24 +- .../RF-Bridge-EFM8BB1.hex | 866 +++++++++--------- inc/RF_Handling.h | 3 +- src/RF_Bridge_main.c | 6 +- src/RF_Handling.c | 110 ++- 5 files changed, 520 insertions(+), 489 deletions(-) diff --git a/BitBucketConverter.py b/BitBucketConverter.py index da40744..be97958 100644 --- a/BitBucketConverter.py +++ b/BitBucketConverter.py @@ -82,7 +82,7 @@ def sendCommand(szOutFinal, mydevice): #print(body) def DrawImage(buckets, data): - lines = [] + lines = {'time': [], 'high': []} font = ImageFont.load_default() Bucket_High_Low_Marking = False repeats = 2 @@ -98,13 +98,13 @@ def DrawImage(buckets, data): break; for i in range(0, len(data)): - if (data[i:i+1] != 'F'): - lines.append(buckets[int(data[i:i+1], 16) & 0x07]) + lines['time'].append(buckets[int(data[i:i+1], 16) & 0x07]) + lines['high'].append(int(data[i:i+1], 16) >> 3) f = 0.03 import math - picture = Image.new("L", (int(math.ceil(sum(lines * repeats) * f)) + 10, 150)) + picture = Image.new("L", (int(math.ceil(sum(lines['time'] * repeats) * f)) + 10, 150)) draw = ImageDraw.Draw(picture) draw.rectangle(((0, 0), (picture.width - 1, picture.height - 1)), fill="white", outline="black") @@ -121,9 +121,12 @@ def DrawImage(buckets, data): for a in range(0, repeats): y = inverted - for i in range(len(lines)): + for i in range(len(lines['time'])): lastX = x - x += lines[i] + x += lines['time'][i] + + if Bucket_High_Low_Marking: + y = not lines['high'][i] # horizontal line draw.line(((lastX * f, y * 50 + 25), (x * f, y * 50 + 25)), fill="black") @@ -134,10 +137,10 @@ def DrawImage(buckets, data): draw.line(((lastX * f, picture.height - 70), (lastX * f, picture.height - 30)), fill="grey") - img_txt = Image.new("L", font.getsize(str(lines[i]))) + img_txt = Image.new("L", font.getsize(str(lines['time'][i]))) draw_txt = ImageDraw.Draw(img_txt) draw_txt.rectangle(((0, 0), (img_txt.width, img_txt.height)), fill="white") - draw_txt.text((0,0), str(lines[i]), font=font, fill="black") + draw_txt.text((0,0), str(lines['time'][i]), font=font, fill="black") picture.paste(img_txt.rotate(90, expand=1), (int(math.ceil(lastX * f)) + 2, 10 + 50 + 25)) lastY = y y = not y @@ -253,7 +256,8 @@ def main(szInpStr, repVal): szOutAux += szInpStr[6+i*4:10+i*4] + " " arrBuckets.append(int(szInpStr[6+i*4:10+i*4], 16)) - syncData = findSyncPattern(szInpStr[10+i*4:-2]) + #syncData = findSyncPattern(szInpStr[10+i*4:-2]) + syncData = None if (syncData != None): szOutAux += syncData @@ -307,7 +311,7 @@ def parse_file(fn): parser.add_option("-e", "--dev", action="store", type="string", dest="device", help="device (ip or hostname) to send RfRaw B0 command") parser.add_option("-r", "--repeat", action="store", - dest="repeat", default=4, help="number of times to repeat") + dest="repeat", default=8, help="number of times to repeat") parser.add_option("-d", "--debug", action="store_true", dest="debug", default=False, help="show debug info") parser.add_option("-v", "--verbose", action="store_true", diff --git a/Keil 8051 v9.53 - Release/RF-Bridge-EFM8BB1.hex b/Keil 8051 v9.53 - Release/RF-Bridge-EFM8BB1.hex index f2a3689..37efde9 100644 --- a/Keil 8051 v9.53 - Release/RF-Bridge-EFM8BB1.hex +++ b/Keil 8051 v9.53 - Release/RF-Bridge-EFM8BB1.hex @@ -1,37 +1,37 @@ :020000040000FA -:100000000211A9A2029290A2029280AD41AC407F5F +:10000000021302A2029290A2029280AD41AC407F04 :100010000A7E0012002E12001DA202B322E59120DA -:10002000E2FB220211197597A522220214D68E42F4 -:100030008F438C448D451216A1121940E54524BF0B +:10002000E2FB220212727597A522220215B78E42B8 +:100030008F438C448D451217341219E0E54524BFD7 :100040009000E9F0E54434FF9000E8F09000E4E52A -:1000500042F0A3E543F04391042222021238121920 -:10006000D453D87853DAFE1219A5E4900087F02211 -:10007000D2DE22021529121872C290C296C280E402 -:10008000FBFD7F1012198C12053174A4F0D2AF124F -:1000900017BCD2969000EDE004F070069000ECE002 +:1000500042F0A3E543F04391042222021391121AC5 +:100060007453D87853DAFE121A45E4900087F022D0 +:10007000D2DE2202160A121935C290C296C280E45C +:10008000FBFD7F10121A2C12053874A4F0D2AF12A7 +:10009000184FD2969000EDE004F070069000ECE06E :1000A00004F09000ECE0B427E9A3E0B410E4C296B9 -:1000B0001200263003091217618E228F23800675E5 +:1000B0001200263003091217F48E228F2380067552 :1000C0002201752300E5237004E522640170469047 -:1000D00000DFE070061217BD0202959000ECE47597 -:1000E000F001120665FED3E5F09410EE942740026D +:1000D00000DFE070061218500202959000ECE47503 +:1000E000F00112066CFED3E5F09410EE9427400266 :1000F000D296D39000EDE094309000ECE0947550EF :1001000003020295E4F0A3F09000DFF090009AF073 -:10011000C2960202951217BC9000DFE014602A1408 +:10011000C29602029512184F9000DFE014602A1474 :1001200070030202591470030202171470030202D2 :100130003024046003020295E52364AA60030202EE :10014000959000DF04F0020295E52390009AF0906C -:1001500000DF7402F0E5231207AC0201A0017FA1C9 +:1001500000DF7402F0E5231207B30201A0017FA1C2 :10016000018BA501A9A601BDA701C6A801DDA901B2 :10017000CCB001D5B1019DC00295FF0000020C1268 -:10018000051EE490008AF07FA1806512054E900064 -:10019000EB7408F0E4F52575240902029512054E6A +:100180000525E490008AF07FA18065120555900056 +:10019000EB7408F0E4F52575240902029512055563 :1001A000E4F52575240202029590008A7401F07F1F -:1001B000A612161690007974A6F002029512053167 +:1001B000A61216A990007974A6F0020295120538CD :1001C00074A4F00202959000EB7408F09000DF74C4 -:1001D00003F00202957FB112056C02029512051E12 +:1001D00003F00202957FB112057302029512052504 :1001E00090008AE09000EAF090008A7401F07FA904 -:1001F00012056C7D307C757F017E00121849020269 -:1002000095120575900079EFF0E48005E490009A6E +:1001F0001205737D307C757F017E0012190C02029E +:100200009512057C900079EFF0E48005E490009A67 :10021000F09000DFF0807EE4F525E523F524E52469 :10022000D39400402C12005E9000DF7404F08065CF :1002300074032525F582E43400F583E523F00525D4 @@ -39,420 +39,430 @@ :10025000709000DF7402F0803CE5236455703690A6 :1002600000DFF0C20390009AE02460601B24FC6071 :100270001224FE600E14600B24F760101460042436 -:100280001070127FA0121927D2038009900004E099 -:10029000049000EBF090009AE01207AC02BEA103BC +:100280001070127FA01219C7D2038009900004E0F9 +:10029000049000EBF090009AE01207B302BEA103B5 :1002A00033A40377A50333A6044CA802BEA9048196 -:1002B000B004E3B10423C00447FF000000B0900085 -:1002C00086E030E73F7DC87C0012053F90009AE051 -:1002D0002457600E2408701F1205757FA312165C48 +:1002B000B004EAB10423C00447FF000000B090007E +:1002C00086E030E73F7DC87C0012054690009AE04A +:1002D0002457600E2408701F12057C7FA31216EFAE :1002E00080159000EAE090008AF0900079E0FF121B -:1002F00016167FAB12057EE4900086F043DA01D239 -:10030000030200B012199D50207DE87C0312053FC6 +:1002F00016A97FAB120585E4900086F043DA01D29F +:10030000030200B0121A3D50207DE87C031205461E :1003100090009AE02457600C240860030200B07F2C -:10032000A20204D57FAA0204D51205584003020098 +:10032000A20204DC7FAA0204DC12055F4003020083 :10033000B0802E900086E030E71F90009AE0245AAB -:10034000600F240260030204EF7FA412165C020413 -:10035000EF7FA612057E0204EF120558400302004B -:10036000B01217A1C006C0071217B09200D007D074 -:10037000061207FE0200B09000DFE060030200B04A -:100380001217C47003020416240560030200B012A1 -:100390000562900005E0FFA3E090008CCFF0A3EF92 +:10034000600F240260030204F67FA41216EF020479 +:10035000F67FA61205850204F612055F400302002F +:10036000B0121834C006C0071218439200D007D04C +:10037000061208050200B09000DFE060030200B042 +:100380001218577003020416240560030200B0120D +:100390000569900005E0FFA3E090008CCFF0A3EF8B :1003A000F0900007E0FFA3E090008ECFF0A3EFF005 :1003B000900003E0FFA3E0900090CFF0A3EFF09057 -:1003C0001A52E493FD121797752DFF8A2EF52F9080 -:1003D0001A55E493F5301217977531FF8A32F533C9 -:1003E000901A58E493F5341217977535FF8A36F54D -:1003F00037901A5BE493F538A3E493F539A3E493BB +:1003C0001AF2E493FD12182A752DFF8A2EF52F904C +:1003D0001AF5E493F53012182A7531FF8A32F53395 +:1003E000901AF8E493F53412182A7535FF8A36F519 +:1003F00037901AFBE493F538A3E493F539A3E4931B :1004000024FF9200753A00753B097B017A00798CD4 -:10041000120FB60200B09000EBE07063C2807FA0C4 -:100420000204D59000DFE060030200B0900003E01A -:10043000FCA3E0FD7F017E00121849D29612001D38 -:10044000C2967FA00204D57F030204D59000DFE0AE -:1004500060030200B01217C4601924056003020093 -:10046000B0120562900003E0FF7C007D0412106F63 -:100470000200B09000EBE07006C2807FA080568042 -:100480005A9000DFE060030200B01217C4603C2401 -:100490000560030200B09000EBE014F012005E90E3 -:1004A0000003E0FF25E02405F582E43400AD82FC82 -:1004B000900005E0F97A007B00EF25E0FFE52424B9 -:1004C000FEC39FF52B12157C0200B09000EBE0708C -:1004D0000AC2807FA012191A0200B0E4900087F0CF -:1004E0000200B0900086E030E7107FB1121338E4CC -:1004F000900086F043DA010200B07B017A0079EEC9 -:100500001216E540030200B01217A1C006C0071280 -:1005100017B09200D007D006120E0D0200B07D3247 -:100520007C007F017E00121849D29612001DC296EF -:1005300022E490008AF07FA4121616900079227FA0 -:10054000017E00121849D29612001DC29622120096 -:100550005E9000DF7404F0227B017A0079EE1216BF -:10056000E5229000EBE014F012005E2212161690C5 -:100570000079EFF022900079E0FF12161622900029 -:1005800086E0547FFD1215CA22BB010CE58229F5D5 -:1005900082E5833AF583E0225006E92582F8E622D7 -:1005A000BBFE06E92582F8E222E58229F582E58391 -:1005B0003AF583E49322BB010689828A83F02250B4 -:1005C00002F722BBFE01F322EF8DF0A4A8F0CF8C3E -:1005D000F0A428CE8DF0A42EFE22BC000BBE002974 -:1005E000EF8DF084FFADF022E4CCF875F008EF2F2A -:1005F000FFEE33FEEC33FCEE9DEC984005FCEE9DE7 -:10060000FE0FD5F0E9E4CEFD22EDF8F5F0EE842002 -:10061000D21CFEADF075F008EF2FFFED33FD400763 -:10062000985006D5F0F222C398FD0FD5F0EA22C209 -:10063000D5EC30E709B2D5E4C39DFDE49CFCEE3077 -:10064000E715B2D5E4C39FFFE49EFE1205DAC3E4CA -:100650009DFDE49CFC80031205DA30D507C3E49FBE -:10066000FFE49EFE22C5F0F8A3E028F0C5F0F8E50F -:1006700082158270021583E038F022BB0110E582FA -:1006800029F582E5833AF583E0F5F0A3E0225009ED -:10069000E92582F886F008E622BBFE0AE92582F801 -:1006A000E2F5F008E222E5832AF583E993F5F0A369 -:1006B000E99322BB010A89828A83F0E5F0A3F02244 -:1006C0005006F709A7F01922BBFE06F3E5F009F37F -:1006D000192275F008758200EF2FFFEE33FECD333F -:1006E000CDCC33CCC58233C5829BED9AEC99E582A3 -:1006F00098400CF582EE9BFEED9AFDEC99FC0FD52F -:10070000F0D6E4CEFBE4CDFAE4CCF9A88222B8001E -:10071000C1B90059BA002DEC8BF084CFCECDFCE5E9 -:10072000F0CBF97818EF2FFFEE33FEED33FDEC330D -:10073000FCEB33FB10D703994004EB99FB0FD8E592 -:10074000E4F9FA227818EF2FFFEE33FEED33FDECDB -:1007500033FCC933C910D7059BE99A4007EC9BFCD1 -:10076000E99AF90FD8E0E4C9FAE4CCFB2275F0105D -:10077000EF2FFFEE33FEED33FDCC33CCC833C81082 -:10078000D7079BEC9AE899400AED9BFDEC9AFCE8B0 -:1007900099F80FD5F0DAE4CDFBE4CCFAE4C8F922FD -:1007A000A42582F582E5F03583F58322D083D082BB -:1007B000F8E4937012740193700DA3A393F874017D -:1007C00093F5828883E4737402936860EFA3A3A314 -:1007D00080DFEF4E6012EF60010EEDBB010B8982EE -:1007E0008A83F0A3DFFCDEFA2289F05007F709DFE5 -:1007F000FCA9F022BBFEFCF309DFFCA9F0228E2647 -:100800008F27E4F528C3E5279464E5269400501E5D -:10081000E4F528E528120C51F8E4F608F6E528126C -:100820000C92E4F60528E528B408E8C2902290006E -:100830008AE01470030208E6046003020A40786745 -:10084000E6C4540F704CD3E5279494E526941150D8 -:1008500003020A40300003020A40120C9A18F6ED17 -:1008600008F618120C9A18F6ED08F6120D60AE266E -:10087000FF7C007D1F1205DA90008CEEF0A3EFF0F4 -:100880007C007D031205C8A3EEF0A3EFF0A3120DC8 -:1008900063227867E6C4540F64026003020A40A230 -:1008A0000033FF901B36E4936FC36001D392018540 -:1008B000262A85272B752C01752D00752E8C901BF3 -:1008C0002F120C84120DF9901B31E493F532A31210 -:1008D0000C84120E03901B34E493F536A3E493F5D5 -:1008E00037E4FF020A41E4F528E528120C51F9E744 -:1008F000C4540F7044120CB0120D2CD3940140114B -:10090000120CB0120D38FFA200E4336F7003020A1C -:1009100034120C75F5828E83C083C082120CB01223 -:100920000DB0120C82F5828E83E493D082D08312B4 -:10093000142A4003020A34805CE528120C51F9E7BE -:10094000C4540F7E00540FFF120CB0120D2CF9FD91 -:10095000C3EF9DEE94005067120CB02429F582E499 -:10096000341BF583E493FC740193F5828C83C0837C -:10097000C082120CB0120DB0F583E493FC740193A5 -:100980002FF582EE3CF583E493D082D08312142AB3 -:10099000501A120D60E528120C51F8120C9AFEED57 -:1009A000FFE528120C51120DE8020A34E528120C5A -:1009B00051F8E4F608F6E528120C92E4F68075E5A5 -:1009C00028120C51F8E6FEEEC4540FFFE96F7001D7 -:1009D000E47061120CB0120D38FFA200E4336FC353 -:1009E0006001D3920185262A85272B120C75AA0651 -:1009F000752CFF8A2DF52E120CB0242FF582E434CD -:100A00001B120C82120DF9120CB0120DB8F5321235 -:100A10000CB02432F582E4341B120C82120E031245 -:100A20000CB0120DC4F536120CB0120DD0F537AF64 -:100A300028120A410528E528C3940850030208E952 -:100A4000228F29E4F538EF120C92E6701A90008B91 -:100A50007408F07E007F707D007B017A00790312BC -:100A600007D2E490007AF0AB2CAA2DA92EC003C0C7 -:100A700002C001120C4FF9E7AB2FAA30A931120DB9 -:100A800018D001D002D003120D6B5040120C4FF958 -:100A9000E77E00540FFF7003200109D3EF9400EEAE -:100AA00094004030EF4E700A900077E52AF0A3E5FD -:100AB0002BF0120C4F120D9C2401FFEFFEEC54F0B2 -:100AC0004EFEEDFF120C4F120DE88008120C4FF88D -:100AD00074F056F6AB2CAA2DA92EC003C002C0019B -:100AE000120C4F120CEEAB33AA34A935120D18D0EC -:100AF00001D002D003120D6B505F120C4F120CEE9E -:100B00007E00540FFF7003200109D3EF9400EE9490 -:100B100000404AEF4E700A900088E52AF0A3E52BCA -:100B2000F0120C4F120D9CC4F854F0C868FEEDC4CE -:100B3000540F482401FFE43EFEEFC4F8540FC86888 -:100B4000FFEEC454F048FEED540FFDEE4CFEEF4DA9 -:100B5000FF120C4F120DE88004120D82F6120C4F9A -:100B6000120D9CFB7A00540F7019ECC4F854F0C8B5 -:100B7000EDC4540F48540F700A120C4D120C8BE444 -:100B8000F6C322120C90E537146670037538017EA7 -:100B900000EB540FFFE532120DEFB50719EEB50467 -:100BA00015D290120C4FF874F056120C8F0690006C -:100BB0008BE014F08042120C4F120CEE540FFFE544 -:100BC00036120DEF6F7001EC702ED290120D821262 -:100BD0000C8F0690008BE014F0120CD4C083C082FE -:100BE000E0FF90008BE0FE7401A806088002C3338A -:100BF000D8FC4FD082D083F090008BE07015120C9F -:100C000090120CD4120D47FF1218DFEFF090008BFA -:100C10007408F0120C90E6C39537402F12199550C6 -:100C200005E4900085F0120D4460181219A57D208E -:100C30007C037F017E00121820120DA4A3E529F089 -:100C40004480F0120C4D120C8BE4F6D322C290E5D6 -:100C50002975F003A4246722A2019202AB29AA2AD3 -:100C6000A92B75F002EFA4F58285F08312067BF5BF -:100C70004185F04022E52875F00EA42429F582E490 -:100C8000341BF583E493FE74019322F8E4F608F62E -:100C9000E52975F003A42469F822E6FC08E6FDECDA -:100CA000C4540F2401FFEFC454F0FEEC540F4E2245 -:100CB000E52875F00EA422A200E433C43333335484 -:100CC000804526FFE527900074CFF0A3EFF0E49075 -:100CD000007BF022E624FFFFE434FFFE7C007D0869 -:100CE00012062F74032FF58274003EF58322F9E774 -:100CF000C4F854F0C809E7C4540F4822E52E25E093 -:100D0000248CF582E43400F58322853D82758300CE -:100D1000120589FFC3952C22540FF58275830012AA -:100D2000058975F002A4F58285F08322242EF582D0 -:100D3000E4341BF583E493222436F582E4341BF576 -:100D400083E49322900085E0FF90007AE06F22A276 -:100D5000009202AB26AA27A928EF540775F00222B9 -:100D6000900001E526F0A3E527F02212067BFDACFA -:100D7000F0AF2BAE2A02143B2403F582E43400F5D5 -:100D80008322E52975F003A42468F8740F5622E540 -:100D90002A252CF582E43529F583E022F8E6FC08C3 -:100DA000E6FDEC2290007AE0900085F053DAFE2216 -:100DB000242CF582E4341B222431F582E4341BF523 -:100DC00083E493222434F582E4341BF583E49322F4 -:100DD0002435F582E4341BF583E4932225E0247D59 -:100DE000F582E43400F58322F8A60608A60722C39C -:100DF0009538FDE49400FCED22AA06752FFF8A3099 -:100E0000F53122AA067533FF8A34F535228E268FF6 -:100E100027C3E5279464E52694005003020FB090A1 -:100E20000087E024FE6025147003020EB6240360E0 -:100E300003020FB5C290AF27AE2612190C40030271 -:100E40000FB5120CB79000877402F022A200920135 -:100E5000AF27AE261217F6503290007BE094044084 -:100E600023D290E4900000F0900073F090008BF09B -:100E700090007CF090007AF0900003F0900087746E -:100E800003F08025E4900087F0801E900074E05409 -:100E90007FFEA3E0FFD3E5279FE5269E4005120CC9 -:100EA000B7800690007BE004F090007BE0F46003E4 -:100EB000020FB5020FB190007CE004F07B007A00D5 -:100EC0007928AF27AE261213B24023900000E0FF2E -:100ED000120CFEE526F0A3E527F08F28900000E035 -:100EE00004F0E0D394074006E4F0900087F090000F -:100EF0008BE0B40422A200E433C43333335480FFC4 -:100F0000E528C454F04FFF900073E0120D78EFF025 -:100F1000E490008BF08042900073E0FF120D78E0C7 -:100F2000FEA200E43333333354F84528FDEE4DF090 -:100F300074032F120D7A120D47FF1218DFEFF09095 -:100F40000073E004F090008B7404F0900073E0D321 -:100F500094704005E4900087F090007CE0FF9000E2 -:100F60007BE06F70501219955005E4900085F012E7 -:100F70000D44603A1219A57D207C037F017E00128A -:100F80001820120DA4900003E0FD900074E054803E -:100F9000FF900000E0C454F04FFFED4F900003F0CD -:100FA000900074E0547FF0900086E04480F0C2909E -:100FB000E4900087F0228B298A2A892B8D2CD3304C -:100FC0000001C39201E4F53E753F80F53CE53CC36A -:100FD0009530501EAB2DAA2EA92F853C82120D0DE7 -:100FE000500A120C5812000392018002B201053C13 -:100FF00080DBE4F53CE53CC39539506AE53B253E92 -:10100000F582E4353AF583E0553F7024F53DE53D42 -:10101000C395345040AB31AA32A933120D0A500A9D -:10102000120C5812000392018002B201053D80DECD -:10103000E4F53DE53DC39538501BAB35AA36A937DD -:10104000120D0A500A120C5812000392018002B2CB -:1010500001053D80DEE53FC313F53F7005053E7594 -:101060003F80053C808FC2909000877405F0228FEE -:10107000268C278D28EF120C77AA06F97BFFC00378 -:10108000C002C001EF75F00EA4242BF582E4341BDE -:10109000F583E493FDEF75F00EA4120DB0120C82EF -:1010A000AA068B2D8A2EF52FEF75F00EA4120D2CAB -:1010B000F530EF75F00EA4242FF582E4341B120CEA -:1010C00082AA068B318A32F533EF75F00EA4120D29 -:1010D000B8F534EF75F00EA42432F582E4341B1217 -:1010E0000C82AA068B358A36F537EF75F00EA412FE -:1010F0000DC4F538EF75F00EA4120DD0F539EF756B -:10110000F00EA4120D3824FF920085273A85283B63 -:10111000D001D002D003020FB6C0E0C0F0C083C03F -:1011200082C0D075D000C000C001C002C003C0049E -:10113000C005C006C007E5985403F546F45298E58B -:101140004630E0171219DD9000DE1217EBEFF09039 -:1011500000DEE004F0E0B44002E4F0E54630E12EC9 -:101160009000E1E0D39400401A9000DDE02447F8BD -:10117000E6FF1219DA9000DDE004F09000E1E014DF -:10118000F08002D2049000DDE0B42002E4F0D00749 -:10119000D006D005D004D003D002D001D000D0D0EA -:1011A000D082D083D0F0D0E03212005A787FE4F6BB -:1011B000D8FD7581960211F3020076E493A3F8E45A -:1011C00093A34003F68001F208DFF48029E493A39F -:1011D000F85407240CC8C333C4540F4420C88340B8 -:1011E00004F456800146F6DFE4800B010204081087 -:1011F0002040809012BDE47E019360BCA3FF543F69 -:1012000030E509541FFEE493A360010ECF54C025BE -:10121000E060A840B8E493A3FAE493A3F8E493A3AE -:10122000C8C582C8CAC583CAF0A3C8C582C8CAC512 -:1012300083CADFE9DEE780BEC0E0C0F0C083C082C1 -:10124000C0D075D000C000C001C002C003C004C03F -:1012500005C006C007E5D85487F521F452D8E5F754 -:1012600030E508E5F730E6031219E453F7DFE5212E -:1012700030E708E5D930E0031219E3E52130E00852 -:10128000E5DA30E003121725E52130E108E5DB302F -:10129000E0031219E5E52130E208E5DC30E0031255 -:1012A00019E6D007D006D005D004D003D002D00173 -:1012B000D000D0D0D082D083D0F0D0E0324200E64F -:1012C00000004200E200004200E800004200E400AA -:1012D00000C183410086004100870041008A00412F -:1012E00000790042000100004200880000420077BF -:1012F000000041008B004100730041008500410067 -:101300007A004100000048007D000000000000005D -:1013100000410076004100DE004100E0004100DCB9 -:10132000004100DD004100E1004100DB00C104415B -:1013300000DF0041009A0000AE07E4F5261218BC59 -:10134000900000E004FF1218C31213AB900000E0FD -:10135000FFE526C39F50141217DDE0547FFF1218DB -:10136000C31217DD1217D7052680E1900074E054F0 -:101370007FFF1218C39000741217D71213ABE4F555 -:1013800026900073E0FFE526C39F501774032526BF -:101390001217CB0526E526541F70E61219D712192D -:1013A000D080DE7F551218C30219D71219D712192F -:1013B000D0228E298F2A8B2B8A2C892DE4F52E9012 -:1013C0000000E0FFE52EC39F505EE529C4F854F00D -:1013D000C868FCE52AC4540F48FDE52AAE29780206 -:1013E000CEC313CE13D8F92DFFEE3CAB07FA120C87 -:1013F000FCE0FEA3E0FFC39BEE9A50028004AE0225 -:10140000AF03AA06AB07120CFCE0FCA3E0FDAF2A79 -:10141000AE29121899500DAB2BAA2CA92DE52E122E -:1014200005B6D322052E8097C32275F0021207A0BD -:10143000E493FC740193FDAF27AE268F828E83AFB9 -:1014400005AE04121958AB07AA06D3EB94F4EA943C -:101450000140067E017FF48004AE02AF03AA06AB12 -:1014600007C3EB9464EA940050067E007F64800416 -:10147000AE02AF03AA06AB07AF82AE831218992261 -:10148000900076E0FDC4540F2401FBE433FAED54E0 -:101490000FF96B7001EA603DE97010E0C4540F244D -:1014A00001FDE433FCED64044C602A900076E0C456 -:1014B000540FFD540F120DDCEEF0A3EFF0ED04C459 -:1014C00054F049900076F0E0FFC4540FC3940440F8 -:1014D00004EF540FF022C0E0C083C082C0D075D0AA -:1014E00000C004C005C006C00753C87F9000E6E0F6 -:1014F000FEA3E0FF4E700353C8FB9000E21216DA21 -:1015000050099000E6E4F0A3F0800DC39000E7E0FE -:101510009DF09000E6E09CF0D007D006D005D00406 -:10152000D0D0D082D083D0E032C0E0C083C082C0AF -:10153000D075D000C004C005C006C00753917F908D -:1015400000E8E0FEA3E0FF4E70035391FB9000E43F -:101550001216DA50099000E8E4F0A3F0800DC39071 -:1015600000E9E09DF09000E8E09CF0D007D006D0C4 -:1015700005D004D0D0D082D083D0E0328B268A2709 -:1015800089288C298D2AD200E4F52CE52CC3952BD3 -:10159000502F120D8FC4540FFF640F600B120D4FAC -:1015A000120C661200039200120D8FFF540F640F8D -:1015B000600B120D4F120C661200039200052C8076 -:1015C000CAC2909000877405F022AE05AD07E4FC16 -:1015D000FB7FAA1218C3AF051218C3EE75F00EA454 -:1015E000240EF582E4341CF583E493FFECC39F5092 -:1015F0000774082CFC0B80F4EB04FF1218BEE4FC0B -:10160000ECC39B500974032C1217CB0C80F27F554E -:101610001218C30219D78F26900079E0F5277E00B3 -:101620007F187D007B007A0079671207D27F0B124A -:1016300019E043DA011200707D0A7C007F017E0010 -:1016400012184912001DE4900087F0900086F09077 -:10165000009AE526F0900079F0AF2722AE07E4FD6E -:10166000F5261218BC900001E0FF1218C39000018B -:101670001217D7900077E0FF1218C3900077121767 -:10168000D7900088E0FF1218C39000881217D77413 -:10169000032D1217CB0DBD03F67F551218C3021987 -:1016A000D7AB07AA06E4F9F87F407E427D0FFC1213 -:1016B000070EA804A905AA06AB077F207ED77D7573 -:1016C0007C0112070EC3E49FFFE49EFE22AB07AA33 -:1016D00006E4F9F87FE87E03FD22E0FCA3E0FDC309 -:1016E000EF9DEE9C22ADDA900076E0FFC4540FFE31 -:1016F000EF540FFFB50602C32253DAFEEF120DDCE2 -:10170000E0FFA3E0CF8FF01206B3900076E0FF5425 -:10171000F0FEEF044EF0540FC394044004E054F084 -:10172000F08DDAD322AFFBAEFC7C007D0A1205C837 -:10173000AD07AC06AFD953D9BFE4F5FAF5F98FD9A7 -:10174000C3EC948050157F002093027F01EFC433D7 -:10175000333354804CFEEDFF021480E4900076F0A9 -:10176000229000DEE0FF9000DCE0B507057E017FFF -:1017700000229000DC1217EBE0FD7C009000DCE022 -:1017800004F0E0B44002E4F09000DBE0FEEE42043E -:10179000E4F0AE04AF0522A3E493FE740193AA061D -:1017A000229000EEE0FCA3E0FDEC547FFEAF0522AA -:1017B000EC5480C4131313540124FF22E49000EC72 -:1017C000F0A3F022900087E024FB22F582E43400AD -:1017D000F583E0FF0218C3A3E0FF0218C3E5262546 -:1017E000E0248CF582E43400F58322E0249BF5822A -:1017F000E43400F58322AD07AC06900074E0FAA350 -:10180000E0FBEA5480C41313135401700530010245 -:10181000C322AF05AE04EA547FFCAD0312143B2291 -:101820008E398F3A8C3B8D3C1216CD1216AE1219A2 -:10183000349000E6E53BF0A3E53CF09000E2E539AA -:10184000F0A3E53AF043C804228E288F298C2A8D14 -:101850002B1216CD1216AE1219409000E8E52AF0B0 -:10186000A3E52BF09000E4E528F0A3E529F04391EF -:10187000042212002A1219AC1219B3121964121997 -:10188000C81218F612198212196E12197812194C10 -:101890001219BA1219CC0219C1C3ED9BF582EC9A48 -:1018A000F583C3E5829FE5839E500FED2BFDEC3A57 -:1018B000FCC3EF9DEE9C50028001C3227FAA121848 -:1018C000C3AF06C2049000E0E0B42002E4F0900050 -:1018D000E0E02447F8A607E004F0A3E004F0227E4D -:1018E0001DE4FDEF30E70625E06EFF8004EF25E004 -:1018F000FF0DBD08EE22AF885388AF758CA0758DA3 -:10190000CBEF5440FEEF54104E428822C3EF942C8C -:10191000EE94014003D38001C322121927D2039011 -:101920000079E0FF021616AE071218BC7F55121898 -:10193000C30219D7AD07AC06ECF5CBAF058FCA22B1 -:10194000AD07AC06ECF593AF058F9222C2DE75D9D8 -:101950000575F9FF75960122EF7802CEC313CE13F9 -:10196000D8F9FF2275E34075E10175E20122E591A6 -:1019700054045391FB429122758E547589224388F9 -:101980005022E5C8540453C8FB42C82253984FEB79 -:101990004F4DF59822E5C8C320E201D322E591C35B -:1019A00020E201D32253C8FB53C87F2275A41175CE -:1019B000D4CF2275A54175D5772253F77F75DA30DC -:1019C0002275E69075A8B022E4F5A922439810226A -:1019D0003004FD22C2DE22D299228F9922AF9922B1 -:1019E0008F8C2222222222015E041A2A6200020027 -:1019F000010100017202E412C005DC0203000101D2 -:101A000000017C044C0BB8232802030001010001F3 -:101A1000F403E805DC733C0302010001019004B00B -:101A20000BB81C5202030001010001C20384286E9E -:101A300002000001010000D201A41D880200000183 -:101A40000100028A1E82071C0F8C000100020003A5 -:101A500019E70319ED0219EF0219F102180019F341 -:101A60000419FB0219FD0219FF0228001A01041AC9 -:101A700009021A0B021A0D0218001A0F041A170194 -:101A80001A18021A1A0247001A1C041A24021A26EB -:101A9000021A280218001A2A031A30021A32021AED -:101AA000340218011A36031A3C021A3E021A400286 -:101AB0000C011A42041A4A021A4C021A4E02280059 -:101AC000015E041A2A62000200010100017202E4B0 -:101AD00012C005DC020300010100017C044C0BB8BC -:101AE000232802030001010001F403E805DC733C34 -:101AF0000302010001019004B00BB81C5202030064 -:101B000001010001C20384286E02000001010000EF -:101B1000D201A41D88020000010100028A1E820772 -:101B20001C0F8C0001000200031AC0031AC6021A1F -:101B3000C8021ACA0218001ACC041AD4021AD60211 -:101B40001AD80228001ADA041AE2021AE4021AE683 -:101B50000218001AE8041AF0011AF1021AF30247F7 -:101B6000001AF5041AFD021AFF021B010218001BDD -:101B700003031B09021B0B021B0D0218011B0F03A1 -:101B80001B15021B17021B19020C011B1B041B2334 -:101B9000021B25021B27022800015E041A2A62008C -:101BA0000200010100017202E412C005DC02030020 -:101BB000010100017C044C0BB82328020300010141 -:101BC0000001F403E805DC733C030201000101900D -:101BD00004B00BB81C5202030001010001C20384CF -:101BE000286E02000001010000D201A41D8802003D -:101BF00000010100028A1E82071C0F8C00010002F6 -:101C000000031B99031B9F021BA1021BA3021800C8 -:101C10001BA5041BAD021BAF021BB10228001BB3A6 -:101C2000041BBB021BBD021BBF0218001BC1041B0F -:101C3000C9011BCA021BCC0247001BCE041BD602E3 -:101C40001BD8021BDA0218001BDC031BE2021BE498 -:101C5000021BE60218011BE8031BEE021BF0021B2D -:101C6000F2020C011BF4041BFC021BFE021C00020E -:021C700028004A +:10041000120F9B0200B09000EBE07063C2807FA0DF +:100420000204DC9000DFE060030200B0900003E013 +:10043000FCA3E0FD7F017E0012190CD29612001D74 +:10044000C2967FA00204DC7F030204DC9000DFE0A0 +:1004500060030200B01218576019240560030200FF +:10046000B0120569900003E0FF7C007D0412108348 +:100470000200B09000EBE07006C2807FA0805D803B +:10048000619000DFE060030200B01218576043245F +:100490000560030200B09000EBE014F012005E7EF5 +:1004A000007F05C006C007900003E0FB25E0FFE4E5 +:1004B00033FE74052FF58274003EAD82FCEB25E01F +:1004C000FFE52424FEC39FFBD007D0061211D10202 +:1004D00000B09000EBE0700AC2807FA01219BA024F +:1004E00000B0E4900087F00200B0900086E030E7B2 +:1004F000107FB1121491E4900086F043DA010200FB +:10050000B07B017A0079EE12177840030200B01236 +:100510001834C006C0071218439200D007D0061244 +:100520000C540200B07D327C007F017E0012190C59 +:10053000D29612001DC29622E490008AF07FA41287 +:1005400016A9900079227F017E0012190CD2961212 +:10055000001DC2962212005E9000DF7404F0227B20 +:10056000017A0079EE121778229000EBE014F01275 +:10057000005E221216A9900079EFF022900079E037 +:10058000FF1216A922900086E0547FFD12165D220C +:10059000BB010CE58229F582E5833AF583E0225020 +:1005A00006E92582F8E622BBFE06E92582F8E2226A +:1005B000E58229F582E5833AF583E49322BB0106BF +:1005C00089828A83F0225002F722BBFE01F322EFD8 +:1005D0008DF0A4A8F0CF8CF0A428CE8DF0A42EFE30 +:1005E00022BC000BBE0029EF8DF084FFADF022E4A9 +:1005F000CCF875F008EF2FFFEE33FEEC33FCEE9DE8 +:10060000EC984005FCEE9DFE0FD5F0E9E4CEFD220E +:10061000EDF8F5F0EE8420D21CFEADF075F008EF99 +:100620002FFFED33FD4007985006D5F0F222C39816 +:10063000FD0FD5F0EA22C2D5EC30E709B2D5E4C30C +:100640009DFDE49CFCEE30E715B2D5E4C39FFFE4CA +:100650009EFE1205E1C3E49DFDE49CFC80031205AF +:10066000E130D507C3E49FFFE49EFE22C5F0F8A366 +:10067000E028F0C5F0F8E582158270021583E038B5 +:10068000F022BB0110E58229F582E5833AF583E08B +:10069000F5F0A3E0225009E92582F886F008E62269 +:1006A000BBFE0AE92582F8E2F5F008E222E5832A9A +:1006B000F583E993F5F0A3E99322BB010A89828AC5 +:1006C00083F0E5F0A3F0225006F709A7F01922BB4A +:1006D000FE06F3E5F009F3192275F008758200EFC4 +:1006E0002FFFEE33FECD33CDCC33CCC58233C58264 +:1006F0009BED9AEC99E58298400CF582EE9BFEED1D +:100700009AFDEC99FC0FD5F0D6E4CEFBE4CDFAE4EB +:10071000CCF9A88222B800C1B90059BA002DEC8BDF +:10072000F084CFCECDFCE5F0CBF97818EF2FFFEEBB +:1007300033FEED33FDEC33FCEB33FB10D703994074 +:1007400004EB99FB0FD8E5E4F9FA227818EF2FFFB4 +:10075000EE33FEED33FDEC33FCC933C910D7059BF6 +:10076000E99A4007EC9BFCE99AF90FD8E0E4C9FA52 +:10077000E4CCFB2275F010EF2FFFEE33FEED33FDDE +:10078000CC33CCC833C810D7079BEC9AE899400A01 +:10079000ED9BFDEC9AFCE899F80FD5F0DAE4CDFB7F +:1007A000E4CCFAE4C8F922A42582F582E5F0358389 +:1007B000F58322D083D082F8E49370127401937091 +:1007C0000DA3A393F8740193F5828883E4737402F4 +:1007D000936860EFA3A3A380DFEF4E6012EF600188 +:1007E0000EEDBB010B89828A83F0A3DFFCDEFA22C7 +:1007F00089F05007F709DFFCA9F022BBFEFCF309E2 +:10080000DFFCA9F0228E268F27E4F528C3E5279484 +:1008100064E5269400501EE4F528E528120E0BF836 +:10082000E4F608F6E528120E2FE4F60528E528B4CC +:1008300008E8C2902290008AE01470030208ED04D8 +:100840006003020A477867E6C4540F704CD3E5276B +:100850009494E52694115003020A47300003020ADB +:1008600047120E4718F6ED08F618120E4718F6ED67 +:1008700008F6120EFBAE26FF7C007D1F1205E190EC +:10088000008CEEF0A3EFF07C007D031205CFA3EE09 +:10089000F0A3EFF0A3120EFE227867E6C4540F64B3 +:1008A000026003020A47A20033FF901BD6E4936F55 +:1008B000C36001D3920185262A85272B752C0175EB +:1008C0002D00752E8C901BCF120E21120F87901BBE +:1008D000D1E493F532A3120E21120F91901BD4E4B0 +:1008E00093F536A3E493F537E4FF020A48E4F528CC +:1008F000E528120E0BF9E7C4540F7044120E5D1276 +:100900000ED8D394014011120E5D120EE4FFA20026 +:10091000E4336F7003020A3B120E12F5828E83C01D +:1009200083C082120E5D120F3E120E1FF5828E835F +:10093000E493D082D08312150B4003020A3B805C03 +:10094000E528120E0BF9E7C4540F7E00540FFF1276 +:100950000E5D120ED8F9FDC3EF9DEE9400506712A4 +:100960000E5D24C9F582E4341BF583E493FC740125 +:1009700093F5828C83C083C082120E5D120F3EF508 +:1009800083E493FC7401932FF582EE3CF583E493AA +:10099000D082D08312150B501A120EFBE528120ECE +:1009A0000BF8120E47FEEDFFE528120E0B120F7624 +:1009B000020A3BE528120E0BF8E4F608F6E52812C9 +:1009C0000E2FE4F68075E528120E0BF8E6FEEEC455 +:1009D000540FFFE96F7001E47061120E5D120EE4B6 +:1009E000FFA200E4336FC36001D3920185262A85FC +:1009F000272B120E12AA06752CFF8A2DF52E120E29 +:100A00005D24CFF582E4341B120E1F120F87120EE5 +:100A10005D120F46F532120E5D24D2F582E4341BCE +:100A2000120E1F120F91120E5D120F52F536120E9A +:100A30005D120F5EF537AF28120A480528E528C376 +:100A4000940850030208F0228F29E4F538EF120EC3 +:100A50002FE6701A90008B7408F07E007F707D0086 +:100A60007B017A0079031207D9E490007AF0AB2C6D +:100A7000AA2DA92EC003C002C001120E09F9E7ABCE +:100A80002FAA30A931120EB6D001D002D003120F16 +:100A9000065040120E09F9E77E00540FFF70032044 +:100AA0000109D3EF9400EE94004030EF4E700A90AD +:100AB0000077E52AF0A3E52BF0120E09120F2A2485 +:100AC00001FFEFFEEC54F04EFEEDFF120E09120F87 +:100AD000768008120E09F874F056F6AB2CAA2DA9F0 +:100AE0002EC003C002C001120E09120EA8AB33AA19 +:100AF00034A935120EB6D001D002D003120F065021 +:100B00005F120E09120EA87E00540FFF7003200121 +:100B100009D3EF9400EE9400404AEF4E700A900023 +:100B200088E52AF0A3E52BF0120E09120F2AC4F86B +:100B300054F0C868FEEDC4540F482401FFE43EFEA3 +:100B4000EFC4F8540FC868FFEEC454F048FEED54EB +:100B50000FFDEE4CFEEF4DFF120E09120F768004D2 +:100B6000120F1DF6120E09120F2AFB7A00540F7095 +:100B700019ECC4F854F0C8EDC4540F48540F700A6F +:100B8000120E07120E28E4F6C322120E2DE53714BA +:100B90006670037538017E00EB540FFFE532120FCB +:100BA0007DB50719EEB50415D290120E09F874F050 +:100BB00056120E2C0690008BE014F08042120E09A3 +:100BC000120EA8540FFFE536120F7D6F7001EC7006 +:100BD0002ED290120F1D120E2C0690008BE014F0F6 +:100BE000120E8EC083C082E0FF90008BE0FE740185 +:100BF000A806088002C333D8FC4FD082D083F0907F +:100C0000008BE07015120E2D120E8E120EF3FF12D5 +:100C1000197FEFF090008B7408F0120E2DE6C3954B +:100C200037402F121A355005E4900085F0120EF06F +:100C30006018121A457D207C037F017E001218E3A4 +:100C4000120F32A3E529F04480F0120E07120E288D +:100C5000E4F6D3228E268F27C3E5279464E52694F5 +:100C6000005003020DF5900087E024FE602514700B +:100C700003020CF724036003020DFAC290AF27AE03 +:100C8000261219AC4003020DFA120E7190008774FF +:100C900002F022120DFB503290007BE094044023BE +:100CA000D290E4900000F0900073F090008BF090F0 +:100CB000007CF090007AF0900003F09000877403BD +:100CC000F08025E4900087F0801E900074E0547F4F +:100CD000FEA3E0FFD3E5279FE5269E4005120E7197 +:100CE000800690007BE004F090007BE0C394E0502D +:100CF00003020DFA020DF590007CE004F090007BF9 +:100D0000E0FFA3E0D39F4003020DA37B007A0079AC +:100D100028AF27AE2612112D4022900000E0FF12CE +:100D20000E3BE526F0A3E527F08F28900000E004B5 +:100D3000F0E0D394074005E4900087F090008BE04A +:100D4000B40421A200E433C43333335480FFE528D4 +:100D5000C454F04FFF900073E0120F13EFF0E490D3 +:100D6000008BF022900073E0FF120F13E0FEA20050 +:100D7000E43333333354F84528FDEE4DF074032F3C +:100D8000120F15120EF3FF12197FEFF0900073E0AF +:100D900004F090008B7404F0900073E0D3947040E2 +:100DA000598052120DFB504D121A355005E4900037 +:100DB00085F0120EF0603A121A457D207C037F0107 +:100DC0007E001218E3120F32900003E0FD900074D1 +:100DD000E05480FF900000E0C454F04FFFED4F90CE +:100DE0000003F0900074E0547FF0900086E04480AF +:100DF000F0C2908000E4900087F022A2009201AF40 +:100E000027AE261218B922C290E52975F003A42452 +:100E10006722E52875F00EA424C9F582E4341BF599 +:100E200083E493FE74019322F8E4F608F6E529754D +:100E3000F003A42469F822F52FE52E25E0248CF593 +:100E400082E43400F58322E6FC08E6FDECC4540F8E +:100E50002401FFEFC454F0FEEC540F4E22E5287538 +:100E6000F00EA422E529252BF582E43528F583E050 +:100E700022A200E433C433333354804526FFE527F0 +:100E8000900074CFF0A3EFF0E490007BF022E62412 +:100E9000FFFFE434FFFE7C007D0812063674032F4A +:100EA000F58274003EF58322F9E7C4F854F0C809CE +:100EB000E7C4540F4822540FF58275830012059041 +:100EC00075F002A4F58285F08322853D827583004A +:100ED000120590FFC3952C2224CEF582E4341BF535 +:100EE00083E4932224D6F582E4341BF583E4932231 +:100EF000900085E0FF90007AE06F22900001E526E7 +:100F0000F0A3E527F022120682FDACF0AF2BAE2A4B +:100F100002151C2403F582E43400F58322E52975CB +:100F2000F003A42468F8740F5622F8E6FC08E6FDE6 +:100F3000EC2290007AE0900085F053DAFE2224CC77 +:100F4000F582E4341B2224D1F582E4341BF583E4DA +:100F5000932224D4F582E4341BF583E4932224D530 +:100F6000F582E4341BF583E4932225E0247DF582A9 +:100F7000E43400F58322F8A60608A60722C39538B4 +:100F8000FDE49400FCED22AA06752FFF8A30F531AE +:100F900022AA067533FF8A34F535228B298A2A89DD +:100FA0002B8D2CD3300001C39201E4F53E753F80B8 +:100FB000F53CE53CC395305019AB2DAA2EA92F85E1 +:100FC0003C82120ECD50051210618002B201053C28 +:100FD00080E0E4F53CE53CC39539507CE53B253E9B +:100FE000F582E4353AF583E0553F701FF53DE53D68 +:100FF000C395345051AB31AA32A933120ECA5005F1 +:101000001210618002B201053D80E3E4F53DE53D4B +:10101000C395385031AB35AA36A937120ECA5020C5 +:10102000A2019202AB29AA2AA92B75F002EF120E97 +:10103000C3120682F54185F040120003920180023E +:10104000B201053D80C8E53FC313F53F7005053E7D +:10105000753F80053C020FD5C2909000877405F063 +:1010600022A2019202AB29AA2AA92B75F002EFA4B1 +:10107000F58285F083120682F54185F04012000367 +:101080009201228F268C278D28EF120E14AA06F9C2 +:101090007BFFC003C002C001EF75F00EA424CBF5A6 +:1010A00082E4341BF583E493FDEF75F00EA4120F78 +:1010B0003E120E1FAA068B2D8A2EF52FEF75F00E0D +:1010C000A4120ED8F530EF75F00EA424CFF582E40B +:1010D000341B120E1FAA068B318A32F533EF75F0DE +:1010E0000EA4120F46F534EF75F00EA424D2F5824B +:1010F000E4341B120E1FAA068B358A36F537EF75BE +:10110000F00EA4120F52F538EF75F00EA4120F5E18 +:10111000F539EF75F00EA4120EE424FF9200852736 +:101120003A85283BD001D002D003020F9B8E298F35 +:101130002A8B2B8A2C892DE4F52E900000E0FFE508 +:101140002EC39F40030211CFE52AAE297803CEC3F8 +:1011500013CE13D8F9FDAC06E52AAE297802CEC32A +:1011600013CE13D8F92DF530EE3C120E37E0FEA366 +:10117000E0FFC39530EE952F50028004AE2FAF30C4 +:101180008E2F8F30120E3912185E5002802F120EE1 +:1011900039E0FCA3E0FDAE047803CEC313CE13D830 +:1011A000F9FBAA06EDAE047802CEC313CE13D8F92C +:1011B0002BF530EE3A120E3712185E500DAB2BAAFB +:1011C0002CA92DE52E1205BDD322052E02113AC3FE +:1011D000228E268F278C288D298B2AD200C201854A +:1011E0002982852883E05488D394004003D380016A +:1011F000C39201E4F52BE52BC3952A505930010D1C +:10120000120E64C4131313540124FF8002A200922F +:1012100002852782852683C083C082120E64FFC4A4 +:101220005407D082D08312125F30010C120E64FF7B +:10123000131313541F138002A20092028527828584 +:101240002683C083C082120E645407D082D08312DA +:10125000125F052B80A0C2909000877405F0227564 +:10126000F0021207A7E0F540A3E0F5411200039257 +:101270000022C0E0C0F0C083C082C0D075D000C0E2 +:1012800000C001C002C003C004C005C006C007E51D +:10129000985403F546F45298E54630E017121A7D4B +:1012A0009000DE1218AEEFF09000DEE004F0E0B443 +:1012B0004002E4F0E54630E12E9000E1E0D39400F6 +:1012C000401A9000DDE02447F8E6FF121A7A9000F9 +:1012D000DDE004F09000E1E014F08002D204900020 +:1012E000DDE0B42002E4F0D007D006D005D004D071 +:1012F00003D002D001D000D0D0D082D083D0F0D0A3 +:10130000E03212005A787FE4F6D8FD758196021318 +:101310004C020076E493A3F8E493A34003F6800123 +:10132000F208DFF48029E493A3F85407240CC8C31F +:1013300033C4540F4420C8834004F456800146F659 +:10134000DFE4800B0102040810204080901416E4B2 +:101350007E019360BCA3FF543F30E509541FFEE4B7 +:1013600093A360010ECF54C025E060A840B8E49379 +:10137000A3FAE493A3F8E493A3C8C582C8CAC583BB +:10138000CAF0A3C8C582C8CAC583CADFE9DEE78040 +:10139000BEC0E0C0F0C083C082C0D075D000C00025 +:1013A000C001C002C003C004C005C006C007E5D824 +:1013B0005487F521F452D8E5F730E508E5F730E633 +:1013C00003121A8453F7DFE52130E708E5D930E04E +:1013D00003121A83E52130E008E5DA30E003121742 +:1013E000B8E52130E108E5DB30E003121A85E5219C +:1013F00030E208E5DC30E003121A86D007D006D0D0 +:1014000005D004D003D002D001D000D0D0D082D0FB +:1014100083D0F0D0E0324200E600004200E200005B +:101420004200E800004200E40000C1834100860061 +:101430004100870041008A0041007900420001001C +:10144000004200880000420077000041008B00410C +:101450000073004100850041007A0041000000480F +:10146000007D000000000000000041007600410007 +:10147000DE004100E0004100DC004100DD004100F1 +:10148000E1004100DB00C1044100DF0041009A009F +:1014900000AE07E4F52612195C900000E004FF128C +:1014A0001963121504900000E0FFE526C39F501455 +:1014B0001218A0E0547FFF1219631218A012189A94 +:1014C000052680E1900074E0547FFF1219639000BC +:1014D0007412189A121504E4F526900073E0FFE5E3 +:1014E00026C39F50177403252612188E0526E5265D +:1014F000541F70E6121A77121A7080DE7F55121987 +:1015000063021A77121A77121A702275F002120704 +:10151000A7E493FC740193FDAF27AE268F828E83E0 +:10152000AF05AE041219F8AB07AA06D3EB94F4EAA0 +:10153000940140067E017FF48004AE02AF03AA0648 +:10154000AB07C3EB9464EA940050067E007F64808E +:1015500004AE02AF03AA06AB07AF82AE8312186BCC +:1015600022900076E0FDC4540F2401FBE433FAED31 +:10157000540FF96B7001EA603DE97010E0C4540F3C +:101580002401FDE433FCED64044C602A900076E015 +:10159000C4540FFD540F120F6AEEF0A3EFF0ED04E8 +:1015A000C454F049900076F0E0FFC4540FC3940493 +:1015B0004004EF540FF022C0E0C083C082C0D07559 +:1015C000D000C004C005C006C00753C87F9000E625 +:1015D000E0FEA3E0FF4E700353C8FB9000E2121739 +:1015E0006D50099000E6E4F0A3F0800DC39000E791 +:1015F000E09DF09000E6E09CF0D007D006D005D04A +:1016000004D0D0D082D083D0E032C0E0C083C0828A +:10161000C0D075D000C004C005C006C00753917F7C +:101620009000E8E0FEA3E0FF4E70035391FB9000B2 +:10163000E412176D50099000E8E4F0A3F0800DC3A8 +:101640009000E9E09DF09000E8E09CF0D007D00623 +:10165000D005D004D0D0D082D083D0E032AE05AD5A +:1016600007E4FCFB7FAA121963AF05121963EE753C +:10167000F00EA424AEF582E4341CF583E493FFEC71 +:10168000C39F500774082CFC0B80F4EB04FF121965 +:101690005EE4FCECC39B500974032C12188E0C8082 +:1016A000F27F55121963021A778F26900079E0F5C0 +:1016B000277E007F187D007B007A0079671207D9AA +:1016C0007F0B121A8043DA011200707D0A7C007FC2 +:1016D000017E0012190C12001DE4900087F09000AA +:1016E00086F090009AE526F0900079F0AF2722AEC0 +:1016F00007E4FDF52612195C900001E0FF12196362 +:1017000090000112189A900077E0FF121963900080 +:101710007712189A900088E0FF12196390008812DF +:10172000189A74032D12188E0DBD03F67F551219E9 +:1017300063021A77AB07AA06E4F9F87F407E427D80 +:101740000FFC120715A804A905AA06AB077F207E87 +:10175000D77D757C01120715C3E49FFFE49EFE222E +:10176000AB07AA06E4F9F87FE87E03FD22E0FCA3BC +:10177000E0FDC3EF9DEE9C22ADDA900076E0FFC461 +:10178000540FFEEF540FFFB50602C32253DAFEEFEB +:10179000120F6AE0FFA3E0CF8FF01206BA90007636 +:1017A000E0FF54F0FEEF044EF0540FC394044004E5 +:1017B000E054F0F08DDAD322AFFBAEFC7C007D0A62 +:1017C0001205CFAD07AC06AFD953D9BFE4F5FAF592 +:1017D000F98FD9C3EC948050157F002093027F01CC +:1017E000EFC433333354804CFEEDFF021561E490B7 +:1017F0000076F0229000DEE0FF9000DCE0B5070507 +:101800007E017F00229000DC1218AEE0FD7C00908B +:1018100000DCE004F0E0B44002E4F09000DBE0FE25 +:10182000EE4204E4F0AE04AF0522A3E493FE74019B +:1018300093AA06229000EEE0FCA3E0FDEC547FFEAC +:10184000AF0522EC5480C4131313540124FF22E487 +:101850009000ECF0A3F022900087E024FB22E0FC53 +:10186000A3E0FDAB30AA2FAF2AAE29C3ED9BF582D2 +:10187000EC9AF583C3E5829FE5839E500FED2BFD27 +:10188000EC3AFCC3EF9DEE9C50028001C322F5822E +:10189000E43400F583E0FF021963A3E0FF0219635B +:1018A000E52625E0248CF582E43400F58322E0244B +:1018B0009BF582E43400F58322AD07AC06900074FA +:1018C000E0FAA3E0FBEA5480C4131313540170053B +:1018D000300102C322AF05AE04EA547FFCAD03120F +:1018E000151C228E398F3A8C3B8D3C1217601217D3 +:1018F000411219D49000E6E53BF0A3E53CF09000DE +:10190000E2E539F0A3E53AF043C804228E288F2996 +:101910008C2A8D2B1217601217411219E09000E8E3 +:10192000E52AF0A3E52BF09000E4E528F0A3E529F3 +:10193000F04391042212002A121A4C121A53121A5E +:1019400004121A68121996121A22121A0E121A1872 +:101950001219EC121A5A121A6C021A617FAA121981 +:1019600063AF06C2049000E0E0B42002E4F090000F +:10197000E0E02447F8A607E004F0A3E004F0227EAC +:101980001DE4FDEF30E70625E06EFF8004EF25E063 +:10199000FF0DBD08EE22AF885388AF758CA0758D02 +:1019A000CBEF5440FEEF54104E428822C3EF942CEC +:1019B000EE94014003D38001C3221219C7D20390D1 +:1019C0000079E0FF0216A9AE0712195C7F551219C3 +:1019D00063021A77AD07AC06ECF5CBAF058FCA22D0 +:1019E000AD07AC06ECF593AF058F9222C2DE75D938 +:1019F0000575F9FF75960122EF7802CEC313CE1359 +:101A0000D8F9FF2275E34075E10175E20122E59105 +:101A100054045391FB429122758E54758922438858 +:101A20005022E5C8540453C8FB42C82253984FEBD8 +:101A30004F4DF59822E5C8C320E201D322E591C3BA +:101A400020E201D32253C8FB53C87F2275A411752D +:101A5000D4CF2275A54175D5772253F77F75DA303B +:101A60002275E69075A8B022E4F5A92243981022C9 +:101A70003004FD22C2DE22D299228F9922AF992210 +:101A80008F8C2222222222015E041A2A6200020086 +:101A9000010100017202E412C005DC020300010131 +:101AA00000017C044C0BB823280203000101000153 +:101AB000F403E805DC733C0302010001019004B06B +:101AC0000BB81C5202030001010001C20384286EFE +:101AD00002000001010000D201A41D8802000001E3 +:101AE0000100028A1E82071C0F8C00010002000305 +:101AF0001A87031A8D021A8F021A910218001A937C +:101B0000041A9B021A9D021A9F0228001AA1041AA5 +:101B1000A9021AAB021AAD0218001AAF041AB701D3 +:101B20001AB8021ABA0247001ABC041AC4021AC62A +:101B3000021AC80218001ACA031AD0021AD2021ACC +:101B4000D40218011AD6031ADC021ADE021AE002C5 +:101B50000C011AE2041AEA021AEC021AEE02280038 +:101B6000015E041A2A62000200010100017202E40F +:101B700012C005DC020300010100017C044C0BB81B +:101B8000232802030001010001F403E805DC733C93 +:101B90000302010001019004B00BB81C52020300C3 +:101BA00001010001C20384286E020000010100004F +:101BB000D201A41D88020000010100028A1E8207D2 +:101BC0001C0F8C0001000200031B60031B66021B3C +:101BD00068021B6A0218001B6C041B74021B76024D +:101BE0001B780228001B7A041B82021B84021B86BE +:101BF0000218001B88041B90011B91021B930247D3 +:101C0000001B95041B9D021B9F021BA10218001BB9 +:101C1000A3031BA9021BAB021BAD0218011BAF03E0 +:101C20001BB5021BB7021BB9020C011BBB041BC373 +:101C3000021BC5021BC7022800015E041A2A6200AB +:101C40000200010100017202E412C005DC0203007F +:101C5000010100017C044C0BB823280203000101A0 +:101C60000001F403E805DC733C030201000101906C +:101C700004B00BB81C5202030001010001C203842E +:101C8000286E02000001010000D201A41D8802009C +:101C900000010100028A1E82071C0F8C0001000255 +:101CA00000031C39031C3F021C41021C43021800A4 +:101CB0001C45041C4D021C4F021C510228001C53E1 +:101CC000041C5B021C5D021C5F0218001C61041CEA +:101CD00069011C6A021C6C0247001C6E041C76021F +:101CE0001C78021C7A0218001C7C031C82021C84D3 +:101CF000021C860218011C88031C8E021C90021C08 +:101D000092020C011C94041C9C021C9E021CA0024A +:021D10002800A9 :00000001FF diff --git a/inc/RF_Handling.h b/inc/RF_Handling.h index 563da9f..d42427f 100644 --- a/inc/RF_Handling.h +++ b/inc/RF_Handling.h @@ -12,7 +12,8 @@ extern bool buffer_out(uint16_t *bucket); extern void HandleRFBucket(uint16_t duration, bool high_low); extern uint8_t PCA0_DoSniffing(uint8_t active_command); extern void PCA0_StopSniffing(void); -extern void SendRFBuckets(uint16_t buckets[], +extern void SendRFBuckets( + SI_VARIABLE_SEGMENT_POINTER(buckets, uint16_t, SI_SEG_XDATA), SI_VARIABLE_SEGMENT_POINTER(rfdata, uint8_t, SI_SEG_XDATA), uint8_t data_len); extern void SendBuckets( uint16_t pulses[], uint8_t pulses_size, diff --git a/src/RF_Bridge_main.c b/src/RF_Bridge_main.c index a358cdd..5a1fe50 100644 --- a/src/RF_Bridge_main.c +++ b/src/RF_Bridge_main.c @@ -417,7 +417,7 @@ int main (void) PROTOCOL_DATA[0].bit1.dat, PROTOCOL_DATA[0].bit1.size, PROTOCOL_DATA[0].bit_count, PROTOCOL_DATA[0].inverse, - &RF_DATA[6] + RF_DATA + 6 ); break; @@ -476,7 +476,7 @@ int main (void) // byte 0: PROTOCOL_DATA index // byte 1..: Data - SendBucketsByIndex(RF_DATA[0], &RF_DATA[1]); + SendBucketsByIndex(RF_DATA[0], RF_DATA + 1); break; // wait until data got transfered @@ -516,7 +516,7 @@ int main (void) // byte 2*(1..k): bucket time high // byte 2*(1..k)+1: bucket time low // byte 2*k+2..N: RF buckets to send - SendRFBuckets((uint16_t *)RF_DATA[2], &RF_DATA[2 + RF_DATA[0] * 2], len - 2 - RF_DATA[0] * 2); + SendRFBuckets((uint16_t *)(RF_DATA + 2), RF_DATA + (RF_DATA[0] << 1) + 2, len - 2 - (RF_DATA[0] << 1)); break; // wait until data got transfered diff --git a/src/RF_Handling.c b/src/RF_Handling.c index 674c935..b17166a 100644 --- a/src/RF_Handling.c +++ b/src/RF_Handling.c @@ -460,26 +460,23 @@ bool SendSingleBucket(bool high_low, uint16_t bucket_time) //----------------------------------------------------------------------------- // Send generic signal based on n time bucket pairs (high/low timing) //----------------------------------------------------------------------------- -void SendRFBuckets(uint16_t buckets[], +void SendRFBuckets( + SI_VARIABLE_SEGMENT_POINTER(buckets, uint16_t, SI_SEG_XDATA), SI_VARIABLE_SEGMENT_POINTER(rfdata, uint8_t, SI_SEG_XDATA), uint8_t data_len) { // start transmit of the buckets with a high bucket bool high_low = true; + bool high_low_mark = false; uint8_t i; + // check first two buckets if high/low marking is included + high_low_mark = (rfdata[0] & 0x88) > 0; + // transmit data for (i = 0; i < data_len; i++) { - // ignore 'F' bucket number - if (rfdata[i] >> 4 != 0x0F) - { - high_low = SendSingleBucket(high_low, buckets[(rfdata[i] >> 4) & 0x07]); - } - - if ((rfdata[i] & 0x0F) != 0x0F) - { - high_low = SendSingleBucket(high_low, buckets[rfdata[i] & 0x07]); - } + high_low = SendSingleBucket(high_low_mark ? (bool)(rfdata[i] >> 7) : high_low, buckets[(rfdata[i] >> 4) & 0x07]); + high_low = SendSingleBucket(high_low_mark ? (bool)((rfdata[i] >> 3) & 0x01) : high_low, buckets[rfdata[i] & 0x07]); } LED = LED_OFF; @@ -577,8 +574,8 @@ bool findBucket(uint16_t duration, uint8_t *index) for (i = 0; i < bucket_count; i++) { - // calculate delta by the current bucket and check if the new duration fits into - delta = ((duration >> 2) + (duration >> 4)); + // calculate delta by the current duration and check if the new duration fits into + delta = ((duration >> 2) + (duration >> 3)); delta = delta > buckets[i] ? buckets[i] : delta; if (CheckRFBucket(duration, buckets[i], delta)) @@ -586,6 +583,17 @@ bool findBucket(uint16_t duration, uint8_t *index) *index = i; return true; } + else + { + // calculate delta by the current bucket and check if the new duration fits into + delta = ((buckets[i] >> 2) + (buckets[i] >> 3)); + + if (CheckRFBucket(duration, buckets[i], delta)) + { + *index = i; + return true; + } + } } return false; @@ -650,7 +658,7 @@ void Bucket_Received(uint16_t duration, bool high_low) } // no more buckets are possible, reset - if (bucket_count_sync_1 == 0xFF) + if (bucket_count_sync_1 >= RF_DATA_BUFFERSIZE << 1) rf_state = RF_IDLE; break; @@ -659,48 +667,50 @@ void Bucket_Received(uint16_t duration, bool high_low) case RF_BUCKET_IN_SYNC: bucket_count_sync_2++; - // check if bucket was already received - if (!findBucket(duration, &bucket_index)) + // check if all buckets got received + if (bucket_count_sync_2 <= bucket_count_sync_1) { - // new bucket received, add to array - buckets[bucket_count] = duration; - bucket_index = bucket_count; - bucket_count++; - - // check if maximum of array got reached - if (bucket_count > ARRAY_LENGTH(buckets)) + // check if bucket was already received + if (!findBucket(duration, &bucket_index)) { - bucket_count = 0; - // restart sync - rf_state = RF_IDLE; + // new bucket received, add to array + buckets[bucket_count] = duration; + bucket_index = bucket_count; + bucket_count++; + + // check if maximum of array got reached + if (bucket_count > ARRAY_LENGTH(buckets)) + { + // restart sync + rf_state = RF_IDLE; + } } - } - // fill rf data with the current bucket number - if (actual_bit_of_byte == 4) - { - RF_DATA[actual_byte] = (bucket_index << 4) | ((uint8_t)high_low << 7); - actual_bit_of_byte = 0; - } - else - { - RF_DATA[actual_byte] |= (bucket_index | ((uint8_t)high_low << 3)); + // fill rf data with the current bucket number + if (actual_bit_of_byte == 4) + { + RF_DATA[actual_byte] = (bucket_index << 4) | ((uint8_t)high_low << 7); + actual_bit_of_byte = 0; + } + else + { + RF_DATA[actual_byte] |= (bucket_index | ((uint8_t)high_low << 3)); - crc = Compute_CRC8_Simple_OneByte(crc ^ RF_DATA[actual_byte]); + crc = Compute_CRC8_Simple_OneByte(crc ^ RF_DATA[actual_byte]); - actual_byte++; - actual_bit_of_byte = 4; + actual_byte++; + actual_bit_of_byte = 4; - // check if maximum of array got reached - if (actual_byte > RF_DATA_BUFFERSIZE) - { - // restart sync - rf_state = RF_IDLE; + // check if maximum of array got reached + if (actual_byte > RF_DATA_BUFFERSIZE) + { + // restart sync + rf_state = RF_IDLE; + } } } - - // same amount of bucket where received, send by uart - if (bucket_count_sync_1 == bucket_count_sync_2) + // next bucket after data have to be a sync bucket + else if (matchesFooter(duration, high_low)) { // check if timeout timer for crc is finished if (IsTimer2Finished()) @@ -729,6 +739,12 @@ void Bucket_Received(uint16_t duration, bool high_low) LED = LED_OFF; rf_state = RF_IDLE; } + // next bucket after receiving all data buckets was not a sync bucket, restart + else + { + // restart sync + rf_state = RF_IDLE; + } break; } }