Store the handshake packet in the device handle.

This commit is contained in:
Jef Driesen 2009-04-14 21:36:44 +00:00
parent aa7599929e
commit 67363ea05c
3 changed files with 18 additions and 27 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;