The weak symbol stuff is implemented and works. However, there appears to be no way to make it work directly from C++ (e.g. your .ino sketch). So go to your sketch folder and create a new C file "usb_desc.c":
Code:
#include <usb_names.h>
#define MANUFACTURER_NAME {'t','n','i'}
#define MANUFACTURER_NAME_LEN 3
#define PRODUCT_NAME {'t','i','n', 'y', ' ', 'd', 'e', 'v', 'i', 'c', 'e'}
#define PRODUCT_NAME_LEN 11
struct usb_string_descriptor_struct usb_string_manufacturer_name = {
2 + MANUFACTURER_NAME_LEN * 2,
3,
MANUFACTURER_NAME
};
struct usb_string_descriptor_struct usb_string_product_name = {
2 + PRODUCT_NAME_LEN * 2,
3,
PRODUCT_NAME
};
The weak symbols that get overwritten are "usb_string_manufacturer_name" and "usb_string_product_name".