Home » Android » android – Epson printer connect fails status ERR_CONN

android – Epson printer connect fails status ERR_CONN

Posted by: admin June 15, 2020 Leave a comment

Questions:

I have an Epson printer and I used epos2_printer (sample project) code given with SDK to integrate with my app. I have copied the same code but it never seems to work!

However, the same works when I connect the sample project to my printer.

private boolean runPrintReceiptSequence() {
    if (!initializeObject()) {
        return false;
    }

    if (!createReceiptData()) {
        finalizeObject();
        return false;
    }

    if (!printData()) {
        finalizeObject();
        return false;
    }

    return true;
}

private boolean initializeObject() {
    try {

        final SpnModelsItem spnModel = new SpnModelsItem("TM-T82 Series", Printer.TM_T82);
        final SpnModelsItem spnLang = new SpnModelsItem("ANK", Printer.MODEL_ANK);

        mPrinter = new Printer(spnModel.getModelConstant(), 
                                spnLang.getModelConstant(), this);
    }
    catch (Exception e) {
        Log.e("Printer", e.toString());
        return false;
    }

    mPrinter.setReceiveEventListener(this);


    return true;
}

private boolean createReceiptData() {
    String method = "";
    Bitmap logoData = BitmapFactory.decodeResource(getResources(), R.drawable.logo_saltnpepper);
    StringBuilder textData = new StringBuilder();
    final int barcodeWidth = 2;
    final int barcodeHeight = 100;
    Date currentDate = new Date();
    info.saltnpepper.ordersmart2.MenuItem currItem = null;

    double price = 0;
    double total = 0;
    int totalQty =0;

    if (mPrinter == null) {
        return false;
    }

    try {
        method = "addTextAlign";
        mPrinter.addTextAlign(Printer.ALIGN_CENTER);

        method = "addImage";
        mPrinter.addImage(logoData, 0, 0,
                          logoData.getWidth(),
                          logoData.getHeight(),
                          Printer.COLOR_1,
                          Printer.MODE_MONO,
                          Printer.HALFTONE_DITHER,
                          Printer.PARAM_DEFAULT,
                          Printer.COMPRESS_AUTO);

        method = "addFeedLine";
        mPrinter.addFeedLine(1);
        textData.append("SALT-N-PEPPER\n");
        //textData.append("STORE DIRECTOR – John Smith\n");
        textData.append("\n");
        textData.append((new SimpleDateFormat("dd/MM/yy HH:mm:ss")).format(currentDate).toString() + "\n");
        //textData.append("ST# 21 OP# 001 TE# 01 TR# 747\n");
        textData.append("------------------------------\n");
        method = "addText";
        mPrinter.addText(textData.toString());
        textData.delete(0, textData.length());
        if(alFinalOrder != null)
        {
            for(int i=0; i < alFinalOrder.size(); i++)
            {
                currItem = alFinalOrder.get(i);
                textData.append(currItem.getName()+"  "+currItem.getQty()+"  "+currItem.getPrice()+"\n");

                //calculate total quantity
                totalQty = totalQty + currItem.getQty();

                //calculate price
                double dPrice = currItem.getQty()*Double.parseDouble(currItem.getPrice().substring(1));
                total = total + dPrice;
                total = Math.round(total*100.0)/100.0;

            }
        }
        textData.append("------------------------------\n");
        method = "addText";
        mPrinter.addText(textData.toString());
        textData.delete(0, textData.length());

        textData.append("TOTAL                   "+"\n");
        textData.append("TAX                     "+"\n");
        method = "addText";
        mPrinter.addText(textData.toString());
        textData.delete(0, textData.length());

mPrinter.addFeedLine(2);

        method = "addBarcode";
        mPrinter.addBarcode("01209457",
                            Printer.BARCODE_CODE39,
                            Printer.HRI_BELOW,
                            Printer.FONT_A,
                            barcodeWidth,
                            barcodeHeight);

        method = "addCut";
        mPrinter.addCut(Printer.CUT_FEED);
    }
    catch (Exception e) {
        //ShowMsg.showException(e, method, mContext);
        return false;
    }

    textData = null;

    return true;
}

private boolean printData() {
    if (mPrinter == null) {
        return false;
    }

    if (!connectPrinter()) {
        return false;
    }

    PrinterStatusInfo status = mPrinter.getStatus();

    dispPrinterWarnings(status);

    if (!isPrintable(status)) {
        Log.e("Printer", "Is not printable");
        try {
            mPrinter.disconnect();
        }
        catch (Exception ex) {
            // Do nothing
        }
        return false;
    }

    try {
        mPrinter.sendData(Printer.PARAM_DEFAULT);
    }
    catch (Exception e) {
        Log.e("Printer", e.getMessage());
        try {
            mPrinter.disconnect();
        }
        catch (Exception ex) {
            // Do nothing
        }
        return false;
    }

    return true;
}

private boolean connectPrinter() {
    boolean isBeginTransaction = false;

    if (mPrinter == null) {
        return false;
    }

    try {
        mPrinter.connect("TCP:"+mIP, Printer.PARAM_DEFAULT);
    }
    catch (Epos2Exception e) {
        //ShowMsg.showException(e, "connect", this);
        if(e.getErrorStatus() == Epos2Exception.ERR_CONNECT)
        {
            Log.e("testing", "error connect");
        }
        if(e.getErrorStatus() == Epos2Exception.ERR_ALREADY_OPENED)
        {
            Log.e("testing", "already open");
        }
        if(e.getErrorStatus() == Epos2Exception.ERR_ALREADY_USED)
        {
            Log.e("testing", "already used");
        }
        if(e.getErrorStatus() == Epos2Exception.ERR_BOX_CLIENT_OVER)
        {
            Log.e("testing", "box client over");
        }
        if(e.getErrorStatus() == Epos2Exception.ERR_BOX_COUNT_OVER)
        {
            Log.e("testing", "count over");
        }
        if(e.getErrorStatus() == Epos2Exception.ERR_DISCONNECT)
        {
            Log.e("testing", "disconnect");
        }
        if(e.getErrorStatus() == Epos2Exception.ERR_FAILURE)
        {
            Log.e("testing", "failure");
        }
        if(e.getErrorStatus() == Epos2Exception.ERR_ILLEGAL)
        {
            Log.e("testing", "illegal");
        }
        if(e.getErrorStatus() == Epos2Exception.ERR_IN_USE)
        {
            Log.e("testing", "in use");
        }
        if(e.getErrorStatus() == Epos2Exception.ERR_MEMORY)
        {
            Log.e("testing", "memory");
        }
        return false;
    }

    try {
        mPrinter.beginTransaction();
        isBeginTransaction = true;
    }
    catch (Exception e) {
        Log.e("Printer", e.toString ());
    }

    if (isBeginTransaction == false) {
        try {
            mPrinter.disconnect();
        }
        catch (Epos2Exception e) {
            // Do nothing
            return false;
        }
    }

    return true;
}

It always gives me exception ERR_CONNECT on printer.connect inside connectprinter function.

What am I doing wrong?

This code works fine with the sample app.
P.S: I have tried to connect this app before connecting the sample app to check if the sample app holds the connection and does not allow other apps to connect but that is not the case. Epson help is unable to provide any further help.

My AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xyz"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="21"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".MenuActivity" >
    </activity>
    <activity
        android:name=".SaltnPepperActivity"
        android:label="@string/title_activity_saltn_pepper" >
    </activity>
            <activity
        android:name=".FinalOrder"
         ></activity>
                <activity
        android:name=".ZinVietActivity"
         >
    </activity>
     <activity
        android:name="com.epson.epos2_printer.DiscoverActivity"
         ></activity>

</application>

How to&Answers:

Looks like you don’t have the proper permissions in your manifest. Try putting these in your project under the manifest tag:

<uses-permission android:name="android.permission.BLUETOOTH"/>

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

<uses-permission android:name="android.permission.INTERNET"/>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

They also have the

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

permission but I’m not sure you need it. I think the essentials are Bluetooth and Internet permissions.

Answer:

As I suspect there seems to be an error in connect printer method. I have used this SDK once so better follow the documentation properly (means don’t skip steps). Make sure you have defined permission as mentioned in the SDK.

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>


<activity android:name=".MainActivity" android:label="@string/app_title"  android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter"/>

As I see you haven’t mentioned what type of connection you are making thus, in that case, there must be problem in selecting target

Check out the function from SDK:

Public void connect(String target, int timeout) throws Epos2Exception;

enter image description here

You might be using wrong target parameter.

Note: if you are using USB or any other mode make sure run discoverability service as per the docs.

 Discovery.start(this, mFilterOption, mDiscoveryListener);

It will return you the required target name. And I am sure no connection failure will occur. Good Luck \o

Answer:

Status ERR_CONN is basically shows if device cannot be reached or connection failing with device. It can be USB, LAN/NETWORK, Bluetooth Connection failure status.

If you are trying to connect printer with Bluetooth then you must write below permissions:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

If you are using LAN for network printers then

<uses-permission android:name="android.permission.INTERNET"/>

For USB Printer Connection Use:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

As you are using EPOS2 Sample Project, remember to import Jar file “EPOS2.jar”. Click here to download the file.