問題タブ [termios]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
24882 参照

serial-port - Cプログラムでシリアル端末を介してバイナリデータを読み取る方法は?

フォローされているリンクやその他の情報源を読みましたが、質問に対する答えが見つかりませんでした。

シリアル端末を介したバイナリデータ

シリアルポート経由の送信中にデータが破損する

シリアルポートを介して組み込みデバイスと通信します。デフォルトでは、組み込みLinuxはこのポートを端末として使用します。しかし、ポートを介してバイナリデータ(サービスパケット)も転送したいと思います。私の/etc/inittabファイルには「getty」呼び出しがあります: console :: respawn:/ sbin / getty 115200 ttyS0

また、ログイン後に「admin」ユーザーが「cli」アプリケーションを起動する文字列を含む/ etc / passwdファイルがあります: admin:8Mt / Jtxcyg8AY:1000:0:admin:/ tmp:/ tmp / cli

プログラムを実行する前の私のデフォルトのttyS0設定は次のとおりです。

したがって、私のCLIプログラムでは、次のことを行います。

read()関数(unsigned charバッファを使用)でバイナリデータを取得しようとしましたが、正しいデータを受信できませんでした。また、事前に/ dev / ttyS0を再度開いて、file_descriptorを取得し、read()funcを使用します。

私のプログラムは3バイトを送信します:0xAA、0x02、0xFE。しかし、syslogでは、デバイスが誤ったシンボル(0x98、0xE6、0x18)を受信することが常にわかります。

何か問題でもありますか?正しいバイナリデータを取得する方法は?

私が現在テストしているコード全体。

0 投票する
0 に答える
117 参照

c - C - ストリームからのクックされた入力の読み取り

「入力の読み取り」に関する多くの質問があることは知っていますが、明確にするために、調理された入力を読み取ろうとしています。何らかの理由で fgets がクックされていません (それがデフォルトなのか、termios を使用してオンにする必要があるのか​​は不明です)。ncurses はオプションではありません。

例: Hey を入力してからバック スペースを入力すると、raw 入力モードを示す hey^H として出力されます

ところで、termios を介して正規モードをオンにしようとしましたが、まだクックされた入力を取得するのに問題があります。

0 投票する
1 に答える
15558 参照

linux - termios.c_cflagのCLOCALフラグとCRTSCTSフラグはシリアルポートにどのように影響しますか?

Linuxでハードウェアフロー制御ラインRTSおよびCTSを使用するようにUARTを構成したいと思います。http://linux.die.net/man/3/termiosによると、CRTSCTSはRTS / CTS(ハードウェア)フロー制御を有効にし、CLOCALはモデム制御ラインを無視するようにシリアルポートを構成します。2つのフラグは矛盾しているように見えますが、CRTSCTSでハードウェアフロー制御を有効にして、CLOCALの行を無視するにはどうすればよいですか?

0 投票する
1 に答える
1033 参照

serial-port - シリアル ポート Zigbee 通信 - いくつかの間違った文字

ubuntuのシリアル通信に問題があります。Zigbee ノードに接続する C++ コードを書いていますが、問題は Zigbee の構成ではありません。GTKTERM(ubuntu用の通常のシリアル端末)がデータを正しく読み込むので。

シリアル接続の構成は簡単です。

8N1 9600 ボー、CTSRTS なし、ソフトウェア フロー制御なし。ほとんどの文字は正しいですが、一部が間違っているため、私の設定には小さなエラーがあるはずです。

これは、接続をセットアップするためのコードです。

また、これらの構成を変更し、プログラムを変更して再度実行すると、これらの構成がデフォルトに設定されていないことに気付きました。したがって、それらを変更しない限り、プログラムの独立した実行間で同じになります。たぶん、誰かがすべてのデフォルトのリストを持っているので、起動時にいつでもデフォルト値を復元できます。(シリアル通信ストリームから読み取るために fopen() を使用する 2 番目のプログラムを取得しました。このプログラムは、このコードを最初に実行して正しい構成を設定したときにのみ「機能」します)

