@@ -243,30 +243,37 @@ JNIEXPORT jint JNICALL Java_jssc_SerialNativeInterface_writeBytes
243243 if ( exClz ) env->ThrowNew (exClz, " buffer" );
244244 return 0 ;
245245 }
246- jbyte* jBuffer = env->GetByteArrayElements (buffer, NULL );
246+ jbyte * jBuffer = env->GetByteArrayElements (buffer, NULL );
247247 if ( !jBuffer ){
248248 jclass exClz = env->ExceptionCheck () ? NULL : env->FindClass (" java/lang/RuntimeException" );
249249 if ( exClz ) env->ThrowNew (exClz, " jni->GetByteArrayElements() failed" );
250250 return 0 ;
251251 }
252252 OVERLAPPED *overlapped = new OVERLAPPED ();
253253 overlapped->hEvent = CreateEventA (NULL , true , false , NULL );
254+ DWORD err = 0 ;
254255 if (WriteFile (hComm, jBuffer, (DWORD)env->GetArrayLength (buffer), &lpNumberOfBytesWritten, overlapped)){
255256 returnValue = lpNumberOfBytesWritten;
256- }
257- else if (GetLastError () == ERROR_IO_PENDING){
258- if (WaitForSingleObject (overlapped->hEvent , INFINITE) == WAIT_OBJECT_0){
259- if (GetOverlappedResult (hComm, overlapped, &lpNumberOfBytesTransferred, false )){
260- returnValue = lpNumberOfBytesTransferred;
257+ }else {
258+ err = GetLastError ();
259+ if ( err == ERROR_IO_PENDING ){
260+ if (WaitForSingleObject (overlapped->hEvent , INFINITE) == WAIT_OBJECT_0){
261+ if (GetOverlappedResult (hComm, overlapped, &lpNumberOfBytesTransferred, false )){
262+ returnValue = lpNumberOfBytesTransferred;
263+ }
264+ }else {
265+ err = GetLastError ();
261266 }
262267 }
263268 }
264269 env->ReleaseByteArrayElements (buffer, jBuffer, 0 );
265270 CloseHandle (overlapped->hEvent );
266271 delete overlapped;
267272 if ( returnValue < 0 ){
273+ char emsg[128 ];
274+ snprintf (emsg, sizeof emsg, " Error %d. Details: https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes#system-error-codes" , err);
268275 jobject *exClz = env->FindClass (" jssc/SerialPortException" );
269- if ( exClz ) env->ThrowNew (exClz, " WriteFile() failed " );
276+ if ( exClz ) env->ThrowNew (exClz, emsg );
270277 return 0 ;
271278 }
272279 return returnValue;
0 commit comments