added -P for should_do_judge_according_time()

This commit is contained in:
2025-09-20 23:11:50 +08:00
parent 09b2c9441b
commit 0f97f588ab
5 changed files with 195 additions and 3 deletions
+154 -1
View File
@@ -1,8 +1,11 @@
#include "vertix.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include "pose_body.h"
Polygon workspace;
time_gap_t global_time_gap;
void dump_polygon_to_file(char *filename) {
FILE *fp = fopen(filename, "w+");
@@ -134,4 +137,154 @@ bool is_point_in_workspace(int left, int top, int right, int bottom)
dump_box_info(inside, left, top, right, bottom);
#endif
return inside;
}
}
// 获取今天的秒数
int get_today_seconds() {
time_t current_time;
struct tm time_info;
int total_seconds;
time(&current_time);
localtime_r(&current_time, &time_info);
total_seconds = time_info.tm_hour * 3600 + time_info.tm_min * 60 + time_info.tm_sec;
return total_seconds;
}
int should_do_judge_according_time() {
int now = get_today_seconds();
int ok = false;
if (global_time_gap.in) {
for (int i = 0; i < global_time_gap.size; i++) {
if (global_time_gap.periods[i].from <= now && global_time_gap.periods[i].to >= now) {
return 1;
}
}
return 0;
} else {
// not in
for (int i = 0; i < global_time_gap.size; i++) {
if (global_time_gap.periods[i].from > now || global_time_gap.periods[i].to < now) {
return 0;
}
return 1;
}
}
}
int get_today_seconds_from_string(const char *str) {
char *token;
char *rest = (char*)str;
int hour = 0, minute = 0, second = 0;
char *origin = (char*)malloc(sizeof(char)*(strlen(str)+1));
strncpy(origin, str, strlen(str));
origin[strlen(str)] = '\0';
token = strtok_r(origin, ":", &rest);
if (token != NULL) {
hour = atoi(token);
} else {
free(origin);
return -1;
}
token = strtok_r(NULL, ":", &rest);
if (token != NULL) {
minute = atoi(token);
}
token = strtok_r(NULL, ":", &rest);
if (token != NULL) {
second = atoi(token);
}
free(origin);
return hour * 3600 + minute * 60 + second;
}
time_period_t* get_time_period_from_string(char *str) {
char *token;
char *rest = str;
char *origin = (char*)malloc(sizeof(char)*(strlen(str)+1));
strncpy(origin, str, strlen(str));
origin[strlen(str)] = '\0';
printf("\norigin=%s\n", origin);
token = strtok_r(origin, "-", &rest);
printf("token1 = %s\n", token);
if (token == NULL) {
printf("token1 is null\n");
free(origin);
return NULL;
}
printf("start_token = %s\n", token);
int start = get_today_seconds_from_string(token);
if (start < 0) {
free(origin);
return NULL;
}
printf("rest = \"%s\"", rest);
if (strlen(rest) == 0) {
token = "23:59:59";
} else {
token = rest;
}
printf("end_token = %s\n", token);
int end = get_today_seconds_from_string(token);
printf("start = %d, end = %d\n", start, end);
free(origin);
time_period_t *result = (time_period_t*)malloc(sizeof(time_period_t));
result->from = start;
result->to = end;
return result;
}
int get_all_time_period_from_arguments(const char *str) {
if (strlen(str) == 0) {
return -1;
}
char in = 1;
char *origin = (char*)malloc(sizeof(char)*(strlen(str)+1));
strncpy(origin, str, strlen(str));
origin[strlen(str)] = '\0';
int offset = 0;
if (str[0] == '!') {
offset = 1;
in = 0;
}
char *rest;
char *info;
char *start = origin;
printf(in ? "in" : "not in ");
global_time_gap.periods = (time_period_t*) malloc(sizeof(time_period_t)*64);
int size = 0;
while ((info = strtok_r(start, ",", &rest)) != NULL) {
time_period_t* period = get_time_period_from_string(info);
if (period == NULL) {
printf("failed to parse gap: %s\n", info);
return -2;
}
global_time_gap.periods[size].from = period->from;
global_time_gap.periods[size].from = period->to;
free(period);
size++;
if (size >= 64) {
printf("too many periods specified: > 64\n");
free(global_time_gap.periods);
free(origin);
return -3;
}
start = NULL;
}
global_time_gap.size = size;
free(origin);
return 0;
}