Commit ce9576b4 authored by Joanne Hugé's avatar Joanne Hugé

Choose GPIO to emit signal on in server

parent 2ed3e6df
......@@ -42,7 +42,7 @@ typedef struct thread_param {
int affinity_cpu;
uint64_t latency_threshold;
int emit_signal;
int emit_signal_gpio;
int enable_diff_ts;
int enable_receive_tracemark;
......@@ -91,11 +91,8 @@ static uint64_t high_diff_ts = 0;
static int debug_latencies = 0;
static int interval_us;
static int gpio86_fd;
static int gpio84_fd;
static int gpio86_state;
static int gpio84_state;
static int received_reverse_motor = 0;
static int gpio_fd;
static int gpio_state;
static char ts_tracemark_buf[64];
......@@ -110,7 +107,7 @@ static void help(char *argv[]) {
" -i USEC RT thread wake-up interval (default: 10ms)\n"
" -r USEC non-RT main thread refresh interval\n"
" -d BUF_LEN Set the length of tx buffer\n"
" -c Receive timestamp and emit signal\n"
" -c GPIO Receive timestamp and emit signal on given GPIO\n"
" -s NS Common start time reference\n"
" -C Receive timestamp and print difference with current time\n"
" -b CLIENT_IP Server side RTT\n"
......@@ -135,7 +132,6 @@ static void *emit_signal_thread(void *p) {
int64_t emit_diff, ts_diff;
int latency_spike = 0;
int ret;
int reverse_motor = 0;
// Set thread CPU affinity
if (thread_params.affinity_cpu) {
......@@ -151,27 +147,13 @@ static void *emit_signal_thread(void *p) {
for (int i = 0;;i++) {
pthread_cond_wait(&emit_signal_ts_received, &emit_signal_mutex);
if(received_reverse_motor) {
received_reverse_motor = 0;
reverse_motor = 1;
continue;
}
ret = clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &emit_signal_next, NULL);
if (ret) {
fprintf(stderr, "clock_nanosleep returned error: %d, aborting...\n", ret);
exit(EXIT_FAILURE);
}
if(reverse_motor) {
gpio84_state = toggle_gpio(gpio84_fd, gpio84_state);
reverse_motor = 0;
}
else {
gpio86_state = toggle_gpio(gpio86_fd, gpio86_state);
usleep(3);
gpio86_state = toggle_gpio(gpio86_fd, gpio86_state);
}
gpio_state = toggle_gpio(gpio_fd, gpio_state);
clock_gettime(CLOCK_REALTIME, &current);
......@@ -273,7 +255,7 @@ static void *tsn_thread(void *p) {
}
// Get signal timestamp
if (thread_params.emit_signal) {
if (thread_params.emit_signal_gpio) {
uint64_t emit_signal_t;
if(tsn_task == XDP_TASK)
......@@ -281,14 +263,11 @@ static void *tsn_thread(void *p) {
else
emit_signal_t = decode(ingress_stats.data);
if(emit_signal_t < UINT64_C(1576800000000000000) && emit_signal_t != 17)
if(emit_signal_t < UINT64_C(1576800000000000000))
continue;
pthread_mutex_lock(&emit_signal_mutex);
if(emit_signal_t == 17)
received_reverse_motor = 1;
else
emit_signal_next = uint_to_ts(emit_signal_t);
emit_signal_next = uint_to_ts(emit_signal_t);
pthread_cond_signal(&emit_signal_ts_received);
pthread_mutex_unlock(&emit_signal_mutex);
}
......@@ -424,7 +403,7 @@ int main(int argc, char *argv[]) {
// Default configuration values
thread_params.interval = 100000 * 1000;
thread_params.priority = 98;
thread_params.emit_signal = 0;
thread_params.emit_signal_gpio = 0;
thread_params.affinity_cpu = 0;
thread_params.enable_diff_ts = 0;
thread_params.enable_receive_tracemark = 0;
......@@ -473,12 +452,11 @@ int main(int argc, char *argv[]) {
if (tsn_task == RTT_TASK)
init_udp_send(&egress_info, 0, 0);
if (thread_params.emit_signal) {
if (thread_params.emit_signal_gpio) {
pthread_mutex_init(&emit_signal_mutex, NULL);
pthread_cond_init(&emit_signal_ts_received, NULL);
gpio86_state = enable_gpio(&gpio86_fd, 86);
gpio84_state = enable_gpio(&gpio84_fd, 84);
gpio_state = enable_gpio(&gpio_fd, thread_params.emit_signal_gpio);
}
create_thread(tsn_thread);
......@@ -610,7 +588,7 @@ static void process_options(int argc, char *argv[]) {
int network_if_specified = 0;
for (;;) {
int c = getopt(argc, argv, "a:b:cCs:d:f:ghi:p:r:tvxDXT:GMS");
int c = getopt(argc, argv, "a:b:c:Cs:d:f:ghi:p:r:tvxDXT:GMS");
if (c == -1) break;
......@@ -623,7 +601,7 @@ static void process_options(int argc, char *argv[]) {
strcpy(egress_params.server_ip, optarg);
break;
case 'c':
thread_params.emit_signal = 1;
thread_params.emit_signal_gpio = atoi(optarg);
break;
case 'C':
thread_params.enable_diff_ts = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment