HELLO i have kotlin project.
In my project i have to use pos device.
Pos device works with sample java project but my project does not work.
i put all .so files in jniLibs folder
System.loadLibrary method is working but external functions not working
when i try to use external native functions i get this error
E/art: No implementation found for void com.example.alknakralar.comValina.comValina.setLogFile(java.lang.String) (tried Java_com_example_alknakralar_comValina_comValina_setLogFile and Java_com_example_alknakralar_comValina_comValina_setLogFile__Ljava_lang_String_2)
here is the code
if (valina == null) {
try {
valina = comValina()
} catch (e: Exception) {
Toast.makeText(this, "Failed to load native library. " + e.message, Toast.LENGTH_SHORT).show()
}
}
if (valina == null) return
try {
valina!!.setLogFile("debug-Valina.txt")
//valina!!.SetLogFile("debug-Valina.txt")
//valina!!.SetLogLevel(comValina.eComValinaLogLevel.DEBUG_LEVEL_NOTICE)
} catch (e: Exception) {
Log.i("avs", "sa 3$e")
}
this is my code valina!!.setLogFile("debug-Valina.txt") here is the error line
class comValina {
external fun setLogFile(LogFile: String)
private external fun SetLogLevel(LogLevel: Byte)
private external fun InitializeTcpServer(PortNumber: Short): Int
external fun Payment(amount: Int): Int
enum class eComValinaLogLevel constructor(val value: Byte) {
DEBUG_LEVEL_FATAL(0.toByte()),
DEBUG_LEVEL_ERROR(1.toByte()),
DEBUG_LEVEL_WARNING(2.toByte()),
DEBUG_LEVEL_NOTICE(3.toByte())
}
companion object {
init {
try {
System.loadLibrary("comValina-android-armeabi")
} catch (e: Exception) {
} catch (ex: UnsatisfiedLinkError) {
}
try {
System.loadLibrary("comValina-android-armeabi-v7a")
} catch (e: Exception) {
} catch (ex: UnsatisfiedLinkError) {
}
}
}
fun SetLogLevel(LogLevel: eComValinaLogLevel) {
SetLogLevel(LogLevel.value)
}
fun Initialize(portNumber: Short): Int {
return InitializeTcpServer(portNumber)
}
}
and this is library access class
what should i do ?
and here is the java codes
**`
comValina.java
`**
package com.posware.comValina;
public class comValina
{
public static boolean NativeLibLoaded = false;
/* ============================================================================ */
/* NATIVE DLL FUNCTIONS DECLARATION */
/* ============================================================================ */
/* Parameters */
public native void SetLogFile(String LogFile);
private native void SetLogLevel(byte LogLevel);
public native void SetWaitCardTimeout(byte TimeoutSec);
public native void SetProductDeliveryTimeout(short TimeoutSec);
/* Base functions */
private native int InitializeTcpServer(short PortNumber);
private native int InitializeRs232(String Device, int speed);
private native int InitializeRs232KISS(String Device, int speed);
public native void Close();
public native String GetVersion();
private native int GetCurrentState();
/* Payment functions */
public native int Payment(int amount);
public native int Autorisation(int amount);
public native int Record(int amount);
public native int Cancel();
/* Ticket functions */
private native int GetTicket(int TicketType, String[] OutTicketArray);
/* Other functions */
public native int DisplayMenu(int timeoutMs);
private native int GetAppState(int AppNumber, ComValinaApplicationState AppState);
private native int ForceAppCall(int appNumber, int callType);
/* OIDs functions */
public native int SetOID(String OID, int instance, String value);
public native int SetOIDInt(String OID, int instance, int value);
private native int GetOID(String OID, int instance, String[] value, int[] oidType);
private native int GetOIDInt(String OID, int instance, int[] oidValue);
/* Transparent command */
private native int SendCommand(short cmdNumber, String emitBuf, String[] recvBufArray, int timeoutMs);
/* ============================================================================ */
/* PUBLIC ENUMS */
/* ============================================================================ */
/* LogLevel */
public enum eComValinaLogLevel
{
DEBUG_LEVEL_FATAL((byte)0),
DEBUG_LEVEL_ERROR((byte)1),
DEBUG_LEVEL_WARNING((byte)2),
DEBUG_LEVEL_NOTICE((byte)3);
private byte mValue;
eComValinaLogLevel(byte Value) { mValue = Value; }
public byte getValue() { return mValue; }
}
/* Terminal state */
public enum eComValinaState
{
COMVALINA_DLL_STATE_NOT_CONNECTED (0x00),
COMVALINA_DLL_STATE_IDLE (0x02),
COMVALINA_DLL_STATE_MAINTENANCE (0x04),
COMVALINA_DLL_STATE_OUT_OF_ORDER (0x08),
COMVALINA_DLL_STATE_PIN_ENTRY (0x10),
COMVALINA_DLL_STATE_DATA_ENTRY (0x20),
COMVALINA_DLL_STATE_REMOVE_CARD (0x40),
COMVALINA_DLL_STATE_CARD_REMOVED (0x80),
COMVALINA_DLL_STATE_CARD_INSERTED (0x100),
COMVALINA_DLL_STATE_CONFIG_CHANGED (0x200),
COMVALINA_DLL_STATE_START_TANKING (0x400),
COMVALINA_DLL_STATE_TANKING_REFUSED (0x800),
COMVALINA_DLL_STATE_TERMINAL_BUSY (0x1000),
COMVALINA_DLL_STATE_BAD_READING (0x2000),
COMVALINA_DLL_STATE_TRANSACTION_STARTED (0x4000),
COMVALINA_DLL_STATE_SLAVE_CARD (0x8000),
COMVALINA_DLL_STATE_PUMP_ENTRY (0x10000),
COMVALINA_DLL_STATE_CARD_READER_IDLE (0x20000),
COMVALINA_DLL_STATE_CARD_READER_OUTOFORDER (0x40000),
COMVALINA_DLL_STATE_PRODUCT_ENTRY (0x80000),
COMVALINA_DLL_STATE_INSERT_CARD (0x100000),
COMVALINA_DLL_STATE_AMOUNT_CONFIRMATION (0x400000),
COMVALINA_DLL_STATE_SWIPE_CARD (0x800000),
COMVALINA_DLL_STATE_WAIT_NEXT_CARD (0x1000000),
COMVALINA_DLL_STATE_CURRENCY_SELECTION (0x2000000),
COMVALINA_DLL_STATE_COLLECTION_STARTED (0x8000000),
COMVALINA_DLL_STATE_COLLECTION_ENDED (0x10000000),
COMVALINA_DLL_STATE_COLLECTION_OK (0x20000000),
COMVALINA_DLL_STATE_COLLECTION_ERROR (0x40000000),
COMVALINA_DLL_STATE_UNKNOWN (0x80000000);
private int mValue;
eComValinaState(int Value) { mValue = Value; }
public int getValue() { return mValue; }
/* get state from INT value - return UNKNOWN if not found */
public static eComValinaState fromValue(int value)
{
eComValinaState[] states = eComValinaState.values();
int i;
for (i=0; i<states.length; i++)
{
if (states[i].getValue() == value) return states[i];
}
/* Not found */
return COMVALINA_DLL_STATE_UNKNOWN;
}
}
/* Ticket type */
public enum eComValinaTypeTicket
{
COMVALINA_DLL_CUSTOMER_RECEIPT (0x01), /*!<Customer transaction receipt */
COMVALINA_DLL_MERCHANT_RECEIPT (0x02), /*!<Merchant transaction receipt */
/* EMV tickets */
COMVALINA_DLL_EMV_CLEARING_TICKET (0x10), /*!<EMV app clearing ticket */
COMVALINA_DLL_EMV_TELEPAR_TICKET (0x11), /*!<EMV app telepar ticket */
COMVALINA_DLL_EMV_DOWNLOAD_TICKET (0x12), /*!<EMV app download ticket */
COMVALINA_DLL_EMV_CHARACTERISTICS_TICKET (0x13), /*!<EMV app hardware and software characteristics ticket */
/* NFC tickets */
COMVALINA_DLL_NFC_CLEARING_TICKET (0x20), /*!<NFC app clearing ticket */
COMVALINA_DLL_NFC_TELEPAR_TICKET (0x21), /*!<NFC app telepar ticket */
COMVALINA_DLL_NFC_DOWNLOAD_TICKET (0x22), /*!<NFC app download ticket */
COMVALINA_DLL_NFC_CHARACTERISTICS_TICKET (0x23); /*!<NFC app hardware and software characteristics ticket */
private int mValue;
eComValinaTypeTicket(int Value) { mValue = Value; }
public int getValue() { return mValue; }
}
/* Application number */
public enum eComValinaApplicationNumber
{
COMVALINA_DLL_APPLICATION_EMV (0x01),
COMVALINA_DLL_APPLICATION_NFC (0x02);
private int mValue;
eComValinaApplicationNumber(int Value) { mValue = Value; }
public int getValue() { return mValue; }
}
/* Call type */
public enum eComValinaCallType
{
COMVALINA_DLL_CLEARING_CALL (0x01),
COMVALINA_DLL_TELEPAR_CALL (0x02);
private int mValue;
eComValinaCallType(int Value) { mValue = Value; }
public int getValue() { return mValue; }
}
/* ============================================================================ */
/* APPLICATION STATE */
/* ============================================================================ */
public class ComValinaApplicationState
{
public short statusApp;
public short statusAsl;
public byte ReaderStatus;
public short ApplicationState;
public String DateTelecol;
public String DateTelepar;
public String DateTelech;
/* constructor - default values */
ComValinaApplicationState()
{
statusApp = -1;
statusAsl = -1;
ReaderStatus = 0;
DateTelecol = "";
DateTelepar = "";
DateTelech = "";
}
}
/* ============================================================================ */
/* EXCEPTION */
/* ============================================================================ */
public class ValinaException extends Exception
{
private static final long serialVersionUID = 1L;
public int errCode;
ValinaException(int errCode)
{
super();
this.errCode = errCode;
}
}
/* ============================================================================ */
/* CONSTRUCTOR */
/* ============================================================================ */
public comValina() throws Exception
{
/* Ensure native library is loaded */
LoadNativeDLL();
}
/* ============================================================================ */
/* FUNCTION WRAPPERS */
/* ============================================================================ */
public void SetLogLevel(eComValinaLogLevel LogLevel)
{
SetLogLevel(LogLevel.getValue());
}
/* Initialize tcp server */
public int Initialize(short portNumber)
{
return InitializeTcpServer(portNumber);
}
/* Initialize, over rs232
* Please note that non-KISS protocol is deprecated
*/
public int Initialize(String device, int speed, boolean kissProto)
{
if (kissProto == false) return InitializeRs232(device, speed);
else return InitializeRs232KISS(device, speed);
}
public eComValinaState GetTerminalCurrentState()
{
int currentState = this.GetCurrentState();
return eComValinaState.fromValue(currentState);
}
public String GetTicket(eComValinaTypeTicket ticketType) throws ValinaException
{
int status;
int numTicket;
String[] ticketText = new String[1];
numTicket = ticketType.getValue();
status = GetTicket(numTicket, ticketText);
if (status != 0) throw new ValinaException(status);
return ticketText[0];
}
public ComValinaApplicationState GetAppState(eComValinaApplicationNumber appNumber) throws ValinaException
{
int status;
ComValinaApplicationState outputState = new ComValinaApplicationState();
status = GetAppState(appNumber.getValue(), outputState);
if (status != 0) throw new ValinaException(status);
return outputState;
}
public int ForceAppCall(eComValinaApplicationNumber appNumber, eComValinaCallType callType)
{
return ForceAppCall(appNumber.getValue(), callType.getValue());
}
public String GetOID(String OID, int instance) throws ValinaException
{
int[] oidType = new int[1];
String[] value = new String[1];
int status = GetOID(OID, instance, value, oidType);
if (status != 0) throw new ValinaException(status);
return value[0];
}
public int GetOIDInt(String OID, int instance) throws ValinaException
{
int[] oidValue = new int[1];
int status = GetOIDInt(OID, instance, oidValue);
if (status != 0) throw new ValinaException(status);
return oidValue[0];
}
public String SendCommand(short cmdNumber, String emitBuf, int timeoutMs) throws ValinaException
{
String recvBuf[] = new String[1];
int status = SendCommand(cmdNumber, emitBuf, recvBuf, timeoutMs);
if (status != 0) throw new ValinaException(status);
return recvBuf[0];
}
/* ============================================================================ */
/* NATIVE DLL LOADING */
/* ============================================================================ */
/* Load native library if not already done
* Raise exception if failed
*/
private static void
LoadNativeDLL() throws Exception
{
/* Already loaded ? */
if (NativeLibLoaded == true) return;
/* Try to load x86 lib first */
try
{
System.loadLibrary("comValina-x86-java");
/* if success, job done */
NativeLibLoaded = true;
return;
}
catch (Exception e)
{
}
catch (UnsatisfiedLinkError ex)
{
}
/* Try to load x64 lib instead */
try
{
System.loadLibrary("comValina-x64-java");
/* if success, job done */
NativeLibLoaded = true;
return;
}
catch (Exception e) {}
catch (UnsatisfiedLinkError ex)
{
}
/* Try to load arm native lib */
try
{
System.loadLibrary("comValina-android-armeabi");
/* if success, job done */
NativeLibLoaded = true;
return;
}
catch (Exception e) {}
catch (UnsatisfiedLinkError ex)
{
}
/* Try to load arm-v7a native lib */
try
{
System.loadLibrary("comValina-android-armeabi-v7a");
/* if success, job done */
NativeLibLoaded = true;
return;
}
catch (Exception e) {}
catch (UnsatisfiedLinkError ex)
{
}
/* Failed to load a working native lib, raise exception */
throw new Exception("Failed to load native library");
}
}
main activity.java
package com.posware.demovalinaandroid;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.posware.comValina.comValina;
public class MainActivity extends AppCompatActivity
{
private comValina valina;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void cmdInit_OnClick(View view) {
/* New valina */
if (valina == null)
{
try
{
valina = new comValina();
}
catch (Exception e)
{
Log.e("DemoValina", "Failed to load native library. " + e.getMessage());
return;
}
}
/* set debug */
valina.SetLogFile("debug-Valina.txt");
valina.SetLogLevel(comValina.eComValinaLogLevel.DEBUG_LEVEL_NOTICE);
/* Initialise terminal, tcp/ip port 2009 */
int status = valina.Initialize((short) 2009);
if (status != 0) {
Toast.makeText(this, "Failed to initialize with err " + status, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "SUCCESS", Toast.LENGTH_SHORT).show();
}
}
public void cmdPayment_OnClick(View view)
{
if (valina == null) return;
/* Start payment */
int status = valina.Payment(100);
if (status == 0) {
Toast.makeText(this, "Payment succeeded", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Payment failed with err " + status, Toast.LENGTH_SHORT).show();
}
}
}
User contributions licensed under CC BY-SA 3.0