Skip to content

Commit 32f84d3

Browse files
committed
libbladeRF: add bladerf_get_serial_struct function
Adds a bladerf_get_serial_struct function, which is similar in functionality to bladerf_get_serial, but instead of requiring a user-supplied buffer of at least BLADERF_SERIAL_LENGTH bytes, it expects a pointer to a struct bladerf_serial which itself has a buffer of BLADERF_SERIAL_LENGTH bytes as a member. This turns BLADERF_SERIAL_LENGTH into an API-internal value, instead of something that API users have to be intently aware of. Fixes Nuand#382
1 parent 5a886c3 commit 32f84d3

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

host/libraries/libbladeRF/include/libbladeRF.h

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,13 @@ struct bladerf_range {
372372
float scale; /**< Unit scale */
373373
};
374374

375+
/**
376+
* Serial number structure
377+
*/
378+
struct bladerf_serial {
379+
char serial[BLADERF_SERIAL_LENGTH]; /**< Device serial number string */
380+
};
381+
375382
/**
376383
* Version structure for FPGA, firmware, libbladeRF, and associated utilities
377384
*/
@@ -408,7 +415,7 @@ typedef enum {
408415
} bladerf_dev_speed;
409416

410417
/**
411-
* Query a device's serial number
418+
* Query a device's serial number (deprecated)
412419
*
413420
* @param dev Device handle
414421
* @param[out] serial This user-supplied buffer, which <b>must be at least
@@ -417,11 +424,39 @@ typedef enum {
417424
* error occurs (as indicated by a non-zero return value),
418425
* no data will be written to this buffer.
419426
*
427+
* @deprecated New code should use ::bladerf_get_serial_struct instead.
428+
*
420429
* @return 0 on success, value from \ref RETCODES list on failure
421430
*/
422431
API_EXPORT
423432
int CALL_CONV bladerf_get_serial(struct bladerf *dev, char *serial);
424433

434+
/**
435+
* Query a device's serial number
436+
*
437+
* @param dev Device handle
438+
* @param[out] serial Pointer to a bladerf_serial structure, which will be
439+
* populated with a `serial` string on success.
440+
*
441+
* Example code:
442+
*
443+
* @code
444+
* struct bladerf_serial sn;
445+
*
446+
* status = bladerf_get_serial_struct(dev, &sn);
447+
* if (status < 0) {
448+
* // error handling here
449+
* }
450+
*
451+
* printf("Serial number: %s\n", sn.serial);
452+
* @endcode
453+
*
454+
* @return 0 on success, value from \ref RETCODES list on failure
455+
*/
456+
API_EXPORT
457+
int CALL_CONV bladerf_get_serial_struct(struct bladerf *dev,
458+
struct bladerf_serial *serial);
459+
425460
/**
426461
* Query a device's FPGA size
427462
*

host/libraries/libbladeRF/src/bladerf.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,12 +331,32 @@ int bladerf_get_serial(struct bladerf *dev, char *serial)
331331
int status;
332332
MUTEX_LOCK(&dev->lock);
333333

334+
/** TODO: add deprecation warning */
335+
334336
status = dev->board->get_serial(dev, serial);
335337

336338
MUTEX_UNLOCK(&dev->lock);
337339
return status;
338340
}
339341

342+
int bladerf_get_serial_struct(struct bladerf *dev,
343+
struct bladerf_serial *serial)
344+
{
345+
int status;
346+
MUTEX_LOCK(&dev->lock);
347+
348+
char serialstr[BLADERF_SERIAL_LENGTH];
349+
350+
status = dev->board->get_serial(dev, serialstr);
351+
352+
if (status >= 0) {
353+
strncpy(serial->serial, serialstr, BLADERF_SERIAL_LENGTH - 1);
354+
}
355+
356+
MUTEX_UNLOCK(&dev->lock);
357+
return status;
358+
}
359+
340360
int bladerf_get_fpga_size(struct bladerf *dev, bladerf_fpga_size *size)
341361
{
342362
int status;

0 commit comments

Comments
 (0)