Pessoal!
Uni dois tópicos que havia no site sobre o assunto.
Tenho este som (Philips MCM530) que já é vovô e ia colocar ele pra funcionar na cozinha a pedido da esposa.
Ele tem uma porta chamada "USB PC LINK" que funciona as mil maravilhas no Windows XP. Mas nem preciso dizer pra vcs que este não é mais o SO dos nossos sonhos.
A intenção é usar 14k (37 dias) de música que temos num note com ubuntu 14.04 utilizando o Rhythmbox.
Há tempos procurava uma solução definitiva pra o que acontece.
Pra quem usa o Windows XP no virtualbox era só passar o comando do "Philips Audio Set" dos dispositivos USB detectados pro Windows, instalar os drivers e chamar o musicmatcher jukebox que o som era habilitado e mesmo depois de fechar a máquina virtual o som ficava funcionando beleza, mas ao reiniciar a máquina real não funciona mais, a não ser repetindo todo o processo.
Dessa vez descobri uma solução temporária que não precisa usar o virtualbox.
E venho aqui compartilhar.
Conforme este link
https://github.com/nheir/usb_pc_link, vc deve instalar as livrarias usb
apt-get install libusb-dev
ou pra quem usa o aptitude
aptitude install libusb-dev
Salve o texto abaixo num arquivo chamado "usb_pc_link.c":
/**
* Complete the connection with Philips
* MCM-530 USB PC Link
*
* License: GPL
*
* You need to have libusb-dev installed.
* apt-get install libusb-dev
*
* Compile:
* gcc -Wall usb_pc_link.c -o usb_pc_link -lusb
*
* Run as normal user:
* ./usb_pc_link
*
*/
#include <usb.h>
#include <stdio.h>
#define VENDOR_ID 0x0471
#define PRODUCT_ID 0x0111
// get a handle to the USB device and configure it
usb_dev_handle*
get_handle(struct usb_device *usbDevice)
{
usb_dev_handle *deviceHandle = NULL;
if( usbDevice == NULL ) {
return NULL;
}
deviceHandle = usb_open( usbDevice );
if (deviceHandle == NULL)
{
fprintf(stderr, "Unable to open USB device %s\n", usb_strerror());
usb_close(deviceHandle);
exit(-1);
}
return deviceHandle;
}
// find the right USB device
struct usb_device*
findUSBDevice(void) {
struct usb_bus *bus;
struct usb_device *usbDevice;
struct usb_device *mcmUSBDevice = NULL;
usb_init();
usb_find_busses();
usb_find_devices();
for (bus = usb_busses; bus; bus = bus->next) {
for (usbDevice = bus->devices; usbDevice;
usbDevice = usbDevice->next)
{
if (usbDevice->descriptor.idVendor == VENDOR_ID &&
usbDevice->descriptor.idProduct == PRODUCT_ID)
{
mcmUSBDevice = usbDevice;
break;
}
}
}
if (mcmUSBDevice == NULL) {
fprintf(stderr, "Device %04x:%04x not found\n", VENDOR_ID, PRODUCT_ID);
exit(-1);
}
return mcmUSBDevice;
}
/**
* Connection.
*
* send
* 40 04 00 00 a4 ef 01 00 01
* | | | | | |
* | | value index | data
* | request length
* requesttype
*
* send
* 40 04 00 00 a4 f0 01 00 ff
* | | | | | |
* | | value index | data
* | request length
* requesttype
*/
int
connection(usb_dev_handle *deviceHandle) {
int requesttype = 0x40;
int request = 0x04;
int value = 0x00;
int index[2] = { 0xa4ef, 0xa4f0 };
char buffer[2] = { 1, -1 };
int size = 1;
int timeout = 1000;
int ret = 0;
ret += usb_control_msg(
deviceHandle, requesttype, request, value,
index[0], buffer, size, timeout);
ret += usb_control_msg(
deviceHandle, requesttype, request, value,
index[1], buffer+1, size, timeout);
if (ret < 2) {
fprintf(stderr, "An error occurs in the requests...\n");
return -1;
}
return 0;
}
int
main(void) {
struct usb_device *mcmUSBDevice = findUSBDevice();
usb_dev_handle *deviceHandle = NULL;
deviceHandle = get_handle(mcmUSBDevice);
if(connection(deviceHandle) < 0)
return -1;
return 0;
}
Compile com o comando abaixo:
gcc -Wall usb_pc_link.c -o usb_pc_link -lusb
para a compilação o gcc deve está instalado. Vou partir do principio que vc já tem o mesmo instalado.
O arquivo usb_pc_link.c usa as variaveis VendorID e ProductID pra selecionar o dispositivo USB. Se os seus ID forem diferentes de 0471:0111 que é do MCM530, modifique-os.
Rode o comando abaixo no terminal após a compilação. O seu microsystem deve está conectado ao computador/note com a opção USB PC LINK selecionada.
sudo ./usb_pc_link