4
4
#include "../pokemon_app.h"
5
5
#include "pokemon_menu.h"
6
6
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
+ */
25
16
#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 ]};
26
26
27
27
/* This must match gblink's enum order */
28
28
static const char * named_groups [] = {
@@ -48,9 +48,9 @@ static struct itemlist_builder builder = {0};
48
48
static void select_pins_rebuild_list (PokemonFap * pokemon_fap );
49
49
50
50
static 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 ;
54
54
}
55
55
56
56
static void select_named_group_callback (VariableItem * item ) {
@@ -67,7 +67,7 @@ static void select_pins_serin_callback(VariableItem* item) {
67
67
uint8_t index = variable_item_get_current_value_index (item );
68
68
PokemonFap * pokemon_fap = variable_item_get_context (item );
69
69
70
- variable_item_set_current_value_text (item , named_pins [index ]. text );
70
+ variable_item_set_current_value_text (item , named_pins [index ]-> name );
71
71
builder .serin_index = index ;
72
72
select_pins_rebuild_list (pokemon_fap );
73
73
variable_item_list_set_selected_item (pokemon_fap -> variable_item_list , 1 );
@@ -77,7 +77,7 @@ static void select_pins_serout_callback(VariableItem* item) {
77
77
uint8_t index = variable_item_get_current_value_index (item );
78
78
PokemonFap * pokemon_fap = variable_item_get_context (item );
79
79
80
- variable_item_set_current_value_text (item , named_pins [index ]. text );
80
+ variable_item_set_current_value_text (item , named_pins [index ]-> name );
81
81
builder .serout_index = index ;
82
82
select_pins_rebuild_list (pokemon_fap );
83
83
variable_item_list_set_selected_item (pokemon_fap -> variable_item_list , 2 );
@@ -87,7 +87,7 @@ static void select_pins_clk_callback(VariableItem* item) {
87
87
uint8_t index = variable_item_get_current_value_index (item );
88
88
PokemonFap * pokemon_fap = variable_item_get_context (item );
89
89
90
- variable_item_set_current_value_text (item , named_pins [index ]. text );
90
+ variable_item_set_current_value_text (item , named_pins [index ]-> name );
91
91
builder .clk_index = index ;
92
92
select_pins_rebuild_list (pokemon_fap );
93
93
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) {
117
117
break ;
118
118
}
119
119
120
- /* HACK: */
121
- pokemon_fap -> malveke_detected = builder .named_index ;
122
-
123
120
select_pins_set (pokemon_fap );
124
121
125
122
variable_item_list_reset (pokemon_fap -> variable_item_list );
@@ -137,22 +134,18 @@ static void select_pins_rebuild_list(PokemonFap* pokemon_fap) {
137
134
variable_item_set_current_value_text (builder .named , named_groups [builder .named_index ]);
138
135
139
136
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 );
141
138
142
139
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 );
144
141
145
142
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 );
147
144
}
148
145
149
146
void select_pins_scene_on_enter (void * context ) {
150
147
PokemonFap * pokemon_fap = (PokemonFap * )context ;
151
148
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
-
156
149
select_pins_rebuild_list (pokemon_fap );
157
150
158
151
view_dispatcher_add_view (
0 commit comments