/* * Class: net_sourceforge_usbdm_connections_usbdm_Usbdm * Method: getBDMSerialNumber * Signature: ([C)I */ JNIEXPORT jint JNICALL Java_net_sourceforge_usbdm_connections_usbdm_Usbdm_getBDMSerialNumber(JNIEnv *env, jclass, jbyteArray jString) { const char *stringUTF16LE; USBDM_ErrorCode rc = BDM_RC_OK; rc = USBDM_GetBDMSerialNumber(&stringUTF16LE); if (rc == BDM_RC_OK) { int16_t *p = (int16_t *)stringUTF16LE; while (*p != 0) { p++; } jbyte jlen = (char*)p-stringUTF16LE; env->SetByteArrayRegion(jString, 0, 1, &jlen); env->SetByteArrayRegion(jString, 1, jlen, (const jbyte *)stringUTF16LE); } return rc; }
/* * Class: net.sourceforge.usbdm.jni.usbdm * Method: usbdm_getBDMSerialNumber * Signature: ([C)I */ JNIEXPORT jint JNICALL Java_net_sourceforge_usbdm_jni_Usbdm_usbdmGetBDMSerialNumber(JNIEnv *env, jclass, jbyteArray jString) { const char *stringUTF16LE; USBDM_ErrorCode rc = BDM_RC_OK; rc = USBDM_GetBDMSerialNumber(&stringUTF16LE); if (rc == BDM_RC_OK) { int16_t *p = (int16_t *)stringUTF16LE; while (*p != 0) { p++; } jint jlen = (char*)p-stringUTF16LE;; jbyte jlenMSB = (jbyte)(jlen>>8); jbyte jlenLSB = (jbyte)(jlen); jint len = env->GetArrayLength(jString); if (jlen > len-2) { // Buff not big enough return BDM_RC_ILLEGAL_PARAMS; } env->SetByteArrayRegion(jString, 0, 1, &jlenMSB); env->SetByteArrayRegion(jString, 1, 1, &jlenLSB); env->SetByteArrayRegion(jString, 2, jlen, (const jbyte *)stringUTF16LE); }