Newsgroup: it.comp.os.linux.software
Titolo: SkypeMate

So già che questo genere di domande non sono molto gradite, ma qualcuno ha 
provato ad usare SkypeMate su linux? in particolare con l' ST-1200  della 
trust.
Io ho fatto una prova veloce, ma altrettanto disarmante, con il messaggio 
"telefono non riconosciuto".
l' ST-1200 è uno scatolotto USB con entrata linea telefonica ed ingresso per 
un telefono analogico.
se qaulcuno conosce una soluzione equivalente ed open source ... magari 
senza andare a scomodare asterisk ... e che funzioni sulla rete di skype ha 
la soluzione a tutti i miei problemi, se poi va da riga di comando senza 
bisogno di interfaccia grafica è l'apoteosi della perfezione.
altrimenti, ho visto che skypemate non fa altro che interfacciarsi a skype, 
potrei provare a programmare io un'interfaccia fra lo scatolotto e skype... 
se solo sapessi da dove cominciare...
beh scusate se ho scritto il classico post che nel mondo open source non si 
vorrebbe mai leggere... ma purtroppo skype è il software più diffuso!!
Grazie 

 se solo sapessi da dove cominciare...
PREMESSA: posto qui, poi magari andiamo in developer.
Il tuo problema mi ha solleticato le dita.
Cominciamo da qui, dal mio schifezz-telefono-usb, ho idea che troveremo
qualcosa di utile anche per il tuo.
ho un telefono usb da pochi euro, comprato da qualche rivenditore cinese
via ebay (mi e' arrivato da UK, ma credo che il tizio fosse cinese).
Si chiama SkypeReady USB Internet Phone, nessuna marca di costruzione,
un numero di matricola che non dice nulla "2005 1119 00329".
Il mio kernel e' 2.6.16.20. Alsa e' quello interno al kernel (1.0.11).
Alsa riconosce il device come "Generic USB Audio Device".
lsusb (ovviamente da root), quando collego il telefono, dice che esso ha
il sequente ID:
ID 0d8c:000e C-Media Electronics, Inc.
e lo cataloga come una periferica C-MEDIA.
Da qui capisco che l'ID del produttore e' 0d8c e quello del prodotto e'
000e, visto dal sistema, in buona sostanza, come una scheda audio usb.
In effetti, il mio nuovo skype per linux, versione 1.3.0.30_API, che
supporta ALSA, riconosce il dispositivo audio usb e lo gestisce come una
periferica di I/O audio. Ovviamente cliccare sui numeri del telefono non
serve a niente, perche' skype vede solo la periferica audio.
Provo Skypemate, ma senza successo (il telefono non e' riconosciuto).
Allora comincio a ragionare su come gestire il telefono come periferica
usb. E qui ci ritroviamo al punto comune tra me e te.
Cominciamo a guardare 
libusb.sourceforge.net
.
Guardo la libreria e gli esempi e tiro fuori questo semplice programma
in C, che si compila banalmente con:
# gcc -o phone -lusb phone.c
e si lancia (da root) con:
# ./phone
Esso esegue una scansione delle porte USB, trova il dispositivo che ha 
quel determinato idprodotto e idcostruttore, verifica i driver che il 
sistema usa per le interfacce proprie del dispositivo. Alcune saranno 
interfacce per l'audio, suppongo. E suppongo ci sia almeno una 
interfaccia per dialogare con il tastierino, dalla quale leggere, per 
esempio, il tasto premuto.
Brancolando nel buio, ho tentato di ottenere accesso a ciascuna delle 4 
interfaccie che ho trovato su quel dispositivo, cercando di capire se 
potevo leggere qualche cosa, tipo un tasto premuto o qualsiasi altro 
evento del tastierino. Ma nisba.
La parte che non riesco ad utilizzare e' commentata. Vedi se riesci a 
fare qualche altra cosa. Se andiamo avanti, poi passiamo alle api di 
skype: ho letto da qualche parte che e' possibile interfacciarsi con 
relativa facilita'.
=================================================================
/*
  * phone.c
  *
  * gestione telefono usb SkypeReady
  * costruttore sconosciuto
  * chips onboard probabilmente della C-Media Electronics, Inc. (lsusb 
docet)
  * riconosciuto da ALSA 1.0.11 del kernel 2.6.16.20
  * 09.07.2006 by LinuxBoy (
linu...@REM-OVE-MEfel.sytes.net
)
  */
#include <stdio.h>
#include <string.h>
#include <usb.h>
// elementi identificativi del telefono
// idm = id produttore secondo lsusb
// idp = id prodotto secondo lsusb
int idm = 0x0D8C;
int idp = 0x000e;
struct usb_device *phonedev=NULL;
int enumdev(struct usb_device *dev, int level)
{
usb_dev_handle *udev;
char string[256];
int ret, i;
if ((udev = usb_open(dev)))
    {
    // stampa il device tenendo conto dell'indentazione stabilita da level
    printf("%.*s%03d:", level * 2,"                    ",dev->devnum);
    // costruttore
    if (dev->descriptor.iManufacturer)
       {
       if ((ret = usb_get_string_simple(udev, 
dev->descriptor.iManufacturer, string, sizeof(string))))
          printf("%s - ",string);
       else printf("%04X - ",dev->descriptor.idVendor);
       }
    else
       {
       printf("%04X - ",dev->descriptor.idVendor);
       }
    // descrizione prodotto
    if (dev->descriptor.iProduct)
       {
       if ((ret = usb_get_string_simple(udev, dev->descriptor.iProduct, 
string, sizeof(string))))
          printf("%s", string);
       else printf("%04X",dev->descriptor.idProduct);
       }
    else
       {
       printf("%04X",dev->descriptor.idProduct);
       }
    usb_close(udev);
    printf("\n");
    // se ha trovato il telefono memorizza il device
    if (dev->descriptor.idVendor == idm && dev->descriptor.idProduct == 
idp) phonedev=dev;
    // ora verifichiamo se ci sono "figli" appesi a questa porta usb
    for (i = 0; i < dev->num_children; i++)
       enumdev(dev->children[i], level + 1);
    }
}
int main(int argc, char *argv[])
{
struct usb_bus *bus;
usb_dev_handle *udev;
struct usb_device *dev;
char s[256];
int i,j;
// operazioni necessarie per l'uso della libusb
usb_init();
usb_find_busses();
usb_find_devices();
// scansione porte usb
for (bus = usb_busses; bus; bus = bus->next)
    {
    if (bus->root_dev)
       {
       enumdev(bus->root_dev,0);
       }
    else
       {
       for (dev = bus->devices; dev; dev = dev->next)
          {
          enumdev(dev,0);
          }
       }
    }
printf("\n");
// se e' stato trovato il telefono
if (phonedev)
    {
    printf("SkypeReady Usb Internet Phone found on device 
%03d\n\n",phonedev->devnum);
    if ((udev = usb_open(phonedev)))
       {
       usb_reset(udev);
       printf("Found %d interfaces for SkypeReady 
Phone\n",phonedev->config->bNumInterfaces);
       for (j=0; j < phonedev->config->bNumInterfaces; j++)
          {
          usb_get_driver_np(udev,j,s,255);
          printf("driver for if #%02d: %s\n",j,s);
          }
/* parte che non sono riuscito a far andare in nessun modo
       usb_detach_kernel_driver_np(udev,3);
       i=usb_claim_interface(udev, 3);
       if (!i)
          {
          printf("Interface claimed\n");
          i=usb_bulk_read(udev,0,s,10,10000);
          if (i>0)
             {
             s[i]=0;
             printf("-%s\n",s);
             }
          usb_release_interface(udev, 3);
          }
       else
          {
          printf("%d: Interface is not available to be claimed\n",i);
          }
*/
       usb_close(udev);
       }
    }
else
    {
    printf("SkypeReady Usb Internet Phone not found\n\n");
    }
return 0;
}
-- 
FeLinux, nuova distro italiana. Cerca su 
http://www.google.it

Ciao!
non ho ancora dato un'occhiata attenta al sorgente, in questi giorni sono 
stato un po' incasinato, spero di riuscire a capire qualcosa.
ti passo per sicurezza un link, anche se hai già provato skypemate, magari 
questo sito può esserti comunque utile: 
http://www.yealink.com/skypemate/support.htm
stavo pensando che provando su winzoz il mio scatolotto ho visto che l'audio 
non va più, quindi anche se fra gestione periferiche viene riconosciuto come 
voip phone, mi sembra ovvio che è una periferica audio usb, a questo punto 
mi sorgono un interrogativo, essendo il mio uno scatolotto pensato per 
interfacciarsi con normali telefoni analogici, è presumibile che ci sia una 
sorta di conversione per rendere i segnali analogici compatibili con le api 
di skype, i telefoni analogici usano dei toni per ogni tasto, e questi 
vengono trasmessi sulla portante, la centrale poi li interpreta e ti collega 
al numero che hai composto.
quando faccio una chiamata normale lo scatolotto la manda sulla linea 
analogica, se invece voglio chiamare con skype, devo comporre il # prima del 
numero.
non è che il tuo telefono e il mio scatolotto inviano direttamente i toni di 
composizione a skypemate? ovvero se compongo un numero e metto il 
cancelletto lo scatolotto lo manda alla propria periferica audio, che lo 
digitalizza e lo manda a skypemate, a questo punto suppongo che skypemate 
faccia in modo di dare a skype tutte le informazioni di cui a bisogno, 
ovvero numero da chiamare e socket audio in ingresso e uscita. potrebbe 
darsi quindi che ci siano solo due interfacce utilizzate, per i due stream 
audio, e che poi skypemate faccia il resto, al limite altre interfacce 
potrebbero essere usate come bus di controllo, tipo apertura socket di 
comunicazione, chiusura ecc..
forse è prematuro, ma provo comunque a dare un'occhiata alle api di skype, 
magari riesco a capire se le periferiche fanno tutto in hardware, o se è 
skypemate a interpretare i toni di chiamata.
"LinuxBoy" <linu...@spamma.tua.sorella> ha scritto nel messaggio 
news:gte7o3-...@igw.matrix.org...
