Revision 2b0efdc3

b/hw/baum.c
627 627
    free(baum);
628 628
    return NULL;
629 629
}
630

  
631
USBDevice *usb_baum_init(void)
632
{
633
    /* USB Product ID of Super Vario 40 */
634
    return usb_serial_init("productid=FE72:braille");
635
}
b/hw/baum.h
22 22
 * THE SOFTWARE.
23 23
 */
24 24

  
25
/* usb device */
26
USBDevice *usb_baum_init(void);
27

  
28 25
/* char device */
29 26
CharDriverState *chr_baum_init(QemuOpts *opts);
b/hw/usb-serial.c
90 90

  
91 91
typedef struct {
92 92
    USBDevice dev;
93
    uint16_t vendorid;
94
    uint16_t productid;
93
    uint32_t vendorid;
94
    uint32_t productid;
95 95
    uint8_t recv_buf[RECV_BUF];
96 96
    uint16_t recv_ptr;
97 97
    uint16_t recv_used;
......
527 527
{
528 528
    USBSerialState *s = DO_UPCAST(USBSerialState, dev, dev);
529 529
    s->dev.speed = USB_SPEED_FULL;
530

  
531
    qemu_chr_add_handlers(s->cs, usb_serial_can_read, usb_serial_read,
532
                          usb_serial_event, s);
533
    usb_serial_handle_reset(dev);
530 534
    return 0;
531 535
}
532 536

  
533
USBDevice *usb_serial_init(const char *filename)
537
static USBDevice *usb_serial_init(const char *filename)
534 538
{
535 539
    USBDevice *dev;
536
    USBSerialState *s;
537 540
    CharDriverState *cdrv;
538
    unsigned short vendorid = 0x0403, productid = 0x6001;
541
    uint32_t vendorid = 0, productid = 0;
539 542
    char label[32];
540 543
    static int index;
541 544

  
......
545 548
        if (strstart(filename, "vendorid=", &p)) {
546 549
            vendorid = strtol(p, &e, 16);
547 550
            if (e == p || (*e && *e != ',' && *e != ':')) {
548
                printf("bogus vendor ID %s\n", p);
551
                qemu_error("bogus vendor ID %s\n", p);
549 552
                return NULL;
550 553
            }
551 554
            filename = e;
552 555
        } else if (strstart(filename, "productid=", &p)) {
553 556
            productid = strtol(p, &e, 16);
554 557
            if (e == p || (*e && *e != ',' && *e != ':')) {
555
                printf("bogus product ID %s\n", p);
558
                qemu_error("bogus product ID %s\n", p);
556 559
                return NULL;
557 560
            }
558 561
            filename = e;
559 562
        } else {
560
            printf("unrecognized serial USB option %s\n", filename);
563
            qemu_error("unrecognized serial USB option %s\n", filename);
561 564
            return NULL;
562 565
        }
563 566
        while(*filename == ',')
564 567
            filename++;
565 568
    }
566 569
    if (!*filename) {
567
        printf("character device specification needed\n");
570
        qemu_error("character device specification needed\n");
568 571
        return NULL;
569 572
    }
570 573
    filename++;
......
574 577
    if (!cdrv)
575 578
        return NULL;
576 579

  
577
    dev = usb_create_simple(NULL /* FIXME */, "QEMU USB Serial");
578
    s = DO_UPCAST(USBSerialState, dev, dev);
579
    s->cs = cdrv;
580
    s->vendorid = vendorid;
581
    s->productid = productid;
582
    snprintf(s->dev.devname, sizeof(s->dev.devname), "QEMU USB Serial(%.16s)",
583
             filename);
580
    dev = usb_create(NULL /* FIXME */, "QEMU USB Serial");
581
    qdev_prop_set_chr(&dev->qdev, "chardev", cdrv);
582
    if (vendorid)
583
        qdev_prop_set_uint16(&dev->qdev, "vendorid", vendorid);
584
    if (productid)
585
        qdev_prop_set_uint16(&dev->qdev, "productid", productid);
586
    qdev_init(&dev->qdev);
584 587

  
585
    qemu_chr_add_handlers(cdrv, usb_serial_can_read, usb_serial_read,
586
                          usb_serial_event, s);
588
    return dev;
589
}
590

  
591
static USBDevice *usb_braille_init(const char *unused)
592
{
593
    USBDevice *dev;
594
    CharDriverState *cdrv;
595

  
596
    cdrv = qemu_chr_open("braille", "braille", NULL);
597
    if (!cdrv)
598
        return NULL;
587 599

  
588
    usb_serial_handle_reset((USBDevice *)s);
589
    return (USBDevice *)s;
600
    dev = usb_create(NULL /* FIXME */, "QEMU USB Braille");
601
    qdev_prop_set_chr(&dev->qdev, "chardev", cdrv);
602
    qdev_init(&dev->qdev);
603

  
604
    return dev;
590 605
}
591 606

  
592 607
static struct USBDeviceInfo serial_info = {
593 608
    .qdev.name      = "QEMU USB Serial",
609
    .qdev.alias     = "usb-serial",
610
    .qdev.size      = sizeof(USBSerialState),
611
    .init           = usb_serial_initfn,
612
    .handle_packet  = usb_generic_handle_packet,
613
    .handle_reset   = usb_serial_handle_reset,
614
    .handle_control = usb_serial_handle_control,
615
    .handle_data    = usb_serial_handle_data,
616
    .handle_destroy = usb_serial_handle_destroy,
617
    .usbdevice_name = "serial",
618
    .usbdevice_init = usb_serial_init,
619
    .qdev.props     = (Property[]) {
620
        DEFINE_PROP_CHR("chardev",     USBSerialState, cs),
621
        DEFINE_PROP_HEX32("vendorid",  USBSerialState, vendorid,  0x0403),
622
        DEFINE_PROP_HEX32("productid", USBSerialState, productid, 0x6001),
623
        DEFINE_PROP_END_OF_LIST(),
624
    },
625
};
626

  
627
static struct USBDeviceInfo braille_info = {
628
    .qdev.name      = "QEMU USB Braille",
629
    .qdev.alias     = "usb-braille",
594 630
    .qdev.size      = sizeof(USBSerialState),
595 631
    .init           = usb_serial_initfn,
596 632
    .handle_packet  = usb_generic_handle_packet,
......
598 634
    .handle_control = usb_serial_handle_control,
599 635
    .handle_data    = usb_serial_handle_data,
600 636
    .handle_destroy = usb_serial_handle_destroy,
637
    .usbdevice_name = "braille",
638
    .usbdevice_init = usb_braille_init,
639
    .qdev.props     = (Property[]) {
640
        DEFINE_PROP_CHR("chardev",     USBSerialState, cs),
641
        DEFINE_PROP_HEX32("vendorid",  USBSerialState, vendorid,  0x0403),
642
        DEFINE_PROP_HEX32("productid", USBSerialState, productid, 0xfe72),
643
        DEFINE_PROP_END_OF_LIST(),
644
    },
601 645
};
602 646

  
603 647
static void usb_serial_register_devices(void)
604 648
{
605 649
    usb_qdev_register(&serial_info);
650
    usb_qdev_register(&braille_info);
606 651
}
607 652
device_init(usb_serial_register_devices)
b/hw/usb.h
265 265
/* usb-bt.c */
266 266
USBDevice *usb_bt_init(HCIInfo *hci);
267 267

  
268
/* usb-serial.c */
269
USBDevice *usb_serial_init(const char *filename);
270

  
271 268
/* usb ports of the VM */
272 269

  
273 270
#define VM_USB_HUB_SIZE 8
b/vl.c
2558 2558
                return 0;
2559 2559
            }
2560 2560
        }
2561
    } else if (strstart(devname, "serial:", &p)) {
2562
        dev = usb_serial_init(p);
2563
#ifdef CONFIG_BRLAPI
2564
    } else if (!strcmp(devname, "braille")) {
2565
        dev = usb_baum_init();
2566
#endif
2567 2561
    } else if (strstart(devname, "net:", &p)) {
2568 2562
        QemuOpts *opts;
2569 2563
        int idx;

Also available in: Unified diff