1+ #include "subbrute_scene_entrypoint.h"
2+ #include "../subbrute_utils.h"
3+
4+ string_t subbrute_menu_items [9 ];
5+
6+ void subbrute_scene_entrypoint_menu_callback (SubBruteState * context , uint32_t index ) {
7+ string_set_str (context -> preset , "FuriHalSubGhzPresetOok650Async" );
8+ string_set_str (context -> protocol , "RAW" );
9+ context -> repeat = 5 ;
10+ context -> te = 0 ;
11+ context -> attack = index ;
12+ switch (index ) {
13+ case SubBruteAttackLoadFile :
14+ context -> current_scene = SceneSelectFile ;
15+ break ;
16+ case SubBruteAttackCAME12bit433 :
17+ context -> frequency = 433920000 ;
18+ context -> bit = 12 ;
19+ string_set_str (context -> protocol , "CAME" );
20+ string_set_str (context -> preset , "FuriHalSubGhzPresetOok650Async" );
21+ if (!subbrute_is_frequency_allowed (context )) {
22+ return ;
23+ }
24+ context -> current_scene = SceneAttack ;
25+ break ;
26+ case SubBruteAttackCAME12bit868 :
27+ context -> frequency = 868350000 ;
28+ context -> bit = 12 ;
29+ string_set_str (context -> protocol , "CAME" );
30+ string_set_str (context -> preset , "FuriHalSubGhzPresetOok650Async" );
31+ if (!subbrute_is_frequency_allowed (context )) {
32+ return ;
33+ }
34+ context -> current_scene = SceneAttack ;
35+ break ;
36+ case SubBruteAttackChamberlain9bit315 :
37+ context -> frequency = 315000000 ;
38+ context -> bit = 9 ;
39+ string_set_str (context -> protocol , "Cham_Code" );
40+ string_set_str (context -> preset , "FuriHalSubGhzPresetOok650Async" );
41+
42+ if (!subbrute_is_frequency_allowed (context )) {
43+ return ;
44+ }
45+ context -> current_scene = SceneAttack ;
46+ break ;
47+ case SubBruteAttackChamberlain9bit390 :
48+ context -> frequency = 390000000 ;
49+ context -> bit = 9 ;
50+ string_set_str (context -> protocol , "Cham_Code" );
51+ string_set_str (context -> preset , "FuriHalSubGhzPresetOok650Async" );
52+
53+ if (!subbrute_is_frequency_allowed (context )) {
54+ return ;
55+ }
56+ context -> current_scene = SceneAttack ;
57+ break ;
58+ case SubBruteAttackLinear10bit300 :
59+ context -> frequency = 300000000 ;
60+ context -> bit = 10 ;
61+ string_set_str (context -> protocol , "Linear" );
62+ string_set_str (context -> preset , "FuriHalSubGhzPresetOok650Async" );
63+ if (!subbrute_is_frequency_allowed (context )) {
64+ return ;
65+ }
66+ context -> current_scene = SceneAttack ;
67+ break ;
68+ case SubBruteAttackLinear10bit310 :
69+ context -> frequency = 310000000 ;
70+ context -> bit = 10 ;
71+ string_set_str (context -> protocol , "Linear" );
72+ string_set_str (context -> preset , "FuriHalSubGhzPresetOok650Async" );
73+ if (!subbrute_is_frequency_allowed (context )) {
74+ return ;
75+ }
76+ context -> current_scene = SceneAttack ;
77+ break ;
78+ case SubBruteAttackNICE12bit433 :
79+ context -> frequency = 433920000 ;
80+ context -> bit = 12 ;
81+ string_set_str (context -> protocol , "Nice FLO" );
82+ string_set_str (context -> preset , "FuriHalSubGhzPresetOok650Async" );
83+ if (!subbrute_is_frequency_allowed (context )) {
84+ return ;
85+ }
86+ context -> current_scene = SceneAttack ;
87+ break ;
88+ case SubBruteAttackNICE12bit868 :
89+ context -> frequency = 868350000 ;
90+ context -> bit = 12 ;
91+ string_set_str (context -> protocol , "Nice FLO" );
92+ string_set_str (context -> preset , "FuriHalSubGhzPresetOok650Async" );
93+ if (!subbrute_is_frequency_allowed (context )) {
94+ return ;
95+ }
96+ context -> current_scene = SceneAttack ;
97+ break ;
98+ default :
99+ break ;
100+ }
101+ }
102+
103+ void subbrute_scene_entrypoint_on_enter (SubBruteState * context ) {
104+ // Clear the previous payload
105+ context -> menu_index = 0 ;
106+ for (uint32_t i = 0 ; i < 9 ; i ++ ) {
107+ string_init (subbrute_menu_items [i ]);
108+ }
109+
110+ string_set (subbrute_menu_items [0 ], "BF existing dump" );
111+ string_set (subbrute_menu_items [1 ], "CAME 12bit 433mhz" );
112+ string_set (subbrute_menu_items [2 ], "CAME 12bit 868mhz" );
113+ string_set (subbrute_menu_items [3 ], "Chamberlain 9bit 315mhz" );
114+ string_set (subbrute_menu_items [4 ], "Chamberlain 9bit 390mhz" );
115+ string_set (subbrute_menu_items [5 ], "Linear 10bit 300mhz" );
116+ string_set (subbrute_menu_items [6 ], "Linear 10bit 310mhz" );
117+ string_set (subbrute_menu_items [7 ], "NICE 12bit 433mhz" );
118+ string_set (subbrute_menu_items [8 ], "NICE 12bit 868mhz" );
119+ }
120+
121+ void subbrute_scene_entrypoint_on_exit (SubBruteState * context ) {
122+ UNUSED (context );
123+ for (uint32_t i = 0 ; i < 9 ; i ++ ) {
124+ string_clear (subbrute_menu_items [i ]);
125+ }
126+ }
127+
128+ void subbrute_scene_entrypoint_on_tick (SubBruteState * context ) {
129+ UNUSED (context );
130+ }
131+
132+ void subbrute_scene_entrypoint_on_event (SubBruteEvent event , SubBruteState * context ) {
133+ if (event .evt_type == EventTypeKey ) {
134+ if (event .input_type == InputTypeShort ) {
135+ switch (event .key ) {
136+ case InputKeyDown :
137+ if (context -> menu_index < SubBruteAttackNICE12bit868 ) {
138+ context -> menu_index ++ ;
139+ }
140+ break ;
141+ case InputKeyUp :
142+ if (context -> menu_index > SubBruteAttackLoadFile ) {
143+ context -> menu_index -- ;
144+ }
145+ break ;
146+ case InputKeyLeft :
147+ case InputKeyRight :
148+ break ;
149+ case InputKeyOk :
150+ subbrute_scene_entrypoint_menu_callback (context , context -> menu_index );
151+ break ;
152+ case InputKeyBack :
153+ context -> is_running = false;
154+ break ;
155+ }
156+ }
157+ }
158+ }
159+
160+ void subbrute_scene_entrypoint_on_draw (Canvas * canvas , SubBruteState * context ) {
161+ canvas_clear (canvas );
162+ canvas_set_color (canvas , ColorBlack );
163+
164+ // Title
165+ canvas_set_font (canvas , FontPrimary );
166+ canvas_draw_str_aligned (canvas , 64 , 6 , AlignCenter , AlignTop , "SubGHz Fuzzer" );
167+
168+ if (context -> menu_index > SubBruteAttackLoadFile ) {
169+ canvas_set_font (canvas , FontSecondary );
170+ canvas_draw_str_aligned (
171+ canvas ,
172+ 64 ,
173+ 24 ,
174+ AlignCenter ,
175+ AlignTop ,
176+ string_get_cstr (subbrute_menu_items [context -> menu_index - 1 ]));
177+ }
178+
179+ canvas_set_font (canvas , FontPrimary );
180+ canvas_draw_str_aligned (
181+ canvas ,
182+ 64 ,
183+ 36 ,
184+ AlignCenter ,
185+ AlignTop ,
186+ string_get_cstr (subbrute_menu_items [context -> menu_index ]));
187+
188+ if (context -> menu_index < SubBruteAttackNICE12bit868 ) {
189+ canvas_set_font (canvas , FontSecondary );
190+ canvas_draw_str_aligned (
191+ canvas ,
192+ 64 ,
193+ 48 ,
194+ AlignCenter ,
195+ AlignTop ,
196+ string_get_cstr (subbrute_menu_items [context -> menu_index + 1 ]));
197+ }
198+ }
0 commit comments