JNIEXPORT void JNICALL Java_jmtp_PortableDeviceManagerImplWin32_refreshDeviceListImpl (JNIEnv* env, jobject obj) { HRESULT hr; IPortableDeviceManager* pDeviceManager; pDeviceManager = GetPortableDeviceManager(env, obj); hr = pDeviceManager->RefreshDeviceList(); if(FAILED(hr)) { ThrowCOMException(env, L"Failed to refresh the devicelist", hr); return; } }
JNIEXPORT jobjectArray JNICALL Java_jmtp_PortableDeviceManagerImplWin32_getDevicesImpl (JNIEnv* env, jobject obj) { HRESULT hr; IPortableDeviceManager* pDeviceManager; LPWSTR* deviceIDs; DWORD dwCount; jobjectArray jobjaDeviceIDs; pDeviceManager = GetPortableDeviceManager(env, obj); hr = pDeviceManager->GetDevices(NULL, &dwCount); if(FAILED(hr)) { ThrowCOMException(env, L"Failed to count the connected devices", hr); return NULL; } else { deviceIDs = new LPWSTR[dwCount]; hr = pDeviceManager->GetDevices(deviceIDs, &dwCount); if(SUCCEEDED(hr)) { jobjaDeviceIDs = env->NewObjectArray(dwCount, env->FindClass("java/lang/String"), NULL); for(DWORD i = 0; i < dwCount; i++) { env->SetObjectArrayElement(jobjaDeviceIDs, i, env->NewString((jchar*)deviceIDs[i], wcslen(deviceIDs[i]))); CoTaskMemFree(deviceIDs[i]); } } delete[] deviceIDs; if(FAILED(hr)) { ThrowCOMException(env, L"Failed to count the connected devices", hr); return NULL; } return jobjaDeviceIDs; } }
JNIEXPORT jstring JNICALL Java_jmtp_PortableDeviceImplWin32_getDeviceDescription (JNIEnv* env, jobject obj, jstring deviceID) { IPortableDeviceManager* pDeviceManager; LPWSTR wszDeviceID; LPWSTR wszDeviceDescription; DWORD length; jstring description; pDeviceManager = GetPortableDeviceManager(env, obj); wszDeviceID = (WCHAR*)env->GetStringChars(deviceID, NULL); pDeviceManager->GetDeviceDescription(wszDeviceID, NULL, &length); wszDeviceDescription = new WCHAR[length + 1]; pDeviceManager->GetDeviceDescription(wszDeviceID, wszDeviceDescription, &length); description = env->NewString((jchar*)wszDeviceDescription, wcslen(wszDeviceDescription)); env->ReleaseStringChars(deviceID, (jchar*)wszDeviceID); delete wszDeviceDescription; return description; }
JNIEXPORT jstring JNICALL Java_jmtp_PortableDeviceImplWin32_getDeviceFriendlyName (JNIEnv* env, jobject obj, jstring deviceID) { IPortableDeviceManager* pDeviceManager; LPWSTR wszDeviceID; LPWSTR wszDeviceFriendlyName; DWORD length; jstring friendlyName; pDeviceManager = GetPortableDeviceManager(env, obj); wszDeviceID = (WCHAR*)env->GetStringChars(deviceID, NULL); pDeviceManager->GetDeviceFriendlyName(wszDeviceID, NULL, &length); wszDeviceFriendlyName = new WCHAR[length + 1]; pDeviceManager->GetDeviceFriendlyName(wszDeviceID, wszDeviceFriendlyName, &length); friendlyName = env->NewString((jchar*)wszDeviceFriendlyName, wcslen(wszDeviceFriendlyName)); env->ReleaseStringChars(deviceID, (jchar*)wszDeviceID); delete wszDeviceFriendlyName; return friendlyName; }