本文內(nèi)容
● 發(fā)現(xiàn)已連接設(shè)備數(shù)
● 打開設(shè)備
● 識(shí)別特定設(shè)備
● 打開默認(rèn)設(shè)備
● 后續(xù)步驟
本文介紹如何查找然后打開 Femto Bolt。 本文將解釋如何處理有多個(gè)設(shè)備連接到計(jì)算機(jī)的情況。
你還可以參考 SDK 枚舉示例,其中演示了如何使用本文所述的函數(shù)。
本文將介紹以下函數(shù):
● k4a_device_get_installed_count()
發(fā)現(xiàn)已連接的設(shè)備數(shù)
首先使用 k4a_device_get_installed_count() 獲取當(dāng)前已連接的 Femto Bolt 設(shè)備數(shù)。
打開設(shè)備
若要獲取設(shè)備的相關(guān)信息或從中讀取數(shù)據(jù),首先需要使用 k4a_device_open() 打開該設(shè)備的句柄。
k4a_device_t device = NULL; for (uint8_t deviceIndex = 0; deviceIndex < device_count; deviceIndex++) { if (K4A_RESULT_SUCCEEDED != k4a_device_open(deviceIndex, &device)) { printf("%d: Failed to open device\n", deviceIndex); continue; } ... k4a_device_close(device); }
k4a_device_open() 的 index 參數(shù)指示當(dāng)連接了多個(gè)設(shè)備時(shí)要打開哪個(gè)設(shè)備。 如果你預(yù)期只會(huì)連接一個(gè)設(shè)備,可以傳遞 K4A_DEVICE_DEFAULT 的參數(shù)或 0 來指示第一臺(tái)設(shè)備。
用完句柄后,每當(dāng)打開設(shè)備時(shí),都需要調(diào)用 k4a_device_close()。 在關(guān)閉句柄之前,無法打開同一設(shè)備的其他句柄。
識(shí)別特定的設(shè)備
在附加或分離設(shè)備之前,設(shè)備按索引枚舉的順序不會(huì)更改。 若要識(shí)別物理設(shè)備,應(yīng)使用設(shè)備的序列號(hào)。
若要讀取設(shè)備中的序列號(hào),請(qǐng)?jiān)诖蜷_句柄后使用 k4a_device_get_serialnum() 函數(shù)。此示例演示如何分配適量?jī)?nèi)存來存儲(chǔ)序列號(hào)。
char *serial_number = NULL; size_t serial_number_length = 0; if (K4A_BUFFER_RESULT_TOO_SMALL != k4a_device_get_serialnum(device, NULL, &serial_number_length)) { printf("%d: Failed to get serial number length\n", deviceIndex); k4a_device_close(device); device = NULL; continue; } serial_number = malloc(serial_number_length); if (serial_number == NULL) { printf("%d: Failed to allocate memory for serial number (%zu bytes)\n", deviceIndex, serial_number_length); k4a_device_close(device); device = NULL; continue; } if (K4A_BUFFER_RESULT_SUCCEEDED != k4a_device_get_serialnum(device, serial_number, &serial_number_length)) { printf("%d: Failed to get serial number\n", deviceIndex); free(serial_number); serial_number = NULL; k4a_device_close(device); device = NULL; continue; } printf("%d: Device \"%s\"\n", deviceIndex, serial_number);
打開默認(rèn)設(shè)備
在大多數(shù)應(yīng)用程序中,只會(huì)將單個(gè)Femto Bolt 附加到同一臺(tái)計(jì)算機(jī)。 如果預(yù)期只需連接單個(gè)設(shè)備,可以結(jié)合 K4A_DEVICE_DEFAULT 的 index 調(diào)用 k4a_device_open() 打開第一臺(tái)設(shè)備。
k4a_device_t device = NULL; uint32_t device_count = k4a_device_get_installed_count(); if (device_count != 1) { printf("Unexpected number of devices found (%d)\n", device_count); goto Exit; } if (K4A_RESULT_SUCCEEDED != k4a_device_open(K4A_DEVICE_DEFAULT, &device)) { printf("Failed to open device\n"); goto Exit; }
后續(xù)步驟