Implement the fingerprint function.

This commit is contained in:
Jef Driesen 2009-05-04 09:02:40 +00:00
parent 9089651f17
commit 754d573e0f
2 changed files with 53 additions and 2 deletions

View File

@ -43,6 +43,9 @@
rc == -1 ? DEVICE_STATUS_IO : DEVICE_STATUS_TIMEOUT \
)
#define FP_OFFSET 0
#define FP_SIZE 8
#define ACK 0x5A
#define NAK 0xA5
@ -65,8 +68,10 @@ typedef struct oceanic_veo250_device_t {
device_t base;
struct serial *port;
unsigned int last;
unsigned char fingerprint[FP_SIZE];
} oceanic_veo250_device_t;
static device_status_t oceanic_veo250_device_set_fingerprint (device_t *abstract, const unsigned char data[], unsigned int size);
static device_status_t oceanic_veo250_device_version (device_t *abstract, unsigned char data[], unsigned int size);
static device_status_t oceanic_veo250_device_read (device_t *abstract, unsigned int address, unsigned char data[], unsigned int size);
static device_status_t oceanic_veo250_device_dump (device_t *abstract, unsigned char data[], unsigned int size, unsigned int *result);
@ -75,7 +80,7 @@ static device_status_t oceanic_veo250_device_close (device_t *abstract);
static const device_backend_t oceanic_veo250_device_backend = {
DEVICE_TYPE_OCEANIC_VEO250,
NULL, /* set_fingerprint */
oceanic_veo250_device_set_fingerprint, /* set_fingerprint */
oceanic_veo250_device_version, /* version */
oceanic_veo250_device_read, /* read */
NULL, /* write */
@ -244,6 +249,7 @@ oceanic_veo250_device_open (device_t **out, const char* name)
// Set the default values.
device->port = NULL;
device->last = 0;
memset (device->fingerprint, 0, FP_SIZE);
// Open the device.
int rc = serial_open (&device->port, name);
@ -295,6 +301,26 @@ oceanic_veo250_device_open (device_t **out, const char* name)
}
static device_status_t
oceanic_veo250_device_set_fingerprint (device_t *abstract, const unsigned char data[], unsigned int size)
{
oceanic_veo250_device_t *device = (oceanic_veo250_device_t*) abstract;
if (! device_is_oceanic_veo250 (abstract))
return DEVICE_STATUS_TYPE_MISMATCH;
if (size && size != FP_SIZE)
return DEVICE_STATUS_ERROR;
if (size)
memcpy (device->fingerprint, data, FP_SIZE);
else
memset (device->fingerprint, 0, FP_SIZE);
return DEVICE_STATUS_SUCCESS;
}
static device_status_t
oceanic_veo250_device_close (device_t *abstract)
{

View File

@ -42,14 +42,19 @@
rc == -1 ? DEVICE_STATUS_IO : DEVICE_STATUS_TIMEOUT \
)
#define FP_OFFSET 0
#define FP_SIZE 8
#define ACK 0x5A
#define NAK 0xA5
typedef struct oceanic_vtpro_device_t {
device_t base;
struct serial *port;
unsigned char fingerprint[FP_SIZE];
} oceanic_vtpro_device_t;
static device_status_t oceanic_vtpro_device_set_fingerprint (device_t *abstract, const unsigned char data[], unsigned int size);
static device_status_t oceanic_vtpro_device_version (device_t *abstract, unsigned char data[], unsigned int size);
static device_status_t oceanic_vtpro_device_read (device_t *abstract, unsigned int address, unsigned char data[], unsigned int size);
static device_status_t oceanic_vtpro_device_dump (device_t *abstract, unsigned char data[], unsigned int size, unsigned int *result);
@ -57,7 +62,7 @@ static device_status_t oceanic_vtpro_device_close (device_t *abstract);
static const device_backend_t oceanic_vtpro_device_backend = {
DEVICE_TYPE_OCEANIC_VTPRO,
NULL, /* set_fingerprint */
oceanic_vtpro_device_set_fingerprint, /* set_fingerprint */
oceanic_vtpro_device_version, /* version */
oceanic_vtpro_device_read, /* read */
NULL, /* write */
@ -220,6 +225,7 @@ oceanic_vtpro_device_open (device_t **out, const char* name)
// Set the default values.
device->port = NULL;
memset (device->fingerprint, 0, FP_SIZE);
// Open the device.
int rc = serial_open (&device->port, name);
@ -295,6 +301,25 @@ oceanic_vtpro_device_close (device_t *abstract)
}
static device_status_t
oceanic_vtpro_device_set_fingerprint (device_t *abstract, const unsigned char data[], unsigned int size)
{
oceanic_vtpro_device_t *device = (oceanic_vtpro_device_t*) abstract;
if (! device_is_oceanic_vtpro (abstract))
return DEVICE_STATUS_TYPE_MISMATCH;
if (size && size != FP_SIZE)
return DEVICE_STATUS_ERROR;
if (size)
memcpy (device->fingerprint, data, FP_SIZE);
else
memset (device->fingerprint, 0, FP_SIZE);
return DEVICE_STATUS_SUCCESS;
}
device_status_t
oceanic_vtpro_device_keepalive (device_t *abstract)
{