标签: tty

Mac 上的 USB 串行端口使用 socat

我有一个通过 Prolific Serial 转 USB 电缆连接的硬件,我需要使用 socat 向该端口和 TCP 端口发送/接收流量。到目前为止,它已经安装完毕并且可以与 minicom 一起正常工作,使用:

minicom -D /dev/tty.usbserial -b 9600

Socat 使用以下方式在一个方向上工作到 TCP 端口:

socat /dev/tty.usbserial,clocal=1,nonblock=1,cread=1,cs8,ixon=1,ixoff=1 TCP4:localhost:8080

我如何让它以两种方式工作?我经常看到重复的字符或双线,这表明串行设置不正确,对吗?

谢谢!克里斯

编辑:一些示例代码(实际上并不以双向方式工作)。

Chris-MacBookAir:~ chrisbridges$ socat -d -d - /dev/tty.usbserial,clocal=1,nonblock=1,cs8,ixon=1,ixoff=1,ispeed=9600,ospeed=9600,icanon=1
2013/01/09 13:13:34 socat[8501] N reading from and writing to stdio
2013/01/09 13:13:34 socat[8501] N opening character device "/dev/tty.usbserial" for reading and writing
2013/01/09 13:13:34 socat[8501] N starting data transfer loop with FDs [0,1] and [3,3]
Run Code Online (Sandbox Code Playgroud)

macos usb serial-port tty socat

5
推荐指数
1
解决办法
1万
查看次数

与 Linux 串行端口一起使用低延迟模式是否安全?

Linux 串口使用 low_latency tty 模式安全吗?该tty_flip_buffer_push功能是记录,它“不能从IRQ上下文中调用,如果端口- > low_latency是集”。尽管如此,无论是否设置了标志,许多低级串行端口驱动程序都会从​​ ISR 调用它。例如,mpc52xx 驱动程序在每次从其 FIFO 读取后无条件地调用翻转缓冲区

ISR 中的低延迟翻转缓冲区的结果是在 IRQ 上下文中输入线路规则驱动程序。我的目标是从高速 mpc52xx 串行端口读取一毫秒或更短的延迟。设置 low_latency 实现了延迟目标,但它也违反了 tty_flip_buffer_push 的记录先决条件。

powerpc tty linux-device-driver

5
推荐指数
1
解决办法
4979
查看次数

如何使用 Nodejs readline(可读标准输入)防止退格

我写了一个简单的程序来管理命令行用户界面。

为此,我使用 Nodejs Readline API 来读取process.stdin流。

我的问题是,如果用户开始输入,然后按退格键,则整行将被删除并回退到默认提示样式;直到用户按下enter。它看起来像这样:

What's your phone number?:
# User start typing
What's your phone number?: 123
# User press backspace
> 12
Run Code Online (Sandbox Code Playgroud)

(您可以在 repo examples 文件夹中运行示例来测试它)

有没有办法防止这种行为?(或以某种方式隐藏它)

stdin tty node.js

5
推荐指数
0
解决办法
367
查看次数

用C语言初始化、读写linux串口设备

我正在开发一个新项目,我想与连接到我的 debian 机器的 FTDI 建立连接。我打算用 C 编写代码,而不是 C++。我的问题就在这里。我找到的所有示例都不完整,或者是为 c++ 编译器而不是 GCC 编译器制作的。

目标是与连接到 FTDI 的微控制器进行通信。为了调试,我想开始构建一个 Linux 应用程序,它能够:

  • 在启动时使用 ttyUSB1 初始化串行连接
  • 发送一个字符串
  • PC接收到字符串后显示
  • 将通信保存到 .txt 文件

是否有任何示例代码或教程可以实现此目的?

如果我成功了,我会将代码放在这里,以便新观众可以使用它!

编辑:

就像我说的,如果我有代码,我会发布代码,这对我有用:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>

#define MODEM "/dev/ttyUSB0"
#define BAUDRATE B115200    

