Saturday, December 08, 2007

Linux Virtual Serial Port

When programming with Serial Ports, is often useful to have 2 Virtual Serial Ports communicating each other for debugging, without the need of a Null Modem serial cable connected to phisical serial ports of the same Pc, or connected to a second Pc.
What you need is VSPD!
Download the RPM or tar.gz packet from http://www.tibbo.com/vspdl.php
Install it following the instructions, then you should find the vspd.conf file in /usr/local/vspd/etc/ folder.
Open it and edit as follow (modify the IP 192.168.1.3 with your IP address):

<!-- **** VIRTUAL SERIAL PORT DRIVER FOR LINUX (VSPDL) CONFIGURATION FILE **** -->
<!-- Copyright (C) 2003-2004, Tibbo Technology Inc. -->
<vspdconfig>

<root dir="/usr/local/vspd"/>

<devprefix value="/dev/vspd"/>

<bind host="192.168.1.3"/>

<timeout exec="10000" priority="10"/>

<log type="file" level="EMR" path="var/vspd.log"/>
<log type="file" level="ALR" path="var/vspd.log"/>
<log type="file" level="CRT" path="var/vspd.log"/>
<log type="file" level="ERR" path="var/vspd.log"/>
<log type="file" level="WRN" path="var/vspd.log"/>
<log type="file" level="NTC" path="var/vspd.log"/>
<log type="file" level="INF" path="var/vspd.log"/>
<log type="file" level="DBG" path="var/vspd.log"/>

<vsp num="0">

<bind host="" port="3500"/>

<connection rmode="server/client" proto="tcp" conmode="ondata" timeout="5" onthefly="outofband"/>

<destination ip="192.168.1.3" port="3501" cport="65535"/>

<packets maxlen="255" maxdelay="0" starton="any"/>

<log type="file" level="EMR" path="var/dev.0.log"/>
<log type="file" level="ALR" path="var/dev.0.log"/>
<log type="file" level="CRT" path="var/dev.0.log"/>
<log type="file" level="ERR" path="var/dev.0.log"/>
<log type="file" level="WRN" path="var/dev.0.log"/>
<log type="file" level="NTC" path="var/dev.0.log"/>
<log type="file" level="INF" path="var/dev.0.log"/>

</vsp>

<vsp num="1">

<bind host="192.168.1.3" port="3501"/>

<connection rmode="server/client" proto="tcp" conmode="ondata" timeout="5" onthefly="outofband"/>

<destination ip="192.168.1.3" port="3500" cport="65535"/>

<packets maxlen="255" maxdelay="0" starton="any"/>


<log type="file" level="EMR" path="var/dev.1.log"/>
<log type="file" level="ALR" path="var/dev.1.log"/>
<log type="file" level="CRT" path="var/dev.1.log"/>
<log type="file" level="ERR" path="var/dev.1.log"/>
<log type="file" level="WRN" path="var/dev.1.log"/>
<log type="file" level="NTC" path="var/dev.1.log"/>
<log type="file" level="INF" path="var/dev.1.log"/>

</vsp>

</vspdconfig>

Now you can start the service with
#/etc/rc.d/init.d/vspd start
or, if the service was already running:
#/etc/rc.d/init.d/vspd reloadconf

To test the communication I used minicom on two different consoles, setting first to the port /dev/vsps0, and second to /dev/vsps1

Sunday, November 25, 2007

MKV to AVI under Linux

You need:
MKVtoolnix


1. MKV is a container, to see what the file contains:
$ mkvinfo movie.mkv
Ex:
+ EBML head
|+ Doc type: matroska
|+ Doc type version: 1
|+ Doc type read version: 1
+ Segment, size 736993124
|+ Seek head (subentries will be skipped)
|+ EbmlVoid (size: 4027)
|+ Segment information
| + Timecode scale: 1000000
| + Muxing application: libebml v0.7.3 + libmatroska v0.7.4
| + Writing application: mkvmerge v1.0 ('Soul Food To Go') built on Nov 17 2004 15:06:35
| + Duration: 3682.987s (01:01:22.987000000)
| + Date: Wed Dec 8 15:42:45 2004 UTC
| + Title: Il Coraggioso - The Brave
| + Segment UID: 0x84 0xad 0xc1 0x0b 0x8e 0x9b 0x06 0x84 0xef 0x2a 0xf9 0xa6 0xf4 0x94 0x07 0x5d
| + Next segment UID: 0xeb 0x46 0x75 0xb4 0x7a 0x71 0xc2 0x7f 0xc7 0x36 0x44 0x06 0x9b 0xe4 0x90 0x76
|+ Segment tracks
| + A track
| + Track number: 1
| + Track UID: 38700354
| + Track type: video
| + Default flag: 1
| + Lacing flag: 0
| + MinCache: 1
| + Timecode scale: 1.000000
| + Codec ID: V_MS/VFW/FOURCC
| + CodecPrivate, length 40 (FourCC: XVID, 0x44495658)
| + Default duration: 40.000ms (25.000 fps for a video track)
| + Language: und
| + Name: Il Coraggioso - the Brave
| + Video track
| + Pixel width: 608
| + Pixel height: 336
| + Display width: 608
| + Display height: 336
| + A track
| + Track number: 2
| + Track UID: 3348909422
| + Track type: audio
| + Default flag: 1
| + Lacing flag: 1
| + MinCache: 0
| + Timecode scale: 1.000000
| + Codec ID: A_AAC/MPEG2/LC/SBR
| + Default duration: 42.667ms (23.438 fps for a video track)
| + Language: ita
| + Name: Ita aac 5.1
| + Audio track
| + Sampling frequency: 24000.000000
| + Channels: 6
| + Output sampling frequency: 48000.000000
|+ EbmlVoid (size: 1024)
|+ Cluster

2. select the numbers of the trucks you want to extract and type:
$ mkvextract tracks "/mnt/common/Film/movie.mkv" 1:/mnt/common/Film/movie.avi 2:/mnt/common/Film/movie.aac

3. If the audio file has the aac format you need also:
faad
lame

4. To convert the file audio in mp3 format:
$ faad -d /mnt/common/Film/movie.aac
$ lame /mnt/common/Film/movie.wav


5. Let's put all toghether:
$ mencoder -audiofile movie.wav.mp3 -oac mp3lame -ovc copy movie.avi -o movie_complete.avi

Monday, October 08, 2007

Qt4 Tux Example

main.cpp

#include "console883.h"

#include
#include


int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString fn = "tux.png";

if ( ! QFile::exists( fn ) )
exit( 1 );

Console883 w(0,Qt::FramelessWindowHint);
QPixmap pixmap(fn);

QPalette palette;
palette.setBrush(w.backgroundRole(), QBrush(pixmap));
w.setPalette(palette);
w.setFixedSize( pixmap.size() );
w.setMask(pixmap.mask());
w.show();

a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
return a.exec();
}


--------------------------------------------------------------------------------------------------------------
console883.h

#ifndef CONSOLE883_H
#define CONSOLE883_H

#include
#include
#include "ui_console883.h"

class Console883 : public QWidget
{
Q_OBJECT

public:
Console883(QWidget *parent = 0, Qt::WFlags f = 0);
~Console883();
void show();

protected:
void mousePressEvent( QMouseEvent *);
void mouseMoveEvent( QMouseEvent *);

private:
Ui::Console883Class ui;

QPoint clickPos;
};

#endif // CONSOLE883_H



----------------------------------------------------------------------------------------------------------------
console883.cpp

#include "console883.h"

Console883::Console883(QWidget *parent, Qt::WFlags f)
: QWidget(parent, f)

{
//ui.setupUi(this);
}

Console883::~Console883()
{

}

void Console883::show()
{
ui.setupUi(this);
QWidget::show();
}

void Console883::mousePressEvent( QMouseEvent *e )
{
clickPos = e->pos();
}

void Console883::mouseMoveEvent( QMouseEvent *e )
{
move( e->globalPos() - clickPos );

}





