diff --git a/src/reefnet_sensus.c b/src/reefnet_sensus.c index 0cb2211..3cd828d 100644 --- a/src/reefnet_sensus.c +++ b/src/reefnet_sensus.c @@ -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; diff --git a/src/reefnet_sensuspro.c b/src/reefnet_sensuspro.c index 3f27003..3784bdf 100644 --- a/src/reefnet_sensuspro.c +++ b/src/reefnet_sensuspro.c @@ -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; diff --git a/src/reefnet_sensusultra.c b/src/reefnet_sensusultra.c index e88be4d..d63736d 100644 --- a/src/reefnet_sensusultra.c +++ b/src/reefnet_sensusultra.c @@ -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;