44#include "../pokemon_app.h"
55#include "pokemon_menu.h"
66
7- struct named_pins {
8- const char * text ;
9- const GpioPin * pin ;
10- };
11-
12- /* XXX: These exist already in Flipper API */
13- static const struct named_pins named_pins [] = {
14- {"PA7" , & gpio_ext_pa7 },
15- {"PA6" , & gpio_ext_pa6 },
16- {"PA4" , & gpio_ext_pa4 },
17- {"PB3" , & gpio_ext_pb3 },
18- {"PB2" , & gpio_ext_pb2 },
19- {"PC3" , & gpio_ext_pc3 },
20- {"PC1" , & gpio_ext_pc1 },
21- {"PC0" , & gpio_ext_pc0 },
22- {},
23- };
24-
7+ /* This is a bit of a hack to save some space and not have to refactor this scene.
8+ * We re-use the name and pin from the global gpio pin definition, but need to
9+ * skip the two debug pins in the row of header pins.
10+ *
11+ * This is hard-coded, not really portable, but saves a couple hundred bytes :D
12+ *
13+ * In the future, the right way to do this would be to build our own table of
14+ * non-debug pins from whatever the current platforms gpio pin definition is.
15+ */
2516#define NUM_PINS 8
17+ static const GpioPinRecord * named_pins [NUM_PINS ] = {
18+ & gpio_pins [0 ],
19+ & gpio_pins [1 ],
20+ & gpio_pins [2 ],
21+ & gpio_pins [3 ],
22+ & gpio_pins [4 ],
23+ & gpio_pins [5 ],
24+ & gpio_pins [10 ],
25+ & gpio_pins [11 ]};
2626
2727/* This must match gblink's enum order */
2828static const char * named_groups [] = {
@@ -48,9 +48,9 @@ static struct itemlist_builder builder = {0};
4848static void select_pins_rebuild_list (PokemonFap * pokemon_fap );
4949
5050static void select_pins_set (PokemonFap * pokemon_fap ) {
51- pokemon_fap -> pins .serin = named_pins [builder .serin_index ]. pin ;
52- pokemon_fap -> pins .serout = named_pins [builder .serout_index ]. pin ;
53- pokemon_fap -> pins .clk = named_pins [builder .clk_index ]. pin ;
51+ pokemon_fap -> pins .serin = named_pins [builder .serin_index ]-> pin ;
52+ pokemon_fap -> pins .serout = named_pins [builder .serout_index ]-> pin ;
53+ pokemon_fap -> pins .clk = named_pins [builder .clk_index ]-> pin ;
5454}
5555
5656static void select_named_group_callback (VariableItem * item ) {
@@ -67,7 +67,7 @@ static void select_pins_serin_callback(VariableItem* item) {
6767 uint8_t index = variable_item_get_current_value_index (item );
6868 PokemonFap * pokemon_fap = variable_item_get_context (item );
6969
70- variable_item_set_current_value_text (item , named_pins [index ]. text );
70+ variable_item_set_current_value_text (item , named_pins [index ]-> name );
7171 builder .serin_index = index ;
7272 select_pins_rebuild_list (pokemon_fap );
7373 variable_item_list_set_selected_item (pokemon_fap -> variable_item_list , 1 );
@@ -77,7 +77,7 @@ static void select_pins_serout_callback(VariableItem* item) {
7777 uint8_t index = variable_item_get_current_value_index (item );
7878 PokemonFap * pokemon_fap = variable_item_get_context (item );
7979
80- variable_item_set_current_value_text (item , named_pins [index ]. text );
80+ variable_item_set_current_value_text (item , named_pins [index ]-> name );
8181 builder .serout_index = index ;
8282 select_pins_rebuild_list (pokemon_fap );
8383 variable_item_list_set_selected_item (pokemon_fap -> variable_item_list , 2 );
@@ -87,7 +87,7 @@ static void select_pins_clk_callback(VariableItem* item) {
8787 uint8_t index = variable_item_get_current_value_index (item );
8888 PokemonFap * pokemon_fap = variable_item_get_context (item );
8989
90- variable_item_set_current_value_text (item , named_pins [index ]. text );
90+ variable_item_set_current_value_text (item , named_pins [index ]-> name );
9191 builder .clk_index = index ;
9292 select_pins_rebuild_list (pokemon_fap );
9393 variable_item_list_set_selected_item (pokemon_fap -> variable_item_list , 3 );
@@ -117,9 +117,6 @@ static void select_pins_rebuild_list(PokemonFap* pokemon_fap) {
117117 break ;
118118 }
119119
120- /* HACK: */
121- pokemon_fap -> malveke_detected = builder .named_index ;
122-
123120 select_pins_set (pokemon_fap );
124121
125122 variable_item_list_reset (pokemon_fap -> variable_item_list );
@@ -137,22 +134,18 @@ static void select_pins_rebuild_list(PokemonFap* pokemon_fap) {
137134 variable_item_set_current_value_text (builder .named , named_groups [builder .named_index ]);
138135
139136 variable_item_set_current_value_index (builder .serin , (num == 1 ? 0 : builder .serin_index ));
140- variable_item_set_current_value_text (builder .serin , named_pins [builder .serin_index ]. text );
137+ variable_item_set_current_value_text (builder .serin , named_pins [builder .serin_index ]-> name );
141138
142139 variable_item_set_current_value_index (builder .serout , (num == 1 ? 0 : builder .serout_index ));
143- variable_item_set_current_value_text (builder .serout , named_pins [builder .serout_index ]. text );
140+ variable_item_set_current_value_text (builder .serout , named_pins [builder .serout_index ]-> name );
144141
145142 variable_item_set_current_value_index (builder .clk , (num == 1 ? 0 : builder .clk_index ));
146- variable_item_set_current_value_text (builder .clk , named_pins [builder .clk_index ]. text );
143+ variable_item_set_current_value_text (builder .clk , named_pins [builder .clk_index ]-> name );
147144}
148145
149146void select_pins_scene_on_enter (void * context ) {
150147 PokemonFap * pokemon_fap = (PokemonFap * )context ;
151148
152- /* TODO: Figure out what defaults we should use for pins based on attached board! */
153- /* HACK: */
154- if (builder .named_index < 2 ) builder .named_index = pokemon_fap -> malveke_detected ;
155-
156149 select_pins_rebuild_list (pokemon_fap );
157150
158151 view_dispatcher_add_view (
0 commit comments