Wednesday, September 26, 2007

Istruzioni per scaricare con mirc:

1-avviare mirc
2-prima di collegare il mirc andare su impostazioni, server, nuovo server:
-nome canale = nome di fantasia, metti ad esempio _oltreirc in modo che ti venga fuori come primo nella lista, altrimenti li ordina per nome.
-indirizzo = irc.oltreirc.net
-porta : lascia quella che c'è (6667)
2A- Configurare quali file il mirc puo ricevere. Dovrebbe esserci sulle impostazioni un menu con indicato dcc, in quel menu dovresti trovare la cartella dove mirc salva i file ed un menu a tendina nel quale configurare le estensioni dei file che mirc deve ricevere (inserisci li le estensioni piu note e digli che deve ricevere solo quelle, accept only! ). Sempre in quel menu devi configurare che se scarica un file inizi in automatico senza chiedere conferma e che se sta scaricando un file già esistente faccia il resume.

3-clicca ok e vai sempre nelle impostazioni nella prima schermata di connessione.
4-seleziona server ALL e successivamente a finaco nel menu a tendina selezione il servere che hai appena creato, lo troverai con il nome che gli hai dato, _oltreirc
5- seleziona quel server e clicca su connetti. Puoi impostare anche il nick come in una normale chat.
6- a questo punta mirc si collegherà alla rete. Dopo una decina di secondi quanto ti conferma il collegamento, digita il commando /list. Questo ti permetterà di visualizzare tutti i canali disponibili.
7- a questo punto prendi in considerazione i primi 4-5 canali quelli con piu utenti. Tra i primi dovrebbe essereci OCEAN. Doppio clic su quel canale e ti si aprirà una nuova finestra. Ora sei dentro.
8- Per evitare di farti calciare fuori a pedate saluta sempre il canale e non chiedere mai informazioni nel canale dove si scarica. Se ti servono info scorri la schermata dei canali ed alla fine troverai sempre i canali di help dedicati ad ogni canale specifico.
9- quando sei dentro nel canale digita il conamndo !list e successivamente ti verrà visualizzato nella finestra del canale un link internet.
10- Apri il link e ti verrà visualizzato una lista con in testa un campo di ricerca. Cerca quello che vuoi e il risultato sarà una pagina con i file disponibili nei vari BOT.
11-Ora vedi che il file è sul bot ad esempio "Oceanlnewsl001" e viene identificato dal pack #5. A questo punto ritorna in mirc e sul canale ocean scorri il menu dove ci sono tutti gli utenti collegati fino a trovare il bot "Oceanlnewsl001". Doppio clic sopra e si apre una finestra. A questo punto inserisci il comando per scaricare xdcc send #numeropack, in questo caso xdcc send #5.
12-se il bot a porte libere ti lascia scaricare e ti apparirà una finestra di inizio download, altrimenti se non parte niente o hai sbagliato a configurare quali file il mirc può ricevere oppure vuol dire che ti sei messo in coda per scaricare! per vedere se sei in coda va nella pagina del canale e ti dovrebbe comparire "sei in posizione 15" o un'altro numero che definisca la tua posizione in cosa!
13- se vuoi eliminarti dalla coda vai nel bot e scrivi il comando xdcc remove.


Thursday, June 21, 2007

Netcat & Busybox

Configurazione di netcat su busybox per fare reverse telnet su una console remota e avere accesso ad un database sqlite. Questo permette di avere accesso al database di una macchina di cui non si conosce l'ip e che è sotto firewall.

Utilizzata Busybox 1.2.1. Entrare in "Networking Utilities"e attivare "nc" e "gaping security hole" (altrimenti l'opzione -e non viene attivata).

Sul server da cui si vuole accedere alla console digitare:
#nc -vv -l -p 80
Sulla console creare il comando eseguibile opendb.sh:
#!/bin/sh
sqlite /usr/secure/database/manager994.db

quindi eseguire il comando
#nc -e opendb.sh xxx.xxx.xxx.xxx 80
dove xxx.xxx.xxx.xxx è l'ip del server