Evgeny Belov
Evgeny Belov

Reputation: 338

Thermal printer prints only when a breakpoint is set

I'm trying to print a receipt using a thermal printer.

    printer mprinter = new printer();
    mprinter.Open();
    mprinter.SetPrintMode(1);
    /*Some code */
    mprinter.Write(byteData);
    mprinter.Close();

When I set a breakpoint near mprinter.Close(); (or somwhere else) everything works fine. If I reset a breakpoint thermal printer prints nothing. Why is this happening?

My native functions:

   JNIEXPORT jint JNICALL Java_aclasdriver_printer_Open(JNIEnv *env, jobject thiz)
       {
           if(openflag < 0)
           {
               openflag = open(DEV_PRINTER_NAME, O_RDWR);
           }

           return openflag;
       }

   JNIEXPORT jint JNICALL Java_aclasdriver_printer_Write(JNIEnv *env, jobject thiz, jbyteArray wrbuf)
   {
       jbyte *pwrbuf;
       int ret;
       int wrlen;
       int i;

       if(openflag < 0)
       {
           return -1;
       }
       LOGD("Printer write");

       pwrbuf = (*env)->GetByteArrayElements(env, wrbuf, NULL);
       wrlen = (*env)->GetArrayLength(env, wrbuf);
       for(i =0 ;i< wrlen;i++)
       {
          LOGD("%x ",pwrbuf[i]);
       }

       ret = write(openflag, pwrbuf, wrlen);
       (*env)->ReleaseByteArrayElements(env, wrbuf, pwrbuf, 0);

       return ret;
   }

Upvotes: 1

Views: 56

Answers (1)

Evgeny Belov
Evgeny Belov

Reputation: 338

OK, I have found a solution. I just need to call Thread.sleep() after calling mprinter.Write(byteData);

Upvotes: 1

Related Questions