You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dvmhost/src/bridge/CtsCorController.h

84 lines
2.0 KiB

// SPDX-License-Identifier: GPL-2.0-only
/*
* Digital Voice Modem - Bridge
* GPLv2 Open Source. Use is subject to license terms.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright (C) 2025 Lorenzo L. Romero, K2LLR
*/
/**
* @file CtsCorController.h
* @ingroup bridge
*/
#if !defined(__CTS_COR_CONTROLLER_H__)
#define __CTS_COR_CONTROLLER_H__
#include "Defines.h"
#include "common/Log.h"
#include <string>
#if defined(_WIN32)
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#else
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <sys/ioctl.h>
#endif // defined(_WIN32)
/**
* @brief This class implements CTS-based COR detection for the bridge.
* @ingroup bridge
*/
class HOST_SW_API CtsCorController {
public:
/**
* @brief Initializes a new instance of the CtsCorController class.
* @param port Serial port device (e.g., /dev/ttyUSB0).
*/
CtsCorController(const std::string& port);
/**
* @brief Finalizes a instance of the CtsCorController class.
*/
~CtsCorController();
/**
* @brief Opens the serial port for CTS readback.
* @param reuseFd Optional file descriptor to reuse (when sharing port with RTS PTT).
* @returns bool True, if port was opened successfully, otherwise false.
*/
bool open(int reuseFd = -1);
/**
* @brief Closes the serial port.
*/
void close();
/**
* @brief Reads the current CTS signal state.
* @returns bool True if CTS is asserted (active), otherwise false.
*/
bool isCtsAsserted();
private:
std::string m_port;
bool m_isOpen;
bool m_ownsFd; // true if we opened the fd, false if reusing from RTS PTT
#if defined(_WIN32)
HANDLE m_fd;
#else
int m_fd;
#endif // defined(_WIN32)
/**
* @brief Sets the termios settings on the serial port.
* @returns bool True, if settings are set, otherwise false.
*/
bool setTermios();
};
#endif // __CTS_COR_CONTROLLER_H__

Powered by TurnKey Linux.