diff --git a/pom.xml b/pom.xml
index 8007264..981d2f6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -145,6 +145,11 @@
rxtxcomm
2.2
+
+ com.fazecast
+ jSerialComm
+ 2.9.3
+
org.jpos
jpos
diff --git a/src/main/java/com/unicenta/pos/config/JPanelConfigPeripheral.java b/src/main/java/com/unicenta/pos/config/JPanelConfigPeripheral.java
index 4b3673e..6ce757a 100644
--- a/src/main/java/com/unicenta/pos/config/JPanelConfigPeripheral.java
+++ b/src/main/java/com/unicenta/pos/config/JPanelConfigPeripheral.java
@@ -358,6 +358,7 @@ public class JPanelConfigPeripheral extends javax.swing.JPanel implements PanelC
jcboMachineScale.addItem("dialog1");
jcboMachineScale.addItem("mtind221");
jcboMachineScale.addItem("samsungesp");
+ jcboMachineScale.addItem("samsungesp-v2");
jcboSerialScale.addItem("COM1");
jcboSerialScale.addItem("COM2");
@@ -612,6 +613,7 @@ public class JPanelConfigPeripheral extends javax.swing.JPanel implements PanelC
if ("casiopd1".equals(sparam) ||
"dialog1".equals(sparam) ||
"samsungesp".equals(sparam) ||
+ "samsungesp-v2".equals(sparam) ||
"caspdii".equals(sparam) ||
"acompc100".equals(sparam) ||
"averyberkel6720".equals(sparam) ||
@@ -820,6 +822,7 @@ public class JPanelConfigPeripheral extends javax.swing.JPanel implements PanelC
if ("casiopd1".equals(sMachineScale) ||
"dialog1".equals(sMachineScale) ||
"samsungesp".equals(sMachineScale) ||
+ "samsungesp-v2".equals(sMachineScale) ||
"caspdii".equals(sMachineScale) ||
"acompc100".equals(sMachineScale) ||
"averyberkel6720".equals(sMachineScale) ||
@@ -2307,6 +2310,7 @@ public class JPanelConfigPeripheral extends javax.swing.JPanel implements PanelC
if ("casiopd1".equals(jcboMachineScale.getSelectedItem()) ||
"dialog1".equals(jcboMachineScale.getSelectedItem()) ||
"samsungesp".equals(jcboMachineScale.getSelectedItem()) ||
+ "samsungesp-v2".equals(jcboMachineScale.getSelectedItem()) ||
"caspdii".equals(jcboMachineScale.getSelectedItem())||
"acompc100".equals(jcboMachineScale.getSelectedItem())||
"averyberkel6720".equals(jcboMachineScale.getSelectedItem())||
diff --git a/src/main/java/com/unicenta/pos/scale/DeviceScale.java b/src/main/java/com/unicenta/pos/scale/DeviceScale.java
index 6ff516f..aa0eca7 100644
--- a/src/main/java/com/unicenta/pos/scale/DeviceScale.java
+++ b/src/main/java/com/unicenta/pos/scale/DeviceScale.java
@@ -56,6 +56,9 @@ public class DeviceScale {
case "samsungesp":
m_scale = new ScaleSamsungEsp(sScaleParam1);
break;
+ case "samsungesp-v2":
+ m_scale = new ScaleSamsungEspV2(sScaleParam1);
+ break;
case "caspdii":
m_scale = new ScaleCASPDII(sScaleParam1);
break;
diff --git a/src/main/java/com/unicenta/pos/scale/ScaleSamsungEspV2.java b/src/main/java/com/unicenta/pos/scale/ScaleSamsungEspV2.java
new file mode 100644
index 0000000..5bfb37c
--- /dev/null
+++ b/src/main/java/com/unicenta/pos/scale/ScaleSamsungEspV2.java
@@ -0,0 +1,95 @@
+// uniCenta oPOS - Touch Friendly Point Of Sale
+// Copyright (c) 2009-2023 uniCenta & previous Openbravo POS works
+// https://unicenta.com
+//
+// This file is part of uniCenta oPOS
+//
+// uniCenta oPOS is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// uniCenta oPOS is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with uniCenta oPOS. If not, see .
+
+package com.unicenta.pos.scale;
+
+import com.fazecast.jSerialComm.SerialPort;
+import com.fazecast.jSerialComm.SerialPortDataListener;
+import com.fazecast.jSerialComm.SerialPortEvent;
+
+public class ScaleSamsungEspV2 implements Scale {
+
+ private String result;
+ private final String m_sPortScale;
+
+ /** Creates a new instance of ScaleComm
+ * @param sPortPrinter */
+ public ScaleSamsungEspV2(String sPortPrinter) {
+ m_sPortScale = sPortPrinter;
+ }
+
+ private final SerialPortDataListener dataListener = new SerialPortDataListener() {
+ @Override
+ public int getListeningEvents() {
+ return SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
+ }
+
+ @Override
+ public void serialEvent(SerialPortEvent event) {
+ if (event.getEventType() == SerialPort.LISTENING_EVENT_DATA_AVAILABLE) {
+ SerialPort serialPort = (SerialPort) event.getSerialPort();
+ byte[] newData = new byte[serialPort.bytesAvailable()];
+ serialPort.readBytes(newData, newData.length);
+ String receivedData = new String(newData);
+ result = result + receivedData;
+ }
+ }
+ };
+
+ /**
+ *
+ * @return
+ */
+ @Override
+ public Double readWeight() {
+
+ // Configura los parĂ¡metros del puerto serie
+ SerialPort serialPort = SerialPort.getCommPort(m_sPortScale);
+ serialPort.setBaudRate(4800);
+ serialPort.setNumDataBits(8);
+ serialPort.setNumStopBits(1);
+ serialPort.setParity(1);
+
+ // Abre el puerto serie
+ if (serialPort.openPort()) {
+
+ // Agrega el objeto de escucha al puerto serie
+ serialPort.addDataListener(dataListener);
+
+ // Escribe en el puerto serie
+ result = "";
+ byte[] data = new byte[] {0x24};
+ serialPort.writeBytes(data, data.length);
+
+ // Espera unos segundos para recibir la respuesta (puedes ajustar este tiempo)
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {}
+
+ // Cierra el puerto serie
+ serialPort.closePort();
+ }
+
+ try {
+ return Double.valueOf(result);
+ } catch (NumberFormatException e) {
+ return 0.0;
+ }
+ }
+}