ここで何がうまくいかないのですか?私はこれを読みました: http://www.easysw.com/~mike/serial/serial.html しかし、それを理解することはできません.

私も試したフラグは次のとおりです。

良い結果がなければ。さらに詳しい情報が必要な場合は、お尋ねください。

0 投票する
4 に答える
2883 参照

c++ - データを送信するときにシリアルポートがデータをスキップするのはなぜですか?

シリアル経由でarduinoと通信するためのC++コードをいくつか作成しました。サインとコサインを使用して2つのサーボモーターを発振させようとしますが、データをスキップしています。なぜこれが起こっているのかわかりません。私はシリアルのものにtermios.hを使用しています。C ++からの出力は、「V180H90」のようなものです。つまり、Vertical 180、Horizo​​ntal 90です。以前はfstreamとusleep()を使用してデータを送信していましたが、機能していましたが、任意の数だけ遅延させるよりも優れた方法を使用したいと思います。 。

ヘルプやガイダンスをありがとう。

私のarduinoコード

私のC++コード

0 投票する
1 に答える
770 参照

c - Telnetセッションでのエスケープシーケンスの処理

子親スキームを使用してTelnetセッションを確立し、疑似端末デバイスを介して両方のプロセス間の通信を処理する短いCコードを借用しています。

コードはかなり正常に実行されますが、1つの大きな欠陥があるため、telnetプロセスはほとんどのエスケープシーケンスを実行せず、代わりにそれらを出力します(ESCは^ [[、矢印^ [[A ^ [[B ^ [[C ^ [[D、等。)。

私はすでにかなりの調査を行っていますが、最終プロセスが特別なコードを適切に解釈して真にインタラクティブなセッションを実現するために、ユーザー入力をどのように処理または渡すかを説明する優れたリソースを見つけることができませんでした。

ベースコード:http ://dl.dropbox.com/u/15117414/pty.c

0 投票する
0 に答える
2267 参照

c++ - tcsetattr() が失敗する

&"警告: GDB: 制御端末の設定に失敗しました: デバイスの不適切な ioctl\n"

問題が見つかりました。これは、tcsetattr() が入力/出力エラーを返すためです。デバイスは書き込み権限で開かれています。そして... dmesg |を実行すると grep ttyS0 または S1-3 を実行しても、何も受信しません! また、「そのようなデバイスはありません」というエラーが続くこともあります。

誰でもこの問題を解決できますか?

0 投票する
0 に答える
1665 参照

c - 古い属性はリセットされますが、終了後にターミナルでtermiosがstdoutを台無しにします

シリアルログアプリケーションでtermiosを使用しています。アプリケーションはシリアルポートを読み取り、データをファイルに保存します。また、標準入力からの入力を受け入れ、それをシリアルポートに送信します。

問題は、アプリケーションが(「q」を押して)終了すると、bash端末の設定が台無しになり、奇妙な文字が出力されることです(画像を参照)。

中央のシリアルポートからの端末出力データ、およびqを押すと奇妙な端末の動作

属性を元に戻すと、次のように成功します:resultsetatr = tcsetattr(STDIN_FILENO、TCSAFLUSH、&oldstdio); そして失敗します:resultsetatr = tcsetattr(STDIN_FILENO、TCSAFLUSH、&oldstdio);

プログラムが終了する前に示されているように。

プログラムは、USB-シリアルアダプタを備えたRaspberrypiで実行されています。

関連するコードは次のとおりです。

0 投票する
2 に答える
6485 参照

c - シリアルポートの read() の後に最初の文字を変更する Linux termio

私のtermiosセットアップは、read()を使用してシリアルポートから読み取った最初の文字を変更しています。Linuxボックスと通信するマイクロコントローラーがあります。マイクロコントローラーは、Linux マシンから送信されたコマンドに応答します。セットアップは次のとおりです。

  • マイクロコントローラ (PIC24F) RS485 ポート <--> RS485 から USB へのコンバーター <--> Ubuntu PC。

Cutecom などの端末プログラムを実行すると、すべてが計画どおりに機能します。コマンド文字を PIC に送信すると、応答が返ってきますが、コマンド ライン プログラムを使用すると、最初の文字が変更されます。これが私のコードです:

これが私が得ている結果の例です。

  • PIC が "00000\n" を送信すると、出力は次のようになります。 読み取り: 6 START-16 48 48 48 48FINISH
  • PIC が「23456\n」を送信すると、出力は次のようになります。 Read: 6 START-14 51 52 53 54FINISH
  • PIC が「34567\n」を送信すると、出力は次のようになります。 Read: 6 START-14 52 53 54 55FINISH
  • PIC が「45678\n」を送信すると、出力は次のようになります。 読み取り: 6 START-12 53 54 55 56FINISH
  • PIC が "56789\n" を送信すると、出力は次のようになります。 読み取り: 6 START-12 54 55 56 57FINISH

何らかの理由で、一部の termios 設定によって最初の文字がめちゃくちゃになっています。Cutecom を実行すると、上記と同じテスト入力が正確に返されるため、termios 設定である必要があります。マニュアルページを何度も読み、入力コントロールのさまざまな設定をすべて試しましたが、何をしてもこの問題を解決することはできません。

簡単に修正するには、データを 1 文字シフトするだけですが、これは避けたいと考えています。

誰かがそのような問題を経験したことがありますか、またはそれについて何をすべきか考えていますか?

どうもありがとう。

28/3/13 素晴らしい提案オースティン。ここに興味がある人のために、2 つの出力があります。

  • 最初は私のプログラムの termios 設定です

    速度 38400 ボー; 行 0; 列 0; 行 = 0; イントラ = ; 終了 = ; 消去 = ; 殺す=; eof = ; eol = ; eol2 = ; スイッチ = ; 開始 = ; 停止 = ; サスペンド = ; rprnt = ; ワーセ = ; 次の = ; フラッシュ = ; 分 = 0; 時間 = 0; -parenb -parodd cs8 -hupcl -cstopb cread clocal -crtscts ignbrk -brkint ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon ixoff -iuclc -ixany -imaxbel -iutf8 -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig icanon -iexten -echo -echo -echok -echonl -noflsh -xcase -tostop -echort -echoctl -echoke

  • そして、キュートコムが使用する設定

    速度 38400 ボー; 行 0; 列 0; 行 = 0; intr = ^C; 終了 = ^\; 消去 = ^?; 殺す = ^U; eof = ^D; eol = ; eol2 = ; スイッチ = ; 開始 = ^Q; 停止 = ^S; Susp = ^Z; rprnt = ^R; ウェラセ = ^W; lnext = ^V; フラッシュ = ^O; 分 = 60; 時間 = 1; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8 -opost -olcuc -ocrnl -onlcr - onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke

私はまだそれをすべて行っており、進歩したら投稿を更新します.

29/3/13 まだ同じ問題があります。Cutecom のソース コードを見つけて、彼らが使用する termios 設定に従いました。それでも問題は存在します。その最初の文字が破損しています!!!!

  • これが私のプログラムのTermios設定です。何らかの理由でフラッシュを設定できません。

    速度 38400 ボー; 行 0; 列 0; 行 = 0; イントラ = ^?; 終了 = ^\; 消去 = ^H; 殺す = ^U; eof = ^D; eol = ; eol2 = ; スイッチ = ; 開始 = ^Q; 停止 = ^S; Susp = ^Z; rprnt = ^R; ウェラセ = ^W; lnext = ^V; フラッシュ = ; 分 = 60; 時間 = 1; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -iutf8 -opost -olcuc -ocrnl -onlcr - onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke

  • そして私の新しいコード:

    /li>

何ができるのか、ここからどこに持っていくべきなのか、私は完全に迷っています。