实现江苏规约上传短视频并增加串口访问类

serial
Matthew 1 year ago
parent 7dfb74b3f0
commit c351e407ed

@ -28,6 +28,7 @@ add_definitions(-DASIO_STANDALONE)
add_definitions(-DUSING_XY_EXTENSION) add_definitions(-DUSING_XY_EXTENSION)
# add_definitions(-DUSING_BREAK_PAD) # add_definitions(-DUSING_BREAK_PAD)
add_definitions(-DSQLITE_THREADSAFE=1) add_definitions(-DSQLITE_THREADSAFE=1)
add_definitions(-DHAVE_STRING_H) # for memcpy in md5.c
# set(OpenCV_DIR D:/Workspace/deps/OpenCV-android-sdk/sdk/native/jni/) # set(OpenCV_DIR D:/Workspace/deps/OpenCV-android-sdk/sdk/native/jni/)
set(OPENCV_EXTRA_MODULES_PATH D:/Workspace/Github/opencv_contrib/modules) set(OPENCV_EXTRA_MODULES_PATH D:/Workspace/Github/opencv_contrib/modules)
@ -293,6 +294,7 @@ add_library( # Sets the name of the library.
Camera2Reader.cpp Camera2Reader.cpp
TextPaint.cpp TextPaint.cpp
CvText.cpp CvText.cpp
SerialPort.cpp
ncnn/yolov5ncnn.cpp ncnn/yolov5ncnn.cpp
@ -318,6 +320,7 @@ add_library( # Sets the name of the library.
${TERM_CORE_ROOT}/TimerThread.cpp ${TERM_CORE_ROOT}/TimerThread.cpp
${TERM_CORE_ROOT}/Template.cpp ${TERM_CORE_ROOT}/Template.cpp
${TERM_CORE_ROOT}/Utils.cpp ${TERM_CORE_ROOT}/Utils.cpp
${TERM_CORE_ROOT}/md5.c
${TERM_CORE_ROOT}/Client/TerminalService.cpp ${TERM_CORE_ROOT}/Client/TerminalService.cpp
${TERM_CORE_ROOT}/Client/Terminal.cpp ${TERM_CORE_ROOT}/Client/Terminal.cpp
${TERM_CORE_ROOT}/Client/Terminal_HN.cpp ${TERM_CORE_ROOT}/Client/Terminal_HN.cpp

@ -0,0 +1,162 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <jni.h>
#include "SerialPort.h"
#include "android/log.h"
#ifdef DEPENDING_GPIO
#include "GPIOControl.h"
#endif
static const char *TAG = "serial_port";
#define LOGI(fmt, args...) __android_log_print(ANDROID_LOG_INFO, TAG, fmt, ##args)
#define LOGD(fmt, args...) __android_log_print(ANDROID_LOG_DEBUG, TAG, fmt, ##args)
#define LOGE(fmt, args...) __android_log_print(ANDROID_LOG_ERROR, TAG, fmt, ##args)
/*
static speed_t getBaudrate(int baudrate)
{
switch(baudrate) {
case 0: return B0;
case 50: return B50;
case 75: return B75;
case 110: return B110;
case 134: return B134;
case 150: return B150;
case 200: return B200;
case 300: return B300;
case 600: return B600;
case 1200: return B1200;
case 1800: return B1800;
case 2400: return B2400;
case 4800: return B4800;
case 9600: return B9600;
case 19200: return B19200;
case 38400: return B38400;
case 57600: return B57600;
case 115200: return B115200;
case 230400: return B230400;
case 460800: return B460800;
case 500000: return B500000;
case 576000: return B576000;
case 921600: return B921600;
case 1000000: return B1000000;
case 1152000: return B1152000;
case 1500000: return B1500000;
case 2000000: return B2000000;
case 2500000: return B2500000;
case 3000000: return B3000000;
case 3500000: return B3500000;
case 4000000: return B4000000;
default: return -1;
}
}
*/
bool CSerialPort::Open(const char* path, speed_t baudrate, int stopBits, int dataBits, int parity, int flowCon, int flags)
{
if (baudrate == -1) {
return false;
}
/* Opening device */
{
fd = open(path, O_RDWR | flags);
if (fd == -1) {
return false;
}
}
/* Configure device */
{
struct termios cfg;
if (tcgetattr(fd, &cfg))
{
close(fd);
return false;
}
cfmakeraw(&cfg);
cfsetispeed(&cfg, baudrate);
cfsetospeed(&cfg, baudrate);
cfg.c_cflag &= ~CSIZE;
switch (dataBits) {
case CS5:
case CS6:
case CS7:
case CS8:
cfg.c_cflag |= dataBits; //使用8位数据位
break;
default:
cfg.c_cflag |= CS8;
break;
}
switch (parity) {
case 0:
cfg.c_cflag &= ~PARENB; //无奇偶校验
break;
case 1:
cfg.c_cflag |= (PARODD | PARENB); //奇校验
break;
case 2:
cfg.c_iflag &= ~(IGNPAR | PARMRK); // 偶校验
cfg.c_iflag |= INPCK;
cfg.c_cflag |= PARENB;
cfg.c_cflag &= ~PARODD;
break;
default:
cfg.c_cflag &= ~PARENB;
break;
}
switch (stopBits) {
case 1:
cfg.c_cflag &= ~CSTOPB; //1位停止位
break;
case 2:
cfg.c_cflag |= CSTOPB; //2位停止位
break;
default:
break;
}
// hardware flow control
switch (flowCon) {
case 0:
cfg.c_cflag &= ~CRTSCTS; //不使用流控
break;
case 1:
cfg.c_cflag |= CRTSCTS; //硬件流控
break;
case 2:
cfg.c_cflag |= IXON | IXOFF | IXANY; //软件流控
break;
default:
cfg.c_cflag &= ~CRTSCTS;
break;
}
if (tcsetattr(fd, TCSANOW, &cfg)) {
LOGE("tcsetattr() failed");
close(fd);
/* TODO: throw an exception */
return false;
}
}
return true;
}
void CSerialPort::Close()
{
close(fd);
}

@ -0,0 +1,21 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class android_serialport_SerialPort */
#ifndef __SERIALPORT_H__
#define __SERIALPORT_H__
#include <termios.h>
class CSerialPort
{
public:
bool Open(const char* path, speed_t baudrate, int stopBits, int dataBits, int parity, int flowCon, int flags);
void Close();
private:
int fd;
};
#endif // __SERIALPORT_H__
Loading…
Cancel
Save