pyhelper: Move helper functions from serialqueue.c to new file
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
7cb71df02c
commit
b14db404b5
|
@ -7,9 +7,9 @@ import os, logging
|
||||||
import cffi
|
import cffi
|
||||||
|
|
||||||
COMPILE_CMD = "gcc -Wall -g -O -shared -fPIC -o %s %s"
|
COMPILE_CMD = "gcc -Wall -g -O -shared -fPIC -o %s %s"
|
||||||
SOURCE_FILES = ['stepcompress.c', 'serialqueue.c']
|
SOURCE_FILES = ['stepcompress.c', 'serialqueue.c', 'pyhelper.c']
|
||||||
DEST_LIB = "c_helper.so"
|
DEST_LIB = "c_helper.so"
|
||||||
OTHER_FILES = ['list.h', 'serialqueue.h']
|
OTHER_FILES = ['list.h', 'serialqueue.h', 'pyhelper.h']
|
||||||
|
|
||||||
defs_stepcompress = """
|
defs_stepcompress = """
|
||||||
struct stepcompress *stepcompress_alloc(uint32_t max_error
|
struct stepcompress *stepcompress_alloc(uint32_t max_error
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
// Helper functions for C / Python interface
|
||||||
|
//
|
||||||
|
// Copyright (C) 2016 Kevin O'Connor <kevin@koconnor.net>
|
||||||
|
//
|
||||||
|
// This file may be distributed under the terms of the GNU GPLv3 license.
|
||||||
|
|
||||||
|
#include <errno.h> // errno
|
||||||
|
#include <stdint.h> // uint8_t
|
||||||
|
#include <stdio.h> // fprintf
|
||||||
|
#include <string.h> // strerror
|
||||||
|
#include <sys/time.h> // gettimeofday
|
||||||
|
#include <time.h> // struct timespec
|
||||||
|
#include "pyhelper.h" // get_time
|
||||||
|
|
||||||
|
// Return the current system time as a double
|
||||||
|
double
|
||||||
|
get_time(void)
|
||||||
|
{
|
||||||
|
struct timeval tv;
|
||||||
|
gettimeofday(&tv, NULL);
|
||||||
|
return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill a 'struct timespec' with a system time stored in a double
|
||||||
|
struct timespec
|
||||||
|
fill_time(double time)
|
||||||
|
{
|
||||||
|
time_t t = time;
|
||||||
|
return (struct timespec) {t, (time - t)*1000000000. };
|
||||||
|
}
|
||||||
|
|
||||||
|
// Report 'errno' in a message written to stderr
|
||||||
|
void
|
||||||
|
report_errno(char *where, int rc)
|
||||||
|
{
|
||||||
|
int e = errno;
|
||||||
|
fprintf(stderr, "Got error %d in %s: (%d)%s\n", rc, where, e, strerror(e));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return a hex character for a given number
|
||||||
|
#define GETHEX(x) ((x) < 10 ? '0' + (x) : 'e' + (x) - 10)
|
||||||
|
|
||||||
|
// Translate a binary string into an ASCII string with escape sequences
|
||||||
|
char *
|
||||||
|
dump_string(char *outbuf, int outbuf_size, char *inbuf, int inbuf_size)
|
||||||
|
{
|
||||||
|
char *outend = &outbuf[outbuf_size-5], *o = outbuf;
|
||||||
|
uint8_t *inend = (void*)&inbuf[inbuf_size], *p = (void*)inbuf;
|
||||||
|
while (p < inend && o < outend) {
|
||||||
|
uint8_t c = *p++;
|
||||||
|
if (c > 31 && c < 127 && c != '\\') {
|
||||||
|
*o++ = c;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
*o++ = '\\';
|
||||||
|
*o++ = 'x';
|
||||||
|
*o++ = GETHEX(c >> 4);
|
||||||
|
*o++ = GETHEX(c & 0x0f);
|
||||||
|
}
|
||||||
|
*o = '\0';
|
||||||
|
return outbuf;
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
#ifndef PYHELPER_H
|
||||||
|
#define PYHELPER_H
|
||||||
|
|
||||||
|
double get_time(void);
|
||||||
|
struct timespec fill_time(double time);
|
||||||
|
void report_errno(char *where, int rc);
|
||||||
|
char *dump_string(char *outbuf, int outbuf_size, char *inbuf, int inbuf_size);
|
||||||
|
|
||||||
|
#endif // pyhelper.h
|
|
@ -12,7 +12,6 @@
|
||||||
// clock times, prioritizes commands, and handles retransmissions. A
|
// clock times, prioritizes commands, and handles retransmissions. A
|
||||||
// background thread is launched to do this work and minimize latency.
|
// background thread is launched to do this work and minimize latency.
|
||||||
|
|
||||||
#include <errno.h> // errno
|
|
||||||
#include <math.h> // ceil
|
#include <math.h> // ceil
|
||||||
#include <poll.h> // poll
|
#include <poll.h> // poll
|
||||||
#include <pthread.h> // pthread_mutex_lock
|
#include <pthread.h> // pthread_mutex_lock
|
||||||
|
@ -21,70 +20,13 @@
|
||||||
#include <stdio.h> // snprintf
|
#include <stdio.h> // snprintf
|
||||||
#include <stdlib.h> // malloc
|
#include <stdlib.h> // malloc
|
||||||
#include <string.h> // memset
|
#include <string.h> // memset
|
||||||
#include <sys/time.h> // gettimeofday
|
|
||||||
#include <time.h> // struct timespec
|
|
||||||
#include <termios.h> // tcflush
|
#include <termios.h> // tcflush
|
||||||
#include <unistd.h> // pipe
|
#include <unistd.h> // pipe
|
||||||
#include "list.h" // list_add_tail
|
#include "list.h" // list_add_tail
|
||||||
|
#include "pyhelper.h" // get_time
|
||||||
#include "serialqueue.h" // struct queue_message
|
#include "serialqueue.h" // struct queue_message
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
|
||||||
* Helper functions
|
|
||||||
****************************************************************/
|
|
||||||
|
|
||||||
// Return the current system time as a double
|
|
||||||
static double
|
|
||||||
get_time(void)
|
|
||||||
{
|
|
||||||
struct timeval tv;
|
|
||||||
gettimeofday(&tv, NULL);
|
|
||||||
return (double)tv.tv_sec + (double)tv.tv_usec / 1000000.;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
// Fill a 'struct timespec' with a system time stored in a double
|
|
||||||
struct timespec
|
|
||||||
fill_time(double time)
|
|
||||||
{
|
|
||||||
time_t t = time;
|
|
||||||
return (struct timespec) {t, (time - t)*1000000000. };
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Report 'errno' in a message written to stderr
|
|
||||||
void
|
|
||||||
report_errno(char *where, int rc)
|
|
||||||
{
|
|
||||||
int e = errno;
|
|
||||||
fprintf(stderr, "Got error %d in %s: (%d)%s\n", rc, where, e, strerror(e));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return a hex character for a given number
|
|
||||||
#define GETHEX(x) ((x) < 10 ? '0' + (x) : 'e' + (x) - 10)
|
|
||||||
|
|
||||||
// Translate a binary string into an ASCII string with escape sequences
|
|
||||||
char *
|
|
||||||
dump_string(char *outbuf, int outbuf_size, uint8_t *inbuf, int inbuf_size)
|
|
||||||
{
|
|
||||||
char *outend = &outbuf[outbuf_size-5], *o = outbuf;
|
|
||||||
uint8_t *inend = &inbuf[inbuf_size], *p = inbuf;
|
|
||||||
while (p < inend && o < outend) {
|
|
||||||
uint8_t c = *p++;
|
|
||||||
if (c > 31 && c < 127 && c != '\\') {
|
|
||||||
*o++ = c;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
*o++ = '\\';
|
|
||||||
*o++ = 'x';
|
|
||||||
*o++ = GETHEX(c >> 4);
|
|
||||||
*o++ = GETHEX(c & 0x0f);
|
|
||||||
}
|
|
||||||
*o = '\0';
|
|
||||||
return outbuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************
|
/****************************************************************
|
||||||
* Poll reactor
|
* Poll reactor
|
||||||
****************************************************************/
|
****************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue