/*
* Copyright 2013 Canonical Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* Authors:
* Charles Kerr
*/
public class Device: Object
{
public enum Type
{
OTHER,
COMPUTER,
PHONE,
MODEM,
NETWORK,
HEADSET,
HEADPHONES,
VIDEO,
OTHER_AUDIO,
JOYPAD,
KEYPAD,
KEYBOARD,
TABLET,
MOUSE,
PRINTER,
CAMERA
}
public Type device_type { get; construct; }
public uint id { get; construct; }
public string name { get; construct; }
public string address { get; construct; }
public Icon icon { get; construct; }
public bool is_connectable { get; construct; }
public bool is_connected { get; construct; }
public bool supports_browsing { get; construct; }
public bool supports_file_transfer { get; construct; }
public string print() {
return @"{id:$id, name:$name, address:$address, icon:$(icon.to_string()), device_type:$device_type, is_connectable:$is_connectable, is_connected:$is_connected, supports_browsing:$supports_browsing, supports_file_transfer:$supports_file_transfer}";
}
public Device (uint id,
Type device_type,
string name,
string address,
Icon icon,
bool is_connectable,
bool is_connected,
bool supports_browsing,
bool supports_file_transfer)
{
Object (id: id,
device_type: device_type,
name: name,
address: address,
icon: icon,
is_connectable: is_connectable,
is_connected: is_connected,
supports_browsing: supports_browsing,
supports_file_transfer: supports_file_transfer);
}
public static Type class_to_device_type (uint32 c)
{
switch ((c & 0x1f00) >> 8)
{
case 0x01:
return Type.COMPUTER;
case 0x02:
switch ((c & 0xfc) >> 2)
{
case 0x01:
case 0x02:
case 0x03:
case 0x05:
return Type.PHONE;
case 0x04:
return Type.MODEM;
}
break;
case 0x03:
return Type.NETWORK;
case 0x04:
switch ((c & 0xfc) >> 2)
{
case 0x01:
case 0x02:
return Type.HEADSET;
case 0x06:
return Type.HEADPHONES;
case 0x0b: // vcr
case 0x0c: // video camera
case 0x0d: // camcorder
return Type.VIDEO;
default:
return Type.OTHER_AUDIO;
}
case 0x05:
switch ((c & 0xc0) >> 6)
{
case 0x00:
switch ((c & 0x1e) >> 2)
{
case 0x01:
case 0x02:
return Type.JOYPAD;
}
break;
case 0x01:
return Type.KEYBOARD;
case 0x02:
switch ((c & 0x1e) >> 2)
{
case 0x05:
return Type.TABLET;
default:
return Type.MOUSE;
}
}
break;
case 0x06:
if ((c & 0x80) != 0)
return Type.PRINTER;
if ((c & 0x20) != 0)
return Type.CAMERA;
break;
}
return 0;
}
}