mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
core: add more C interfaces for fingerprint table
These are used to read/write fingerprint records as git or XML data from C code. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
02c770d997
commit
33527cb9e5
2 changed files with 61 additions and 0 deletions
|
@ -252,3 +252,54 @@ extern "C" void create_fingerprint_node(struct fingerprint_table *table, uint32_
|
|||
table->fingerprints.insert(it, fpr);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void create_fingerprint_node_from_hex(struct fingerprint_table *table, uint32_t model, uint32_t serial,
|
||||
const char *hex_data, uint32_t fdeviceid, uint32_t fdiveid)
|
||||
{
|
||||
QByteArray raw = QByteArray::fromHex(hex_data);
|
||||
create_fingerprint_node(table, model, serial,
|
||||
(const unsigned char *)raw.constData(), raw.size(), fdeviceid, fdiveid);
|
||||
}
|
||||
|
||||
extern "C" int nr_fingerprints(struct fingerprint_table *table)
|
||||
{
|
||||
return table->fingerprints.size();
|
||||
}
|
||||
|
||||
extern "C" uint32_t fp_get_model(struct fingerprint_table *table, unsigned int i)
|
||||
{
|
||||
if (!table || i >= table->fingerprints.size())
|
||||
return 0;
|
||||
return table->fingerprints[i].model;
|
||||
}
|
||||
|
||||
extern "C" uint32_t fp_get_serial(struct fingerprint_table *table, unsigned int i)
|
||||
{
|
||||
if (!table || i >= table->fingerprints.size())
|
||||
return 0;
|
||||
return table->fingerprints[i].serial;
|
||||
}
|
||||
|
||||
extern "C" uint32_t fp_get_deviceid(struct fingerprint_table *table, unsigned int i)
|
||||
{
|
||||
if (!table || i >= table->fingerprints.size())
|
||||
return 0;
|
||||
return table->fingerprints[i].fdeviceid;
|
||||
}
|
||||
|
||||
extern "C" uint32_t fp_get_diveid(struct fingerprint_table *table, unsigned int i)
|
||||
{
|
||||
if (!table || i >= table->fingerprints.size())
|
||||
return 0;
|
||||
return table->fingerprints[i].fdiveid;
|
||||
}
|
||||
|
||||
extern "C" char *fp_get_data(struct fingerprint_table *table, unsigned int i)
|
||||
{
|
||||
if (!table || i >= table->fingerprints.size())
|
||||
return 0;
|
||||
struct fingerprint_record *fpr = &table->fingerprints[i];
|
||||
// fromRawData() avoids one copy of the raw_data
|
||||
QByteArray hex = QByteArray::fromRawData((char *)fpr->raw_data, fpr->fsize).toHex();
|
||||
return strdup(hex.constData());
|
||||
}
|
||||
|
|
|
@ -44,9 +44,19 @@ extern void free_device_table(struct device_table *devices);
|
|||
// create fingerprint entry - raw data remains owned by caller
|
||||
extern void create_fingerprint_node(struct fingerprint_table *table, uint32_t model, uint32_t serial,
|
||||
const unsigned char *raw_data, unsigned int fsize, uint32_t fdeviceid, uint32_t fdiveid);
|
||||
extern void create_fingerprint_node_from_hex(struct fingerprint_table *table, uint32_t model, uint32_t serial,
|
||||
const char *hex_data, uint32_t fdeviceid, uint32_t fdiveid);
|
||||
// look up the fingerprint for model/serial - returns the number of bytes in the fingerprint; memory owned by the table
|
||||
extern unsigned int get_fingerprint_data(const struct fingerprint_table *table, uint32_t model, uint32_t serial, const unsigned char **fp_out);
|
||||
|
||||
// access the fingerprint data from C
|
||||
extern int nr_fingerprints(struct fingerprint_table *table);
|
||||
extern uint32_t fp_get_model(struct fingerprint_table *table, unsigned int i);
|
||||
extern uint32_t fp_get_serial(struct fingerprint_table *table, unsigned int i);
|
||||
extern uint32_t fp_get_deviceid(struct fingerprint_table *table, unsigned int i);
|
||||
extern uint32_t fp_get_diveid(struct fingerprint_table *table, unsigned int i);
|
||||
extern char *fp_get_data(struct fingerprint_table *table, unsigned int i);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue