usb_disk: use SD card and Memory Stick icons when found
Check for partial matches on the product_name string. Tested with a USB card reader and an SD card. Feel free to add icons for Compact Flash and Secure Media and more matches.
This commit is contained in:
@@ -294,6 +294,23 @@ device_icon kMSIconData = { (int32)sizeof(kMemoryStickIcon),
|
|||||||
(void *)kMemoryStickIcon };
|
(void *)kMemoryStickIcon };
|
||||||
device_icon kSDIconData = { (int32)sizeof(kSDIcon), (void *)kSDIcon };
|
device_icon kSDIconData = { (int32)sizeof(kSDIcon), (void *)kSDIcon };
|
||||||
|
|
||||||
|
struct {
|
||||||
|
const char *product;
|
||||||
|
device_icon *icon;
|
||||||
|
const char *name;
|
||||||
|
} kIconMatches[] = {
|
||||||
|
// matches for Hama USB 2.0 Card Reader 35 in 1
|
||||||
|
// vendor: "Transcend Information, Inc."
|
||||||
|
// product: "63-in-1 Multi-Card Reader/Writer" ver. 0100
|
||||||
|
// which report things like "Generic " "USB CF Reader "
|
||||||
|
// { " CF Reader", &kCFIconData, "devices/drive-removable-media-flash" },
|
||||||
|
{ " SD Reader", &kSDIconData, "devices/drive-removable-media-flash" },
|
||||||
|
{ " MS Reader", &kMSIconData, "devices/drive-removable-media-flash" },
|
||||||
|
// { " SM Reader", &kSMIconData, "devices/drive-removable-media-flash" },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
//#pragma mark - Forward Declarations
|
//#pragma mark - Forward Declarations
|
||||||
//
|
//
|
||||||
@@ -1336,6 +1353,8 @@ usb_disk_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
|||||||
case B_GET_ICON_NAME:
|
case B_GET_ICON_NAME:
|
||||||
{
|
{
|
||||||
const char *iconName = "devices/drive-removable-media-usb";
|
const char *iconName = "devices/drive-removable-media-usb";
|
||||||
|
char product[sizeof(lun->product_name)+1];
|
||||||
|
|
||||||
switch (lun->device_type) {
|
switch (lun->device_type) {
|
||||||
case B_CD:
|
case B_CD:
|
||||||
case B_OPTICAL:
|
case B_OPTICAL:
|
||||||
@@ -1343,6 +1362,13 @@ usb_disk_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
|||||||
break;
|
break;
|
||||||
case B_TAPE: // TODO
|
case B_TAPE: // TODO
|
||||||
default:
|
default:
|
||||||
|
snprintf(product, sizeof(product), "%.16s",
|
||||||
|
lun->product_name);
|
||||||
|
for (int i = 0; kIconMatches[i].product; i++) {
|
||||||
|
if (strstr(product, kIconMatches[i].product) == NULL)
|
||||||
|
continue;
|
||||||
|
iconName = kIconMatches[i].name;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
result = user_strlcpy((char *)buffer, iconName,
|
result = user_strlcpy((char *)buffer, iconName,
|
||||||
@@ -1353,6 +1379,7 @@ usb_disk_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
|||||||
case B_GET_VECTOR_ICON:
|
case B_GET_VECTOR_ICON:
|
||||||
{
|
{
|
||||||
device_icon *icon = &kKeyIconData;
|
device_icon *icon = &kKeyIconData;
|
||||||
|
char product[sizeof(lun->product_name)+1];
|
||||||
|
|
||||||
if (length != sizeof(device_icon)) {
|
if (length != sizeof(device_icon)) {
|
||||||
result = B_BAD_VALUE;
|
result = B_BAD_VALUE;
|
||||||
@@ -1366,6 +1393,13 @@ usb_disk_ioctl(void *cookie, uint32 op, void *buffer, size_t length)
|
|||||||
break;
|
break;
|
||||||
case B_TAPE: // TODO
|
case B_TAPE: // TODO
|
||||||
default:
|
default:
|
||||||
|
snprintf(product, sizeof(product), "%.16s",
|
||||||
|
lun->product_name);
|
||||||
|
for (int i = 0; kIconMatches[i].product; i++) {
|
||||||
|
if (strstr(product, kIconMatches[i].product) == NULL)
|
||||||
|
continue;
|
||||||
|
icon = kIconMatches[i].icon;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user