Store the handshake packet in the device handle.
This commit is contained in:
parent
aa7599929e
commit
67363ea05c
@ -44,6 +44,7 @@
|
||||
typedef struct reefnet_sensus_device_t {
|
||||
device_t base;
|
||||
struct serial *port;
|
||||
unsigned char handshake[REEFNET_SENSUS_HANDSHAKE_SIZE];
|
||||
unsigned int waiting;
|
||||
unsigned int timestamp;
|
||||
unsigned int devtime;
|
||||
@ -117,6 +118,7 @@ reefnet_sensus_device_open (device_t **out, const char* name)
|
||||
device->timestamp = 0;
|
||||
device->systime = (time_t) -1;
|
||||
device->devtime = 0;
|
||||
memset (device->handshake, 0, sizeof (device->handshake));
|
||||
|
||||
// Open the device.
|
||||
int rc = serial_open (&device->port, name);
|
||||
@ -213,13 +215,8 @@ reefnet_sensus_device_set_fingerprint (device_t *abstract, const unsigned char d
|
||||
|
||||
|
||||
static device_status_t
|
||||
reefnet_sensus_handshake (reefnet_sensus_device_t *device, unsigned char *data, unsigned int size)
|
||||
reefnet_sensus_handshake (reefnet_sensus_device_t *device)
|
||||
{
|
||||
if (size < REEFNET_SENSUS_HANDSHAKE_SIZE) {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return DEVICE_STATUS_MEMORY;
|
||||
}
|
||||
|
||||
// Send the command to the device.
|
||||
unsigned char command = 0x0A;
|
||||
int n = serial_write (device->port, &command, 1);
|
||||
@ -265,7 +262,8 @@ reefnet_sensus_handshake (reefnet_sensus_device_t *device, unsigned char *data,
|
||||
device->systime = time (NULL);
|
||||
device->devtime = array_uint32_le (handshake + 8);
|
||||
|
||||
memcpy (data, handshake + 2, REEFNET_SENSUS_HANDSHAKE_SIZE);
|
||||
// Store the handshake packet.
|
||||
memcpy (device->handshake, handshake + 2, REEFNET_SENSUS_HANDSHAKE_SIZE);
|
||||
|
||||
// Emit a device info event.
|
||||
device_devinfo_t devinfo;
|
||||
@ -302,8 +300,7 @@ reefnet_sensus_device_dump (device_t *abstract, unsigned char *data, unsigned in
|
||||
device_event_emit (abstract, DEVICE_EVENT_PROGRESS, &progress);
|
||||
|
||||
// Wake-up the device.
|
||||
unsigned char handshake[REEFNET_SENSUS_HANDSHAKE_SIZE] = {0};
|
||||
device_status_t rc = reefnet_sensus_handshake (device, handshake, sizeof (handshake));
|
||||
device_status_t rc = reefnet_sensus_handshake (device);
|
||||
if (rc != DEVICE_STATUS_SUCCESS)
|
||||
return rc;
|
||||
|
||||
|
||||
@ -43,6 +43,7 @@
|
||||
typedef struct reefnet_sensuspro_device_t {
|
||||
device_t base;
|
||||
struct serial *port;
|
||||
unsigned char handshake[REEFNET_SENSUSPRO_HANDSHAKE_SIZE];
|
||||
unsigned int timestamp;
|
||||
unsigned int devtime;
|
||||
time_t systime;
|
||||
@ -96,6 +97,7 @@ reefnet_sensuspro_device_open (device_t **out, const char* name)
|
||||
device->timestamp = 0;
|
||||
device->systime = (time_t) -1;
|
||||
device->devtime = 0;
|
||||
memset (device->handshake, 0, sizeof (device->handshake));
|
||||
|
||||
// Open the device.
|
||||
int rc = serial_open (&device->port, name);
|
||||
@ -187,13 +189,8 @@ reefnet_sensuspro_device_set_fingerprint (device_t *abstract, const unsigned cha
|
||||
|
||||
|
||||
static device_status_t
|
||||
reefnet_sensuspro_handshake (reefnet_sensuspro_device_t *device, unsigned char *data, unsigned int size)
|
||||
reefnet_sensuspro_handshake (reefnet_sensuspro_device_t *device)
|
||||
{
|
||||
if (size < REEFNET_SENSUSPRO_HANDSHAKE_SIZE) {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return DEVICE_STATUS_MEMORY;
|
||||
}
|
||||
|
||||
// Assert a break condition.
|
||||
serial_set_break (device->port, 1);
|
||||
|
||||
@ -234,7 +231,8 @@ reefnet_sensuspro_handshake (reefnet_sensuspro_device_t *device, unsigned char *
|
||||
device->systime = time (NULL);
|
||||
device->devtime = array_uint32_le (handshake + 6);
|
||||
|
||||
memcpy (data, handshake, REEFNET_SENSUSPRO_HANDSHAKE_SIZE);
|
||||
// Store the handshake packet.
|
||||
memcpy (device->handshake, handshake, REEFNET_SENSUSPRO_HANDSHAKE_SIZE);
|
||||
|
||||
// Emit a device info event.
|
||||
device_devinfo_t devinfo;
|
||||
@ -253,8 +251,7 @@ static device_status_t
|
||||
reefnet_sensuspro_send (reefnet_sensuspro_device_t *device, unsigned char command)
|
||||
{
|
||||
// Wake-up the device.
|
||||
unsigned char handshake[REEFNET_SENSUSPRO_HANDSHAKE_SIZE] = {0};
|
||||
device_status_t rc = reefnet_sensuspro_handshake (device, handshake, sizeof (handshake));
|
||||
device_status_t rc = reefnet_sensuspro_handshake (device);
|
||||
if (rc != DEVICE_STATUS_SUCCESS)
|
||||
return rc;
|
||||
|
||||
|
||||
@ -48,6 +48,7 @@
|
||||
typedef struct reefnet_sensusultra_device_t {
|
||||
device_t base;
|
||||
struct serial *port;
|
||||
unsigned char handshake[REEFNET_SENSUSULTRA_HANDSHAKE_SIZE];
|
||||
unsigned int maxretries;
|
||||
unsigned int timestamp;
|
||||
unsigned int devtime;
|
||||
@ -103,6 +104,7 @@ reefnet_sensusultra_device_open (device_t **out, const char* name)
|
||||
device->timestamp = 0;
|
||||
device->systime = (time_t) -1;
|
||||
device->devtime = 0;
|
||||
memset (device->handshake, 0, sizeof (device->handshake));
|
||||
|
||||
// Open the device.
|
||||
int rc = serial_open (&device->port, name);
|
||||
@ -291,13 +293,8 @@ reefnet_sensusultra_packet (reefnet_sensusultra_device_t *device, unsigned char
|
||||
|
||||
|
||||
static device_status_t
|
||||
reefnet_sensusultra_handshake (reefnet_sensusultra_device_t *device, unsigned char *data, unsigned int size)
|
||||
reefnet_sensusultra_handshake (reefnet_sensusultra_device_t *device)
|
||||
{
|
||||
if (size < REEFNET_SENSUSULTRA_HANDSHAKE_SIZE) {
|
||||
WARNING ("Insufficient buffer space available.");
|
||||
return DEVICE_STATUS_MEMORY;
|
||||
}
|
||||
|
||||
// Flush the input and output buffers.
|
||||
serial_flush (device->port, SERIAL_QUEUE_BOTH);
|
||||
|
||||
@ -351,7 +348,8 @@ reefnet_sensusultra_handshake (reefnet_sensusultra_device_t *device, unsigned ch
|
||||
device->systime = time (NULL);
|
||||
device->devtime = array_uint32_le (handshake + 4);
|
||||
|
||||
memcpy (data, handshake, REEFNET_SENSUSULTRA_HANDSHAKE_SIZE);
|
||||
// Store the handshake packet.
|
||||
memcpy (device->handshake, handshake, REEFNET_SENSUSULTRA_HANDSHAKE_SIZE);
|
||||
|
||||
// Emit a device info event.
|
||||
device_devinfo_t devinfo;
|
||||
@ -405,8 +403,7 @@ static device_status_t
|
||||
reefnet_sensusultra_send (reefnet_sensusultra_device_t *device, unsigned short command)
|
||||
{
|
||||
// Wake-up the device.
|
||||
unsigned char handshake[REEFNET_SENSUSULTRA_HANDSHAKE_SIZE] = {0};
|
||||
device_status_t rc = reefnet_sensusultra_handshake (device, handshake, sizeof (handshake));
|
||||
device_status_t rc = reefnet_sensusultra_handshake (device);
|
||||
if (rc != DEVICE_STATUS_SUCCESS)
|
||||
return rc;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user