/*
 * 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);
   }