Commit 438d2062 by 毛勇泽

射频扫码集成+扫码解析工具类

parent 3485b15d
...@@ -12,9 +12,13 @@ export {HwInfoDao} from './src/main/ets/db/dao/HwInfoDao'; ...@@ -12,9 +12,13 @@ export {HwInfoDao} from './src/main/ets/db/dao/HwInfoDao';
export {BzhxDao} from './src/main/ets/db/dao/BzhxDao'; export {BzhxDao} from './src/main/ets/db/dao/BzhxDao';
export {QyInfoDao} from './src/main/ets/db/dao/QyInfoDao'; export {QyInfoDao} from './src/main/ets/db/dao/QyInfoDao';
export {KfInfoDao} from './src/main/ets/db/dao/KfInfoDao'; export {KfInfoDao} from './src/main/ets/db/dao/KfInfoDao';
export {Gldw} from './src/main/ets/entity/Gldw'
export {HjInfo} from './src/main/ets/entity/HjInfo'
export {HwInfo} from './src/main/ets/entity/HwInfo' export {HwInfo} from './src/main/ets/entity/HwInfo'
export {Bzhx} from './src/main/ets/entity/Bzhx' export {Bzhx} from './src/main/ets/entity/Bzhx'
export {KfInfo} from './src/main/ets/entity/KfInfo' export {KfInfo} from './src/main/ets/entity/KfInfo'
export {QyInfo} from './src/main/ets/entity/QyInfo' export {QyInfo} from './src/main/ets/entity/QyInfo'
export {Gldw} from './src/main/ets/entity/Gldw';
export {HjInfo} from './src/main/ets/entity/HjInfo';
export {WzdmDao} from './src/main/ets/db/dao/WzdmDao';
export {WzhxdmDao} from './src/main/ets/db/dao/WzhxdmDao';
export {Wzdm} from './src/main/ets/entity/Wzdm';
export {Wzhxdm} from './src/main/ets/entity/Wzhxdm';
\ No newline at end of file
...@@ -7,6 +7,6 @@ ...@@ -7,6 +7,6 @@
"main": "index.ets", "main": "index.ets",
"version": "1.0.0", "version": "1.0.0",
"dependencies": { "dependencies": {
"reflect-metadata": "^0.1.13" "reflect-metadata": "^0.1.13",
} }
} }
...@@ -2,6 +2,7 @@ import relationalStore from '@ohos.data.relationalStore'; ...@@ -2,6 +2,7 @@ import relationalStore from '@ohos.data.relationalStore';
import { Wzdm } from '../../entity/Wzdm'; import { Wzdm } from '../../entity/Wzdm';
import BaseTable, { ValueType } from '../BaseTable'; import BaseTable, { ValueType } from '../BaseTable';
import { Table } from '../decorator/Decorators'; import { Table } from '../decorator/Decorators';
import { SQLiteContext } from '../SQLiteContext';
/** /**
...@@ -52,4 +53,12 @@ export class WzdmDao extends BaseTable<Wzdm> { ...@@ -52,4 +53,12 @@ export class WzdmDao extends BaseTable<Wzdm> {
)`; )`;
return wzdm_sql; return wzdm_sql;
} }
async selectWZDM(lsm?:string):Promise<Wzdm[]>{
let wp = this.getPredicates();
if (lsm) {
wp.equalTo('LSM', lsm);
}
wp.orderByAsc('LSM');
return this.query(wp, this.getTableColumns())
}
} }
\ No newline at end of file
...@@ -58,4 +58,12 @@ export class WzhxdmDao extends BaseTable<Wzhxdm> { ...@@ -58,4 +58,12 @@ export class WzhxdmDao extends BaseTable<Wzhxdm> {
)`; )`;
return wzhxdm_sql; return wzhxdm_sql;
} }
async selectHXList(lsm?:string):Promise<Wzhxdm[]>{
let wp = this.getPredicates();
if (lsm) {
wp.equalTo('LSM', lsm);
}
wp.orderByAsc('LSM');
return this.query(wp, this.getTableColumns())
}
} }
\ No newline at end of file
{ {
"apiType": 'stageMode', "apiType": 'stageMode',
"buildOption": { "buildOption": {
"externalNativeOptions": {
"path": "./src/main/cpp/CMakeLists.txt",
"arguments": "",
"abiFilters": [
"arm64-v8a"
],
"cppFlags": "",
},
"sourceOption": {
"workers": [
]
}
}, },
"targets": [ "targets": [
{ {
......
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.4.1)
project(demo)
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${NATIVERENDER_ROOT_PATH}
${NATIVERENDER_ROOT_PATH}/include)
include_directories(${NATIVERENDER_ROOT_PATH}/serialprot/include)
find_library(
hilog-lib
hilog_ndk.z
)
add_library(entry SHARED hello.cpp)
target_link_libraries(entry PUBLIC libace_napi.z.so)
target_link_libraries(entry PUBLIC ${CMAKE_SOURCE_DIR}/../../../libs/arm64-v8a/libserialport.z.so)
target_link_libraries(entry PUBLIC ${hilog-lib} )
\ No newline at end of file
#include "napi/native_api.h"
#include <hilog/log.h>
#include "/serialport/include/SerialPort.h"
#include <string.h>
#include <stdio.h>
#include <ctype.h>
/**
* @brief 字符串转字节数组
* @param source [IN]字符串指针
* @param dest [OUT]字节指针
* @param sourceLen [IN]字符串长度
* @note "1234567890abcdef"-> 12 34 56 78 90 AB CD EF
*/
static void StringToByte(char* source, unsigned char* dest, int sourceLen)
{
int i;
unsigned char highByte, lowByte;
for (i = 0; i < sourceLen; i += 2)
{
highByte = toupper(source[i]); //转换为大写
lowByte = toupper(source[i + 1]);
if (highByte > 0x39)
highByte -= 0x37;
else
highByte -= 0x30;
if (lowByte > 0x39)
lowByte -= 0x37;
else
lowByte -= 0x30;
dest[i / 2] = (highByte << 4) | lowByte;
}
return ;
}
/**
* 字节流转十六进制字符串
* @param str
* @param UnChar
* @param ucLen
*/
static void convertUnCharToStr(char* str, unsigned char* UnChar, int ucLen)
{
int i = 0;
for(i = 0; i < ucLen; i++)
{
//格式化输str,每unsigned char 转换字符占两位置%x写输%X写输
sprintf(str + i * 2, "%02x", UnChar[i]);
}
}
//字节流转换为十六进制字符串的另一种实现方式
static void Hex2Str(const char *sSrc, char *sDest, int nSrcLen)
{
int i;
char szTmp[3];
for (i = 0; i < nSrcLen; i++)
{
sprintf(szTmp, "%02X", (unsigned char)sSrc[i]);
memcpy(&sDest[i * 2], szTmp, 2);
}
return;
}
static int fd = 0 ;
static napi_value Add(napi_env env, napi_callback_info info)
{
size_t requireArgc = 2;
size_t argc = 2;
napi_value args[2] = {nullptr};
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
napi_valuetype valuetype0;
napi_typeof(env, args[0], &valuetype0);
napi_valuetype valuetype1;
napi_typeof(env, args[1], &valuetype1);
double value0;
napi_get_value_double(env, args[0], &value0);
double value1;
napi_get_value_double(env, args[1], &value1);
napi_value sum;
napi_create_double(env, value0 + value1, &sum);
return sum;
}
/***
* gpio口使能
* @param env
* @param info
* @return
*/
static napi_value Gpioisenale(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Gpioisenale", "====Start===");
//OH_LOG_DEBUG(LOG_APP, "Gpioisenale") ;
size_t requireArgc = 1;
size_t argc = 1;
napi_value args[1] = {nullptr};
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
napi_valuetype valuetype0;
napi_typeof(env, args[0], &valuetype0);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Gpioisenale", "gpioLen = %{public}d", sizeof(args[0]));
char *gpio ;
size_t typeLen = 0;
napi_get_value_string_utf8(env, args[0], nullptr, 0, &typeLen);
gpio = new char[typeLen + 1];
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Gpioisenale ", "typeLen =%{public}d", typeLen);
napi_get_value_string_utf8(env, args[0], gpio, typeLen + 1, &typeLen);
double result = 0;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Gpioisenale ", "gpio value= %{public}s", gpio) ;
result = Gpio_Is_Enable(gpio) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Gpioisenale ", "ret =%{public}f", result);
//result =Uart_Is_Enable("uart0_module_status", 1) ;
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "SerialPort_open", "Uart_Is_Enable %{public}d", result);
//result = SerialPort_open("/dev/ttyS0");
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "SerialPort_open", "SerialPort_open path=/dev/ttyS0");
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "SerialPort_open", "SerialPort_open %{public}d", result);
napi_value sum;
napi_create_double(env, result, &sum);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Gpioisenale", "====end===");
return sum ;
}
/**
* serialport 打开
* @param env
* @param info
* @return
*/
static napi_value Open(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open", "====Start===");
size_t requireArgc = 6;
size_t argc = 6;
napi_value args[6] = {nullptr};
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
napi_valuetype valuetype0;
napi_typeof(env, args[0], &valuetype0);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open", "Open");
//获取串口参数string
char *path ;
size_t path_size = 0 ;
napi_get_value_string_utf8(env, args[0], nullptr, 0, &path_size);
path = new char[path_size + 1] ;
napi_get_value_string_utf8(env, args[0], path, path_size + 1, &path_size);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open ", "path value= %{public}s", path) ;
//获取波特率
napi_valuetype valuetype1;
napi_typeof(env, args[1], &valuetype1);
double boardrate = 0 ;
napi_get_value_double(env, args[1],&boardrate) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open ", " boardrate = %{public}f0", boardrate) ;
//获取控制位
double ctrl = 0 ;
napi_get_value_double(env, args[2],&ctrl) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open ", " ctrl = %{public}f0", ctrl) ;
//获取数据位
double databits = 0 ;
napi_get_value_double(env, args[3],&databits) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open ", " databits = %{public}f", databits) ;
//获取停止位
double stopbits = 0 ;
napi_get_value_double(env, args[4],&stopbits) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open ", " stopbits = %{public}f", stopbits) ;
//获取串口校验,N为无校验
double parity = 0 ;
napi_get_value_double(env, args[5],&parity) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open ", " parity = %{public}f", parity) ;
if(parity == 0){
//无校验
parity = 78 ;//'N'
}else if(parity == 1){
//奇校验
parity = 79 ;//'O'
}else if(parity == 2){
//偶校验
parity = 69 ;//'E'
}else{
//其他数字默认为无校验
parity = 78 ;//'N'
}
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open ", " parity = %{public}f", parity) ;
//串口供电
Gpio_Is_Enable("gpio-178-1") ;
int ret ;
//打开串口
fd = SerialPort_open(path);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open ", " fd = %{public}d", fd) ;
if(fd > 0)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Open ", "serialport open success !!") ;
//初始化串口
ret = SerialPort_Init(fd, boardrate, ctrl,databits,stopbits,'N') ;
}
napi_value sum;
napi_create_double(env, fd, &sum);
return sum ;
}
/**
* 串口发送
* @param env
* @param info
* @return
*/
static napi_value Send(napi_env env, napi_callback_info info)
{
size_t requireArgc = 2;
size_t argc = 2;
napi_value args[2] = {nullptr};
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
napi_valuetype valuetype0;
napi_typeof(env, args[0], &valuetype0);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Send", "Send");
//发送的数据
char *data ;
size_t data_size = 0 ;
napi_get_value_string_utf8(env, args[0], nullptr, 0, &data_size);
data = new char[data_size + 1] ;
napi_get_value_string_utf8(env, args[0], data, data_size + 1, &data_size);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "Send ", "Send data= %{public}s", data) ;
//传入数据是否为十六进制字符串
double ishex = 0 ;
napi_get_value_double(env, args[1],&ishex) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Send ", " ishex = %{public}f", ishex) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Send", "send start") ;
int ret = 0;
//ret = SerialPort_Send(fd, "AAAAFFww", (strlen("AAAAFFww"))) ;
//根据ishex,判断是否发送字节数据还是字符数据
if(ishex){
unsigned char* hexData = new unsigned char[512];
memset(hexData, 0, sizeof(hexData)) ;
StringToByte(data, hexData, strlen(data)) ;
ret = SerialPort_Send(fd, (char*)hexData, sizeof(hexData)) ;
//十六进制发送 StringToByte(char* source, unsigned char* dest, int sourceLen)
}else{
// ret = SerialPort_Send(fd, data, (strlen(data))) ;
}
if(ret > 0){
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Send", "SerialPort_Send success !!") ;
}
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* 串口发送十六进制
* @param env
* @param info
* @return
*/
static napi_value Sendhex(napi_env env, napi_callback_info info)
{
size_t requireArgc = 2;
size_t argc = 2;
napi_value args[2] = {nullptr};
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
napi_valuetype valuetype0;
napi_typeof(env, args[0], &valuetype0);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Send", "Send");
//发送的数据
char *data ;
size_t data_size = 0 ;
napi_get_value_string_utf8(env, args[0], nullptr, 0, &data_size);
data = new char[data_size + 1] ;
napi_get_value_string_utf8(env, args[0], data, data_size + 1, &data_size);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Sendhex ", "Sendhex data= %{public}s", data) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Sendhex ", "Sendhex data len= %{public}d", strlen(data)) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Sendhex", "Sendhex start") ;
int ret = 0;
//ret = SerialPort_Send(fd, "AAAAFFww", (strlen("AAAAFFww"))) ;
unsigned char* hexData = new unsigned char[512];
memset(hexData, 0, 512) ;
StringToByte(data, hexData, strlen(data)) ;
ret = SerialPort_Send(fd, (char*)hexData, strlen(data)/2) ;
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Sendhex ", "Sendhex hexData len= %{public}d", sizeof(hexData)) ;
if(ret > 0){
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Sendhex", "SerialPort_Send success !!") ;
}
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* 串口返回数据
* @param env
* @param info
* @return
*/
static napi_value Recv(napi_env env, napi_callback_info info)
{
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Recv", "====Start===");
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Recv ", " ishex = %{public}f", ishex) ;
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Recv", "Recv start") ;
int ret = 0;
char recv[512]={0};
memset(recv, 0, sizeof(recv)) ;
ret = SerialPort_Recv(fd, recv, 512) ;
/**/
//recv[ret]='\0' ;
napi_value recvStr ;
napi_create_string_utf8(env, recv, ret, &recvStr) ;
return recvStr ;
}
/**
* 串口返回数据
* @param env
* @param info
* @return
*/
static napi_value RecvByte(napi_env env, napi_callback_info info)
{
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Recv", "====Start===");
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Recv ", " ishex = %{public}f", ishex) ;
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Recv", "Recv start") ;
int ret = 0;
char recv[4096]={0};
memset(recv, 0, sizeof(recv)) ;
ret = SerialPort_Recv(fd, recv, 4096) ;
/**/
//recv[ret]='\0' ;
napi_value recvByte ;
//napi_create_string_utf8(env, recv, ret, &recvStr) ;
char test[4096]={0};
memset(test, 0, 4096) ;
// unsigned char dest[4096] ;
// memset(dest, 0, 4096) ;
if(ret > 0){
Hex2Str(recv, test, ret);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "pang", "ret hex char = %{public}s", test);
// StringToByte(test, dest, ret) ;
napi_create_array_with_length(env, ret, &recvByte) ;
for(int i = 0 ; i < ret ; i++){
napi_value value ;
napi_create_int32(env, recv[i], &value) ;
napi_set_element(env, recvByte, i, value) ;
}
}
return recvByte ;
}
/**
* 串口返回数据
* @param env
* @param info
* @return
*/
static napi_value Recvhex(napi_env env, napi_callback_info info)
{
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Recv", "====Start===");
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Recv ", " ishex = %{public}f", ishex) ;
//OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Recv", "Recv start") ;
int ret = 0;
char recv[512]={0};
memset(recv, 0, 512) ;
ret = SerialPort_Recv(fd, recv, 512) ;
char test[512]={0};
memset(test, 0, 512) ;
if(ret > 0){
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "pang", "recv char = %{public}s", recv);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "pang Recv", "ret = %{public}d", ret);
//unsigned char* unchar = (unsigned char*)recv ;
//convertUnCharToStr(test, unchar, sizeof(unchar)) ;
Hex2Str(recv, test, ret);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "pang", "ret hex char = %{public}s", test);
}
napi_value recvStr ;
napi_create_string_utf8(env, test, ret*2, &recvStr) ;
return recvStr ;
}
/**
* 串口关闭
* @param env
* @param info
* @return
*/
static napi_value Close(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Close", "====Start===");
SerialPort_close(fd);
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Close", "==== end===") ;
return nullptr ;
}
/**
* 5V供电
* @param env
* @param info
* @return
*/
static napi_value Power5von(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Power5von", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-80-1");
ret = Gpio_Is_Enable("gpio-46-1");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Power5von", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Power5von", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* 5V下电
* @param env
* @param info
* @return
*/
static napi_value Power5voff(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Power5voff", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-80-0");
ret = Gpio_Is_Enable("gpio-46-0");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Power5voff", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Power5voff", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* 扫码供电3.3V上电
* @param env
* @param info
* @return
*/
static napi_value Powerscanon(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Power5von", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-160-1");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Power5von", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Power5von", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* 扫码供电3.3V下电
* @param env
* @param info
* @return
*/
static napi_value Powerscanoff(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerscanoff", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-160-0");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerscanoff", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerscanoff", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* rfid供电上电
* @param env
* @param info
* @return
*/
static napi_value Powerrfidon(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidon", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-43-1");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidon", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidon", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* rfid供电下电
* @param env
* @param info
* @return
*/
static napi_value Powerrfidoff(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidoff", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-43-0");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidoff", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidoff", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* PSAM供电上电
* @param env
* @param info
* @return
*/
static napi_value Powerpsamon(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidon", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-79-1");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidon", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidon", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* PSAM供电下电
* @param env
* @param info
* @return
*/
static napi_value Powerpsamoff(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidoff", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-79-0");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidoff", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerrfidoff", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* 电池供电上电
* @param env
* @param info
* @return
*/
static napi_value Powervbaton(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powervbaton", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-194-1");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powervbaton", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powervbaton", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* 电池供电下电
* @param env
* @param info
* @return
*/
static napi_value Powervbatoff(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powervbatoff", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-194-0");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powervbatoff", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powervbatoff", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* USB OTG 5V上电
* @param env
* @param info
* @return
*/
static napi_value Powerusbotgon(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerusbotgon", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-80-1");
ret = Gpio_Is_Enable("gpio-151-1");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerusbotgon", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerusbotgon", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* USB OTG 5V下电
* @param env
* @param info
* @return
*/
static napi_value Powerusbotgoff(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerusbotgoff", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-80-0");
ret = Gpio_Is_Enable("gpio-151-0");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerusbotgoff", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Powerusbotgoff", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* 触发扫描低电平,拉低出光扫码
* @param env
* @param info
* @return
*/
static napi_value Trigon(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Trigon", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-48-0");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Trigon", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Trigon", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
/**
* 触发扫描高电平
* @param env
* @param info
* @return
*/
static napi_value Trigoff(napi_env env, napi_callback_info info)
{
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Trigoff", "====Start===");
int ret ;
ret = Gpio_Is_Enable("gpio-48-1");
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Trigoff", "ret = %{public}d", ret) ;
OH_LOG_Print(LOG_APP, LOG_ERROR, 123, "hdwall Trigoff", "==== end===") ;
napi_value sum;
napi_create_double(env, ret, &sum);
return sum ;
}
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
napi_property_descriptor desc[] = {
{ "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "gpioisenale", nullptr, Gpioisenale, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "open", nullptr, Open, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "send", nullptr, Send, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "sendhex", nullptr, Sendhex, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "recv", nullptr, Recv, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "recvByte", nullptr, RecvByte, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "recvhex", nullptr, Recvhex, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "close", nullptr, Close, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "power5von", nullptr, Power5von, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "power5voff", nullptr, Power5voff, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "powerscanon", nullptr, Powerscanon, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "powerscanoff", nullptr, Powerscanoff, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "powerrfidon", nullptr, Powerrfidon, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "powerrfidoff", nullptr, Powerrfidoff, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "powerpsamon", nullptr, Powerpsamon, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "powerpsamoff", nullptr, Powerpsamoff, nullptr, nullptr, nullptr, napi_default, nullptr } ,
{ "powervbaton", nullptr, Powervbaton, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "powervbatoff", nullptr, Powervbatoff, nullptr, nullptr, nullptr, napi_default, nullptr } ,
{ "powerusbotgon", nullptr, Powerusbotgon, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "powerusbotgoff", nullptr, Powerusbotgoff, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "trigon", nullptr, Trigon, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "trigoff", nullptr, Trigoff, nullptr, nullptr, nullptr, napi_default, nullptr }
};
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
return exports;
}
EXTERN_C_END
static napi_module demoModule = {
.nm_version =1,
.nm_flags = 0,
.nm_filename = nullptr,
.nm_register_func = Init,
.nm_modname = "entry",
.nm_priv = ((void*)0),
.reserved = { 0 },
};
extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
{
napi_module_register(&demoModule);
}
#ifndef SERIALPORT_H
#define SERIALPORT_H
#include <stddef.h>
#include "hilog/log.h"
/******************************************************
* 名称 :Gpio_Is_Enable
* 功能 :串口上电使能
* 入口参数 : GPIO_IS_ENABLE: GPIO是否使能
* [gpio-gpionu-gpiovalue:字符串必须以gpio-xx-xx形式]
* 出口参数 : 正确返回为1,错误返回为0
* *****************************************************/
int Gpio_Is_Enable(char* gpio_is_enable);
/******************************************************
* 名称 :Uart_Is_Enable
* 功能 :串口上电使能
* 入口参数 : PATH :串口使能控制节点路径 (uart0_module_status,uart1_module_status,...)
* IS_ENABLE: 串口是否使能(0:禁用 非0:使能)
* 出口参数 : 正确返回为1,错误返回为0
* *****************************************************/
int Uart_Is_Enable(char* path, unsigned int is_enable);
/******************************************************
* 名称 :SerialPort_open
* 功能 :打开差串口,返回串口设备文件描述符
* 入口参数 : PORT :串口号 (ttys0,s1,...)
* 出口参数 : 正确返回为大于0的整数,错误返回为0
* *****************************************************/
int SerialPort_open(char* port);
/*******************************************************************
* 名称: SerialPort_Init()
* 功能: 串口初始化
* 入口参数: fd 文件描述符
* speed 串口速度
* flow_ctrl 数据流控制
* databits 数据位 取值为 7 或者8
* stopbits 停止位 取值为 1 或者2
* parity 效验类型 取值为N,E,O,,S
* 出口参数: 正确返回为1,错误返回为0
*******************************************************************/
int SerialPort_Init(int fd, int speed,int flow_ctrlint ,int databits,int stopbits,int parity);
/*******************************************************************
* 名称: SerialPort_Recv
* 功能: 接收串口数据
* 入口参数: fd :文件描述符
* rcv_buf :接收串口中数据存入rcv_buf缓冲区中
* data_len :一帧数据的长度
* 出口参数: 正确返回为接收的字节数,错误返回为0
*******************************************************************/
int SerialPort_Recv(int fd, char *rcv_buf,int data_len);
/*******************************************************************
* 名称: SerialPort_Send
* 功能: 发送数据
* 入口参数: fd :文件描述符
* send_buf :存放串口发送数据
* data_len :一帧数据的个数
* 出口参数: 正确返回为发送的字节数,错误返回为0
*******************************************************************/
int SerialPort_Send(int fd, char *send_buf,int data_len);
/******************************************************
* 名称: SerialPort_close
* 功能: 关闭串口并返回串口设备文件描述
* 入口参数: fd :文件描述符
* 出口参数: void
*******************************************************************/
void SerialPort_close(int fd);
#endif
\ No newline at end of file
export const add: (a: number, b: number) => number;
/**
* 使能gpio口
* *******************参数说明***************************
* gpio:类型string,gpio口参数,格式为gpio-xx-x,其中xx为对应
* gpio口,x为0或1,1为使能gpio口,0为关闭gpio口,例使能gpio
* 口178,则gpio-178-1
* *******************返回说明***************************
* 类型int,大于0时打开串口成功,小于等于0时打开串口失败
*/
export const gpioisenale: (gpio: string) => number;
/**
* 打开串口
* *******************参数说明***************************
* path:类型string,串口路径,如/dev/ttyS0
* boardrate:类型int,波特率,如9600,115200
* ctrl:类型int,数据流控制,默认为0
* databits:类型int,数据位,默认为8
* stopbits:类型int,停止位,默认为1
* parity:类型int,校验位,0为无校验,1为奇校验,2为偶校验
* *******************返回说明***************************
* 类型int,大于0时打开串口成功,小于等于0时打开串口失败
*/
export const open: (path: string, boardrate:number,ctrl:number,databits:number,stopbits:number,parity:number) => number;
/**
* 发送串口数据
* *******************参数说明***************************
* data:类型string,发送的数据类型
* *******************返回说明***************************
* 类型int,大于0时发送成功,小于等于0时发送失败
*/
export const send: (data: string) => number;
/**
* 发送十六进制字符串串口数据
* *******************参数说明***************************
* data:类型string,发送的十六进制字符串类型
* *******************返回说明***************************
* 类型int,大于0时发送成功,小于等于0时发送失败
*/
export const sendhex: (data: string) => number;
/**
* 接收串口数据
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型string,长度大于等于1,数据接收成功
*/
export const recv: () => string;
/**
* 接收串口数据
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型字节数组,长度大于等于1,数据接收成功
*/
export const recvByte: () => Uint8Array;
/**
* 接收十六进制串口数据
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型string,长度大于等于1,数据接收成功
*/
export const recvhex: () => string;
/**
* 关闭串口
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 无
*/
export const close: () => void;
/**
* 打开5V供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,打开成功,打开失败
*/
export const power5von: () => number;
/**
* 关闭5V供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,关闭成功,关闭失败
*/
export const power5voff: () => number;
/**
* 打开SCAN供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,打开成功,打开失败
*/
export const powerscanon: () => number;
/**
* 关闭SCAN供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,关闭成功,关闭失败
*/
export const powerscanoff: () => number;
/**
* 打开RFID供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,打开成功,打开失败
*/
export const powerrfidon: () => number;
/**
* 关闭RFID供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,关闭成功,关闭失败
*/
export const powerrfidoff: () => number;
/**
* 打开PSAM供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,打开成功,打开失败
*/
export const powerpsamon: () => number;
/**
* 关闭PSAM供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,关闭成功,关闭失败
*/
export const powerpsamoff: () => number;
/**
* 打开电池供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,打开成功,打开失败
*/
export const powervbaton: () => number;
/**
* 关闭电池供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,关闭成功,关闭失败
*/
export const powervbatoff: () => number;
/**
* 打开USB OTG 5V供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,打开成功,打开失败
*/
export const powerusbotgon: () => number;
/**
* 关闭USB OTG 5V供电
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,关闭成功,关闭失败
*/
export const powerusbotgoff: () => number;
/**
* 触发扫描trig脚,拉低电平
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,拉低成功,拉低失败
*/
export const trigon: () => number;
/**
* 扫描trig脚,拉高电平
* *******************参数说明***************************
* 无
* *******************返回说明***************************
* 类型int,拉高成功,拉高失败
*/
export const trigoff: () => number;
\ No newline at end of file
import testNapi from 'libentry.so'
import Prompt from '@system.prompt';
import {
GClient,
MsgBaseInventoryEpc,
MsgBaseStop,
MsgBaseGetPower,
MsgBaseSetPower,
LogBaseEpcInfo,
LogBaseEpcOver
} from './harmonyOsReader.min'
import LightWeightMap from '@ohos.util.LightWeightMap';
import worker from '@ohos.worker';
import hilog from '@ohos.hilog';
import ScanAnalysis from './analysis/ScanAnalysis';
import emitter from '@ohos.events.emitter'
import SoundPlayer from './sound/SoundPlay'
import util from '@ohos.util';
export class IdentifyService {
private client: GClient = GClient.getInstance()
private tagMap: LightWeightMap<string, LogBaseEpcInfo> = new LightWeightMap()
private tagList: Array<LogBaseEpcInfo> = [];
private lastSpeed = 0
private readInterval = null
enableRead: boolean = true
private isOpen: Boolean = false;
work = new worker.Worker('entry/ets/identify/workers/Worker.ts', { name: "first worker in Stage model" })
textTimerController: TextTimerController = new TextTimerController()
/*打开RFID串口*/
openRfidPort() {
testNapi.powervbaton();
if (this.client.openSerial(testNapi, "/dev/ttyS1", 115200)) {
console.error("open /dev/ttyS1 成功")
this.client.callbackEpcInfo = (info: LogBaseEpcInfo) => {
if (info.result == 0) {
// console.error("EPC->" + info.epc + "==TID->" + info.tid + "==user->" + info.userdata)
if (!this.tagMap.get(info.epc)) {
this.tagMap.set(info.epc, info)
} else {
let value = this.tagMap.get(info.epc)
value.count += 1;
this.tagMap.set(info.epc, value)
}
if (!SoundPlayer.getLoop()) {
SoundPlayer.setLoop(true)
SoundPlayer.avPlayerFdSrcDemo()
}
}
};
this.client.callbackEpcOver = (over: LogBaseEpcOver) => {
console.info("call over------>" + over.rtMsg)
SoundPlayer.setLoop(false)
};
}
}
/*开启盘点*/
openRFIDInv() {
this.tagMap.clear()
this.tagList = []
let msg = new MsgBaseInventoryEpc();
msg.antennaEnable = 1;
msg.inventoryMode = 1;
let innerEvent = {
eventId: 1,
};
let epc: String = "";
var eventData = {
data: {
'epc': epc
},
priority: emitter.EventPriority.IMMEDIATE
}
// this.dataTitle = "EPC"
this.client.sendAsyncMsg(msg, () => {
if (msg.rtCode === 0) {
this.enableRead = false
this.textTimerController.reset()
this.textTimerController.start()
this.readInterval = setInterval(() => {
this.tagList = []
let readCount = 0
this.tagMap.forEach((value, key, map) => {
this.tagList.push(value)
console.log("读取EPC" + value.epc)
eventData.data.epc = value.epc
emitter.emit(innerEvent, eventData)
readCount += value.count
})
let rate = readCount - this.lastSpeed
if (rate <= 0) {
SoundPlayer.setLoop(false)
}
this.lastSpeed = readCount;
}, 1000)
} else {
Prompt.showToast({
message: "启动盘存失败"
});
}
})
}
/*停止盘点*/
stopRfidInv() {
console.log("zeng-:" + "stop");
let msg = new MsgBaseStop()
this.client.sendAsyncMsg(msg, () => {
if (msg.rtCode === 0) {
SoundPlayer.setLoop(false)
this.enableRead = true
this.textTimerController.pause()
clearInterval(this.readInterval)
} else {
Prompt.showToast({ message: "停止失败" });
}
});
}
/*关闭RFID串口*/
closeRFIDInv() {
this.client.close()
testNapi.powervbatoff()
SoundPlayer.setLoop(false)
}
/*打开扫描串口*/
openScanPort() {
testNapi.powerscanon();
//打开串口
try {
var ret = testNapi.open('/dev/ttyS0', 9600, 0, 8, 1, 0);
if (ret > 1) {
console.error("tag", "串口初始化成功");
//上拉gpio
this.isOpen = true;
//启动数据接收线程
this.executeWorkerFunc();
} else {
console.error("tag", "初始化失败");
}
console.error("tag", "onPageShow " + this.isOpen)
} catch (err) {
console.error(`初始化报错. Code:${err.code},message:${err.message}`);
}
console.log("tag", "onPageShow " + this.isOpen)
}
//异步函数用于接收线程返回
async executeWorkerFunc() {
//this.work.postMessage(this.isStart) ;
var strFlag = false;
var outputData = '';
this.work.onmessage = function (e) {
var data = e.data;
hilog.error(0x0000, 'hdwall testTag', 'work recv = %{public}s', data);
//用于跳出while(!strFlag)循环
strFlag = true;
}
this.work.onerror = function (e) {
hilog.error(0x0000, 'hdwall testTag', 'work recv = %{public}s', e.message);
}
//循环读取
while (this.isOpen) {
while (!strFlag) {
outputData = testNapi.recvhex();
//串口返回数据
if (outputData.length > 0) {
strFlag = true;
}
await ScanAnalysis.promiseCase(); //10ms延时
}
//结束线程的时候outputData可能为空
if (outputData.length > 0) {
//testNapi.gpioisenale('gpio-48-1') ;
let innerEvent = {
eventId: 2,
};
outputData = this.getGbkData(outputData)
console.error("tag", "《=========扫码数据=========》 " + outputData)
// let scanStr: String = ScanAnalysis.getScanData(outputData);
// console.error("tag", "《=========解码数据=========》" + scanStr.replace(/\s+/g, ''))
var eventData = {
data: {
'scancode': outputData
},
priority: emitter.EventPriority.IMMEDIATE
}
emitter.emit(innerEvent, eventData)
}
strFlag = false;
}
}
/*开启扫描*/
openScan() {
//参数说明value:gpio-178-0,下拉gpio 178
var value = "gpio-48-1";
var ret = testNapi.gpioisenale(value);
if (ret > 0) {
console.error("tag", "上拉成功");
}
// 等待100ms
ScanAnalysis.mySetTimeout(() => {
var downvalue = "gpio-48-0";
var downret = testNapi.gpioisenale(downvalue);
if (downret > 0) {
console.error("tag", 'scan:gpio: 下拉成功')
} else {
console.error("tag", 'scan:gpio: 下拉失败')
}
}, 100);
console.log("tag", '扫描时间:' + new Date().getTime())
}
/*关闭扫描*/
closeScan() {
this.isOpen = false;
testNapi.powerscanoff()
testNapi.close();
this.work.postMessage('stop recv');
}
/*设置读写器功率*/
setUpAnt(antPower: string) {
let msg = new MsgBaseSetPower()
msg.antPower = { 1: parseInt(antPower) }
this.client.sendAsyncMsg(msg, () => {
Prompt.showToast({
message: msg.rtCode === 0 ? "设置成功" : msg.rtMsg
});
})
}
/*查询读写器功率*/
searchAnt(): Promise<string> {
let antPower: string = "0";
let msg = new MsgBaseGetPower();
return new Promise((resolve) => {
this.client.sendAsyncMsg(msg, (err, result) => {
// 处理错误
antPower = msg.antPower[1] + "";
console.log("查询功率:", JSON.stringify(msg));
resolve(antPower);
});
});
}
getGbkData(scanData): string {
const array = new Uint8Array(scanData.length / 2);
for (let i = 0; i < scanData.length; i += 2) {
const byte = parseInt(scanData.substr(i, 2), 16);
array[i / 2] = byte;
}
//gbk 字节数组转中文
let textDedoder = util.TextDecoder.create('gbk', {ignoreBOM:true}) ;
let test = textDedoder.decodeWithStream(array, {stream: false}) ;
return test;
}
}
export default new IdentifyService()
\ No newline at end of file
export class ScanAnalysis {
getScanData(str: string): string {
str = str.replace("\u001E", "").replace("\u001D", "").replace("\u0004", "").replace("\u0000", "")
try {
//单品标签GM
if (str.includes("A950") && str.includes("A010") && str.includes("A005")) {
str = str.replace("07A950", "BZDPGM|")
.replace("A002", "|")
.replace("A006", "|")
.replace("A010", "|")
.replace("A005", "|");
}
//单品标签QR BZDPQR|17海校尉夏常服帽|861487753|62|202011|3502工厂
if (str.includes("A001") && str.includes("A010") && !str.includes("A061")) {
str = str.replace("07A001", "BZDPQR|")
.replace("A002", "|")
.replace("A006", "|")
.replace("A010", "|")
.replace("A005", "|");
}
//内包标签GM BZNBZGM|500171A00117海校尉夏常服帽|861487753|62|3502工厂
if (str.includes("A950") && str.includes("A005") && !str.includes("A010")) {
str = str.replace("07A950", "BZNBZGM|").replace("A002", "|").replace("A006", "|").replace("A005", "|");
}
//内包标签QR
if (str.includes("A950") && str.includes("A001")) {
str = str.replace("07A950", "BZNBZQR|")
.replace("A001", "|")
.replace("A002", "|")
.replace("A006", "|")
.replace("A005", "|");
}
//中包标签GM
if (str.includes("A950") && str.includes("A051") && !str.includes("A010")) {
let s = str.replace("07A950", "BZZBZGM|").replace("A002", "|").replace("A006", "|").replace("A051", "|");
let res: string[] = s.split("|");
//BZZBZGM|品名代码|物资标识码:数量
str = res[0] + "|" + res[1] + "|" + res[2] + ":" + res[4];
}
//中包标签QR BZZBZQR|17海校尉夏常服帽|861487753:10
if (str.includes("A001") && str.includes("A051") && !str.includes("A010")) {
let s = str.replace("07A001", "BZZBZQR|").replace("A002", "|").replace("A006", "|").replace("A051", "|");
let res: string[] = s.split("|");
//BZZBZQR|品名名称|物资标识码:数量
str = res[0] + "|" + res[1] + "|" + res[2] + ":" + res[4];
}
//外包标签GM
if (str.includes("A950") && str.includes("A051")) {
let s = str.replace("07A950", "BZWBZGM|")
.replace("A002", "|")
.replace("A006", "|")
.replace("A051", "|")
.replace("A061", "|")
.replace("A010", "|")
.replace("A015", "|");
let res: string[] = s.split("|");
//BZWBZGM|品名代码|物资标识码:数量
str = res[0] + "|" + res[1] + "|" + res[2] + ":" + res[4];
}
//外包(混)标签GM
if (str.includes("A951") && str.includes("A015")) {
let s = str.replace("07A951", "BZWBZGM|").replace("A061", "|").replace("A010", "|").replace("A015", "|");
let res: string[] = s.split("|");
let wzbsm = res[1].split(":"); //获取物资标识码:数量
//String pmdm = dao.getDataStringByString("Dpbq.getPmdm",wzbsm[0]);
let pmdm = "";
//BZWBZGM|品名代码|物资标识码:数量
str = res[0] + "|" + pmdm + "|" + res[1] + "|" + res[2] + "|" + res[4];
}
//外包标签QR BZWBZQR|17海校尉夏常服帽|864549931:27|20201113|3502工厂
if (str.includes("A051") && str.includes("A005")) {
//资产标签QR BZZCQR|17海校尉夏常服帽|864549931:27|20201113|3502工厂
if (str.includes("07A002")) {
let s = str.replace("07A002", "BZZCQR|")
.replace("A002", "|")
.replace("A006", "|")
.replace("A051", "|")
.replace("A061", "|")
.replace("A010", "|")
.replace("A005", "|")
.replace("A001", "|")
.replace("A901", "|")
.replace("A902", "|")
.replace("A038", "|");
let res: string[] = s.split("|");
//BZWBZGM|品名代码|物资标识码:数量
if (res[1].length > 0 && !res[1].includes("86")) {
str = res[0] + "|" + res[2] + "|" + res[3] + ":" + res[7] + "|" + res[8] + "|" + res[5];
} else {
str = res[0] + "|" + res[2] + "|" + res[1] + ":" + res[7] + "|" + res[8] + "|" + res[5];
}
} else {
//外包标签QR BZWBZQR|17海校尉夏常服帽|864549931:27
let s = str.replace("07A001", "BZWBZQR|")
.replace("A002", "|")
.replace("A006", "|")
.replace("A051", "|")
.replace("A061", "|")
.replace("A010", "|")
.replace("A005", "|");
let res: string[] = s.split("|");
//BZWBZGM|品名代码|物资标识码:数量|20201113|3502工厂
str = res[0] + "|" + res[1] + "|" + res[2] + ":" + res[4] + "|" + res[6] + "|" + res[7];
console.log("外包标签QR====>"+str)
}
}
//外包(混)标签QR BZWBZQR|17海校尉夏常服帽|861487753:11;864549931:11;863602076:11|2|20201113|3502工厂
if (str.includes("A001") && str.includes("A951")) {
str = str.replace("07A001", "BZWBZQR|")
.replace("A951", "|")
.replace("A061", "|")
.replace("A010", "|")
.replace("A005", "|");
console.log("外包(混)标签QR====>"+str)
}
} catch (err) {
console.error(`Failed to get preferences. Code:${err.code},message:${err.message}`)
}
return str;
}
mySetTimeout(callback, delay) {
return new Promise((resolve) => {
setTimeout(() => {
callback();
resolve(1);
}, delay);
});
}
promiseCase(): Promise<Object> {
let p = new Promise(function (resolve, reject) {
setTimeout(function () {
resolve(1)
}, 200)
}).then(undefined, (error) => {
})
return p;
}
}
export default new ScanAnalysis();
\ No newline at end of file
import bzhxModal from '../../model/BzhxModel'
const JsonResult = {
EXCEPTION_CODE: 500,
SUCCESS_CODE: 200
}
// sql非空
function isEmpty(value) {
if (value == null) {
return true;
}
if (isArrayLike(value)) {
return !value.length;
} else if (isPlainObject(value)) {
for (let key in value) {
if (Object.prototype.hasOwnProperty.call(value, key)) {
return false;
}
}
}
return false;
}
// isArrayLike:检查value是否是类数组
// 如果一个值被认为是类数组,那么它不是一个函数,并且value.length是个整数,大于等于0,小于或等于Number.MAX_SAFE_INTEGER。这里字符串也被当作类数组。
function isArrayLike(value) {
return value != null && isLength(value.length) && !isFunction(value);
}
// sLength:检查value是否为有效的类数组长度
function isLength(value) {
return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= Number.MAX_SAFE_INTEGER;
}
// isFunction:检查value是不是函数
function isFunction(value) {
return Object.prototype.toString.call(value) === '[object Function]'
}
// isPlainObject:判断数据是不是Object类型的数据
function isPlainObject(obj) {
return Object.prototype.toString.call(obj) === '[object Object]'
}
function replaceAll(string, search, replace) {
return string.split(search).join(replace);
}
async function analysisQrCode(bqData, isData = false) {
//15所二维码信息
//bqData = "\u001E07\u001DA002868625394\u001DA00107陆女军官春秋常服\u001DA006165/88\u001DA0031000A05133A010000001000000010000001\u001DA90900000000000000000000000000000001\u001E\u0004";
//bqData = "07A002868736774A00105女棉鞋A00622A90150件/箱A005北京生产厂家A902件A0511A0102021-01-10A3836个月A012760301106A0610.001A909e17d3e0a5f3e45548e92888e0640059bc";
var result = {}as any
// TODO 标签解析
// 07A00120轻便作战靴A002889000004A006290A010202303A005军委机关
var str = bqData
str = replaceAll(str, "", "")
str = replaceAll(str, "", "")
str = replaceAll(str, "", "")
str = replaceAll(str, "{", "")
str = replaceAll(str, "}", "")
str = replaceAll(str, "\n", "");
var hx_map = {} //号型数量/查询条件
var res1 = "";
var pmdm = "";
var pmsl = 0;
if (str.indexOf('hjguid') !== -1 && str.indexOf('hwh') !== -1) {
result.data = [JSON.parse(bqData)];
result.success = true;
result.status = JsonResult.SUCCESS_CODE;
return result
}
if (str.indexOf('SF') !== -1 || str.indexOf('YZ') !== -1 || str.indexOf('JD') !== -1) {
result.data = [{
ddh: bqData,
bgzt: '待上架'
}];
result.success = true;
result.status = JsonResult.SUCCESS_CODE;
return result
}
//若信息包含A909说明是15所标签
if (str.indexOf("A909") !== -1) {
const indexOfA002 = str.indexOf("A002");
res1 = str.substring(indexOfA002 + 4, indexOfA002 + 4 + 9);
pmdm = res1;
const indexOfA051 = str.indexOf("A051");
if (indexOfA051 == -1) {
result.msg = "标签解析异常,请扫描正确的标签"
result.success = false
result.status = JsonResult.EXCEPTION_CODE
return result;
}
const strA051 = str.substring(indexOfA051 + 4, str.length);
const indexOfA = strA051.indexOf("A");
pmsl = parseInt(strA051.substring(0, indexOfA));
hx_map[pmdm] = pmsl;
} else {
//单品标签GM
if (str.indexOf("A950") !== -1 && str.indexOf("A010") !== -1 && str.indexOf("A005") !== -1) {
str = str.replace("07A950", "BZDPGM|").replace("A002", "|").replace("A006", "|").replace("A010", "|")
.replace("A005", "|");
}
//单品标签QR
if (str.indexOf("A001") !== -1 && str.indexOf("A010") !== -1 && str.indexOf("A061") == -1) {
str = str.replace("07A001", "BZDPQR|").replace("A002", "|").replace("A006", "|").replace("A010", "|")
.replace("A005", "|");
}
// //内包标签GM
// if (str.indexOf("A950") !== -1 && str.indexOf("A005") !== -1 && str.indexOf("A010") == -1) {
// str = str.replace("07A950", "BZNBZGM|").replace("A002", "|").replace("A006", "|").replace("A005", "|");
// }
//内包标签QR
if (str.indexOf("A950") !== -1 && str.indexOf("A001") !== -1) {
str = str.replace("07A950", "BZNBZQR|").replace("A001", "|").replace("A002", "|").replace("A006", "|")
.replace("A005", "|");
}
//中包标签GM
if (str.indexOf("A950") !== -1 && str.indexOf("A051") !== -1 && str.indexOf("A010") == -1) {
let s = str.replace("07A950", "BZZBZGM|").replace("A002", "|").replace("A006", "|").replace("A051",
"|");
let res = s.split("|");
//BZZBZGM|品名代码|物资标识码:数量
str = res[0] + "|" + res[1] + "|" + res[2] + ":" + res[4];
}
//中包标签QR
if (str.indexOf("A001") !== -1 && str.indexOf("A051") !== -1 && str.indexOf("A010") == -1) {
let s = str.replace("07A001", "BZZBZQR|").replace("A002", "|").replace("A006", "|").replace("A051",
"|");
let res = s.split("|");
let wzbsm = res[4].split(':');
if (wzbsm.length > 1) {
str = res[0] + "|" + res[1] + "|" + res[4];
} else {
//BZZBZQR|品名名称|物资标识码:数量
str = res[0] + "|" + res[1] + "|" + res[2] + ":" + res[4];
}
}
//外包标签GM
if (str.indexOf("A950") !== -1 && str.indexOf("A051") !== -1) {
let s = str.replace("07A950", "BZWBZGM|").replace("A002", "|").replace("A006", "|").replace("A051", "|")
.replace("A061", "|").replace("A010", "|").replace("A015", "|");
let res = s.split("|");
//BZWBZGM|品名代码|物资标识码:数量
str = res[0] + "|" + res[1] + "|" + res[2] + ":" + res[4];
}
//外包(混)标签GM
if (str.indexOf("A951") !== -1 && str.indexOf("A015") !== -1) {
let s = str.replace("07A951", "BZWBZGM|").replace("A061", "|").replace("A010", "|").replace("A015",
"|");
let res = s.split("|");
let wzbsm = res[1].split(":"); //获取物资标识码:数量
let sql = "select wzdm from tab_xtwh_jcsj_wzdm where lsm = " + wzbsm[0] + "";
// 查询数据库
let wzdm = await bzhxModal.queryLsm(wzbsm[0])
//BZWBZGM|品名代码|物资标识码:数量
str = res[0] + "|" + wzdm['wzdm'] + "|" + res[1] + "|" + res[2] + "|" + res[4];
}
//外包标签QR
if (str.indexOf("A051") !== -1 && str.indexOf("A005") !== -1) {
let s = str.replace("07A001", "BZWBZQR|").replace("A002", "|").replace("A006", "|").replace("A051", "|")
.replace("A061", "|").replace("A010", "|").replace("A005", "|");
let res = s.split("|");
//BZWBZGM|品名代码|物资标识码:数量
str = res[0] + "|" + res[1] + "|" + res[2] + ":" + res[4];
}
//外包(混)标签QR
if (str.indexOf("A001") !== -1 && str.indexOf("A951") !== -1) {
str = str.replace("07A001", "BZWBZQR|").replace("A951", "|").replace("A061", "|").replace("A010", "|")
.replace("A005", "|");
}
let res = str.split("|"); //外包装/中包装/内包装按照|截取标签数据
var firstRes = res[0];
//解析外包装和中包装二维码数据
//外包装--BZWBZGM|502118|865825756:5;864609135:2;867395786:3;861051856:1;861260280:1|600|500|480|18|20190304|3Y|2018-ZZ-被装-ZHTJ-2046|68993514
//外包装--BZWBZQR|17作战靴|280:5;270:2;265:3;260:1;250:1|18|20190304|3514工厂
//中包装--BZZBZGM|501469|869982051:20|68993514-----BZZBZQR|07A内手套|大号:20|3514工厂
if (firstRes.indexOf("BZWBZGM") !== -1 || firstRes.indexOf("BZWBZQR") !== -1 || firstRes.indexOf(
"BZZBZGM") !== -1 || firstRes.indexOf("BZZBZQR") !== -1) {
res1 = res[1]; //外包装/中包装/截取品名代码或者品名名称
let res2 = res[2].split(";");
for (let i = 0; i < res2.length; i++) {
let ss = res2[i].split(":");
//把物资标识码(号型名称)和号型数量放入Map
//拼接物资标识码(号型名称)
hx_map[ss[0]] = ss[1];
if (pmdm == "") {
pmdm = "'" + ss[0] + "'";
} else {
pmdm += ",'" + ss[0] + "'";
}
//合计号型数量
pmsl += parseInt(ss[1]);
}
//解析内包装二维码数据
//内包装--BZNBZGM|503719|861859749|4号|68993543-----BZNBZQR|07陆下士肩章|861859749|4号|3543工厂
} else if (firstRes.indexOf("BZNBZGM") !== -1 || firstRes.indexOf("BZNBZQR") !== -1) {
res1 = res[3]; //外包装/中包装/内包装截取品名代码或者品名名称
hx_map[res[3]] = "1"; //把物资标识码(号型名称)和号型数量放入Map,内包的默认数量1
pmdm = "'" + res[3] + "'";
pmsl += 1;
} else if (firstRes.indexOf(
"BZDPGM") !== -1 || firstRes.indexOf("BZDPQR") !== -1) {
res1 = res[1]; //外包装/中包装/内包装截取品名代码或者品名名称
hx_map[res[2]] = "1"; //把物资标识码(号型名称)和号型数量放入Map,内包的默认数量1
pmdm = "'" + res[2] + "'";
pmsl += 1;
} else if (str.length == 6 || str.length == 9 || str.length == 10) {
//6位为无号配号,9位为物资标识代码,10位为带号型号码
res1 = str; //一维码标签截取物资标识码或者号型代码
//解析内包装一维码标签数据
hx_map[str] = "1"; //把物资标识码/号型代码和数量放入Map,内包装一维码标签默认数量1
pmdm = "'" + str + "'";
pmsl += 1;
}
}
hx_map["wzdm"] = res1
hx_map["pmdm_hxmc"] = pmdm
hx_map["pmsl"] = pmsl
if (isEmpty(hx_map["wzdm"]) || isEmpty(hx_map["pmdm_hxmc"])) {
result.msg = "标签解析异常,请扫描正确的标签"
result.success = false
result.status = JsonResult.EXCEPTION_CODE
return result;
}
// if (!!isData) {
// return hx_map
// }
// List < Pzmx > hxList = Lists.newArrayList();
var hxList = [];
// let allsql = `select * from tab_xtwh_jcsj_bzhx where pmdmsix = '400001' limit 100 offset(1 - 1) * 100`
// let allsql1 = ` update tab_xtwh_jcsj_wzdm set hxdm = wzdm||substr(hxdm,3,6) where substr(hxdm,1,6) != wzdm `
// let sql = "select wzdm,hxdm,hxmc,lsm,wzpm from tab_xtwh_jcsj_wzhxdm where (pmdmten = '" +
// hx_map["wzdm"] + "' or wzdm='" + hx_map["wzdm"] + "' or wzpm = '" + hx_map["wzdm"] +
// "' or lsm = '" + hx_map["wzdm"] + "') " + " and ( pmdmten in (" + hx_map["pmdm_hxmc"] +
// ") or hxmc in (" + hx_map["pmdm_hxmc"] + ") or lsm in (" + hx_map["pmdm_hxmc"] + ")) ";
let sql = "select wzdm,hxdm,hxmc,lsm,wzpm from tab_xtwh_jcsj_wzhxdm where "+
" lsm = '" + hx_map["wzdm"] + "' " +
" or lsm in (" + hx_map["pmdm_hxmc"] + ")"+
" or pmdmten = '" + hx_map["wzdm"] + "' " +
" or ( wzpm = '" + hx_map["wzdm"] + "' and ( substr(hxdm,7)='0000' or hxdm in (" + hx_map["pmdm_hxmc"] + ") ) )"+
" or ( wzpm = '" + hx_map["wzdm"] + "' and ( hxmc='无号配号' or hxmc in (" + hx_map["pmdm_hxmc"] + ") ) )" ;
// "select wz.wzdm,wz.hxdm,hx.hxmc,wz.lsm,HX.wzpm from tab_xtwh_jcsj_bzhx hx join tab_xtwh_jcsj_wzdm wz on hx.pmdmten = wz.hxdm where (hx.pmdmten = '" +
// hx_map["wzdm"] + "' or wz.wzdm='" + hx_map["wzdm"] + "' or hx.wzpm = '" + hx_map["wzdm"] +
// "' or wz.lsm = '" + hx_map["wzdm"] + "') " + " and ( hx.pmdmten in (" + hx_map["pmdm_hxmc"] +
// ") or hx.hxmc in (" + hx_map["pmdm_hxmc"] + ") or wz.lsm in (" + hx_map["pmdm_hxmc"] + ")) " +
// "order by hx.xh";
// and PMDMTEN=${hx_map.pmdm_hxmc}
// let sql = `SELECT HXMC,PMDMTEN from TAB_XTWH_JCSJ_BZHX where WZPM='${hx_map.wzdm}'`
// const allList = await selectInformationType("GY_M_PMV3", allsql)
// const allList1 = await createOrFindSQL("GY_M_PMV3", allsql1)\
console.log('sql', sql)
let wzdmList = await bzhxModal.queryHXlist( sql)
for (let j = 0; j < wzdmList.length; j++) {
let wzdm = wzdmList[j];
Object.keys(hx_map).forEach((item) => {
if (item == wzdm["LSM"] || item == wzdm["HXMC"] || item == wzdm["HXDM"]) {
let Pzmx = {
pmdm: wzdm.wzdm,
pmdmcode: wzdm.hxdm,
srsl: hx_map[item],
wzpm: wzdm.wzpm,
hxmc: wzdm.hxmc
}
hxList.push(Pzmx)
}
})
}
// console.log('扫描解析数据:', hxList)
result.data = hxList;
result.success = true;
result.status = JsonResult.SUCCESS_CODE;
return result;
}
export {
analysisQrCode
}
\ No newline at end of file
import ProductEpc196 from './ProductEpc196';
export default class ProductEpc{
pro196 = new ProductEpc196();
index: number;
listIndex: number;
sq: number = 0;
wq: number = 0;
hj: number = 0;
strEpcs: string;
isOk: string;
//7 String.valueOf(pro.getiZbNo()) + "/" + String.valueOf(pro.getiZbAll())
strZbAndAll: string;
ibqs: number = 0;//标签数,tagListview 中使用
strBqs: string = "";//标签数,tagListview 中使用 ibqs/iZbAll
strSubEpc: string;
//标签epc长度
iTagLength: number = 42;
strCopyright: string = "00";
//数据库中的版本号 十进制
iCopyright: number;
//EPC中标签类型 1位十进制 0-F 0-单品物资标签,1-箱标签,2-托盘标签,3-货架标签,4-批物资标签
strTagType: string = "1";
//EPC中对应企业代码 6位十进制 000000-FFFFFF
strSCCSNo: string = "0";
//数据库中生产企业代码
strSccsCode: string;
//生产企业名称
strSCCSName: string = "";
//epc中包装类型 1位十六进制 0-F 1-外包装
// ,2-中安装,3-内包装,F-零头配箱
strBzType: string;
//EPC中物资代码,LSM 8位十进制 00000000-FFFFFFFF
strWzLsm: string = "0";
//数据库中物资代码 LSM
iWzLsm: number;
//EPC中物资代码,52码 9位十进制 000000000-FFFFFFFFF
strWzNo: string = "0";
//数据库中物资代码 52m码
iWzNo: number;
//物资名称
strWzName: string = "";
//号型名称
strWzHXName: string = "";
//Epc 中生产日期
strScrq: string;
//数据库 中生产日期
dtScrq: number;
//Epc中下级包装数量 2位十六进制 00-FF
strXjbzsl: string = "0";
//数据库中下级包装数量
iXjbzsl: number;
//EPC中产品总数量 3位十六进制 000-FFF
strNum: string = "0";
//数据库中产品总数量
iNum: number;
//epc 中企业生产线序号 1位十六进制 0-F 十六进制 0-E表示生产线序列号,F表示仓库打印的标签
strScxNo: string = "0";
//数据库中十进制企业生产线序号
iScxNo: number;
//epc 中包装箱序号 3位十六进制 000-FFF
strXiangNo: string;
//数据库中 十进制包装箱序号
iXangNo: number;
//箱序列号 生产线序号+包装箱序号
strXSerialNo: string;
//epc中组别号码 1位十六进制 0-F
strZbhm: string = "0";
//相同epc组别中共有几个
iZbAll: number;
//相同epc组别中第几个
iZbNo: number;
//epc中校验码 1位十六进制
strJiaoYan: string = "0";
//epc中箱内序号 2位 00-FF
strXnSerialno: string = "00";
//数据库中箱内序号
iXnSerialno: number;
//epc
strEpc: string;
//起始箱号
iStartXNo: number = 0;
isDel: boolean = false;
/**计量单位*/
jldw: string;
/**物资号型代码*/
modelCode: string;
getStrZbAndAll(): string {
return this.strZbAndAll;
}
setStrZbAndAll(strZbAndAll: string) {
this.strZbAndAll = strZbAndAll;
}
getIbqs(): number {
return this.ibqs;
}
setIbqs(ibqs: number) {
this.ibqs = ibqs;
}
getStrBqs(): string {
return this.strBqs;
}
setStrBqs(strBqs: string) {
this.strBqs = strBqs;
}
getHj(): number {
return this.hj;
}
setHj(hj: number) {
this.hj = hj;
}
getSq(): number {
return this.sq;
}
setSq(sq: number) {
this.sq = sq;
}
getWq(): number {
return this.wq;
}
setWq(wq: number) {
this.wq = wq;
}
getIndex(): number {
return this.index;
}
setIndex(index: number) {
this.index = index;
}
getListIndex(): number {
return this.listIndex;
}
setListIndex(listIndex: number) {
this.listIndex = listIndex;
}
getStrEpcs(): string {
return this.strEpcs;
}
setStrEpcs(strEpcs: string) {
this.strEpcs = strEpcs;
}
getIsOk(): string {
return this.isOk;
}
setIsOk(isOk: string) {
this.isOk = isOk;
}
getStrSubEpc(): string {
return this.strSubEpc;
}
setStrSubEpc(strSubEpc: string) {
this.strSubEpc = strSubEpc;
}
getiTagLength(): number {
return this.iTagLength;
}
setiTagLength(iTagLength: number) {
this.iTagLength = iTagLength;
}
getStrCopyright(): string {
return this.strCopyright;
}
setStrCopyright(strCopyright: string) {
this.strCopyright = strCopyright;
}
getiCopyright(): number {
return this.iCopyright;
}
setiCopyright(iCopyright: number) {
this.iCopyright = iCopyright;
}
getStrTagType(): string {
return this.strTagType;
}
setStrTagType(strTagType: string) {
this.strTagType = strTagType;
}
getStrSCCSNo(): string {
return this.strSCCSNo;
}
setStrSCCSNo(strSCCSNo: string) {
this.strSCCSNo = strSCCSNo;
}
getStrSccsCode(): string {
return this.strSccsCode;
}
setStrSccsCode(strSccsCode: string) {
this.strSccsCode = strSccsCode;
}
getStrSCCSName(): string {
return this.strSCCSName;
}
setStrSCCSName(strSCCSName: string) {
this.strSCCSName = strSCCSName;
}
getStrBzType(): string {
return this.strBzType;
}
setStrBzType(strBzType: string) {
this.strBzType = strBzType;
}
getStrWzLsm(): string {
return this.strWzLsm;
}
setStrWzLsm(strWzLsm: string) {
this.strWzLsm = strWzLsm;
}
getiWzLsm(): number {
return parseInt(this.strWzLsm, 16);//16转10
//return iWzLsm;
}
setiWzLsm(iWzLsm: number) {
//this.iWzLsm = iWzLsm;
this.strWzLsm = iWzLsm.toString(16);
}
getStrWzNo(): string {
return this.strWzNo;
}
setStrWzNo(strWzNo: string) {
this.strWzNo = strWzNo;
}
getiWzNo(): number {
return parseInt(this.strWzNo,16);
//return iWzNo;
}
setiWzNo(iWzNo: number) {
//this.iWzNo = iWzNo;
this.strWzNo = iWzNo.toString(16);
}
getStrWzName(): string {
return this.strWzName;
}
setStrWzName(strWzName: string) {
this.strWzName = strWzName;
}
getStrWzHXName(): string {
return this.strWzHXName;
}
setStrWzHXName(strWzHXName: string) {
this.strWzHXName = strWzHXName;
}
getStrScrq():string {
return this.strScrq;
}
setStrScrq(strScrq: string) {
this.strScrq = strScrq;
}
getDtScrq(): number {
return this.dtScrq;
}
setDtScrq(dtScrq: number) {
this.dtScrq = dtScrq;
}
getStrXjbzsl(): string {
return this.strXjbzsl;
}
setStrXjbzsl(strXjbzsl: string) {
this.strXjbzsl = strXjbzsl;
}
getIXjbzsl(): number {
return parseInt(this.strXjbzsl,16);
//return iXjbzsl;
}
setIXjbzsl(iXjbzsl: number) {
//this.iXjbzsl = iXjbzsl;
this.strXjbzsl = iXjbzsl.toString(16);
}
getStrNum(): string {
return this.strNum;
}
setStrNum(strNum: string) {
this.strNum = strNum;
}
getiNum(): number {
//return iNum;
return parseInt(this.strNum,16);
}
setiNum(iNum: number) {
this.strNum = iNum.toString(16);
//this.iNum = iNum;
}
getStrScxNo(): string {
return this.strScxNo;
}
setStrScxNo(strScxNo: string) {
this.strScxNo = strScxNo;
}
getiScxNo(): number {
return parseInt(this.strScxNo,16) + 1;
//return iScxNo;
}
setiScxNo(iScxNo: number) {
//this.iScxNo = iScxNo;
this.strScxNo = (iScxNo - 1).toString(16);
}
getStrXiangNo(): string {
return this.strXiangNo;
}
setStrXiangNo(strXiangNo: string) {
this.strXiangNo = strXiangNo;
}
getiXangNo(): number {
// return iXangNo;
return parseInt(this.strXiangNo,16);
}
setiXangNo(iXangNo: number) {
//this.iXangNo = iXangNo;
this.strXiangNo = iXangNo.toString(16);
}
getStrXSerialNo(): string {
return this.strXSerialNo;
}
setStrXSerialNo(strXSerialNo: string) {
this.strXSerialNo = strXSerialNo;
}
getStrZbhm(): string {
return this.strZbhm;
}
setStrZbhm(strZbhm: string) {
this.strZbhm = strZbhm;
}
getiZbAll(): number {
return this.iZbAll;
}
setiZbAll(iZbAll: number) {
this.iZbAll = iZbAll;
}
getiZbNo(): number {
return this.iZbNo;
}
setiZbNo(iZbNo: number) {
this.iZbNo = iZbNo;
}
getStrJiaoYan(): string {
return this.strJiaoYan;
}
setStrJiaoYan(strJiaoYan: string) {
this.strJiaoYan = strJiaoYan;
}
getStrXnSerialno(): string {
return this.strXnSerialno;
}
setStrXnSerialno(strXnSerialno: string) {
this.strXnSerialno = strXnSerialno;
}
getiXnSerialno():number {
//return iXnSerialno;
return parseInt(this.strXnSerialno,16);
}
setiXnSerialno(iXnSerialno: number) {
//this.iXnSerialno = iXnSerialno;
this.strXnSerialno = iXnSerialno.toString(16);
}
getStrEpc():string {
return this.strEpc;
}
setStrEpc(strEpc: string) {
this.strEpc = strEpc;
this.iTagLength = strEpc.length;
}
getiStartXNo(): number {
return this.iStartXNo;
}
setiStartXNo(iStartXNo: number) {
this.iStartXNo = iStartXNo;
}
createEpc(): string {
this.strEpc = this.pro196.PackEpc();
return this.strEpc;
}
getJldw(): string {
return this.jldw;
}
setJldw(jldw: string) {
this.jldw = jldw;
}
getModelCode(): string {
return this.modelCode;
}
setModelCode(modelCode: string) {
this.modelCode = modelCode;
}
getInfoFormEpc(){
try{
console.log("1111接受EPC"+this.strEpc)
this.pro196.UnPackEpc(this.strEpc.substring(0,49));
this.strSubEpc = this.strEpc.substring(0,41) + this.strEpc.substring(43,49);
this.strCopyright = this.pro196.getStrHexVersion();
this.strTagType = this.pro196.getStrHexTagType();
this.strSccsCode = this.trimStart(this.pro196.getStrOrgCode());//去除前面的0
this.strBzType = this.pro196.getStrHexPacktype().toUpperCase();
this.strWzLsm = this.pro196.getStrHexProductCode();
this.strScrq = this.pro196.getStrHexScrq();
this.dtScrq = this.pro196.getDtScrq();
console.log("strXjbzsl",this.pro196.getStrHexInsidePackNum())
this.strXjbzsl = this.pro196.getStrHexInsidePackNum();
this.strNum = this.pro196.getStrHexProductNum();
this.strScxNo = this.pro196.getStrHexProductLine();
this.strXiangNo = this.pro196.getStrHexPackSerialNo();
// this.strXSerialNo = this.iScxNo.toString() + "/" + this.iXangNo.toString();
this.strZbhm = this.pro196.getStrHexGroupNo();
this.iZbAll = this.pro196.getiZbAll();
console.log("相同epc组别中共有几个"+this.iZbAll)
this.iZbNo = this.pro196.getiZbNo();
this.strJiaoYan = this.pro196.getStrHexCRCCode();
} catch (err){
console.error("getInfoFormEpc 52 Err", JSON.stringify(err));
// 输出堆栈信息
console.error("Stack Trace:", err.stack);
}
}
trimStart(s: string) {
for (var i = 0; i < s.length; i++) {
if (s.charAt(i) != '0') {
s = s.substring(i, s.length);
break;
}
}
return s;
}
//多标签判断方法
isSameBox(epc: string): boolean {
let bl: boolean = false;
switch(this.iTagLength){
case 52:
if(epc.length == 52){
let temp: string = epc.substring(0,41) + epc.substring(43,49);
if(this.strSubEpc === temp){
bl = true;
}
}
break;
case 44:
if(epc.length == 44 && this.strSubEpc === epc.substring(0,42)){
bl = true;
}
break;
case 36:
break;
}
return bl;
}
getIsDel(): boolean {
return this.isDel;
}
setIsDel(del: boolean) {
this.isDel = del;
}
}
\ No newline at end of file
import TimeUtil from '../../TimeUtil'
export default class ProductEpc196 {
// 标头信息
static CONSTHEADERINFO = "05"; //被装专业固定"05"
static CONSTHEADERINFOBIN = "00000101";
static QR_HEADER_BIN = "00001000";
static INIT_HEADER_BIN = "00001001";
// 版本号
static CONSTVERSION = "11";
static CONSTVERSIONBIN = "00010001";
//定义静态发行机构标志
static CONSTMILITARYPUBLISHFLAG = "000001"; //部队发布
static CONSTNATIONPUBLISHFLAG = "000010"; //国家发布
static CONSTNATOPUBLISHFLAG = "000011"; //北约发布
//无源标签6位字段对应表
KeyWords: string[] = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"];
strKeyWords: string = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
//1、标头信息 8位 被装专业专用05
strHexHeaderInfo: string = ProductEpc196.CONSTHEADERINFO;
strBinHeaderInfo: string = ProductEpc196.CONSTHEADERINFOBIN; //2进制
//2、发行机构标识 6位 军队组织机构代码为000001
strBinPublishFlag: string = ProductEpc196.CONSTMILITARYPUBLISHFLAG; //2进制
//3、组织机构代码 54 每6位代表一个数字或字母,位数不够时用每一个字母使用"0"填充
strOrgCode: string = ""; //正常组织机构代码
strBinOrgCode: string = ""; //2进制组织机构代码
//4、位品种代码指示长度 4 指示物资代码长度 N*6 = 物资代码长度,默认为6
strHexProductCodeLength: string = "6"; //16进制
strBinProductcodeLength: string = "0110"; //2进制
//5、物资代码 36 6-48位,军事物流信息系统物资代码,转换为十进制后存储。我部使用时占用36位
strHexProductCode: string = "000000000"; //16进制
strBinProductCode: string = "000000000000000000000000000000000000"; //2进制
//6、序列号长充 4位 N*6,现固定为A
strHexSerialLength: string = "A";
strBinSerialLength: string = "1010";
//7、版本号 8位 当前版本为"11"
strHexVersion: string = ProductEpc196.CONSTVERSION;
strBinVersion: string = ProductEpc196.CONSTVERSIONBIN;
//8、标签类型 4位 1 - 箱标签
strHexTagType: string = "1";
strBinTagType: string = "0001";
//9、包装类型 4位 (1-外包装,2-中包装,3-内包装,F-零头配箱)
strHexPacktype: string = "1";
strBinPacktype: string = "0001";
//10、下级包装数量8位 最大255
//private int iInsidePackNum = 0;
strHexInsidePackNum: string = "00";
strBinInsidePackNum: string = "00000000";
//11、产品总数量 12位 最大4095
//private int iProductNum = 0;
strHexProductNum: string = "000";
strBinProductNum: string = "000000000000";
//12、生产线序列号 4位 0-E表示生产组序列号 F表示军需仓库打印的标签
//private int iProductLine = 0;
strHexProductLine: string = "0";
strBinProductLine: string = "0000";
//13、产品箱序列号 12位
//private int iPackSerialNo = 0;
strHexPackSerialNo: string = "000";
strBinPackSerialNo: string = "000000000000";
//组别号码 4位
//private int iGroupNo = 0;
strHexGroupNo: string = "0";
strBinGroupNo: string = "0000";
//校验码 4位
//private int iCRCCode = 0;
strHexCRCCode: string = "0";
strBinCRCCode: string = "0000";
//生产日期 24位
//private Date dtScrq;
strHexScrq: string = "120101";
strBinScrq: string = "000100100000000100000001";
//子串
strSubEpc: string = "";
/***
* 1、取得16进制标头信息
* 位数:8位
* 表示方式:0-FF
* 说明:被装专业专用为00000101,即为05
* @return
*/
getStrHexHeaderInfo(): string {
return this.strHexHeaderInfo;
}
/***
* 1、取得2进制标头信息
* 位数:8位
* 表示方式:0-FF
* 说明:被装专业专用为00000101,即为05
* @return
*/
getStrBinHeaderInfo(): string {
return this.strBinHeaderInfo;
}
/***
* 2、取得2进制发行机构标识
* 位数:6位
* 说明:军队组织机构代码为000001
* @return
*/
getStrBinPublishFlag(): string {
return this.strBinPublishFlag;
}
/***
* 3、取得组织机构代码
* 位数:54位
* 说明:每6位代表一个数字或字母,位数不够时前面用0填充
* @return
*/
getStrOrgCode(): string {
return this.strOrgCode;
}
/***
* 3、设置组织机构代码
* 位数:54位
* 说明:每6位代表一个数字或字母,位数不够时前面用0填充
* @param strOrgCode
*/
setStrOrgCode(strOrgCode: string) {
this.strOrgCode = strOrgCode;
}
/***
* 3、取得2进制组织机构代码
* 位数:54位
* 说明:每6位代表一个数字或字母,位数不够时前面用0填充
* @return
*/
getStrBinOrgCode(): string {
return this.strBinOrgCode;
}
/***
* 3、设置2进制组织机构代码
* @param strBinOrgCode
*/
setStrBinOrgCode(strBinOrgCode: string) {
this.strBinOrgCode = strBinOrgCode;
}
/***
* 4、取得16进制品种代码指示长度
* 位数:4位
* 说明:指示物资代码长度,N * 6 = 物资代码长度位数
* 默认值:6
* @return
*/
getStrHexProductCodeLength(): string {
return this.strHexProductCodeLength;
}
/***
* 4、设置16进制品种代码指示长度
* 位数:4位
* 说明:指示物资代码长度,N * 6 = 物资代码长度位数
* 默认值:6
* @param strHexProductCodeLength
*/
setStrHexProductCodeLength(strHexProductCodeLength: string) {
this.strHexProductCodeLength = strHexProductCodeLength;
}
/***
* 4、取得2进制品种代码指示长度
* 位数:4位
* 说明:指示物资代码长度,N * 6 = 物资代码长度位数
* 默认值:6
* @return
*/
getStrBinProductcodeLength(): string {
return this.strBinProductcodeLength;
}
/***
* 4、设置2进制品种代码指示长度
* 位数:4位
* 说明:指示物资代码长度,N * 6 = 物资代码长度位数
* 默认值:6
* @return
*/
setStrBinProductcodeLength(strBinProductcodeLength: string) {
this.strBinProductcodeLength = strBinProductcodeLength;
}
/***
* 5、取得16进制物资代码
* 位数:36位
* 说明:6 - 48位。军事物流信息系统物资代码,转换为十六进制后存储。 我部使用时占用36位
* @return
*/
getStrHexProductCode(): string {
return this.strHexProductCode;
}
/***
* 5、设置16进制物资代码
* 位数:36位
* 说明:6 - 48位。军事物流信息系统物资代码,转换为十六进制后存储。 我部使用时占用36位
* @return
*/
setStrHexProductCode(strHexProductCode: string) {
this.strHexProductCode = strHexProductCode;
}
/***
* 5、取得2进制物资代码
* 位数:36位
* 说明:6 - 48位。军事物流信息系统物资代码,转换为十六进制后存储。 我部使用时占用36位
* @return
*/
getStrBinProductCode(): string {
return this.strBinProductCode;
}
/***
* 5、设置2进制物资代码
* 位数:36位
* 说明:6 - 48位。军事物流信息系统物资代码,转换为十六进制后存储。 我部使用时占用36位
* @return
*/
setStrBinProductCode(strBinProductCode: string) {
this.strBinProductCode = strBinProductCode;
}
/***
* 6、取得16进制序列号长度
* 位数:4
* 说明:N * 6
* 默认:A(十进制为10)
* @return
*/
getStrHexSerialLength(): string {
return this.strHexSerialLength;
}
/***
* 6、设置16进制序列号长度
* 位数:4
* 说明:N * 6
* 默认:A(十进制为10)
* @return
*/
setStrHexSerialLength(strHexSerialLength: string) {
this.strHexSerialLength = strHexSerialLength;
}
/***
* 6、设置2进制序列号长度
* 位数:4
* 说明:N * 6
* 默认:A(十进制为10)
* @return
*/
getStrBinSerialLength(): string {
return this.strBinSerialLength;
}
/***
* 6、取得2进制序列号长度
* 位数:4
* 说明:N * 6
* 默认:A(十进制为10)
* @return
*/
setStrBinSerialLength(strBinSerialLength: string) {
this.strBinSerialLength = strBinSerialLength;
}
/***
* 7、取得16进制版本号
* 位数:8
* 说明:版本号
* 默认:当前版本号为11
* @return
*/
getStrHexVersion(): string {
return this.strHexVersion;
}
/***
* 7、设置16进制版本号
* 位数:8
* 说明:版本号
* 默认:当前版本号为11
* @return
*/
setStrHexVersion(strHexVersion: string) {
this.strHexVersion = strHexVersion;
}
/***
* 7、取得2进制版本号
* 位数:8
* 说明:版本号
* 默认:当前版本号为00010001
* @return
*/
getStrBinVersion(): string {
return this.strBinVersion;
}
/***
* 7、设置2进制版本号
* 位数:8
* 说明:版本号
* 默认:当前版本号为00010001
* @return
*/
setStrBinVersion(strBinVersion: string) {
this.strBinVersion = strBinVersion;
}
/***
* 8、取得16进制标签类型
* 位数:4位
* 默认:1 箱标签
* @return
*/
getStrHexTagType(): string {
return this.strHexTagType;
}
/***
* 8、设置16进制标签类型
* 位数:4位
* 默认:1 箱标签
* @return
*/
setStrHexTagType(strHexTagType: string) {
this.strHexTagType = strHexTagType;
}
/***
* 8、取得2进制标签类型
* 位数:4位
* 默认:1 箱标签
* @return
*/
getStrBinTagType(): string {
return this.strBinTagType;
}
/***
* 8、设置2进制标签类型
* 位数:4位
* 默认:1 箱标签
* @return
*/
setStrBinTagType(strBinTagType: string) {
this.strBinTagType = strBinTagType;
}
/***
* 9、取得16进制包装类型
* 位数:4位
* 默认:1为外包装, F为零头配箱
* @return
*/
getStrHexPacktype(): string {
return this.strHexPacktype;
}
/***
* 9、设置16进制包装类型
* 位数:4位
* 默认:1为外包装, F为零头配箱
* @return
*/
setStrHexPacktype(strHexPacktype: string) {
this.strHexPacktype = strHexPacktype;
}
/***
* 9、取得2进制包装类型
* 位数:4位
* 默认:1为外包装, F为零头配箱
* @return
*/
getStrBinPacktype(): string {
return this.strBinPacktype;
}
/***
* 9、设置2进制包装类型
* 位数:4位
* 默认:1为外包装, F为零头配箱
* @param strBinPacktype
*/
setStrBinPacktype(strBinPacktype: string) {
this.strBinPacktype = strBinPacktype;
}
/***
* 10、取得16进制下级包装数
* 位数:8位
* 默认:0
* @return
*/
getStrHexInsidePackNum(): string {
return this.strHexInsidePackNum;
}
/***
* 10、设置16进制下级包装数
* 位数:8位
* 默认:0
* @param strHexInsidePackNum
*/
setStrHexInsidePackNum(strHexInsidePackNum: string) {
this.strHexInsidePackNum = strHexInsidePackNum;
}
/***
* 10、取得2进制下级包装数
* 位数:8位
* 默认:0
* @return
*/
getStrBinInsidePackNum(): string {
return this.strBinInsidePackNum;
}
/***
* 10、设置2进制下级包装数
* 位数:8位
* 默认:0
* @param strBinInsidePackNum
*/
setStrBinInsidePackNum(strBinInsidePackNum: string) {
this.strBinInsidePackNum = strBinInsidePackNum;
}
/***
* 11、取得十六进制产品总数量
* 位数:12位
* 最大:4096
* @return
*/
getStrHexProductNum(): string {
return this.strHexProductNum;
}
/***
* 11、设置十六进制产品总数量
* 位数:12位
* 最大:4096
* @param strHexProductNum
*/
setStrHexProductNum(strHexProductNum: string) {
this.strHexProductNum = strHexProductNum;
}
/***
* 11、取得2进制产品总数量
* 位数:12位
* 最大:4096
* @return
*/
getStrBinProductNum() {
return this.strBinProductNum;
}
/***
* 11、设置2进制产品总数量
* 位数:12位
* 最大:4096
* @param strBinProductNum
*/
setStrBinProductNum(strBinProductNum: string) {
this.strBinProductNum = strBinProductNum;
}
/***
* 12、取得16进制生产线序列号
* 位数:4
* 说明:0 - E表示生产线序列号,F表示军需仓库打印的标签
* @return
*/
getStrHexProductLine(): string {
return this.strHexProductLine;
}
/***
* 12、设置16进制生产线序列号
* 位数:4
* 说明:0 - E表示生产线序列号,F表示军需仓库打印的标签
* @param strHexProductLine
*/
setStrHexProductLine(strHexProductLine: string) {
this.strHexProductLine = strHexProductLine;
}
/***
* 12、取得2进制生产线序列号
* 位数:4
* 说明:0 - E表示生产线序列号,F表示军需仓库打印的标签
* @return
*/
getStrBinProductLine(): string {
return this.strBinProductLine;
}
/***
* 12、设置2进制生产线序列号
* 位数:4
* 说明:0 - E表示生产线序列号,F表示军需仓库打印的标签
* @param strBinProductLine
*/
setStrBinProductLine(strBinProductLine: string) {
this.strBinProductLine = strBinProductLine;
}
/***
* 取得16进制产品箱序列号
* 位数:12
* 说明:顺序码,最大4095
* @return
*/
getStrHexPackSerialNo(): string {
return this.strHexPackSerialNo;
}
/***
* 设置16进制产品箱序列号
* 位数:12
* 说明:顺序码,最大4095
* @param strHexPackSerialNo
*/
setStrHexPackSerialNo(strHexPackSerialNo: string) {
this.strHexPackSerialNo = strHexPackSerialNo;
}
/***
* 取得2进制产品箱序列号
* 位数:12
* 说明:顺序码,最大4095
* @return
*/
getStrBinPackSerialNo(): string {
return this.strBinPackSerialNo;
}
/***
* 设置2进制产品箱序列号
* 位数:12
* 说明:顺序码,最大4095
* @param strBinPackSerialNo
*/
setStrBinPackSerialNo(strBinPackSerialNo: string) {
this.strBinPackSerialNo = strBinPackSerialNo;
}
/***
* 取得16进制级别号码
* 位数:4位
* 说明: 0000表示1张标签
* 0100表示2张标签中的第一张, 0101表示第二张
* 1000表示4张标签中的第一张, 1001表示第二张, 1010表示第三张, 1011表示第四张
* @return
*/
getStrHexGroupNo(): string {
return this.strHexGroupNo;
}
/***
* 设置16进制级别号码
* 位数:4位
* 说明: 0000表示1张标签
* 0100表示2张标签中的第一张, 0101表示第二张
* 1000表示4张标签中的第一张, 1001表示第二张, 1010表示第三张, 1011表示第四张
* @param strHexGroupNo
*/
setStrHexGroupNo(strHexGroupNo: string) {
this.strHexGroupNo = strHexGroupNo;
}
/***
* 取得2进制级别号码
* 位数:4位
* 说明: 0000表示1张标签
* 0100表示2张标签中的第一张, 0101表示第二张
* 1000表示4张标签中的第一张, 1001表示第二张, 1010表示第三张, 1011表示第四张
* @return
*/
getStrBinGroupNo(): string {
return this.strBinGroupNo;
}
/***
* 设置2进制级别号码
* 位数:4位
* 说明: 0000表示1张标签
* 0100表示2张标签中的第一张, 0101表示第二张
* 1000表示4张标签中的第一张, 1001表示第二张, 1010表示第三张, 1011表示第四张
* @param strBinGroupNo
*/
setStrBinGroupNo(strBinGroupNo: string) {
this.strBinGroupNo = strBinGroupNo;
}
/***
* 取得16进制CRC校验码
* 位数:4位
* 说明:CRC校验
* @return
*/
getStrHexCRCCode(): string {
return this.strHexCRCCode;
}
/***
* 设置16进制CRC校验码
* 位数:4位
* 说明:CRC校验
* @param strHexCRCCode
*/
setStrHexCRCCode(strHexCRCCode: string) {
this.strHexCRCCode = strHexCRCCode;
}
/***
* 取得2进制CRC校验码
* 位数:4位
* 说明:CRC校验
* @return
*/
getStrBinCRCCode(): string {
return this.strBinCRCCode;
}
/***
* 设置2进制CRC校验码
* 位数:4位
* 说明:CRC校验
* @param strBinCRCCode
*/
setStrBinCRCCode(strBinCRCCode: string) {
this.strBinCRCCode = strBinCRCCode;
}
/***
* 取得生产日期
* @return
*/
getStrBinScrq(): string {
return this.strBinScrq;
}
/***
* 设置生产日期
* @param strBinScrq
*/
setStrBinScrq(strBinScrq: string) {
this.strBinScrq = strBinScrq;
}
/***
* 取得16进制生产日期
* 位数:24位
* @return
*/
getStrHexScrq(): string {
return this.strHexScrq;
}
/***
* 设置16进制生产日期
* 位数:24位
* @param strHexScrq
*/
setStrHexScrq(strHexScrq: string) {
this.strHexScrq = strHexScrq;
}
/**
* 获取多标签的公用部分
*/
getStrSubEpc(): string {
return this.strSubEpc;
}
/**
* 设置多标签的公用部分
*/
setStrSubEpc(strSubEpc: string) {
this.strSubEpc = strSubEpc;
}
/***
* 16进制转为2进制
* @param hexString
* @return
*/
HexString2BinString(hexString: string) {
let binString: string = "";
if (hexString.length > 0) {
for (var i = 1; i < hexString.length + 1; i++) {
let tempString: string = "";
tempString = "0000" + (parseInt(hexString.substring(i - 1, i), 16)).toString(2);
binString += tempString.substring(tempString.length - 4);
}
}
return binString;
}
/***
* 2进制转为16进制
* @param binString
* @return
*/
BinString2HexString(binString: string) {
let hexString: string = "";
let hexLength: number = Math.ceil((binString.length * 1.00) / 4) as number;
binString = "0000" + binString;
binString = binString.substring(binString.length - (hexLength * 4));
if (binString.length > 0) {
for (var i = 0; i < hexLength; i++) {
let tempString: string = "";
tempString = binString.substring(i * 4, (i + 1) * 4);
hexString += this.KeyWords[parseInt(tempString, 2)];
}
}
return hexString;
}
/***
* 取得字符串
* 说明:每6位代表一个数字或字母,转换为字符串
* @param str6Bin
* @return
*/
Transform6Bin2Character(str6Bin: string) {
let characterString: string = "";
let characterLength: number = Math.ceil((str6Bin.length * 1.00) / 6) as number;
str6Bin = "000000" + str6Bin;
str6Bin = str6Bin.substring(str6Bin.length - (characterLength * 6));
if (str6Bin.length > 0) {
for (var i = 0; i < characterLength; i++) {
let tempString: string = "";
tempString = str6Bin.substring(i * 6, (i + 1) * 6);
characterString += this.KeyWords[parseInt(tempString, 2)];
}
}
return characterString;
}
TransformCharacter26Bin(strCharacterString: string) {
//转为大写
strCharacterString = strCharacterString.toUpperCase();
let str6BinString: string = "";
if (strCharacterString.length > 0) {
for (var i = 1; i < strCharacterString.length + 1; i++) {
let tempString: string = strCharacterString.substring(i - 1, i);
//前面加000000,并在字符串找到字符,转为2进制
tempString = "000000" + this.strKeyWords.indexOf(tempString).toString(2);
tempString = tempString.substring(tempString.length - 6);
str6BinString += tempString;
}
}
return str6BinString;
}
/***
* 根据实际EPC分解物资信息
* @param strHexEpc
*/
UnPackEpc(strHexEpc: string) {
console.log("196解析的EPC:"+strHexEpc)
//获取EPC相同部分
this.strSubEpc = strHexEpc.substring(0, 41) + strHexEpc.substring(43, 49);
//将Epc转为2进制Epc编码
let strBinEpc: string = this.HexString2BinString(strHexEpc);
//1、取得标头信息
this.strBinHeaderInfo = strBinEpc.substring(0, 8);
this.strHexHeaderInfo = (parseInt(this.strBinHeaderInfo, 2)).toString(16);
//被装专用标头信息05
if (this.strBinHeaderInfo === ProductEpc196.CONSTHEADERINFOBIN ||
this.strBinHeaderInfo === ProductEpc196.QR_HEADER_BIN ||
this.strBinHeaderInfo === ProductEpc196.INIT_HEADER_BIN) {
//2、发行机构标识
this.strBinPublishFlag = strBinEpc.substring(8, 14);
//3、组织机构代码
this.strBinOrgCode = strBinEpc.substring(14, 68);
this.strOrgCode = this.Transform6Bin2Character(this.strBinOrgCode);
//4、品种代码指示长度
this.strBinProductcodeLength = strBinEpc.substring(68, 72);
this.strHexProductCodeLength = this.BinString2HexString(this.strBinProductcodeLength);
//转成10进制长度
let iProductCodeLength = parseInt(this.strHexProductCodeLength, 16);
//下一位截取操作的起始位
//5、物资代码
// 修改,根据品种代码指示长度,确定物资代码长度
this.strBinProductCode = strBinEpc.substring(72, 72 + iProductCodeLength * 6);
this.strHexProductCode = this.BinString2HexString(this.strBinProductCode);
//6、序列号长度
let iSubStart: number = 72 + iProductCodeLength * 6;
this.strBinSerialLength = strBinEpc.substring(iSubStart, iSubStart + 4);
this.strHexSerialLength = this.BinString2HexString(this.strBinSerialLength);
//转为10进制长度
let iSerialLength: number = parseInt(this.strHexSerialLength, 16);
//具体序列号内容
let strSerial: string = strBinEpc.substring(iSubStart + 4, iSubStart + 4 + iSerialLength * 6);
//7、版本号
this.strBinVersion = strSerial.substring(0, 8);
this.strHexVersion = this.BinString2HexString(this.strBinVersion);
//根据版本号来判断,进行不同版本的解析
if (this.strHexVersion === "11") {
//8、标签类型
this.strBinTagType = strSerial.substring(8, 12);
this.strHexTagType = this.BinString2HexString(this.strBinTagType);
//判断当前标签是不是箱标签
if (this.strHexTagType === "1") {
//9、包装类型
this.strBinPacktype = strSerial.substring(12, 16);
this.strHexPacktype = this.BinString2HexString(this.strBinPacktype);
//10、下级包装数
this.strBinInsidePackNum = strSerial.substring(16, 24);
this.strHexInsidePackNum = this.BinString2HexString(this.strBinInsidePackNum);
//11、产品总数量
this.strBinProductNum = strSerial.substring(24, 36);
this.strHexProductNum = this.BinString2HexString(this.strBinProductNum);
//12、生产线序列号
this.strBinProductLine = strSerial.substring(36, 40);
this.strHexProductLine = this.BinString2HexString(this.strBinProductLine);
//13、产品箱序列号
this.strBinPackSerialNo = strSerial.substring(40, 52);
this.strHexPackSerialNo = this.BinString2HexString(this.strBinPackSerialNo);
//14、级别号码
this.strBinGroupNo = strSerial.substring(52, 56);
this.strHexGroupNo = this.BinString2HexString(this.strBinGroupNo);
//15、校验码
this.strBinCRCCode = strSerial.substring(56);
//16、生产日期
this.strBinScrq = strBinEpc.substring(iSubStart + 4 + iSerialLength * 6, iSubStart + 4 + iSerialLength * 6 + 24);
this.strHexScrq = this.BinString2HexString(this.strBinScrq);
} else {
//托盘标签
}
}
}
}
/***
* 根据物资实际信息生成EPC
* header的取值
* 08 表示二维码
* 09 表示初始化
*/
PackEpc(header?: string) {
let sb: string = "";
if (null != header && header.trim().length > 0) {
//0、使用自定义的表头
sb += this.HexString2BinString(header);
} else {
//1、标头信息
sb += this.strBinHeaderInfo;
}
//2、发行机构标识
sb += this.strBinPublishFlag;
//3、组织机构代码
this.setStrOrgCode("000000000" + this.getStrOrgCode());
this.setStrOrgCode(this.getStrOrgCode().substring(this.getStrOrgCode().length - 9));
this.setStrBinOrgCode(this.TransformCharacter26Bin(this.getStrOrgCode()));
sb += this.getStrBinOrgCode();
//4、品种代码指示长度
sb += this.getStrBinProductcodeLength();
//5、物资代码
this.setStrHexProductCode("000000000" + this.getStrHexProductCode());
this.setStrHexProductCode(this.getStrHexProductCode().substring(this.getStrHexProductCode().length - 9));
this.setStrBinProductCode(this.HexString2BinString(this.getStrHexProductCode()));
sb += this.getStrBinProductCode();
//6、序列号长度
sb += this.getStrBinSerialLength();
//7、版本号
sb += this.getStrBinVersion();
//8、标签类型
sb += this.getStrBinTagType();
//9、包装类型
this.setStrHexPacktype("0" + this.getStrHexPacktype());
this.setStrHexPacktype(this.getStrHexPacktype().substring(this.getStrHexPacktype().length - 1));
this.setStrBinPacktype(this.HexString2BinString(this.getStrHexPacktype()));
sb += this.getStrBinPacktype();
//10、下级包装数
this.setStrHexInsidePackNum("00" + this.getStrHexInsidePackNum());
this.setStrHexInsidePackNum(this.getStrHexInsidePackNum().substring(this.getStrHexInsidePackNum().length - 2));
this.setStrBinInsidePackNum(this.HexString2BinString(this.getStrHexInsidePackNum()));
sb += this.getStrBinInsidePackNum();
//11、产品总数量
this.setStrHexProductNum("000" + this.getStrHexProductNum());
this.setStrHexProductNum(this.getStrHexProductNum().substring(this.getStrHexProductNum().length - 3));
this.setStrBinProductNum(this.HexString2BinString(this.getStrHexProductNum()));
sb += this.getStrBinProductNum();
//12、生产线序列号
this.setStrHexProductLine("0" + this.getStrHexProductLine());
this.setStrHexProductLine(this.getStrHexProductLine().substring(this.getStrHexProductLine().length - 1));
this.setStrBinProductLine(this.HexString2BinString(this.getStrHexProductLine()));
sb += this.getStrBinProductLine();
//13、产品箱序列号
this.setStrHexPackSerialNo("000" + this.getStrHexPackSerialNo());
this.setStrHexPackSerialNo(this.getStrHexPackSerialNo().substring(this.getStrHexPackSerialNo().length - 3));
this.setStrBinPackSerialNo(this.HexString2BinString(this.getStrHexPackSerialNo()));
sb += this.getStrBinPackSerialNo();
//14、组别号码
this.setStrHexGroupNo("0" + this.getStrHexGroupNo());
this.setStrHexGroupNo(this.getStrHexGroupNo().substring(this.getStrHexGroupNo().length - 1));
this.setStrBinGroupNo(this.HexString2BinString(this.getStrHexGroupNo()));
sb += this.getStrBinGroupNo();
//取得校验位
let tempEpc: string = sb.toString();
//取得2进制长度
let sourcecodelength: number = tempEpc.length;
//定义取得临时变量
// let rsstr: string = "";
//定义数组,长度为被校验位长度
let b: number[] = new Array[sourcecodelength];
for (var i = 1; i < sourcecodelength + 1; i++) {
b[i - 1] = parseInt(tempEpc.substring(i - 1, i));
}
// RfidCRC myCRC = new RfidCRC();
// int[] rs=myCRC.makeCRCCodes(b, myCRC.index);
// let rs: number[] = RfidCRC.makeCRCCodes(b);
// for (var i = 0; i < rs.length; i++) {
// rsstr = rsstr + rs[i];
// }
//增加校验码
// sb += rsstr.substring(rsstr.length - 4);
//生产日期
this.setStrHexScrq("000000" + this.getStrHexScrq());
this.setStrHexScrq(this.getStrHexScrq().substring(this.getStrHexScrq().length - 6));
this.setStrBinScrq(this.HexString2BinString(this.getStrHexScrq()));
sb += this.getStrBinScrq();
let strRet: string = "";
if (sb.length == 196) {
strRet = this.BinString2HexString(sb.toString());
}
return strRet;
}
getiZbAll(): number {
let izb: number = 0;
switch (parseInt(this.strHexGroupNo, 16)) {
case 0:
izb = 1;
break;
case 4:
izb = 2;
break;
case 5:
izb = 2;
break;
case 8:
izb = 4;
break;
case 9:
izb = 4;
break;
case 10:
izb = 4;
break;
case 11:
izb = 4;
break;
}
return izb;
}
getiZbNo(): number {
let izb: number = 0;
switch (parseInt(this.strHexGroupNo, 16)) {
case 0:
izb = 1;
break;
case 4:
izb = 1;
break;
case 5:
izb = 2;
break;
case 8:
izb = 1;
break;
case 9:
izb = 2;
break;
case 10:
izb = 3;
break;
case 11:
izb = 4;
break;
}
return izb;
}
getDtScrq():number {
try{
let year:string = "20" + this.strHexScrq.substring(0,2);
let month:string = this.strHexScrq.substring(2,4);
let day:string = this.strHexScrq.substring(4,6);
return TimeUtil.getDateInt(year+"-"+month+"-"+day+" 00-00-00");
}catch(err){
return TimeUtil.getDateInt(TimeUtil.getDate());
}
}
}
\ No newline at end of file
import { TitleBar } from '../../view/title/TitleBar'
import IdentifyService from '../IdentifySerivce'
import emitter from '@ohos.events.emitter';
@Extend(Button) function CommonButtonStyle() {
.borderWidth(2)
.borderColor('#0fa983')
.backgroundColor('#0FA983')
.fontColor('#fff')
.borderRadius(5)
.type(ButtonType.Normal)
.stateEffect(true)
}
@Entry
@Component
struct UHFDemo{
@State scanList: string[] = []
build(){
Column(){
Flex({ direction: FlexDirection.Column }) {
TitleBar({ title: "扫码 识别" })
List({ space: 2 }) {
ForEach(this.scanList, (item, index) => {
ListItem(){
Column() {
Column() {
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) {
Text("扫码:")
.fontSize(16)
.fontStyle(FontStyle.Normal)
.fontColor($r("app.color.item_color_black"))
.width("20%")
.fontColor($r("app.color.item_color_black"))
Text(item)
.fontSize(16)
.fontColor($r("app.color.item_color_black"))
.width("80%")
.fontColor($r("app.color.font_description"))
}.backgroundColor("#fff").padding({top:5,bottom:5,left:5,right:5})
}
}
}
})
}.divider({ strokeWidth: 1, color: $r("app.color.item_color_black") }) .height("80%").width("100%")
Row() {
Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) {
Button("开启").CommonButtonStyle() .onKeyEvent((e: globalThis.KeyEvent) => {
if (e.keyCode == 2096 || e.keyCode == 2093) {
if (e.type == 1) {
IdentifyService.openScan()
}
}
console.error('keycode:' + e.keyCode)
}).width("45%").onClick(()=>{
//参数说明value:gpio-178-0,下拉gpio 178
IdentifyService.openScan()
})
Button("清除").CommonButtonStyle().width("45%").onClick(()=>{
this.scanList=[]
})
}
}.margin({left:10,right:10}).height(80)
}.width("100%")
}.linearGradient({
direction: GradientDirection.Right, // 渐变方向
repeating: true, // 渐变颜色是否重复
colors: [[0x36a3c0, 0.0], [0x97c6a6, 1], [0xc7d799, 0.0]] // 数组末尾元素占比小于1时满足重复着色效果
})
}
scanCodeListen() {
var innerEvent = { eventId: 2 }
emitter.on(innerEvent, (eventData) => {
if (innerEvent.eventId == 2) {
let result = eventData.data.scancode
console.log("扫码校验", "收到扫码信息:" + result)
this.showQRDetail(result)
}
})
}
showQRDetail(qrCode?:string){
this.scanList.push(qrCode)
}
onPageShow() {
console.error("========onPageShow=========")
this.scanCodeListen()
IdentifyService.openScanPort()
}
onPageHide(){
IdentifyService.closeScan()
/*取消扫码订阅*/
emitter.off(2);
}
}
\ No newline at end of file
import { TitleBar } from '../../view/title/TitleBar'
import IdentifyService from '../IdentifySerivce'
import emitter from '@ohos.events.emitter';
@Extend(Button) function CommonButtonStyle() {
.borderWidth(2)
.borderColor('#0fa983')
.backgroundColor('#0FA983')
.fontColor('#fff')
.borderRadius(5)
.type(ButtonType.Normal)
.stateEffect(true)
}
@Entry
@Component
struct UHFDemo{
@State doneEpcsList: string[] = []
build(){
Column(){
Flex({ direction: FlexDirection.Column }) {
TitleBar({ title: "RFID 识别" })
List({ space: 2 }) {
ForEach(this.doneEpcsList, (item, index) => {
ListItem(){
Column() {
Column() {
Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Center }) {
Text("EPC:")
.fontSize(16)
.fontStyle(FontStyle.Normal)
.fontColor($r("app.color.item_color_black"))
.width("20%")
.fontColor($r("app.color.item_color_black"))
Text(item)
.fontSize(16)
.fontColor($r("app.color.item_color_black"))
.width("80%")
.fontColor($r("app.color.font_description"))
}.backgroundColor("#fff").padding({top:5,bottom:5,left:5,right:5})
}
}
}
})
}.divider({ strokeWidth: 1, color: $r("app.color.item_color_black") }) .height("80%").width("100%")
Row() {
Flex({ justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Center }) {
Button("开启").CommonButtonStyle().width("45%").onClick(()=>{
IdentifyService.openRFIDInv()
})
Button("清除").CommonButtonStyle().width("45%").onClick(()=>{
this.doneEpcsList=[]
IdentifyService.stopRfidInv()
})
}
}.margin({left:10,right:10}).height(80)
}.width("100%")
}.linearGradient({
direction: GradientDirection.Right, // 渐变方向
repeating: true, // 渐变颜色是否重复
colors: [[0x36a3c0, 0.0], [0x97c6a6, 1], [0xc7d799, 0.0]] // 数组末尾元素占比小于1时满足重复着色效果
})
}
rfidInvListen() {
var innerEvent = {eventId: 1 }
emitter.on(innerEvent, (eventData) => {
if(innerEvent.eventId==1){
let result = eventData.data.epc
console.log("入库","收到EPC:" + result)
if(result!=undefined&&!this.doneEpcsList.includes(result)&&result.substring(0, 2)=='05'){
this.showList(result)
}
}
})
}
showList(epc?:string){
this.doneEpcsList.push(epc)
}
onPageShow() {
console.error("========onPageShow=========")
this.rfidInvListen()
IdentifyService.openRfidPort()
}
onPageHide(){
IdentifyService.closeRFIDInv()
/*取消盘点EPC订阅*/
emitter.off(1);
}
}
\ No newline at end of file
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var s=t();for(var r in s)("object"==typeof exports?exports:e)[r]=s[r]}}(this,(()=>(()=>{"use strict";var e={d:(t,s)=>{for(var r in s)e.o(s,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:s[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};function s(e){let t=0;for(let s=0;s<e.length;s++)for(let r=0;r<8;r++){let i=1==(t>>15&1);t<<=1,i^1==(e[s]>>7-r&1)&&(t^=4129)}return t&=65535,t}function r(e){return Array.prototype.map.call(e,(e=>("00"+e.toString(16)).slice(-2))).join("")}function i(e){let t=[];for(let s=0;s<e.length;s+=2)t.push(parseInt(e.substr(s,2),16));return t}function a(e){let t="";for(let s=0;s<e.length;s++)t+=String.fromCharCode(e[s]);return t}function n(e,t){for(var s=e.toString().length;s<t;)e="0"+e,s++;return e}function h(e,t){for(var s=e.toString().length;s<t;)e+="0",s++;return e}function o(e,t){return(e=e.trim()).length%t==0?e.length/t:e.length/t+1}function l(e,t,s){let r=[];r.push({value:e.toFixed(3)});for(let i=e;i<t;i+=s){let e=(i+s).toFixed(3);r.push({value:e+""})}return r}e.d(t,{default:()=>M}),new Uint8Array([0,4129,8258,12387,16516,20645,24774,28903,33032,37161,41290,45419,49548,53677,57806,61935,4657,528,12915,8786,21173,17044,29431,25302,37689,33560,45947,41818,54205,50076,62463,58334,9314,13379,1056,5121,25830,29895,17572,21637,42346,46411,34088,38153,58862,62927,50604,54669,13907,9842,5649,1584,30423,26358,22165,18100,46939,42874,38681,34616,63455,59390,55197,51132,18628,22757,26758,30887,2112,6241,10242,14371,51660,55789,59790,63919,35144,39273,43274,47403,23285,19156,31415,27286,6769,2640,14899,10770,56317,52188,64447,60318,39801,35672,47931,43802,27814,31879,19684,23749,11298,15363,3168,7233,60846,64911,52716,56781,44330,48395,36200,40265,32407,28342,24277,20212,15891,11826,7761,3696,65439,61374,57309,53244,48923,44858,40793,36728,37256,33193,45514,41451,53516,49453,61774,57711,4224,161,12482,8419,20484,16421,28742,24679,33721,37784,41979,46042,49981,54044,58239,62302,689,4752,8947,13010,16949,21012,25207,29270,46570,42443,38312,34185,62830,58703,54572,50445,13538,9411,5280,1153,29798,25671,21540,17413,42971,47098,34713,38840,59231,63358,50973,55100,9939,14066,1681,5808,26199,30326,17941,22068,55628,51565,63758,59695,39368,35305,47498,43435,22596,18533,30726,26663,6336,2273,14466,10403,52093,56156,60223,64286,35833,39896,43963,48026,19061,23124,27191,31254,2801,6864,10931,14994,64814,60687,56684,52557,48554,44427,40424,36297,31782,27655,23652,19525,15522,11395,7392,3265,61215,65342,53085,57212,44955,49082,36825,40952,28183,32310,20053,24180,11923,16050,3793,7920]);class c{constructor(e){this.buf=new Array(e),this.writeIndex=0,this.readIndex=0}writeBytes(e){if(this.writeIndex+e.length>this.buf.length){let e=this.buf.slice(this.readIndex,this.writeIndex);for(let t=0;t<e.length;t++)this.buf[t]=e[t];this.writeIndex=e.length,this.readIndex=0}for(let t=0;t<e.length;t++)this.buf[this.writeIndex+t]=e[t];this.writeIndex+=e.length}writeUIntBE(e,t,s){e=+e,t>>>=0;let r=(s>>>=0)-1,i=1;for(this.buf[t+r]=255&e;--r>=0&&(i*=256);)this.buf[t+r]=e/i&255}writeIntBE(e,t,s){e=+e,t>>>=0;let r=s-1,i=1,a=0;for(this.buf[t+r]=255&e;--r>=0&&(i*=256);)e<0&&0===a&&0!==this.buf[t+r+1]&&(a=1),this.buf[t+r]=(e/i>>0)-a&255}writeByte(e){e>=0?this.writeUIntBE(e,this.writeIndex,1):this.writeIntBE(e,this.writeIndex,1),this.writeIndex+=1}writeShort(e){e>=0?this.writeUIntBE(e,this.writeIndex,2):this.writeIntBE(e,this.writeIndex,2),this.writeIndex+=2}writeInt(e){e>=0?this.writeUIntBE(e,this.writeIndex,4):this.writeIntBE(e,this.writeIndex,4),this.writeIndex+=4}putHex(e){let t=e.length/2;for(let s=0;s<t;++s){const t=parseInt(e.substr(2*s,2),16);this.writeByte(t)}}readUIntBE(e,t){e>>>=0,t>>>=0;let s=this.buf[e+--t],r=1;for(;t>0&&(r*=256);)s+=this.buf[e+--t]*r;return s}readIntBE(e,t){e>>>=0;let s=t>>>=0,r=1,i=this.buf[e+--s];for(;s>0&&(r*=256);)i+=this.buf[e+--s]*r;return r*=128,i>=r&&(i-=Math.pow(2,8*t)),i}readUByte(){let e=this.readUIntBE(this.readIndex,1);return this.readIndex+=1,e}readByte(){let e=this.readIntBE(this.readIndex,1);return this.readIndex+=1,e}readUShort(){let e=this.readUIntBE(this.readIndex,2);return this.readIndex+=2,e}readShort(){let e=this.readIntBE(this.readIndex,2);return this.readIndex+=2,e}readUInt(){let e=this.readUIntBE(this.readIndex,4);return this.readIndex+=4,e}readInt(){let e=this.readIntBE(this.readIndex,4);return this.readIndex+=4,e}readULongBE(e){e>>>=0;const t=this.buf[e],s=this.buf[e+7],r=t*2**24+65536*this.buf[++e]+256*this.buf[++e]+this.buf[++e],i=this.buf[++e]*2**24+65536*this.buf[++e]+256*this.buf[++e]+s;return(BigInt(r)<<BigInt(32))+BigInt(i)}readLongBE(e){e>>>=0;const t=this.buf[e],s=this.buf[e+7],r=(t<<24)+65536*this.buf[++e]+256*this.buf[++e]+this.buf[++e];return(BigInt(r)<<BigInt(32))+BigInt(this.buf[++e]*2**24+65536*this.buf[++e]+256*this.buf[++e]+s)}readULong(){let e=this.readULongBE(this.readIndex);return this.readIndex+=8,e}readLong(){let e=this.readLongBE(this.readIndex);return this.readIndex+=8,e}getUByteAt(e){return this.readUIntBE(e,1)}getUShortAt(e){return this.readUIntBE(e,2)}getUIntAt(e){return this.readUIntBE(e,4)}getULongAt(e){return this.readULongBE(e)}reset(){this.readIndex=0,this.writeIndex=0;for(let e=0;e<this.buf.length;e++)this.buf[e]=0}skipByte(e){this.readIndex+=e}slice(e){let t=this.subBytes(this.readIndex,this.readIndex+e);return this.readIndex+=e,t}subBytes(e,t){return this.buf.slice(e,t)}toBytes(){return this.buf.slice(0,this.writeIndex)}toHex(){return Array.prototype.map.call(this.buf.slice(0,this.writeIndex),(e=>("00"+e.toString(16)).slice(-2))).join("")}readableBytes(){return this.writeIndex-this.readIndex}}class d{constructor(e,t,s,r,i){this.maxFrameLength=e,this.lengthFieldOffset=t,this.lengthFieldLength=s,this.lengthAdjustment=r,this.initialBytesToStrip=i,this.lengthFieldEndOffset=t+s,this.discardingTooLongFrame=!1,this.bytesToDiscard=0}discardingTooLongBuffer(e){let t=this.bytesToDiscard,s=this.bytesToDiscard>e.readableBytes()?e.readableBytes():this.bytesToDiscard;e.skipByte(s),t-=s,this.bytesToDiscard=t,this.failIfNecessary(!1)}failIfNecessary(e){0===this.bytesToDiscard&&(this.tooLongFrameLength,this.tooLongFrameLength=0,this.discardingTooLongFrame=!1)}getUnadjustedFrameLength(e,t,s){switch(s){case 1:return e.getUByteAt(t);case 2:case 3:return e.getUShortAt(t);case 4:return e.getUIntAt(t);case 8:return e.getULongAt(t)}}failOnNegativeLengthField(e,t){e.skipByte(t)}failOnFrameLengthLessThanLengthFieldEndOffset(e,t){e.skipByte(t)}exceededFrameLength(e,t){let s=t-e.readableBytes();this.tooLongFrameLength=t,s<0?e.skipByte(t):(this.discardingTooLongFrame=!0,this.bytesToDiscard=s,e.skipByte(e.readableBytes())),this.failIfNecessary(!0)}extractFrame(e,t){return e.slice(t)}decode(e){for(;0!==e.readableBytes()&&90!==e.getUByteAt(e.readIndex)&&(e.skipByte(1),0!==e.readableBytes()););if(e.readableBytes()<this.lengthFieldEndOffset)return;let t=e.readIndex+this.lengthFieldOffset,s=this.getUnadjustedFrameLength(e,t,this.lengthFieldLength);if(s<=0&&(console.error("---\x3e"+r(e.subarray(e.readIndex,e.writeIndex))),this.failOnNegativeLengthField(e,this.lengthFieldEndOffset)),s>0){s+=this.lengthAdjustment+this.lengthFieldEndOffset,s<this.lengthFieldEndOffset&&(console.log("failOnFrameLengthLessThanLengthFieldEndOffset--"+this.lengthFieldEndOffset),this.failOnFrameLengthLessThanLengthFieldEndOffset(e,this.lengthFieldEndOffset));let t=s;if(e.readableBytes()<t)return;e.skipByte(this.initialBytesToStrip);let r=t-this.initialBytesToStrip;return this.extractFrame(e,r)}}}class g{constructor(e=2,t=-1){this.head=90,this.pType=0,this.pVersion=1,this.mt_14_15=0,this.mt_13=0,this.mt_12=0,this.mt_11_8=e,this.msgId=t,this.rs485Address=0,this.dataLen=0,this.cData=null,this.crcData=null,this.crc=null,this.msgData=null,this.rtCode=-1,this.rtMsg="",this.callback=null}decode(e){let t=new c(e.length);t.writeBytes(e),t.skipByte(3);let s=t.readByte().toString(2);s=n(s,8),this.mt_14_15=parseInt(s.substr(0,2),2),this.mt_13=parseInt(s.substr(2,1),2),this.mt_12=parseInt(s.substr(3,1),2),this.mt_11_8=parseInt(s.substr(4,4),2),this.msgId=t.readUByte(),1===this.mt_13&&(this.rs485Address=t.readByte()),this.dataLen=t.readShort(),this.dataLen&&(this.cData=t.slice(this.dataLen)),this.crc=t.slice(2),this.msgData=t.subBytes(0,t.writeIndex),this.crcData=t.subBytes(1,t.writeIndex-2)}encode(){let e=new c(this.dataLen+7+2);e.writeByte(this.head),e.writeByte(this.pType),e.writeByte(this.pVersion);let t=n(this.mt_14_15.toString(2),2)+this.mt_13.toString(2)+this.mt_12.toString(2)+n(this.mt_11_8.toString(2),4);e.writeByte(parseInt(n(t,8),2)),e.writeByte(this.msgId),e.writeShort(this.dataLen),this.dataLen&&e.writeBytes(this.cData);let r=s(e.subBytes(1,e.writeIndex));return e.writeShort(r),this.msgData=e.toBytes(),e}checkCrc(){return s(this.crcData)===parseInt(r(this.crc),16)}toHex(){return r(this.msgData)}toKey(){return this.mt_11_8.toString()+this.msgId.toString()}}class u{constructor(){this.epc=null,this.pc=null,this.antId=null,this.rssi=null,this.result=0,this.tid=null,this.userdata=null,this.reserved=null,this.childAntId=null,this.utcSeconds=null,this.strUtc=null,this.frequencyPoint=null,this.phase=null,this.epcBank=null,this.ctesiusLtu27=null,this.ctesiusLtu31=null,this.readerSerialNumber=null,this.replySerialNumber=null,this.kunYue=null,this.rssidBm=null,this.count=1}decode(e){let t=new c(e.length);t.writeBytes(e);let s=t.readUShort();for(s&&(this.epc=r(t.slice(s)).toUpperCase()),this.pc=t.readUShort(),this.antId=t.readUByte();t.readIndex<e.length;)switch(t.readUByte()){case 1:this.rssi=t.readUByte();break;case 2:this.result=t.readUByte();break;case 3:let e=t.readUShort();e&&(this.tid=r(t.slice(e)).toUpperCase());break;case 4:let s=t.readUShort();s&&(this.userdata=r(t.slice(s)).toUpperCase());break;case 5:let i=t.readUShort();i&&(this.reserved=r(t.slice(i)).toUpperCase());break;case 6:this.childAntId=t.readUByte();break;case 7:t.readUInt(),t.readUInt();break;case 8:this.frequencyPoint=t.readUInt();break;case 9:this.phase=t.readUByte();break;case 10:let n=t.readUShort();n&&(this.epcBank=r(t.slice(n)).toUpperCase());break;case 17:this.ctesiusLtu27=t.readUShort();break;case 18:this.ctesiusLtu31=t.readUShort();break;case 19:this.kunYue=t.readUShort();break;case 20:this.rssidBm=t.readShort();break;case 32:let h=t.readUShort();h&&(this.readerSerialNumber=a(t.slice(h)));break;case 34:this.replySerialNumber=t.readUInt()}}}class m{constructor(){this.rtCode=-1,this.rtMsg=""}decode(e){e.length&&(this.rtCode=e[0],this.rtMsg=["Single operation complete.","Receive stop instruction.","A hardware failure causes an interrupt."][this.rtCode])}}class w{constructor(){this.tid=null,this.antId=null,this.rssi=null,this.result=0,this.userdata=null,this.readerSerialNumber=null,this.count=1}decode(e){let t=new c(e.length);for(t.writeBytes(e),this.tid=r(t.slice(8)).toUpperCase(),this.antId=t.readUByte();t.readIndex<e.length;)switch(t.readUByte()){case 1:this.rssi=t.readUByte();break;case 2:this.result=t.readUByte();break;case 3:let e=t.readUShort();e&&(this.userdata=r(t.slice(e)).toUpperCase())}}}class y{constructor(){this.rtCode=-1,this.rtMsg="",this.readerSerialNumber=null}decode(e){e.length&&(this.rtCode=e[0],this.rtMsg=["Single operation complete.","Receive stop instruction.","A hardware failure causes an interrupt."][this.rtCode])}}class B{constructor(){this.epc=null,this.tid=null,this.pc=null,this.antId=null,this.rssi=null,this.result=0,this.userdata=null,this.readerSerialNumber=null,this.count=1}decode(e){let t=new c(e.length);t.writeBytes(e);let s=t.readUShort();for(s&&(this.epc=r(t.slice(s)).toUpperCase()),this.pc=t.readUShort(),this.antId=t.readUByte();t.readIndex<e.length;)switch(t.readUByte()){case 1:this.rssi=t.readUByte();break;case 2:this.result=t.readUByte();break;case 3:let e=t.readUShort();e&&(this.tid=r(t.slice(e)).toUpperCase());break;case 4:let s=t.readUShort();s&&(this.userdata=r(t.slice(s)).toUpperCase())}}}class p{constructor(){this.rtCode=-1,this.rtMsg="",this.readerSerialNumber=null}decode(e){e.length&&(this.rtCode=e[0],this.rtMsg=["Single operation complete.","Receive stop instruction.","A hardware failure causes an interrupt."][this.rtCode])}}class f{constructor(){this.epc=null,this.tid=null,this.pc=null,this.antId=null,this.rssi=null,this.result=0,this.userdata=null,this.readerSerialNumber=null,this.count=1}decode(e){let t=new c(e.length);t.writeBytes(e);let s=t.readUShort();for(s&&(this.epc=r(t.slice(s)).toUpperCase()),this.pc=t.readUShort(),this.antId=t.readUByte();t.readIndex<e.length;)switch(t.readUByte()){case 1:this.rssi=t.readUByte();break;case 2:this.result=t.readUByte();break;case 3:let e=t.readUShort();e&&(this.tid=r(t.slice(e)).toUpperCase());break;case 4:let s=t.readUShort();s&&(this.userdata=r(t.slice(s)).toUpperCase())}}}class x{constructor(){this.rtCode=-1,this.rtMsg="",this.readerSerialNumber=null}decode(e){e.length&&(this.rtCode=e[0],this.rtMsg=["Single operation complete.","Receive stop instruction.","A hardware failure causes an interrupt."][this.rtCode])}}class b{constructor(){this.gpiPort=null,this.gpiPortLevel=null,this.systemTime=null}decode(e){if(e.length){let t=new c(e.length);t.writeBytes(e),this.gpiPort=t.readUByte(),this.gpiPortLevel=t.readUByte(),t.readUInt(),t.readUInt(),this.systemTime=Date.now()}}}class S{constructor(){this.gpiPort=null,this.gpiPortLevel=null,this.systemTime=null}decode(e){if(e.length){let t=new c(e.length);t.writeBytes(e),this.gpiPort=t.readUByte(),this.gpiPortLevel=t.readUByte(),t.readUInt(),t.readUInt(),this.systemTime=Date.now()}}}class I{constructor(){this.gpiPortLevel=null}decode(e){if(e.length){let t=new c(e.length);t.writeBytes(e),this.gpiPortLevel=t.readUInt()}}toBinaryString(e=32){return n(this.gpiPortLevel.toString(2),e)}}class C{constructor(){this.message=new g(1,1),this.rtCode=-1,this.rtMsg="",this.baseVersions=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.baseVersions=e.readUByte()+"."+e.readUByte()+"."+e.readUByte()+"."+e.readUByte(),this.rtCode=0,this.rtMsg="success"}}}class D{constructor(e,t){this.sendMsg=e,this.time=null,this.call=t,this.timeout=null}sleep(e=3e3){this.time=e;let t=Date.now();for(;Date.now()-t<this.time;);}equals(e){return this.sendMsg.toKey()===e}buffer(){return this.sendMsg.cData}break(e){this.time=0,this.sendMsg=e}decode(e){this.sendMsg.message.cData=e,this.sendMsg.decode()}callback(){this.call(this.sendMsg)}clearTimeout(){clearTimeout(this.timeout)}}class U{constructor(){this.uartHelper=null,this.uart_fd=-1,this.tcp_fd=null,this.buffer=new c(4096),this.lengthFrameDecoder=new d(4096,5,2,2,0),this.callbackEpcInfo=null,this.callbackEpcOver=null,this.callback6bInfo=null,this.callback6bOver=null,this.callbackGbInfo=null,this.callbackGbOver=null,this.callbackGJbInfo=null,this.callbackGJbOver=null,this.callbackGpiStart=null,this.callbackGpiOver=null,this.callbackAllGpiState=null,this.callbackTcpDisconnected=null,this.msgMap={},this.debugLog=!0,this.connectType=null,this.sendFailCount=0,this.tcpInterval=0}static getInstance(){return U._instance||(U._instance=new U,console.error("===============================================")),U._instance}openUart(e,t="/dev/ttyS2",s=115200){return this.connectType=0,this.uartHelper=e,this.uart_fd=this.uartHelper.uartOpen(t,s),this.uartHelper.uartRegisterReadCallBack({fd_uart:this.uart_fd,callback:e=>{this.processMessage(e.buffer)}}),null!=this.uart_fd&&-1!==this.uart_fd}openTcp(e,t,s,r,i=5e3,a=6e3){this.connectType=1,this.tcp_fd=e.constructTCPSocketInstance(),this.tcp_fd.bind({address:"0.0.0.0",family:1,port:0},(e=>{if(e)return console.error("tcp bind fail"),void r(!1);console.log("tcp bind success"),this.tcp_fd.connect({address:{address:t,port:s,family:1},timeout:a},(e=>{if(e)return console.error("tcp connect fail"),void r(!1);console.log("tcp connect success"),this.tcp_fd.regRecvCB((e=>{this.sendFailCount=0,this.processMessage(e.message)}));let a=new C;this.sendAsyncMsg(a,(()=>{0===a.rtCode?(r(!0),this.tcpInterval=setInterval((()=>{let e=new C;this.tcp_fd.send({data:new Uint8Array(e.encode().toBytes()).buffer}),this.sendFailCount+=1,3===this.sendFailCount&&this.callbackTcpDisconnected&&this.callbackTcpDisconnected(t+":"+s)}),i)):r(!1)}))}))}))}openSerial(e,t="/dev/ttyS3",s=115200){return this.connectType=0,this.uartHelper=e,this.uart_fd=this.uartHelper.open(t,s,0,8,1,0),this.receive(),-1!=this.uart_fd}sendAsyncMsg(e,t,s=3e3){let r=e.encode();this.debugLog&&console.info("send->["+r.toHex().toUpperCase()+"]");let i=new D(e,t);this.uartHelper.sendhex(r.toHex());let a=setTimeout((()=>{e.rtCode=-1,e.rtMsg="msg timeout",this.msgMap[e.toKey()]=null,t(e)}),s);i.timeout=a,this.msgMap[e.toKey()]=i}async receive(){for(;-1!=this.uart_fd;){let e=this.uartHelper.recvhex();e.length>0?this.processMessage(e):await this.promiseCase()}}promiseCase(){return new Promise((function(e,t){setTimeout((function(){e(1)}),10)})).then(void 0,(e=>{}))}processMessage(e){let t=i(e);for(this.buffer.writeBytes(t);;){let e=this.lengthFrameDecoder.decode(this.buffer);if(!e)break;{r(e);let t=new g;if(t.decode(e),t.checkCrc()){if(0===t.mt_12){if(this.msgMap[t.toKey()]){this.debugLog&&console.info("received->["+t.toHex().toUpperCase()+"]");let e=this.msgMap[t.toKey()];e.clearTimeout(),e.decode(t.cData),e.callback(),this.msgMap[t.toKey()]=null}}else if(2===t.mt_11_8)switch(t.msgId){case 0:{let e=new u;e.decode(t.cData),this.callbackEpcInfo&&this.callbackEpcInfo(e);break}case 1:{let e=new m;e.decode(t.cData),this.callbackEpcOver&&this.callbackEpcOver(e);break}case 32:{let e=new w;e.decode(t.cData),this.callback6bInfo&&this.callback6bInfo(e);break}case 33:{let e=new y;e.decode(t.cData),this.callback6bOver&&this.callback6bOver(e);break}case 48:{let e=new B;e.decode(t.cData),this.callbackGbInfo&&this.callbackGbInfo(e);break}case 49:{let e=new p;e.decode(t.cData),this.callbackGbOver&&this.callbackGbOver(e);break}case 64:{let e=new f;e.decode(t.cData),this.callbackGJbInfo&&this.callbackGJbInfo(e);break}case 65:{let e=new x;e.decode(t.cData),this.callbackGJbOver&&this.callbackGJbOver(e);break}}else if(1===t.mt_11_8)switch(t.msgId){case 0:{let e=new b;e.decode(t.cData),this.callbackGpiStart&&this.callbackGpiStart(e);break}case 1:{let e=new S;e.decode(t.cData),this.callbackGpiOver&&this.callbackGpiOver(e);break}case 2:{let e=new I;e.decode(t.cData),this.callbackAllGpiState&&this.callbackAllGpiState(e);break}case 18:this.debugLog&&console.info("heartbeat->["+t.toHex().toUpperCase()+"]"),this.tcp_fd.send({data:new Uint8Array(t.msgData).buffer},(e=>{e&&console.log("heartbeat send fail")}))}}else console.error("CRC Error->["+t.toHex()+"]")}}}close(){this.uartHelper.close(),this.uart_fd=-1,this.connectType=null,this.buffer.reset(),this.callbackEpcInfo=null,this.callbackEpcOver=null,this.callback6bInfo=null,this.callback6bOver=null,this.callbackGbInfo=null,this.callbackGbOver=null,this.callbackGJbInfo=null,this.callbackGJbOver=null,this.callbackGpiStart=null,this.callbackGpiOver=null,this.msgMap={}}}const M={MsgBaseStop:class{constructor(){this.message=new g(2,255),this.rtCode=-1,this.rtMsg=""}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=0===this.rtCode?"success":"stop failed")}},GClient:U,MsgBaseInventoryEpc:class{constructor(){this.message=new g(2,16),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.inventoryMode=null,this.filter=null,this.readTid=null,this.readUserdata=null,this.readReserved=null,this.hexPassword=null,this.monzaQtPeek=null,this.rfmicron=null,this.emSensor=null,this.readEpc=null,this.paramFastId=null,this.ctesius=null,this.quanray=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.inventoryMode),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}if(this.readTid){e.writeByte(2);let t=this.readTid.toBytes();e.writeBytes(t)}if(this.readUserdata){e.writeByte(3);let t=this.readUserdata.toBytes();e.writeBytes(t)}if(this.readReserved){e.writeByte(4);let t=this.readReserved.toBytes();e.writeBytes(t)}if(this.hexPassword&&(e.writeByte(5),e.putHex(this.hexPassword)),null!==this.monzaQtPeek&&(e.writeByte(6),e.writeByte(this.monzaQtPeek)),null!==this.rfmicron&&(e.writeByte(7),e.writeByte(this.rfmicron)),null!==this.emSensor&&(e.writeByte(8),e.writeByte(this.emSensor)),this.readEpc){e.writeByte(9);let t=this.readEpc.toBytes();e.writeBytes(t)}if(this.paramFastId){e.writeByte(10);let t=this.paramFastId.toBytes();e.writeBytes(t)}return null!==this.ctesius&&(e.writeByte(18),e.writeBytes(this.ctesius)),null!==this.quanray&&(e.writeByte(22),e.writeByte(this.quanray)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","TID parameter error.","User parameter error.","Reserve parameter error.","Other error."][this.rtCode])}},MsgBaseInventory6b:class{constructor(){this.message=new g(2,64),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.inventoryMode=null,this.area=null,this.readUserdata=null,this.hexMatchTid=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.inventoryMode),e.writeByte(this.area),this.readUserdata){e.writeByte(1);let t=this.readUserdata.toBytes();e.writeBytes(t)}return this.hexMatchTid&&(e.writeByte(2),e.putHex(this.hexMatchTid)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Read parameter error.","Userdata parameter error.","Other error."][this.rtCode])}},MsgBaseInventoryGb:class{constructor(){this.message=new g(2,80),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.inventoryMode=null,this.filter=null,this.readTid=null,this.readUserdata=null,this.hexPassword=null,this.safeCertificationFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.inventoryMode),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}if(this.readTid){e.writeByte(2);let t=this.readTid.toBytes();e.writeBytes(t)}if(this.readUserdata){e.writeByte(3);let t=this.readUserdata.toBytes();e.writeBytes(t)}return this.hexPassword&&(e.writeByte(5),e.putHex(this.hexPassword)),null!==this.safeCertificationFlag&&(e.writeByte(6),e.writeByte(this.safeCertificationFlag)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","TID parameter error.","User parameter error.","Other error."][this.rtCode])}},MsgBaseInventoryGJb:class{constructor(){this.message=new g(2,96),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.inventoryMode=null,this.filter=null,this.readTid=null,this.readUserdata=null,this.hexPassword=null,this.safeCertificationFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.inventoryMode),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}if(this.readTid){e.writeByte(2);let t=this.readTid.toBytes();e.writeBytes(t)}if(this.readUserdata){e.writeByte(3);let t=this.readUserdata.toBytes();e.writeBytes(t)}return this.hexPassword&&(e.writeByte(5),e.putHex(this.hexPassword)),null!==this.safeCertificationFlag&&(e.writeByte(6),e.writeByte(this.safeCertificationFlag)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","TID parameter error.","User parameter error.","Other error."][this.rtCode])}},MsgBaseWriteEpc:class{constructor(){this.message=new g(2,17),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.area=null,this.start=null,this.hexWriteData=null,this.filter=null,this.hexPassword=null,this.block=null,this.stayCarrierWave=null,this.eBookFlag=null,this.errorIndex=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.area),e.writeShort(this.start),this.hexWriteData&&(e.writeShort(this.hexWriteData.length/2),e.putHex(this.hexWriteData)),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}return this.hexPassword&&(e.writeByte(2),e.putHex(this.hexPassword)),null!==this.block&&(e.writeByte(3),e.writeByte(this.block)),null!==this.stayCarrierWave&&(e.writeByte(4),e.writeByte(this.stayCarrierWave)),null!==this.eBookFlag&&(e.writeByte(5),e.writeByte(this.eBookFlag)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){if(this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","Write parameter error.","CRC check error.","Underpower error.","Data area overflow.","Data area locked.","Access password error.","Other error.","Label is missing.","Send command error."][this.rtCode],this.message.cData.length>1)){let e=new c(4);e.writeBytes(this.message.cData),e.skipByte(1),1===e.readUByte()&&(this.errorIndex=e.readUShort())}}},MsgBaseWrite6b:class{constructor(){this.message=new g(2,65),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.hexMatchTid=null,this.start=null,this.hexWriteData=null,this.errorIndex=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return e.writeInt(this.antennaEnable),this.hexMatchTid&&e.putHex(this.hexMatchTid),e.writeByte(this.start),this.hexWriteData&&(e.writeShort(this.hexWriteData.length/2),e.putHex(this.hexWriteData)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){if(this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Write parameter error.","Other error."][this.rtCode],this.message.cData.length>1)){let e=new c(3);e.writeBytes(this.message.cData),e.skipByte(1),1===e.readUByte()&&(this.errorIndex=e.readUByte())}}},MsgBaseWriteGb:class{constructor(){this.message=new g(2,81),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.area=null,this.start=null,this.hexWriteData=null,this.filter=null,this.hexPassword=null,this.safeCertificationFlag=null,this.fdMicrochipInitMode=null,this.stayCarrierWave=null,this.errorIndex=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.area),e.writeShort(this.start),this.hexWriteData&&(e.writeShort(this.hexWriteData.length/2),e.putHex(this.hexWriteData)),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}return this.hexPassword&&(e.writeByte(2),e.putHex(this.hexPassword)),null!==this.safeCertificationFlag&&(e.writeByte(3),e.writeByte(this.safeCertificationFlag)),null!==this.fdMicrochipInitMode&&(e.writeByte(4),e.writeByte(this.fdMicrochipInitMode)),null!==this.stayCarrierWave&&(e.writeByte(5),e.writeByte(this.stayCarrierWave)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){if(this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","Write parameter error.","CRC check error.","Underpower error.","Data area overflow.","Data area locked.","Access password error.","Permission denied.","Identify failure.","Other error.","Label is missing.","Send command error."][this.rtCode],this.message.cData.length>1)){let e=new c(4);e.writeBytes(this.message.cData),e.skipByte(1),1===e.readUByte()&&(this.errorIndex=e.readUShort())}}},MsgBaseWriteGJb:class{constructor(){this.message=new g(2,97),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.area=null,this.start=null,this.hexWriteData=null,this.filter=null,this.hexPassword=null,this.safeCertificationFlag=null,this.stayCarrierWave=null,this.errorIndex=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.area),e.writeShort(this.start),this.hexWriteData&&(e.writeShort(this.hexWriteData.length/2),e.putHex(this.hexWriteData)),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}return this.hexPassword&&(e.writeByte(2),e.putHex(this.hexPassword)),null!==this.safeCertificationFlag&&(e.writeByte(3),e.writeByte(this.safeCertificationFlag)),null!==this.stayCarrierWave&&(e.writeByte(5),e.writeByte(this.stayCarrierWave)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){if(this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","Write parameter error.","CRC check error.","Underpower error.","Data area overflow.","Data area locked.","Access password error.","Permission denied.","Identify failure.","Other error.","Label is missing.","Send command error."][this.rtCode],this.message.cData.length>1)){let e=new c(4);e.writeBytes(this.message.cData),e.skipByte(1),1===e.readUByte()&&(this.errorIndex=e.readUShort())}}},MsgBaseLockEpc:class{constructor(){this.message=new g(2,18),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.area=null,this.mode=null,this.filter=null,this.hexPassword=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.area),e.writeByte(this.mode),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}return this.hexPassword&&(e.writeByte(2),e.putHex(this.hexPassword)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","Write parameter error.","CRC check error.","Underpower error.","Data area overflow.","Data area locked.","Access password error.","Other error.","Label is missing.","Send command error."][this.rtCode])}},MsgBaseLock6b:class{constructor(){this.message=new g(2,66),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.hexMatchTid=null,this.lockIndex=null,this.errorIndex=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return e.writeInt(this.antennaEnable),this.hexMatchTid&&e.putHex(this.hexMatchTid),e.writeByte(this.lockIndex),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){if(this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Other error."][this.rtCode],this.message.cData.length>1)){let e=new c(3);e.writeBytes(this.message.cData),e.skipByte(1),1===e.readUByte()&&(this.errorIndex=e.readUByte())}}},MsgBaseLock6bGet:class{constructor(){this.message=new g(2,67),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.hexMatchTid=null,this.lockIndex=null,this.lockState=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return e.writeInt(this.antennaEnable),this.hexMatchTid&&e.putHex(this.hexMatchTid),e.writeByte(this.lockIndex),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){if(this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Other error."][this.rtCode],this.message.cData.length>1)){let e=new c(3);e.writeBytes(this.message.cData),e.skipByte(1),1===e.readUByte()&&(this.lockState=e.readUByte())}}},MsgBaseLockGb:class{constructor(){this.message=new g(2,82),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.area=null,this.lockParam=null,this.filter=null,this.hexPassword=null,this.safeCertificationFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.area),e.writeByte(this.lockParam),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}return this.hexPassword&&(e.writeByte(2),e.putHex(this.hexPassword)),null!==this.safeCertificationFlag&&(e.writeByte(3),e.writeByte(this.safeCertificationFlag)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","Lock parameter error.","CRC check error.","Underpower error.","Data area overflow.","Data area locked.","Access password error.","Permission denied.","Identify failure.","Other error.","Label is missing.","Send command error."][this.rtCode])}},MsgBaseLockGJb:class{constructor(){this.message=new g(2,98),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.area=null,this.lockParam=null,this.filter=null,this.hexPassword=null,this.safeCertificationFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.writeByte(this.area),e.writeByte(this.lockParam),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}return this.hexPassword&&(e.writeByte(2),e.putHex(this.hexPassword)),null!==this.safeCertificationFlag&&(e.writeByte(3),e.writeByte(this.safeCertificationFlag)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","Lock parameter error.","CRC check error.","Underpower error.","Data area overflow.","Data area locked.","Access password error.","Permission denied.","Identify failure.","Other error.","Label is missing.","Send command error."][this.rtCode])}},MsgBaseDestroyEpc:class{constructor(){this.message=new g(2,19),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.hexPassword=null,this.filter=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),e.putHex(this.hexPassword),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}return this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","CRC check error.","Underpower error.","The inactivation password is incorrect.","Other error.","Label is missing.","Send command error."][this.rtCode])}},MsgBaseDestroyGb:class{constructor(){this.message=new g(2,83),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.filter=null,this.hexPassword=null,this.safeCertificationFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}return this.hexPassword&&(e.writeByte(2),e.putHex(this.hexPassword)),null!==this.safeCertificationFlag&&(e.writeByte(3),e.writeByte(this.safeCertificationFlag)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","CRC check error.","Underpower error.","Destroy password error.","Permission denied.","Identify failure.","Other error.","Label is missing.","Command error."][this.rtCode])}},MsgBaseDestroyGJb:class{constructor(){this.message=new g(2,99),this.rtCode=-1,this.rtMsg="",this.antennaEnable=null,this.filter=null,this.hexPassword=null,this.safeCertificationFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeInt(this.antennaEnable),this.filter){e.writeByte(1);let t=this.filter.toBytes();e.writeShort(t.length),e.writeBytes(t)}return this.hexPassword&&(e.writeByte(2),e.putHex(this.hexPassword)),null!==this.safeCertificationFlag&&(e.writeByte(3),e.writeByte(this.safeCertificationFlag)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter error.","Filter parameter error.","CRC check error.","Underpower error.","Destroy password error.","Permission denied.","Identify failure.","Other error.","Label is missing.","Command error."][this.rtCode])}},ParamReadEpc:class{constructor(e,t){this.start=e,this.len=t}toBytes(){let e=new c(3);return e.writeByte(this.start),e.writeByte(this.len),e.toBytes()}},ParamReadTid:class{constructor(e,t){this.mode=e,this.len=t}toBytes(){let e=new c(2);return e.writeByte(this.mode),e.writeByte(this.len),e.toBytes()}},ParamReadUserdata:class{constructor(e,t){this.start=e,this.len=t}toBytes(){let e=new c(3);return e.writeShort(this.start),e.writeByte(this.len),e.toBytes()}},ParamReadReserved:class{constructor(e,t){this.start=e,this.len=t}toBytes(){let e=new c(3);return e.writeShort(this.start),e.writeByte(this.len),e.toBytes()}},ParamFastId:class{constructor(e,t){this.fastId=e,this.tagFoucs=t}toBytes(){let e=new c(2);return e.writeByte(this.fastId),e.writeByte(this.tagFoucs),e.toBytes()}},ParamFilter:class{constructor(e,t,s){this.bitLength=4*s.length,this.area=e,this.bitStart=t,this.hexData=s}toBytes(){let e=new c(4+this.hexData.length/2);return e.writeByte(this.area),e.writeShort(this.bitStart),e.writeByte(this.bitLength),e.putHex(this.hexData),e.toBytes()}},Param6bReadUserdata:class{constructor(e,t){this.start=e,this.len=t}toBytes(){let e=new c(2);return e.writeByte(this.start),e.writeByte(this.len),e.toBytes()}},ParamGbReadUserdata:class{constructor(e,t,s){this.start=t,this.len=s,this.childArea=e}toBytes(){let e=new c(4);return e.writeByte(this.childArea),e.writeShort(this.start),e.writeByte(this.len),e.toBytes()}},padRight:h,LogBaseEpcInfo:u,LogBaseEpcOver:m,LogBase6bInfo:w,LogBase6bOver:y,LogBaseGbInfo:B,LogBaseGbOver:p,LogBaseGJbInfo:f,LogBaseGJbOver:x,LogAppGpiStart:b,LogAppGpiOver:S,MsgAppGetBaseVersion:C,MsgAppGetReaderInfo:class{constructor(){this.message=new g(1,0),this.rtCode=-1,this.rtMsg="",this.readerSerialNumber=null,this.powerOnTime=null,this.baseCompileTime=null,this.appVersions=null,this.systemVersions=null,this.appCompileTime=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData);let t=e.readUShort();t&&(this.readerSerialNumber=a(e.slice(t))),this.powerOnTime=e.readUInt();let s=e.readUShort();for(s&&(this.baseCompileTime=a(e.slice(s-1)),e.skipByte(1));e.readIndex<this.message.cData.length;)switch(e.readUByte()){case 1:this.appVersions=e.readUByte()+"."+e.readUByte()+"."+e.readUByte()+"."+e.readUByte();break;case 2:let t=e.readUShort();t&&(this.systemVersions=a(e.slice(t)));break;case 3:let s=e.readUShort();s&&(this.appCompileTime=a(e.slice(s)))}this.rtCode=0,this.rtMsg="success"}}},MsgAppSetGpiTrigger:class{constructor(){this.message=new g(1,11),this.rtCode=-1,this.rtMsg="",this.gpiPort=null,this.triggerStart=null,this.hexTriggerCommand=null,this.triggerOver=null,this.overDelayTime=null,this.levelUploadSwitch=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return e.writeByte(this.gpiPort),e.writeByte(this.triggerStart),this.hexTriggerCommand?(e.writeShort(this.hexTriggerCommand.length/2),e.putHex(this.hexTriggerCommand)):e.writeShort(0),e.writeByte(this.triggerOver),null!==this.overDelayTime&&(e.writeByte(1),e.writeShort(this.overDelayTime)),null!==this.levelUploadSwitch&&(e.writeByte(2),e.writeByte(this.levelUploadSwitch)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Parameter not supported.","Missing parameter."][this.rtCode])}},MsgAppGetGpiTrigger:class{constructor(){this.message=new g(1,12),this.rtCode=-1,this.rtMsg="",this.gpiPort=null,this.triggerStart=null,this.hexTriggerCommand=null,this.triggerOver=null,this.overDelayTime=null,this.levelUploadSwitch=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1);return e.writeByte(this.gpiPort),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.triggerStart=e.readUByte();let t=e.readUShort();t&&(this.hexTriggerCommand=r(e.slice(t))),this.triggerOver=e.readUByte(),this.overDelayTime=e.readUShort(),this.levelUploadSwitch=e.readUByte(),this.rtCode=0,this.rtMsg="success"}}},MsgAppGetGpiState:class{constructor(){this.message=new g(1,10),this.rtCode=-1,this.rtMsg="",this.gpiState=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.gpiState={};const t=e.readableBytes();for(let s=0;s<t/2;s++)this.gpiState[e.readUByte()]=e.readUByte();this.rtCode=0,this.rtMsg="success"}}},MsgBaseGetAutoDormancy:class{constructor(){this.message=new g(2,14),this.rtCode=-1,this.rtMsg="",this.onOff=null,this.freeTime=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.onOff=e.readUByte(),this.freeTime=e.readUShort(),this.rtCode=0,this.rtMsg="success"}}},MsgBaseGetCapabilities:class{constructor(){this.message=new g(2,0),this.rtCode=-1,this.rtMsg="",this.minPower=null,this.maxPower=null,this.antennaCount=null,this.frequencyArray=[],this.protocolArray=[]}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.minPower=e.readUByte(),this.maxPower=e.readUByte(),this.antennaCount=e.readUByte();let t=e.readUShort();for(let s=0;s<t;s++)this.frequencyArray[s]=e.readUByte();let s=e.readUShort();for(let t=0;t<s;t++)this.protocolArray[t]=e.readUByte();this.rtCode=0,this.rtMsg="success"}}},MsgBaseGetFreqRange:class{constructor(){this.message=new g(2,4),this.rtCode=-1,this.rtMsg="",this.freqRangeIndex=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){this.message.cData&&(this.freqRangeIndex=this.message.cData[0],this.rtCode=0,this.rtMsg="success")}},MsgBaseGetFrequency:class{constructor(){this.message=new g(2,6),this.rtCode=-1,this.rtMsg="",this.automatically=null,this.listFreqCursor=[]}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.automatically=1===e.readUByte();let t=e.readUShort();for(let s=0;s<t;s++)this.listFreqCursor[s]=e.readUByte();this.rtCode=0,this.rtMsg="success"}}},MsgBaseGetBaseBand:class{constructor(){this.message=new g(2,12),this.rtCode=-1,this.rtMsg="",this.baseSpeed=null,this.qValue=null,this.session=null,this.inventoryFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.baseSpeed=e.readUByte(),this.qValue=e.readUByte(),this.session=e.readUByte(),this.inventoryFlag=e.readUByte(),this.rtCode=0,this.rtMsg="success"}}},MsgBaseGetPower:class{constructor(){this.message=new g(2,2),this.rtCode=-1,this.rtMsg="",this.antPower=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.antPower={};const t=e.readableBytes();for(let s=0;s<t/2;s++)this.antPower[e.readUByte()]=e.readUByte();this.rtCode=0,this.rtMsg="success"}}},MsgBaseGetTagLog:class{constructor(){this.message=new g(2,10),this.rtCode=-1,this.rtMsg="",this.repeatedTime=null,this.rssiTV=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.repeatedTime=e.readUShort(),this.rssiTV=e.readUByte(),this.rtCode=0,this.rtMsg="success"}}},MsgBaseSetAutoDormancy:class{constructor(){this.message=new g(2,13),this.rtCode=-1,this.rtMsg="",this.onOff=null,this.freeTime=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return e.writeByte(this.onOff),null!==this.freeTime&&(e.writeByte(1),e.writeShort(this.freeTime)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Parameter error.","Other error.","Save failure."][this.rtCode])}},MsgBaseSetBaseBand:class{constructor(){this.message=new g(2,11),this.rtCode=-1,this.rtMsg="",this.baseSpeed=null,this.qValue=null,this.session=null,this.inventoryFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return null!==this.baseSpeed&&(e.writeByte(1),e.writeByte(this.baseSpeed)),null!==this.qValue&&(e.writeByte(2),e.writeByte(this.qValue)),null!==this.session&&(e.writeByte(3),e.writeByte(this.session)),null!==this.inventoryFlag&&(e.writeByte(4),e.writeByte(this.inventoryFlag)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Parameter not supported.","Q value parameter error.","Session parameter error.","Inventory parameter error.","Other error.","Save failure."][this.rtCode])}},MsgBaseSetFreqRange:class{constructor(){this.message=new g(2,3),this.rtCode=-1,this.rtMsg="",this.freqRangeIndex=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return e.writeByte(this.freqRangeIndex),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Frequency parameter not supported.","Save failure."][this.rtCode])}},MsgBaseSetFrequency:class{constructor(){this.message=new g(2,5),this.rtCode=-1,this.rtMsg="",this.automatically=null,this.listFreqCursor=null,this.powerDownSave=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(e.writeByte(this.automatically?1:0),this.listFreqCursor){e.writeByte(1),e.writeShort(this.listFreqCursor.length);for(const t in this.listFreqCursor)e.writeByte(t)}return null!=this.powerDownSave&&(e.writeByte(2),e.writeByte(this.powerDownSave)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","The channel number is not in the current frequency band.","Invalid frequency points.","Other error.","Save failure."][this.rtCode])}},MsgBaseSetPower:class{constructor(){this.message=new g(2,1),this.rtCode=-1,this.rtMsg="",this.antPower={},this.powerDownSave=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(this.antPower)for(const t in this.antPower)e.writeByte(t),e.writeByte(this.antPower[t]);return null!==this.powerDownSave&&(e.writeByte(255),e.writeByte(this.powerDownSave)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Antenna port parameter not supported.","Power parameter not supported.","Save failure."][this.rtCode])}},MsgBaseSetTagLog:class{constructor(){this.message=new g(2,9),this.rtCode=-1,this.rtMsg="",this.repeatedTime=null,this.rssiTV=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return null!=this.repeatedTime&&(e.writeByte(1),e.writeShort(this.repeatedTime)),null!=this.rssiTV&&(e.writeByte(2),e.writeByte(this.rssiTV)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Parameter error.","Save failure."][this.rtCode])}},getPcAndValue:function(e){let t=parseInt(o(e,4)),s=new c(4);return s.writeInt(t<<11),s.skipByte(2),n(s.readUShort().toString(16),4)+h(e,4*t)},getGbPcAndValue:function(e){let t=parseInt(o(e,4)),s=new c(4);return s.writeInt(t<<8),s.skipByte(2),n(s.readUShort().toString(16),4)+h(e,4*t)},MsgAppSetGpo:class{constructor(){this.message=new g(1,9),this.rtCode=-1,this.rtMsg="",this.gpo1=null,this.gpo2=null,this.gpo3=null,this.gpo4=null,this.gpo5=null,this.gpo6=null,this.gpo7=null,this.gpo8=null,this.gpo9=null,this.gpo10=null,this.gpo11=null,this.gpo12=null,this.gpo13=null,this.gpo14=null,this.gpo15=null,this.gpo16=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return null!==this.gpo1&&(e.writeByte(1),e.writeByte(this.gpo1)),null!==this.gpo2&&(e.writeByte(2),e.writeByte(this.gpo2)),null!==this.gpo3&&(e.writeByte(3),e.writeByte(this.gpo3)),null!==this.gpo4&&(e.writeByte(4),e.writeByte(this.gpo4)),null!==this.gpo5&&(e.writeByte(5),e.writeByte(this.gpo5)),null!==this.gpo6&&(e.writeByte(6),e.writeByte(this.gpo6)),null!==this.gpo7&&(e.writeByte(7),e.writeByte(this.gpo7)),null!==this.gpo8&&(e.writeByte(8),e.writeByte(this.gpo8)),null!==this.gpo9&&(e.writeByte(9),e.writeByte(this.gpo9)),null!==this.gpo10&&(e.writeByte(16),e.writeByte(this.gpo10)),null!==this.gpo11&&(e.writeByte(17),e.writeByte(this.gpo11)),null!==this.gpo12&&(e.writeByte(18),e.writeByte(this.gpo12)),null!==this.gpo13&&(e.writeByte(19),e.writeByte(this.gpo13)),null!==this.gpo14&&(e.writeByte(20),e.writeByte(this.gpo14)),null!==this.gpo15&&(e.writeByte(21),e.writeByte(this.gpo15)),null!==this.gpo16&&(e.writeByte(22),e.writeByte(this.gpo16)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Port parameter reader hardware is not supported ."][this.rtCode])}},MsgTestCarrierWave:class{constructor(){this.message=new g(5,0),this.rtCode=-1,this.rtMsg="",this.antennaPort=null,this.freqCursor=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);return e.writeInt(this.antennaPort),e.writeByte(this.freqCursor),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Frequency parameter reader is not supported.","Port parameter reader is not supported.","Lock failure.","Other error."][this.rtCode])}},MsgTestVSWRCheck:class{constructor(){this.message=new g(5,5),this.rtCode=-1,this.rtMsg="",this.preValue=null,this.sufValue=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData),this.preValue=e.readUByte(),this.sufValue=e.readUByte(),this.rtCode=0,this.rtMsg="success"}}},LogAppAllGpiState:I,hexToBytes:i,getGJbPcAndValue:function(e){let t=parseInt(o(e,4)),s=new c(4);return s.writeInt(t<<8),s.skipByte(2),n(s.readUShort().toString(16),4)+h(e,4*t)},MsgBaseSetGJbBaseBand:class{constructor(){this.message=new g(2,228),this.rtCode=-1,this.rtMsg="",this.tc=null,this.trext=null,this.k=null,this.miller=null,this.cin=null,this.ccn=null,this.inventoryFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){let e=new c(1024);if(null!=this.tc){let t=this.tc.toString(2)+this.trext.toString(2)+n(this.k.toString(2),4)+n(this.miller.toString(2),2);e.writeByte(1),e.writeByte(parseInt(t,2))}if(null!=this.cin){let t=n(this.cin.toString(2),4)+n(this.ccn.toString(2),4);e.writeByte(2),e.writeByte(parseInt(t,2))}return null!==this.inventoryFlag&&(e.writeByte(3),e.writeByte(this.inventoryFlag)),this.message.cData=e.toBytes(),this.message.dataLen=e.writeIndex,this.message.encode()}decode(){this.message.cData&&(this.rtCode=this.message.cData[0],this.rtMsg=["Success.","Parameter not supported.","Session parameter error.","Inventory parameter error.","Other error.","Save failure."][this.rtCode])}},MsgBaseGetGJbBaseBand:class{constructor(){this.message=new g(2,229),this.rtCode=-1,this.rtMsg="",this.tc=null,this.trext=null,this.k=null,this.miller=null,this.cin=null,this.ccn=null,this.inventoryFlag=null}toHex(){return this.message.toHex()}toKey(){return this.message.mt_11_8.toString()+this.message.msgId.toString()}encode(){return this.message.dataLen=0,this.message.encode()}decode(){if(this.message.cData){let e=new c(this.message.cData.length);e.writeBytes(this.message.cData);let t=e.readUByte().toString(2);t=n(t,8),this.tc=parseInt(t.substr(0,1),2),this.trext=parseInt(t.substr(1,1),2),this.k=parseInt(t.substr(2,4),2),this.miller=parseInt(t.substr(6,2),2);let s=e.readUByte().toString(2);s=n(s,8),this.cin=parseInt(s.substr(0,4),2),this.ccn=parseInt(s.substr(4,4),2),this.inventoryFlag=e.readUByte(),this.rtCode=0,this.rtMsg="success"}}},getFrequencyList:function(e){switch(e){case 0:return l(920.625,924.375,.25);case 1:return l(840.625,844.375,.25);case 2:return l(840.625,844.375,.25).concat(l(920.625,924.375,.25));case 3:return l(902.75,927.25,.5);case 4:return l(865.7,868.1,.6);case 5:return l(916.8,920.4,1.2);case 6:return l(922.25,927.75,.5);case 7:return l(923.125,925.125,.25);case 8:return l(866.6,867.4,.2);case 9:return l(802.75,998.75,1)}}};return t.default})()));
\ No newline at end of file
import media from '@ohos.multimedia.media';
import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common';
export class SoundPlayer {
private avPlayer;
private count: number = 0;
private loop: boolean = false;
setLoop(isLoop) {
this.loop = isLoop
if (!isLoop) {
if (this.avPlayer) {
this.avPlayer.stop()
}
}
}
getLoop() {
return this.loop
}
// 注册avplayer回调函数
setAVPlayerCallback() {
// seek操作结果回调函数
this.avPlayer.on('seekDone', (seekDoneTime) => {
console.error(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`);
})
// error回调监听函数,当avPlayer在操作过程中出现错误时调用reset接口触发重置流程
this.avPlayer.on('error', (err) => {
console.error(`Invoke AVPlayer failed, code is ${err.code}, message is ${err.message}`);
this.avPlayer.reset(); // 调用reset重置资源,触发idle状态
})
// 状态机变化回调函数
this.avPlayer.on('stateChange', async (state, reason) => {
switch (state) {
case 'idle': // 成功调用reset接口后触发该状态机上报
console.error('AVPlayer state idle called.');
this.avPlayer.release(); // 调用release接口销毁实例对象
break;
case 'initialized': // avplayer 设置播放源后触发该状态上报
console.error('AVPlayer initialized called.');
this.avPlayer.prepare().then(() => {
console.error('AVPlayer prepare succeeded.');
}, (err) => {
console.error(`Invoke prepare failed, code is ${err.code}, message is ${err.message}`);
});
break;
case 'prepared': // prepare调用成功后上报该状态机
console.error('AVPlayer state prepared called.');
this.avPlayer.play(); // 调用播放接口开始播放
break;
case 'playing': // play成功调用后触发该状态机上报
console.error('AVPlayer state playing called.');
this.avPlayer.loop = this.loop
// this.avPlayer.setSpeed(media.PlaybackSpeed.SPEED_FORWARD_2_00_X)
// if (this.count !== 0) {
// console.error('AVPlayer start to seek.');
// this.avPlayer.seek(this.avPlayer.duration); //seek到音频末尾
// } else {
// this.avPlayer.pause(); // 调用暂停接口暂停播放
// }
// this.count++;
break;
case 'paused': // pause成功调用后触发该状态机上报
console.error('AVPlayer state paused called.');
this.avPlayer.play(); // 再次播放接口开始播放
break;
case 'completed': // 播放结束后触发该状态机上报
console.error('AVPlayer state completed called.');
this.avPlayer.stop(); //调用播放结束接口
break;
case 'stopped': // stop接口成功调用后触发该状态机上报
console.error('AVPlayer state stopped called.');
this.avPlayer.reset(); // 调用reset接口初始化avplayer状态
break;
case 'released':
console.error('AVPlayer state released called.');
break;
default:
console.error('AVPlayer state unknown called.');
break;
}
})
}
// 以下demo为使用fs文件系统打开沙箱地址获取媒体文件地址并通过url属性进行播放示例
async avPlayerUrlDemo() {
// 创建avPlayer实例对象
this.avPlayer = await media.createAVPlayer();
// 创建状态机变化回调函数
this.setAVPlayerCallback();
let fdPath = 'fd://';
// 通过UIAbilityContext获取沙箱地址filesDir,以下为Stage模型获方式,如需在FA模型上获取请参考《访问应用沙箱》获取地址
let context = getContext(this) as common.UIAbilityContext;
let pathDir = context.filesDir;
let path = pathDir + '/audio.mp3';
// 打开相应的资源文件地址获取fd,并为url赋值触发initialized状态机上报
let file = await fs.open(path);
fdPath = fdPath + '' + file.fd;
this.avPlayer.url = fdPath;
}
// 以下demo为使用资源管理接口获取打包在HAP内的媒体资源文件并通过fdSrc属性进行播放示例
async avPlayerFdSrcDemo() {
// 创建avPlayer实例对象
this.avPlayer = await media.createAVPlayer();
// 创建状态机变化回调函数
this.setAVPlayerCallback();
// 通过UIAbilityContext的resourceManager成员的getRawFd接口获取媒体资源播放地址
// 返回类型为{fd,offset,length},fd为HAP包fd地址,offset为媒体资源偏移量,length为播放长度
let context = getContext(this) as common.UIAbilityContext;
let fileDescriptor = await context.resourceManager.getRawFd('audio.mp3');
// 为fdSrc赋值触发initialized状态机上报
this.avPlayer.fdSrc = fileDescriptor;
}
}
export default new SoundPlayer()
\ No newline at end of file
// @ts-ignore
import worker, { DedicatedWorkerGlobalScope, MessageEvent, ErrorEvent } from '@ohos.worker';
import hilog from '@ohos.hilog';
var parentPort : DedicatedWorkerGlobalScope = worker.parentPort;
/**
* Defines the event handler to be called when the worker thread receives a message sent by the host thread.
* The event handler is executed in the worker thread.
*
* @param e message data
*/
parentPort.onmessage = function(e : MessageEvent<object>) {
var data = e.data ;
hilog.error(0x0000, "hdwall Worker", "onmessage %{public}s", data) ;
console.log("tag","onmessage" + data)
//hilog.error(0x0000, "hdwall Worker", "onmessage NAPI = %{public}d", testNapi.gpioisenale("gpio-178-1")) ;
//用来停止接收串口数据
parentPort.postMessage("123456");
}
/**
* Defines the event handler to be called when the worker receives a message that cannot be deserialized.
* The event handler is executed in the worker thread.
*/
parentPort.onmessageerror = function(e:MessageEvent<Object>) {
var data = e.data ;
console.log("tag","onmessageerror" + data)
//hilog.error(0x0000, "hdwall Worker", "onmessage NAPI = %{public}d", testNapi.gpioisenale("gpio-178-1")) ;
//用来停止接收串口数据
parentPort.postMessage(data);
}
/**
* Defines the event handler to be called when an exception occurs during worker execution.
* The event handler is executed in the worker thread.
*
* @param e error message
*/
parentPort.onerror = function(e : ErrorEvent) {
}
\ No newline at end of file
import { BzhxDao, SQLiteContext,Bzhx } from '@ohos/common' import database from '../database/database'
import { Bzhx } from '@ohos/common/src/main/ets/entity/Bzhx'
import { importSql } from '../sql/index'
import { Wzdm, Wzhxdm,SQLiteContext, WzdmDao,WzhxdmDao, BzhxDao,Logger } from '@ohos/common'
// 被装号型 // 被装号型
class BzhxModal { class BzhxModal {
...@@ -12,6 +15,14 @@ class BzhxModal { ...@@ -12,6 +15,14 @@ class BzhxModal {
let res = await SQLiteContext.with(BzhxDao).getBzhxList(pmdmsix) let res = await SQLiteContext.with(BzhxDao).getBzhxList(pmdmsix)
return res; return res;
} }
async queryLsm(lsm?: string):Promise<Wzdm[]> {
let res = await SQLiteContext.with(WzdmDao).selectWZDM(lsm);
return res;
}
async queryHXlist(lsm?: string):Promise<Wzhxdm[]> {
let res = await SQLiteContext.with(WzhxdmDao).selectHXList(lsm);
return res;
}
} }
const bzhxModal = new BzhxModal() const bzhxModal = new BzhxModal()
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
"pages/sub_systemMaintenance/Version", "pages/sub_systemMaintenance/Version",
"pages/sub_systemMaintenance/Feedback", "pages/sub_systemMaintenance/Feedback",
"pages/metailmange/WzStatus", "pages/metailmange/WzStatus",
"pages/metailmange/UHFScanPage" "pages/metailmange/UHFScanPage",
"identify/demo_page/UHFDemo",
"identify/demo_page/ScanDemo"
] ]
} }
...@@ -24,7 +24,7 @@ export struct MaterialManagement { ...@@ -24,7 +24,7 @@ export struct MaterialManagement {
Image($r("app.media.menu")).size({ width: 55, height: 55 }).padding(15) Image($r("app.media.menu")).size({ width: 55, height: 55 }).padding(15)
.onClick(()=>{ .onClick(()=>{
router.pushUrl({ router.pushUrl({
url: 'pages/setup/SetUpPage', url: 'identify/demo_page/ScanDemo',
}) })
}) })
}.padding({top: `${StatusBarManager.get().getSystemBarOffset()}px`}) }.padding({top: `${StatusBarManager.get().getSystemBarOffset()}px`})
......
...@@ -8,5 +8,7 @@ ...@@ -8,5 +8,7 @@
"description": "Please describe the basic information.", "description": "Please describe the basic information.",
"main": "", "main": "",
"version": "1.0.0", "version": "1.0.0",
"dependencies": {} "dependencies": {
} "@ohos/axios": "^2.1.1"
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论