Skip to content

Commit d922892

Browse files
committed
#11 wrong spot - Make click location configurable.
1 parent 554e36a commit d922892

File tree

5 files changed

+108
-2
lines changed

5 files changed

+108
-2
lines changed

hid/hid_cookie/hid.c

+73
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
enum HidDebugSubmenuIndex {
99
HidSubmenuIndexInstructions,
10+
HidSubmenuConfigure,
1011
HidSubmenuIndexClicker,
1112
HidSubmenuIndexCredits,
1213
};
@@ -23,6 +24,9 @@ static void hid_submenu_callback(void* context, uint32_t index) {
2324
} else if(index == HidSubmenuIndexCredits) {
2425
app->view_id = BtHidViewCredits;
2526
view_dispatcher_switch_to_view(app->view_dispatcher, app->view_id);
27+
} else if(index == HidSubmenuConfigure) {
28+
app->view_id = BtHidViewConfigure;
29+
view_dispatcher_switch_to_view(app->view_dispatcher, app->view_id);
2630
}
2731
}
2832

@@ -70,6 +74,8 @@ Hid* hid_alloc() {
7074
submenu_set_header(app->submenu, "Cookie clicker");
7175
submenu_add_item(
7276
app->submenu, "Instructions", HidSubmenuIndexInstructions, hid_submenu_callback, app);
77+
submenu_add_item(
78+
app->submenu, "Configuration", HidSubmenuConfigure, hid_submenu_callback, app);
7379
submenu_add_item(
7480
app->submenu, "BT Phone Clicker", HidSubmenuIndexClicker, hid_submenu_callback, app);
7581
submenu_add_item(app->submenu, "Credits", HidSubmenuIndexCredits, hid_submenu_callback, app);
@@ -80,6 +86,44 @@ Hid* hid_alloc() {
8086
return app;
8187
}
8288

89+
void hid_setting_changed(Hid* instance) {
90+
hid_cc_set_cursor_position(
91+
instance->hid_cc, instance->offset_x, instance->offset_y, instance->offset_repeat);
92+
}
93+
94+
void hid_setting_change_x(VariableItem* item) {
95+
FuriString* str = furi_string_alloc();
96+
Hid* instance = variable_item_get_context(item);
97+
uint8_t index = variable_item_get_current_value_index(item);
98+
instance->offset_x = index * 10;
99+
furi_string_cat_printf(str, "%d", instance->offset_x);
100+
variable_item_set_current_value_text(item, furi_string_get_cstr(str));
101+
furi_string_free(str);
102+
hid_setting_changed(instance);
103+
}
104+
105+
void hid_setting_change_y(VariableItem* item) {
106+
FuriString* str = furi_string_alloc();
107+
Hid* instance = variable_item_get_context(item);
108+
uint8_t index = variable_item_get_current_value_index(item);
109+
instance->offset_y = index * 10;
110+
furi_string_cat_printf(str, "%d", instance->offset_y);
111+
variable_item_set_current_value_text(item, furi_string_get_cstr(str));
112+
furi_string_free(str);
113+
hid_setting_changed(instance);
114+
}
115+
116+
void hid_setting_change_repeat(VariableItem* item) {
117+
FuriString* str = furi_string_alloc();
118+
Hid* instance = variable_item_get_context(item);
119+
uint8_t index = variable_item_get_current_value_index(item);
120+
instance->offset_repeat = index + 1;
121+
furi_string_cat_printf(str, "%d", instance->offset_repeat);
122+
variable_item_set_current_value_text(item, furi_string_get_cstr(str));
123+
furi_string_free(str);
124+
hid_setting_changed(instance);
125+
}
126+
83127
Hid* hid_app_alloc_view(void* context) {
84128
furi_assert(context);
85129
Hid* app = context;
@@ -112,11 +156,38 @@ Hid* hid_app_alloc_view(void* context) {
112156
"speed. Click the OK button on\n"
113157
"the Flipper to enable/\n"
114158
"disable the clicker.\n"
159+
"Use the configuration setting\n"
160+
"to change the location of the\n"
161+
"clicking!\n"
115162
"Enjoy!\n");
116163
view_set_previous_callback(widget_get_view(app->widget_instructions), hid_submenu_view);
117164
view_dispatcher_add_view(
118165
app->view_dispatcher, BtHidViewInstructions, widget_get_view(app->widget_instructions));
119166

167+
app->variable_item_list = variable_item_list_alloc();
168+
variable_item_list_reset(app->variable_item_list);
169+
VariableItem* item =
170+
variable_item_list_add(app->variable_item_list, "X offset", 13, hid_setting_change_x, app);
171+
variable_item_set_current_value_index(item, 3); // 0,10,20,30,...
172+
variable_item_set_current_value_text(item, "30");
173+
app->offset_x = 10;
174+
item =
175+
variable_item_list_add(app->variable_item_list, "Y offset", 13, hid_setting_change_y, app);
176+
variable_item_set_current_value_index(item, 8); // 0,10,20,30,...
177+
variable_item_set_current_value_text(item, "80");
178+
app->offset_y = 100;
179+
item = variable_item_list_add(
180+
app->variable_item_list, "Multiplier", 20, hid_setting_change_repeat, app);
181+
variable_item_set_current_value_index(item, 2); // 1,2,3,4,...
182+
variable_item_set_current_value_text(item, "3");
183+
app->offset_repeat = 2;
184+
view_set_previous_callback(
185+
variable_item_list_get_view(app->variable_item_list), hid_submenu_view);
186+
view_dispatcher_add_view(
187+
app->view_dispatcher,
188+
BtHidViewConfigure,
189+
variable_item_list_get_view(app->variable_item_list));
190+
120191
// Clicker view
121192
app->hid_cc = hid_cc_alloc(app);
122193
view_set_previous_callback(hid_cc_get_view(app->hid_cc), hid_submenu_view);
@@ -157,6 +228,8 @@ void hid_free(Hid* app) {
157228
hid_cc_free(app->hid_cc);
158229
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewCredits);
159230
widget_free(app->widget_credits);
231+
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewConfigure);
232+
variable_item_list_free(app->variable_item_list);
160233
view_dispatcher_remove_view(app->view_dispatcher, BtHidViewInstructions);
161234
widget_free(app->widget_instructions);
162235
view_dispatcher_remove_view(app->view_dispatcher, HidViewSubmenu);

hid/hid_cookie/hid.h

+5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <gui/modules/dialog_ex.h>
1818
#include <gui/modules/popup.h>
1919
#include <gui/modules/widget.h>
20+
#include <gui/modules/variable_item_list.h>
2021
#include "views/hid_cc.h"
2122

2223
#define HID_BT_KEYS_STORAGE_NAME ".bt_hid.keys"
@@ -30,9 +31,13 @@ struct Hid {
3031
ViewDispatcher* view_dispatcher;
3132
Submenu* submenu;
3233
Widget* widget_instructions;
34+
VariableItemList* variable_item_list;
3335
Widget* widget_credits;
3436
HidCC* hid_cc;
3537
uint32_t view_id;
38+
uint8_t offset_repeat;
39+
uint8_t offset_x;
40+
uint8_t offset_y;
3641
};
3742

3843
void hid_hal_mouse_move(Hid* instance, int8_t dx, int8_t dy);

hid/hid_cookie/views.h

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
typedef enum {
22
HidViewSubmenu,
33
BtHidViewInstructions,
4+
BtHidViewConfigure,
45
BtHidViewClicker,
56
BtHidViewCredits,
67
} HidView;

hid/hid_cookie/views/hid_cc.c

+27-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ typedef struct {
2020
bool is_cursor_set;
2121
float timer_duration;
2222
bool timer_click_enabled;
23+
uint8_t click_x;
24+
uint8_t click_y;
25+
uint8_t click_loop;
2326
} HidCCModel;
2427

2528
static void hid_cc_draw_callback(Canvas* canvas, void* context) {
@@ -114,9 +117,18 @@ static void hid_cc_reset_cursor(HidCC* hid_cc) {
114117
hid_hal_mouse_move(hid_cc->hid, -127, -127);
115118
furi_delay_ms(50);
116119
}
120+
117121
// Move cursor from the corner
118-
hid_hal_mouse_move(hid_cc->hid, 20, 120);
119-
furi_delay_ms(50);
122+
with_view_model(
123+
hid_cc->view,
124+
HidCCModel * model,
125+
{
126+
for(size_t i = 0; i < model->click_loop; i++) {
127+
hid_hal_mouse_move(hid_cc->hid, model->click_x, model->click_y);
128+
furi_delay_ms(50);
129+
}
130+
},
131+
true);
120132
}
121133

122134
static void hid_cc_process_press(HidCC* hid_cc, HidCCModel* model, InputEvent* event) {
@@ -195,6 +207,19 @@ static bool hid_cc_input_callback(InputEvent* event, void* context) {
195207
return consumed;
196208
}
197209

210+
void hid_cc_set_cursor_position(HidCC* hid_cc, uint8_t x, uint8_t y, uint8_t repeat) {
211+
furi_assert(hid_cc);
212+
with_view_model(
213+
hid_cc->view,
214+
HidCCModel * model,
215+
{
216+
model->click_x = x;
217+
model->click_y = y;
218+
model->click_loop = repeat;
219+
},
220+
true);
221+
}
222+
198223
HidCC* hid_cc_alloc(Hid* bt_hid) {
199224
HidCC* hid_cc = malloc(sizeof(HidCC));
200225
hid_cc->hid = bt_hid;

hid/hid_cookie/views/hid_cc.h

+2
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,5 @@ void hid_cc_free(HidCC* hid_cc);
1212
View* hid_cc_get_view(HidCC* hid_cc);
1313

1414
void hid_cc_set_connected_status(HidCC* hid_cc, bool connected);
15+
16+
void hid_cc_set_cursor_position(HidCC* hid_cc, uint8_t x, uint8_t y, uint8_t repeat);

0 commit comments

Comments
 (0)