/** @brief Driver APIs for TRIV2 */
class TrinityVision2API : public DriverAPI {
public:
- static int getNumDevices ();
+ static int getNumDevices (std::bitset<CHAR_BIT> *bitset = nullptr);
TrinityVision2API (int dev_id);
~TrinityVision2API ();
private:
int getDrvVersion () const;
static const std::string dev_node_base;
- static std::bitset<CHAR_BIT> dev_bitset;
#ifdef ENABLE_CUSE
static ThreadSafeMap<int, CuseElement> cuse_map;
constexpr size_t default_buf_size = (256 * PAGE_SIZE);
const std::string TrinityVision2API::dev_node_base = "triv2";
-std::bitset<CHAR_BIT> TrinityVision2API::dev_bitset = 0;
#ifdef ENABLE_CUSE
/** @brief Cuse-hwmem element */
* @param[in] dev_id device id
*/
TrinityVision2API::TrinityVision2API (int dev_id) : DriverAPI (dev_id) {
+ std::bitset<CHAR_BIT> dev_bitset;
int num_devs;
if (dev_id > max_num_devs) {
}
/* Rescan the device nodes to check for newly added or removed one */
- TrinityVision2API::dev_bitset.reset ();
- num_devs = TrinityVision2API::getNumDevices ();
-
- if ((dev_id > num_devs) || !(TrinityVision2API::dev_bitset.test (dev_id))) {
+ dev_bitset.reset ();
+ num_devs = TrinityVision2API::getNumDevices (&dev_bitset);
+ if ((dev_id > num_devs) || !dev_bitset.test (dev_id)) {
this->dev_id_ = -1;
return;
}
/**
* @brief get number of available devices. should be enough
+ * @param[in] bitset bitset to indicate the existance of devices
* @return number of available devices.
*/
int
-TrinityVision2API::getNumDevices () {
- static std::string path;
+TrinityVision2API::getNumDevices (std::bitset<CHAR_BIT> *bitset) {
+ std::string path;
struct stat sb;
int cnt = 0;
int ret;
ret = stat (path.c_str (), &sb);
if (ret == 0 && S_ISCHR (sb.st_mode)) {
cnt++;
- TrinityVision2API::dev_bitset.set (i);
+ if (bitset)
+ bitset->set (i);
}
}