midicat /dev/midi2
Verfasst: Mi Okt 29, 2014 1:28 pm
Hallo liebe Progger,
ich versuche mich gerade an einem kleinen Progrämmchen
mit dem gcc unter Linux.
Hier gibt es unter /dev ein Gerät, das sich als Datei behandeln läßt,
Namens "midi[Gerätenummer]", also z.B. "/dev/midi2" .
Mit ">cat /dev/midi2" spuckt mir die Kommandozeile brav die einfliegenden
Einzelbyte von einer angeschlossenen MIDI-Tastatur als Zeichen auf der Konsole aus.
Ich hätte nun aber gerne eine Konsolenausgabe als Dezimal- oder Hexwert,
zudem ist es für mich sicher eine gute Übung, diese "Rohwerte"
in einem C-Progrämmchen formatiert und interpretiert auf der Konsole auszugeben.
Das ist aber erstmal Zweitrangig und ich würde mich freuen,
wenn ich nach einem Programmaufruf, wie: ">midicat /dev/midi2" die einfliegenden
Byte als Dezimalwert zu Gesicht bekäme.
Erstmal dachte ich mir das so:
Das geht zwar ohne Warnungen durch den gcc, aber machen tuts nix.
Ich nehme an, das bleibt am fscanf() hängen?
Naja, ich denke, man sieht wenigstens, was ich meine
und schonmal Dank fürs Gelesenhaben.
ich versuche mich gerade an einem kleinen Progrämmchen
mit dem gcc unter Linux.
Hier gibt es unter /dev ein Gerät, das sich als Datei behandeln läßt,
Namens "midi[Gerätenummer]", also z.B. "/dev/midi2" .
Mit ">cat /dev/midi2" spuckt mir die Kommandozeile brav die einfliegenden
Einzelbyte von einer angeschlossenen MIDI-Tastatur als Zeichen auf der Konsole aus.
Ich hätte nun aber gerne eine Konsolenausgabe als Dezimal- oder Hexwert,
zudem ist es für mich sicher eine gute Übung, diese "Rohwerte"
in einem C-Progrämmchen formatiert und interpretiert auf der Konsole auszugeben.
Das ist aber erstmal Zweitrangig und ich würde mich freuen,
wenn ich nach einem Programmaufruf, wie: ">midicat /dev/midi2" die einfliegenden
Byte als Dezimalwert zu Gesicht bekäme.
Erstmal dachte ich mir das so:
Code: Alles auswählen
#include <stdio.h>
#define uint8_t unsigned char
int main(int argc, char *argv[])
{
printf("\n\n%s:\n",argv[0]);// Erstmal nur zum Jux
uint8_t byte_in;
FILE *fp =fopen("/dev/midi2","r");
while(1)
{
fscanf(fp,"%c", &byte_in);
printf("0x%x ",byte_in);
}
return 0;
}
Ich nehme an, das bleibt am fscanf() hängen?
Naja, ich denke, man sieht wenigstens, was ich meine
und schonmal Dank fürs Gelesenhaben.