int main(int argc,char** argv)
{   
    struct termios tio;
    struct termios stdio;
    struct termios old_stdio;
    int tty_fd, flags;
    unsigned char c='D';
    tcgetattr(STDOUT_FILENO,&old_stdio);
    printf("Please start with %s /dev/ttyS1 (for example)\n",argv[0]);
    memset(&stdio,0,sizeof(stdio));
    stdio.c_iflag=0;
    stdio.c_oflag=0;
    stdio.c_cflag=0;
    stdio.c_lflag=0; …
Run Code Online (Sandbox Code Playgroud)

c linux serial-port tty

5
推荐指数
1
解决办法
2万
查看次数

如何在linux中通过init杀死重生的进程

我正在 ttyS1 port.ttyS0 上重生 /bin/bash 是我的控制台。下面给出了 inittab 条目。

::respawn:/bin/bash < /dev/ttyS1 > /dev/ttyS1 2> /dev/ttyS1

我的问题是如何禁用/终止重新生成,以便我可以将串行端口用于其他应用程序。

bash shell kernel tty

5
推荐指数
1
解决办法
1万
查看次数

使用符号链接管理 Mac OSX 中的串行端口名称

我想知道是否有人知道在 OSX 中管理 USB 串行端口名称的方法?例如,每当我连接特定的设备序列号时,我总是希望它是序列号 /dev/device1

我知道在 linux 中你可以通过 /etc/udev/rules.d/49-persistent-usb.rules 并添加一个设备规则来做到这一点 SUBSYSTEM=="tty", ATTRS{serial}=="1234567", SYMLINK+="device1"

什么是 Mac 等价物?提前致谢。

...也许这就像 /dev/tty.usb > /dev/device1 的普通符号链接一样简单

macos usb serial-port tty

5
推荐指数
1
解决办法
1593
查看次数

为什么我不能从 Android 上的串行端口打开/写入?

我编写了一个在 Android 4.4 Kitkat 设备上的自定义内核上运行的 Android 应用程序,它使用 Android 串行端口 API ( https://code.google.com/p/android-serialport-api/ ) 来打开串行端口“/dev/ttyACM0”是与我的串行设备关联的端口。该端口具有适当的“666”权限(crw-rw-rw),应用程序本身甚至具有 WRITE_EXTERNAL_STORAGE”权限。

但是,即使权限看起来正确,当我的应用程序尝试使用库打开所述串行端口时,它也会失败。在我的 java 代码中,如果我尝试执行“device.canWrite()”,它返回 false,而“device.canRead()”返回 true。我觉得这是更大权限问题的症状。

如果我使用与串行端口 api/library 捆绑在一起的示例 apk,我会遇到同样的问题,应用程序在 device.canWrite() 上失败并抛出 SecurityException。

当在自定义内核 ICS 设备上运行时,完全相同的代码确实成功运行并打开,应用程序最初是为该设备开发的。然而,两者的内核都是由同一个开发人员编写的,至少从表面上看,端口的权限似乎是一样的。

这可能是我可以在应用程序代码方面解决的问题吗?我尝试了一些其他的串口库(USBSerial3.0,usb-serial-for-android-master),我似乎遇到了同样的问题。

不管问题出在哪里,有人会知道问题可能出在哪里吗?对内核、应用程序和 API 进行更改都摆在桌面上。谢谢你。

android file-permissions serial-port tty android-4.4-kitkat

5
推荐指数
1
解决办法
9592
查看次数

使用 Go 制作全屏终端应用程序

我正在尝试构建一个全屏终端应用程序。我使用 Go 作为我选择的语言。我已经弄清楚如何读取os.Stdin,但我不清楚如何清除终端窗口并操纵光标位置。我还想捕获终端输入而不打印(回显)。

我的问题是:

  1. 如何有效地清除列/行坐标并将其打印到终端?
  2. 如何阻止终端打印按下的按键

我的意图:

我想创建一个全屏终端应用程序,它呈现自己的 UI 并在内部处理输入(热键/导航/等...)。

如果有任何库涵盖此类用例,请随时推荐它们。

shell command-line-interface go tty stty

5
推荐指数
1
解决办法
4857
查看次数

为什么 paramiko 返回 \r\n 作为换行符而不是 \n?

我正在使用一个名为“paramiko”的 python SSH 库。它的使用方式如下:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user_name, password=password)
chan = ssh_pool[host].get_transport().open_session()
chan.exec_command(SOME_COMMAND)
Run Code Online (Sandbox Code Playgroud)

因为我需要在sudo中执行一些命令,所以我需要在exec_command之前调用chan.get_pty()以确保有可用的 tty 。

我发现在调用 get_pty() 后,标准输出从远程服务器返回,使用 \r\n 作为换行符而不是 \n。

例如:

>>> chan = ssh.get_transport().open_session()
>>> chan.exec_command("echo hello world")
>>> chan.recv(1000)
b'hello world\n'
Run Code Online (Sandbox Code Playgroud)

调用 get_pty() 后:

>>> chan = ssh.get_transport().open_session()
>>> chan.get_pty()
>>> chan.exec_command("echo hello world")
>>> chan.recv(1000)
b'hello world\r\n'
Run Code Online (Sandbox Code Playgroud)

我做了一些网络搜索,但找不到任何连接到pty / tty / newline / \r\n 的内容

我担心什么会导致这种变化。

为什么 paramiko 返回 \r\n 作为换行符而不是 \n?

python openssh tty paramiko pty

5
推荐指数
1
解决办法
5048
查看次数

你如何写信给 Pty 大师 Rust

我创建了一个简单的 pty 设置,但是我不确定如何在创建后实际写入主端或从端。我也不确定我的设置是否正确,因为经过检查,pty 的子进程的 Stdin、Stdout 和 Stderr 都是 None 而不是设置为从文件描述符。任何人都可以澄清这是否正确,如果不正确,您对如何解决它有任何建议吗?

use libc::{self};
use nix::pty::openpty;
use std::os::unix::io::FromRawFd;
use std::process::{Child, Command, Stdio};

#[derive(Debug)]
pub struct Pty {
    process: Child,
    fd: i32,
}

fn create_pty(process: &str) -> Pty {
    let ends = openpty(None, None).expect("openpty failed");
    let master = ends.master;
    let slave = ends.slave;

    let mut builder = Command::new(process);
    builder.stdin(unsafe { Stdio::from_raw_fd(slave) });
    builder.stdout(unsafe { Stdio::from_raw_fd(slave) });
    builder.stderr(unsafe { Stdio::from_raw_fd(slave) });

    match builder.spawn() {
        Ok(process) => {
            let pty = Pty {
                process,
                fd: …
Run Code Online (Sandbox Code Playgroud)

unix libc tty pty rust

5
推荐指数
1
解决办法
479
查看次数