From 649da0a6e337ee9735ab7d46ab66a7d1d84b65d7 Mon Sep 17 00:00:00 2001 From: hugh-unicenta Date: Tue, 27 Jun 2023 16:35:29 +0100 Subject: [PATCH] UOCL-241: Fixing scale exception --- pom.xml | 5 + .../pos/config/JPanelConfigPeripheral.java | 4 + .../com/unicenta/pos/scale/DeviceScale.java | 3 + .../unicenta/pos/scale/ScaleSamsungEspV2.java | 95 +++++++++++++++++++ 4 files changed, 107 insertions(+) create mode 100644 src/main/java/com/unicenta/pos/scale/ScaleSamsungEspV2.java 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; + } + } +}