Skip to content

Commit f5b2dd3

Browse files
committed
feat: pgp autosetting to disable when bag/box full
1 parent 48df0e5 commit f5b2dd3

File tree

9 files changed

+126
-74
lines changed

9 files changed

+126
-74
lines changed

pgpemu-esp32/main/log_tags.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ void log_levels_debug() {
1414
esp_log_level_set(HANDSHAKE_TAG, ESP_LOG_DEBUG);
1515
esp_log_level_set(LEDHANDLER_TAG, ESP_LOG_DEBUG);
1616
esp_log_level_set(PGPEMU_TAG, ESP_LOG_DEBUG);
17-
esp_log_level_set(SETTINGS_TAG, ESP_LOG_DEBUG);
17+
esp_log_level_set(SETTING_TASK_TAG, ESP_LOG_DEBUG);
1818
esp_log_level_set(STATS_TAG, ESP_LOG_DEBUG);
1919
esp_log_level_set(UART_TAG, ESP_LOG_DEBUG);
2020
}
@@ -31,7 +31,7 @@ void log_levels_info() {
3131
esp_log_level_set(HANDSHAKE_TAG, ESP_LOG_INFO);
3232
esp_log_level_set(LEDHANDLER_TAG, ESP_LOG_INFO);
3333
esp_log_level_set(PGPEMU_TAG, ESP_LOG_INFO);
34-
esp_log_level_set(SETTINGS_TAG, ESP_LOG_INFO);
34+
esp_log_level_set(SETTING_TASK_TAG, ESP_LOG_INFO);
3535
esp_log_level_set(STATS_TAG, ESP_LOG_INFO);
3636
esp_log_level_set(UART_TAG, ESP_LOG_INFO);
3737
}
@@ -48,7 +48,7 @@ void log_levels_verbose() {
4848
esp_log_level_set(HANDSHAKE_TAG, ESP_LOG_VERBOSE);
4949
esp_log_level_set(LEDHANDLER_TAG, ESP_LOG_VERBOSE);
5050
esp_log_level_set(PGPEMU_TAG, ESP_LOG_VERBOSE);
51-
esp_log_level_set(SETTINGS_TAG, ESP_LOG_VERBOSE);
51+
esp_log_level_set(SETTING_TASK_TAG, ESP_LOG_VERBOSE);
5252
esp_log_level_set(STATS_TAG, ESP_LOG_VERBOSE);
5353
esp_log_level_set(UART_TAG, ESP_LOG_VERBOSE);
5454
}

pgpemu-esp32/main/log_tags.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ static const char CONFIG_STORAGE_TAG[] = "config_storage";
2121
static const char HANDSHAKE_TAG[] = "pgp_handshake";
2222
static const char LEDHANDLER_TAG[] = "pgp_led";
2323
static const char PGPEMU_TAG[] = "PGPEMU";
24-
static const char SETTINGS_TAG[] = "settings";
24+
static const char SETTING_TASK_TAG[] = "settings";
2525
static const char STATS_TAG[] = "stats";
2626
static const char UART_TAG[] = "uart_events";
2727

