#include "Port.h"
#include "Serial.h"

JNIEXPORT void JNICALL Java_Port_openC
  (JNIEnv * env, jobject jo, 
   jint portNr, 
   jint baudrate, 
   jbyte parity, 
   jbyte databits, 
   jbyte stopbits)
  {if (portNr == 3)
     Open ("COM3");
   if (portNr == 4)
     Open ("COM4");
   if (portNr == 5)
     Open ("COM5");
   if (portNr == 7)
     Open ("COM7");
   if (portNr == 5)
     Open ("COM5");
   if (portNr == 8)
     Open ("COM8");
   if (portNr == 9)
     Open ("COM9");
   if (portNr == 12)
     Open("\\\\.\\COM12");
   if (portNr == 24)
     Open("\\\\.\\COM24");
   if (portNr == 27)
     Open("\\\\.\\COM27");
   Setup((DWORD)baudrate,databits,parity,stopbits);
   SetupHandshaking(0);
  }
   
JNIEXPORT jint JNICALL Java_Port_readC
  (JNIEnv * env, jobject jo)
  {BYTE input[10];
   DWORD noBytesRead;
   Read(input,1,&noBytesRead);
   if(noBytesRead > 0)
     return (byte)input[0];
   else
     return 256;
  }

//JNIEXPORT void JNICALL Java_Port_readAllC
//   (JNIEnv * env, jobject jo, jintArray buff)
//   {BYTE input[100];
//    DWORD noBytesRead;
//    int i;
//    Read(input,1,&noBytesRead);
//    for(i=0;i<noBytesRead;i++)
//      (*env)->SetObjectArrayElement(*env, buff, i, (jobject)input[i]);
//  (*env)->SetObjectArrayElement(*env, buff, noBytesRead, 256);
//    return;
//   }

JNIEXPORT void JNICALL Java_Port_readAllC
   (JNIEnv * env, jobject jo)
   {BYTE input[100];
    DWORD n;
    DWORD i;
    jmethodID acceptId;

    acceptId = (*env)->GetMethodID(*env,(*env)->GetObjectClass(*env,jo),"accept","(I)V");

    Read(input,1,&n);
    i=0;
    while (i<n)
      {(*env)->CallVoidMethod(*env, jo, acceptId, input[i]);
       i++;
      }
    return;
   }

JNIEXPORT void JNICALL Java_Port_sendC
  (JNIEnv* env, jobject jo, jbyte c)
  {BYTE output;
   DWORD noBytesWritten;
   output = c;
   Write(&output,1,&noBytesWritten);
  }

JNIEXPORT void JNICALL Java_Port_closeC
  (JNIEnv *env, jobject jo)
  {Close();
  }
