New defines for purge behavior (echo cancelation)

This commit is contained in:
Stefan Wahren 2012-10-04 22:30:53 +02:00
parent af80dda0d8
commit 78f16f0248
2 changed files with 12 additions and 0 deletions

View File

@ -1468,6 +1468,13 @@ mbus_recv_frame(mbus_handle * handle, mbus_frame *frame)
result = handle->recv(handle, frame); result = handle->recv(handle, frame);
/* frame valid, but wrong direction */
if (mbus_frame_direction(frame) == MBUS_CONTROL_MASK_DIR_M2S)
{
/* purge echo and retry (echo cancelation) */
result = handle->recv(handle, frame);
}
if (frame != NULL) if (frame != NULL)
{ {
/* set timestamp to receive time */ /* set timestamp to receive time */

View File

@ -70,12 +70,17 @@
#define MBUS_PROBE_COLLISION 2 #define MBUS_PROBE_COLLISION 2
#define MBUS_PROBE_ERROR -1 #define MBUS_PROBE_ERROR -1
#define MBUS_FRAME_PURGE_S2M 2
#define MBUS_FRAME_PURGE_M2S 1
#define MBUS_FRAME_PURGE_NONE 0
/** /**
* Unified MBus handle type encapsulating either Serial or TCP gateway. * Unified MBus handle type encapsulating either Serial or TCP gateway.
*/ */
struct _mbus_handle { struct _mbus_handle {
int fd; int fd;
int max_retry; int max_retry;
char purge_first_frame;
char is_serial; /**< _handle type (non zero for serial) */ char is_serial; /**< _handle type (non zero for serial) */
int (*open) (struct _mbus_handle *handle); int (*open) (struct _mbus_handle *handle);
int (*close) (struct _mbus_handle *handle); int (*close) (struct _mbus_handle *handle);