pgpemu-esp32/main/pgp_autobutton.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ static void autobutton_task(void* pvParameters);
1818
bool init_autobutton() {
1919
button_queue = xQueueCreate(10, sizeof(button_queue_item_t));
2020
if (!button_queue) {
21-
ESP_LOGE(SETTINGS_TAG, "%s creating button queue failed", __func__);
21+
ESP_LOGE(BUTTON_TASK_TAG, "%s creating button queue failed", __func__);
2222
return false;
2323
}
2424

2525
BaseType_t ret = xTaskCreate(autobutton_task, "autobutton_task", 3072, NULL, 11, NULL);
2626
if (ret != pdPASS) {
27-
ESP_LOGE(SETTINGS_TAG, "%s creating task failed", __func__);
27+
ESP_LOGE(BUTTON_TASK_TAG, "%s creating task failed", __func__);
2828
vQueueDelete(button_queue);
2929
return false;
3030
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#include "pgp_autosetting.h"
2+
3+
#include "esp_bt.h"
4+
#include "esp_gatts_api.h"
5+
#include "esp_log.h"
6+
#include "esp_random.h"
7+
#include "esp_system.h"
8+
#include "freertos/FreeRTOS.h"
9+
#include "freertos/queue.h"
10+
#include "freertos/task.h"
11+
#include "log_tags.h"
12+
#include "pgp_gatts.h"
13+
#include "settings.h"
14+
15+
QueueHandle_t setting_queue;
16+
17+
static void autosetting_task(void* pvParameters);
18+
19+
bool init_autosetting() {
20+
setting_queue = xQueueCreate(10, sizeof(setting_queue_item_t));
21+
if (!setting_queue) {
22+
ESP_LOGE(SETTING_TASK_TAG, "%s creating setting queue failed", __func__);
23+
return false;
24+
}
25+
26+
BaseType_t ret = xTaskCreate(autosetting_task, "autosetting_task", 3072, NULL, 11, NULL);
27+
if (ret != pdPASS) {
28+
ESP_LOGE(SETTING_TASK_TAG, "%s creating task failed", __func__);
29+
vQueueDelete(setting_queue);
30+
return false;
31+
}
32+
33+
return true;
34+
}
35+
36+
static void autosetting_task(void* pvParameters) {
37+
setting_queue_item_t item;
38+
39+
ESP_LOGI(SETTING_TASK_TAG, "task start");
40+
41+
while (1) {
42+
if (xQueueReceive(setting_queue, &item, portMAX_DELAY)) {
43+
ESP_LOGD(SETTING_TASK_TAG,
44+
"[%d] toggling setting %c after delay=%d ms",
45+
item.conn_id,
46+
item.setting,
47+
item.delay);
48+
vTaskDelay(item.delay / portTICK_PERIOD_MS);
49+
50+
switch (item.setting) {
51+
case 's':
52+
if (!get_setting(&settings.autospin)) {
53+
toggle_setting(&settings.autospin);
54+
}
55+
case 'c':
56+
if (!get_setting(&settings.autocatch)) {
57+
toggle_setting(&settings.autocatch);
58+
}
59+
default:
60+
ESP_LOGW(
61+
SETTING_TASK_TAG, "[%d] unhandled toggle case: %c", item.conn_id, item.setting);
62+
}
63+
}
64+
}
65+
66+
vTaskDelete(NULL);
67+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#ifndef PGP_AUTOSETTING_H
2+
#define PGP_AUTOSETTING_H
3+
4+
#include "esp_gatt_defs.h"
5+
#include "freertos/FreeRTOS.h"
6+
#include "freertos/queue.h"
7+
8+
typedef struct {
9+
// which session does this belong to
10+
esp_gatt_if_t gatts_if;
11+
uint16_t conn_id;
12+
13+
// delay after which setting is pressed
14+
int delay;
15+
16+
char setting;
17+
} setting_queue_item_t;
18+
19+
extern QueueHandle_t setting_queue;
20+
21+
bool init_autosetting();
22+
23+
#endif /* PGP_AUTOSETTING_H */

pgpemu-esp32/main/pgp_led_handler.c

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include "freertos/task.h"
88
#include "log_tags.h"
99
#include "pgp_autobutton.h"
10+
#include "pgp_autosetting.h"
1011
#include "settings.h"
1112
#include "uart.h"
1213

@@ -90,35 +91,34 @@ void handle_led_notify_from_app(esp_gatt_if_t gatts_if, uint16_t conn_id, const
9091
LEDHANDLER_TAG, "[%d] LED pattern total duration: %d ms", conn_id, pattern_duration * 50);
9192

9293
bool press_button = false;
94+
char retoggle_setting = 0;
9395

9496
if (count_off && !count_notoff) {
9597
ESP_LOGD(LEDHANDLER_TAG, "[%d] Turn LEDs off.", conn_id);
9698
} else if (count_white && count_white == count_notoff) {
9799
// only white
98100
process_char('s');
99-
101+
retoggle_setting = 's';
100102
ESP_LOGW(LEDHANDLER_TAG,
101-
"[%d] Bag is full: press button %s - re-enabling autospin after %d ms",
103+
"[%d] Bag is full: press button %s",
102104
conn_id,
103-
get_setting_log_value(&settings.autospin),
104-
retoggle_delay);
105-
106-
settings_queue_item_t item;
107-
item.gatts_if = gatts_if;
108-
item.conn_id = conn_id;
109-
item.delay = retoggle_delay;
110-
xQueueSend(settings_queue, &item, portMAX_DELAY);
105+
get_setting_log_value(&settings.autospin));
111106
} else if (count_red && count_off && count_red == count_notoff) {
112107
// blinking just red
113-
ESP_LOGW(
114-
LEDHANDLER_TAG, "[%d] Pokeballs are empty or Pokestop went out of range.", conn_id);
108+
process_char('c');
109+
retoggle_setting = 'c';
110+
ESP_LOGW(LEDHANDLER_TAG,
111+
"[%d] Pokeballs are empty or Pokestop went out of range: press button %s",
112+
conn_id,
113+
get_setting_log_value(&settings.autocatch));
115114
} else if (count_red && !count_off && count_red == count_notoff) {
116115
// only red
117116
process_char('c');
117+
retoggle_setting = 'c';
118118
ESP_LOGW(LEDHANDLER_TAG,
119119
"[%d] Box is full: press button %s",
120120
conn_id,
121-
get_setting_log_value(&settings.autospin));
121+
get_setting_log_value(&settings.autocatch));
122122
} else if (count_green && count_green == count_notoff) {
123123
// blinking green
124124
ESP_LOGI(LEDHANDLER_TAG,
@@ -153,7 +153,7 @@ void handle_led_notify_from_app(esp_gatt_if_t gatts_if, uint16_t conn_id, const
153153
conn_id,
154154
count_ballshake);
155155
} else if (count_red) {
156-
ESP_LOGI(LEDHANDLER_TAG,
156+
ESP_LOGW(LEDHANDLER_TAG,
157157
"[%d] Pokemon fled after %d ball shakes.",
158158
conn_id,
159159
count_ballshake);
@@ -192,4 +192,19 @@ void handle_led_notify_from_app(esp_gatt_if_t gatts_if, uint16_t conn_id, const
192192
xQueueSend(button_queue, &item, portMAX_DELAY);
193193
}
194194
}
195+
196+
if (retoggle_setting != 0) {
197+
ESP_LOGD(LEDHANDLER_TAG,
198+
"[%d] queueing setting toggle for %c after %d ms",
199+
conn_id,
200+
retoggle_setting,
201+
retoggle_delay);
202+
setting_queue_item_t item = {
203+
.gatts_if = gatts_if,
204+
.conn_id = conn_id,
205+
.delay = retoggle_delay,
206+
.setting = retoggle_setting,
207+
};
208+
xQueueSend(setting_queue, &item, portMAX_DELAY);
209+
}
195210
}

pgpemu-esp32/main/pgpemu.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "esp_system.h"
66
#include "log_tags.h"
77
#include "pgp_autobutton.h"
8+
#include "pgp_autosetting.h"
89
#include "pgp_bluetooth.h"
910
#include "pgp_gap.h"
1011
#include "pgp_gatts.h"

pgpemu-esp32/main/settings.c

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -22,47 +22,6 @@ void init_settings() {
2222
xSemaphoreTake(settings.mutex, portMAX_DELAY); // block until end of this function
2323
}
2424

25-
QueueHandle_t settings_queue;
26-
27-
static void autosettings_task(void* pvParameters);
28-
29-
bool init_autosetting() {
30-
settings_queue = xQueueCreate(10, sizeof(settings_queue_item_t));
31-
if (!settings_queue) {
32-
ESP_LOGE(SETTINGS_TAG, "%s creating settings queue failed", __func__);
33-
return false;
34-
}
35-
36-
BaseType_t ret = xTaskCreate(autosettings_task, "autosettings_task", 3072, NULL, 11, NULL);
37-
if (ret != pdPASS) {
38-
ESP_LOGE(SETTINGS_TAG, "%s creating task failed", __func__);
39-
vQueueDelete(settings_queue);
40-
return false;
41-
}
42-
43-
return true;
44-
}
45-
46-
static void autosettings_task(void* pvParameters) {
47-
settings_queue_item_t item;
48-
49-
ESP_LOGI(SETTINGS_TAG, "task start");
50-
51-
while (1) {
52-
if (xQueueReceive(settings_queue, &item, portMAX_DELAY)) {
53-
ESP_LOGD(
54-
SETTINGS_TAG, "[%d] toggling setting after delay=%d ms", item.conn_id, item.delay);
55-
vTaskDelay(item.delay / portTICK_PERIOD_MS);
56-
57-
if (!get_setting(&settings.autospin)) {
58-
toggle_setting(&settings.autospin);
59-
}
60-
}
61-
}
62-
63-
vTaskDelete(NULL);
64-
}
65-
6625
void settings_ready() {
6726
xSemaphoreGive(settings.mutex);
6827
}

pgpemu-esp32/main/settings.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,6 @@ typedef struct {
3030

3131
extern Settings settings;
3232

33-
typedef struct {
34-
// which session does this belong to
35-
esp_gatt_if_t gatts_if;
36-
uint16_t conn_id;
37-
38-
// delay after which setting is toggled
39-
int delay;
40-
} settings_queue_item_t;
41-
42-
extern QueueHandle_t settings_queue;
43-
44-
bool init_autosetting();
45-
4633
void init_settings();
4734
void settings_ready();
4835
bool toggle_setting(bool* var);

0 commit comments

Comments
 (0)