added -P for should_do_judge_according_time()
This commit is contained in:
+154
-1
@@ -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(¤t_time);
|
||||
localtime_r(¤t_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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user