diff --git a/applications/plugins/flappy_bird/flappy_bird.c b/applications/plugins/flappy_bird/flappy_bird.c index 3d53ee52d..4616e552b 100644 --- a/applications/plugins/flappy_bird/flappy_bird.c +++ b/applications/plugins/flappy_bird/flappy_bird.c @@ -182,12 +182,36 @@ static void flappy_game_render_callback(Canvas* const canvas, void* ctx) { canvas_draw_frame( canvas, pilar->point.x, pilar->point.y, FLAPPY_GAB_WIDTH, pilar->height); + canvas_draw_frame( + canvas, pilar->point.x + 1, pilar->point.y, FLAPPY_GAB_WIDTH, pilar->height); + + canvas_draw_frame( + canvas, + pilar->point.x + 2, + pilar->point.y, + FLAPPY_GAB_WIDTH - 1, + pilar->height); + canvas_draw_frame( canvas, pilar->point.x, pilar->point.y + pilar->height + FLAPPY_GAB_HEIGHT, FLAPPY_GAB_WIDTH, FLIPPER_LCD_HEIGHT - pilar->height - FLAPPY_GAB_HEIGHT); + + canvas_draw_frame( + canvas, + pilar->point.x + 1, + pilar->point.y + pilar->height + FLAPPY_GAB_HEIGHT, + FLAPPY_GAB_WIDTH - 1, + FLIPPER_LCD_HEIGHT - pilar->height - FLAPPY_GAB_HEIGHT); + + canvas_draw_frame( + canvas, + pilar->point.x + 2, + pilar->point.y + pilar->height + FLAPPY_GAB_HEIGHT, + FLAPPY_GAB_WIDTH - 1, + FLIPPER_LCD_HEIGHT - pilar->height - FLAPPY_GAB_HEIGHT); } } // Flappy diff --git a/assets/resources/subghz/assets/keeloq_mfcodes b/assets/resources/subghz/assets/keeloq_mfcodes index 1b27bfb01..31619d6e7 100644 --- a/assets/resources/subghz/assets/keeloq_mfcodes +++ b/assets/resources/subghz/assets/keeloq_mfcodes @@ -1,55 +1,57 @@ Filetype: Flipper SubGhz Keystore File Version: 0 Encryption: 1 -IV: AA FF DE 54 A1 BB F1 21 83 46 FE 2A 1E B7 3D 33 -95B8CD65BBAC95EACE67CA94F679B82877A921396D461ECB479722F8A369454A -61065C41297B9FF8F8168814F49A03D1FE7B4CB79DFFCBBF0402AAA6A2211E84 -A1557AC139188FF105D1081A4B688C5CA440FB5DA7F40901B541120AD08A544F -AF0A6056D7F0D97DAD6C16C4E63204E4B3B1C5A20AC82B983B516F4F718EE29F -6861BFAE46A1AADB1DB2D6DFAA7E39D21D5B3E46A41BD50F4F2828879EB328EF0A406F2B9C79A031AB361257E6D69756 -0DDB3DAC53678541981CC46C22CED245CBA314C9BBE1BA9383B8505B75AC5E40 -99AB5D9404934F2D257ED04D9F8CCEE06D00F38157B121AFD63101E4E5C08268 -5114A6C42B342C7D933A76F9052FF963C2047E85EA524497C21B4C35C38EF6E7 -88CA2A1907D94B972FF93DBB9B88CB576F3E1BB0FE8F85A5B2CCA7D44B00374D -349C4153FE7CA8AE044E9F75F77D9694304474CE3F127CF968662B5F78A7F421 -62AA02E20CA7E691EFC0B55CA41C9BDF889FB23868289284241CD31AA1A0E499AE2A770B6B5AB3170CDCCDB8A246D36C -97901B5EB76228ADF8E5073F1BAB1502878DEFF1C4EBF12A43D105556CB7E80F947A8BD7831666BD838C57CDF64A6F3F -B05959D210B500943A93BDFAF783D9DB215FC84503B152EAFBCFB5B6237E3888 -B393DE4489BCAFD5DB80592A12E329E18913E185D2042580048029A8C4C3A257 -B4B30492A5F0C3C763E2F43C02D1451A5B9CFB468CFE62BE85B1F56FF49DAB9A -CE5D57C0EE3D717FC717EB725970A9F25D211546EE7AC5C237950CEA323D85D4 -4E9028944813FD40A17AF6DF5A97E76179B48EE79265BBD38B07E3A270587A813DADB51B3367479AC5644F754B5613F8 -3B3C3000B9D1361711ECE3DB77C90A059576F738CB167679DA36DD3D128B27A1 -997023148148DE7B9CBA47D3FD48DEF73AA1715FF4BC1E7A1DBA6D52A0DCB2C0 -C8428D18E69FB92486434FCE470F1FF37D40507F27D824679C132A70D516530367277F02DDB5C464D03450FF6B425A24 -3701200DF5DA7235971FD95844056E74C7D61A8EB12A8772E04F52037C63D50B6229A7F905F3E6F84C565FCC7632870C -BB392A464CDC0D5D923AA9EF8ECC3C6F020D0AD82165462DF0DE7C5025AAAAAC -999C82209B30638506E5D708471676D2CBB4A432E5AF86ABD61179111EDAE636 -FDE2A452A6B47261338117EC20FC57731DA492562ECD21BBC61F098A5442CF20 -D923BABB5C4DFB48E3F763898B2796C7830D3EE9A91DF904AC2223A0F4736507 -0987DDAC695DD5E4607048DF1D4EF96599E17ED52F41785E676AA048AB7213FE -26CB3E6CFA10338A8DDD99BFF6957C53DEF435CB0FF977B71B5164ADFE11292A -097908FD07A0A093CA80E6FF59524707C1A11169D0CB6F8E4967D8DAA725FE7A -8C629E70A5CC6FCB039DFA1A6AC58CB7B7E92C85BDA66266AB49E6B1285FC7A6 -39A2052350CD446EDC1B9AD0C2DD51C78B2E5F3A76AAD0EC200F74B40ACD4AC5 -A1685CF8C4A5401F2CA0C8172CB5B4B5726C61CE68A72AE834B0A472CEB2F3DE -1F5ED5793DB381D1B501BA8A4DF3E74FB11FC1A922DDC8AE62E5BA8934C37EA8 -D80EF661BF36E2F6C179E253CE5BC3732684ACBC7C65E526A628442A2EBF8FAA -7785BF721F21E19A8CFBFBBB56BD76B96A4E8EF9F8A2344009B14AB385909598F834A5533B648DA7D62BD6D4314A43A5 -C8F6F943DE615B5827569B283577344C0455B3279C73634FC4E0E9A8088DF633 -FB4F4C786FC51BBDA679A212B4A05EF120AC62F7EBFFE8263BD50A4D9BC9C6E0 -16EEC35CF69BA86DB3BE999CDF9B39F5736F3727B2AA2C5AB9141A48F176D831 -AD1AD6DE813E7710DA3AF546D4F9EA085831E6B3FA17B64F1B8765F48134EA54 -345D743BC35B4A8614632ADD11E809C0D1E6C78F9469256B9A738DA0B648B2B8 -7C876CECAC839EBB4609C3996966C3EC454F51C8ABCC51097E405370C4B6F086 -0F857C031FD3047607647148C534F969567F207FF1691D8D06DCDF4C2514695D -EC0630EDC82241C1952F49B6B1B0C1A954A7DDD6BDB1326ACC54AD449D1BF985 -286EF9F7FD0D09F2604CCE867C52144CD0C4773A3D8183066C61B8BF9860AE7C -EA55424097A08722A66966E3177E09DE91AC65175E5C68CB47B6153E6585DF85 -D54FCDF9EA4BD1FE4F316DB6D5CE4A2675F2D0144772865EDC781FBA7DFD23E4 -7A2F5C5CA9F97FE9527BAA760E64B930C407A27DE036476737E6BDD9422F4056A5F1F414F12F0982109FD7C30E8CC1CB -06BAD9B4EEEEB1BCF8C97672D271534FE84D772282EE9642698788D3842D7641 -101C1B2DBD963E23777294C22E553D145D5B40838F91355CA86D571A0CEFF68F -1B148C2B502B3E0A5BD40858E019C513DD4CCAF2A114CBB29C59BFB018079285 -8DF4D07EC20FF873EA989ACEF4AF96E9787FE6E0F71965858B4186C3AF302A31 -2317DC8C098CD60F3467B3644A19CCE887339708820CD37F6F5277D6648F837512F70CE90E23D7339CDDE002BD8D83DB +IV: 5C AD F1 B1 BA B0 BA 11 AB 0B A3 6C F7 E3 6A 21 +AA7C98C6E94AA4062F875AB40BA3CE977D18B89830CCEB30179C5F2788E8941C +5B2D494F1AC8971B5F758D56D72F709E674B92F4B8D5BF9E4BBD48DBEFD11678 +AF3FFC3AB39E07694127DC64DD9BB371461200F4A6ED4622C5BA21F854394BE4 +2D889E3B426032518D20A7B35718FCCDA6769E310021BD41FF87D2A4DC4C1ED8 +7FB119118304533D748BAF06AAF69E838D6B6B20A84B51AEEBE6001FD5307DC8C98B46CF249E3E24FF64A033C470135B +B38B5D82576D4BFB7E5B600711695E409C1E33B539F167BE54572F9721D75566 +CAB78E2DE09DA67C95E0302A9A0010204A715CE61AD0884DEF018A15971D0DA8 +9794862BCFD7F31676245AB8BF369C754CBD6E818E8866CB2C743C3DC7F455BA +77AAE6912434A95B46A6C07B5A59EF287B83CE2620FEECF92CDAE7858F6A8050 +1A55BDD4F0E5F555EA3DF74182CE871343C955FD2349FB37B1B21FAC170511EB +892FAE550B5BF6CE2C6C85B74C8AD45D37E174CFD9EE0767927BCBCC904AA7CB464451E43EF9435E61635DC6EEFAD5E5 +26A7511E2213053BA49868CEE9FB56474CFB5AA422AFBF4C0FB5D5285E6C474DB7EF74A731D259A18AD1EF6EE015A9B2 +F3B14CFE82809DD20A8CE0EF9806CA40E3BA6EF8D62495AF9DEF0F92625F05E7 +BAC0B60E24FE913885FE3FF0A7E9EAB2B224471ABF738507E14060747792783E +070E67988EFF2B31EEE0AD2E8663EE8CEB4DACBB9D8D1159E7C9E84E18F1F7D4 +1755162EEA343C8D9D09852FA5B90E05DDE129145442822F937CE64EA168DE78 +70CF01EB50613461B447C6F54A2E28CAFDD39776B90BD88FDE3A2F5BE8ED5950387819C5F8BCAEEE0DE1A16692F5F07C +8152ECF2A96968C7803803851C70489B19846AB4450B5B5398A86E05D76A5E85 +D9A44B2BC3920622F8ED3EC2A18756612D05C3BF3555F752520AA206128576B3 +AD156C422650D482BFD399926330C849F61C145C6874EAE2826AEDA6BFEFB9892FF615E9CE4005274BF2217733629510 +1735246565057FF7A91DF91CE87A82F1823AC53282377CF188245C4E0A0A12420DFDDA0B70D2498D1C6C5456527FBF66 +E25E66ADCCF628CD21C14D61D47952816EE2265AD7664645A321D45197E1703B +07ACA960A68DAD72B3F7C51AB8573AB0BD08531390226F5404B0098A9FCAC239 +577209D5117506CEF9B6D4EA9F9783CE0EA57415EBBE5318B057D7E0AEFBDFC9 +708B950FCF78EFC2FEE1969A2590EBD8BDF95ACD2B052E96017B39EA667C2AAB +05D7DD808F82F97848B695D5C302FDF20F55D2FD56E386227726691ED581EC9A +08F1AEF4B9F694DF723813613FE0208A4ACF7079773B37CEFCAF7A132EBD4DBA +F607CEBFA3E307F27AC484B9E08FB96A2B678FBA4963AAC479F53D9CAC3530DF +578BBAD7BD2818DC9CC6F711035C267AF005B23A24BA79C66D408474CECEA799 +CA9A8ACCB5BEA6B53C4CE302CC052FC560317410A977425D0E7924AE10D4ED85 +523FE24DD7A7F4E2DF0E09771C863A934662A564152966B67DFECE7D37A53A50 +A606653C13720134F4564DD96FCD1AD44E66D9405BA95CFD0D91FE8828D0B615 +3ED9295F9C5D3C4E949B8E83CF63EBFD0482D224F4015451AD31646FD91F95D2 +7077291A87C15DE4605989467D38283F5416D6AD6D9B2458CE5A75D40A61B3D9 +08A7FECA1D73D605D4E71E69AD2112915A28DBE5A6817C52C2C451A9E1435CF1 +76FBB6AA098D630B5297261090F50011FFEEE6611347A2DF65E0C1C88C4DFFDD879A7C9134D2C51A61C3C7796833ADA6 +2315673B961F8D1C46020AAAB3BC73EE480496F6F5C6B9BF7175DF32A92D1E29 +851620CB407C3CA9A26CF6F6E3350A13FC241A99D7FCAF5EC41A90C40F6518A2 +F97AB6A733F1C288585629CC89A8AFA50B0D7B4CC2E0D41CA0B7118B37EB5170 +E725E6B06E9C8A575609E28DB887508D6CD6623BFD2151BDE0984E1E014A3FAB +138082F590404A5A335601C9872D08F0950EEEB7B28C5D6238F6A4C7FD73CFAC +22687BB4B5044A02C4F86FFA6B8113A3D315325CBAC503498284FA44C3566EE3 +1A5D93DE887B497D3904BD5C29F456EB6D8EA7D6B79962769F1862F21C6CC257 +F3ADA4CA246DC47577A40F7F24213A1E773CE7C9D3F5B0A054EE0807C81CB0B6 +CBA2632796ADB82F57A0B701BF1EF9787C27F4DD14C79D0FD09CD88447A8368B +5CF50ED192649B1F769451EEA7FC9D1F6585990D4D7618FB56A7C41DC3A93904 +62062BFC4F4CA5C7568F042832B27777BDB79522BB7BA3BB4F9644D35416ADC9 +AE7EED026C970F8A8AA2B33C01B7660BFD83B550367CACA4D9B266E2756C3A7E6C3BD0D2EEA3F6ED7C9A4023C575750A +A04D0A134EF9B67BAC02ABDD2E355422C96665D99484DF4E4EFD2CE4AA66F4BB +D7209CB12AFC47261B223C8EC48BDA3131C006FA997396F050FCBEEEFAC7B65A +2E58BF2F918C44F01DD3DFBB49C5FABB33FFFF25B6AC975CA1819A7554093C25 +96C5A04C551604AA8069E213A7FFCE7EA8D8BCF9B61F93BA4E912630AF1BA886 +9219823986AE58A5FD919E809478AF894A73A413F7C12D8B29DF8BD3ADE730652FB7EB3115CF2914F748AE64F996A4B3 diff --git a/firmware/targets/f7/api_symbols.csv b/firmware/targets/f7/api_symbols.csv index 9f1968b22..a3e92db7b 100644 --- a/firmware/targets/f7/api_symbols.csv +++ b/firmware/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,8.1,, +Version,+,8.2,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/cli/cli.h,, Header,+,applications/services/cli/cli_vcp.h,, @@ -114,6 +114,9 @@ Header,+,lib/drivers/nrf24.h,, Header,+,lib/flipper_application/flipper_application.h,, Header,+,lib/flipper_format/flipper_format.h,, Header,+,lib/flipper_format/flipper_format_i.h,, +Header,+,lib/infrared/encoder_decoder/infrared.h,, +Header,+,lib/infrared/worker/infrared_transmit.h,, +Header,+,lib/infrared/worker/infrared_worker.h,, Header,+,lib/lfrfid/lfrfid_dict_file.h,, Header,+,lib/lfrfid/lfrfid_raw_file.h,, Header,+,lib/lfrfid/lfrfid_raw_worker.h,, @@ -1559,6 +1562,42 @@ Function,-,ilogbl,int,long double Function,-,index,char*,"const char*, int" Function,-,infinity,double, Function,-,infinityf,float, +Function,+,infrared_alloc_decoder,InfraredDecoderHandler*, +Function,+,infrared_alloc_encoder,InfraredEncoderHandler*, +Function,+,infrared_check_decoder_ready,const InfraredMessage*,InfraredDecoderHandler* +Function,+,infrared_decode,const InfraredMessage*,"InfraredDecoderHandler*, _Bool, uint32_t" +Function,+,infrared_encode,InfraredStatus,"InfraredEncoderHandler*, uint32_t*, _Bool*" +Function,+,infrared_free_decoder,void,InfraredDecoderHandler* +Function,+,infrared_free_encoder,void,InfraredEncoderHandler* +Function,+,infrared_get_protocol_address_length,uint8_t,InfraredProtocol +Function,+,infrared_get_protocol_by_name,InfraredProtocol,const char* +Function,+,infrared_get_protocol_command_length,uint8_t,InfraredProtocol +Function,+,infrared_get_protocol_duty_cycle,float,InfraredProtocol +Function,+,infrared_get_protocol_frequency,uint32_t,InfraredProtocol +Function,+,infrared_get_protocol_name,const char*,InfraredProtocol +Function,+,infrared_is_protocol_valid,_Bool,InfraredProtocol +Function,+,infrared_reset_decoder,void,InfraredDecoderHandler* +Function,+,infrared_reset_encoder,void,"InfraredEncoderHandler*, const InfraredMessage*" +Function,+,infrared_send,void,"const InfraredMessage*, int" +Function,+,infrared_send_raw,void,"const uint32_t[], uint32_t, _Bool" +Function,+,infrared_send_raw_ext,void,"const uint32_t[], uint32_t, _Bool, uint32_t, float" +Function,+,infrared_worker_alloc,InfraredWorker*, +Function,+,infrared_worker_free,void,InfraredWorker* +Function,+,infrared_worker_get_decoded_signal,const InfraredMessage*,const InfraredWorkerSignal* +Function,+,infrared_worker_get_raw_signal,void,"const InfraredWorkerSignal*, const uint32_t**, size_t*" +Function,+,infrared_worker_rx_enable_blink_on_receiving,void,"InfraredWorker*, _Bool" +Function,+,infrared_worker_rx_enable_signal_decoding,void,"InfraredWorker*, _Bool" +Function,+,infrared_worker_rx_set_received_signal_callback,void,"InfraredWorker*, InfraredWorkerReceivedSignalCallback, void*" +Function,+,infrared_worker_rx_start,void,InfraredWorker* +Function,+,infrared_worker_rx_stop,void,InfraredWorker* +Function,+,infrared_worker_set_decoded_signal,void,"InfraredWorker*, const InfraredMessage*" +Function,+,infrared_worker_set_raw_signal,void,"InfraredWorker*, const uint32_t*, size_t" +Function,+,infrared_worker_signal_is_decoded,_Bool,const InfraredWorkerSignal* +Function,+,infrared_worker_tx_get_signal_steady_callback,InfraredWorkerGetSignalResponse,"void*, InfraredWorker*" +Function,+,infrared_worker_tx_set_get_signal_callback,void,"InfraredWorker*, InfraredWorkerGetSignalCallback, void*" +Function,+,infrared_worker_tx_set_signal_sent_callback,void,"InfraredWorker*, InfraredWorkerMessageSentCallback, void*" +Function,+,infrared_worker_tx_start,void,InfraredWorker* +Function,+,infrared_worker_tx_stop,void,InfraredWorker* Function,+,init_mutex,_Bool,"ValueMutex*, void*, size_t" Function,-,initstate,char*,"unsigned, char*, size_t" Function,+,input_get_key_name,const char*,InputKey diff --git a/lib/infrared/SConscript b/lib/infrared/SConscript index 35db75f87..36baca34e 100644 --- a/lib/infrared/SConscript +++ b/lib/infrared/SConscript @@ -5,6 +5,11 @@ env.Append( "#/lib/infrared/encoder_decoder", "#/lib/infrared/worker", ], + SDK_HEADERS=[ + File("#/lib/infrared/worker/infrared_transmit.h"), + File("#/lib/infrared/worker/infrared_worker.h"), + File("#/lib/infrared/encoder_decoder/infrared.h"), + ], )