⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 device.c

📁 <B>SMSC USB2.0 Flash硬盘驱动源码</B>
💻 C
📖 第 1 页 / 共 5 页
字号:
uint8 code g_version[] = {k_vendorhi, k_vendorlo, k_dev_producthi, k_dev_productlo, kbcd_dev_version_major, kbcd_dev_version_minor};

//------------------------------------------------------------------------------
// this app is downloadable via dfu, so we must reserve a hole in code space
// to make dfu work properly on the 20x...
// except the masked rom parts aren't dfu-able...

//DS removed the check for !defined(k_opt_otprom) because we will have to reserve this code space anyway
//if we do dfu this we will have to reserve this code space irrespective of the otprom option being set.
#if !defined(k_mcu_97242) //&& !defined(k_opt_otprom)
uint8 code reserved[768] _at_ 0x0400;
#endif



//------------------------------------------------------------------------------
// string descriptors (in a form that the smsc romset utility can use)
#define _hi_digit(b) ((uint8) (((uint8)(b>>4)&0x0F) + (uint8)'0')),0
#define _lo_digit(b) ((uint8) (((uint8)(b  )&0x0F) + (uint8)'0')),0
uint8 code g_str_lng[4] = {4, 3, 0x09, 0x04};  // (English lo 0x09, hi 0x04)
uint8 code g_str_mfg[17][2] = {10, 3, "S", "M", "S", "C"};
uint8 code g_str_prd[63][2] =
{
  62, 3,
  "F", "l", "a", "s", "h",
  " ", "M", "e", "d", "i",
  "a", " ", "C", "o", "n",
  "t", "r", "o", "l", "l",
  "e", "r", " ",
#if (kbcd_dev_version_major>=0x10)
  _hi_digit(kbcd_dev_version_major),
#endif
  _lo_digit(kbcd_dev_version_major), ".",

#if (kbcd_dev_version_minor>=0x10)
  _hi_digit(kbcd_dev_version_minor),
#endif
  _lo_digit(kbcd_dev_version_minor), ".",

#if (kbcd_dev_version_external_change>=0x10)
  _hi_digit(kbcd_dev_version_external_change),
#endif
  _lo_digit(kbcd_dev_version_external_change), ".",

#if (kbcd_dev_version_internal_change>=0x10)
  _hi_digit(kbcd_dev_version_internal_change),
#endif
  _lo_digit(kbcd_dev_version_internal_change)
};
uint8 code g_str_ser[41][2] = {64, 3, " "};
uint8 code *code g_str_dscr[k_dev_max_string] = {g_str_lng, g_str_mfg, g_str_prd, g_str_ser};

//------------------------------------------------------------------------------
// string descriptor indicies
#define k_dev_idx_str_dscr_lng 0
#define k_dev_idx_str_dscr_mfg 1
#define k_dev_idx_str_dscr_prd 2
#define k_dev_idx_str_dscr_ser 3



//------------------------------------------------------------------------------
// device descriptor
//------------------------------------------------------------------------------
// full speed device descriptor
uint8 code g_fs_dev_dscr[] =
{
  k_usb_devdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_device,  // descriptor type: device
  0x00,                 // usb version lo
  0x02,                 // usb version hi
  0x00,                 // device class: see interfaces
  0x00,                 // subclass:  see interfaces
  0x00,                 // protocol:  see interfaces
  k_maxpktsz,           // ndp 0 max packet size (8,16,32,64)
  k_vendorlo,           // vendor lo
  k_vendorhi,           // vendor hi
  k_dev_productlo,      // product lo
  k_dev_producthi,      // product hi
  kbcd_dev_version_minor,  // device release lo
  kbcd_dev_version_major,  // device release hi
  k_dev_idx_str_dscr_mfg,  // manufacturer string index
  k_dev_idx_str_dscr_prd,  // product string index
  0,                    // serial string index
  k_dev_max_configuration  // number of configurations
};
// full speed device descriptor with serial number - cds
uint8 code g_fs_dev_dscr_w_ser[] =
{
  k_usb_devdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_device,  // descriptor type: device
  0x00,                 // usb version lo
  0x02,                 // usb version hi
  0x00,                 // device class: see interfaces
  0x00,                 // subclass:  see interfaces
  0x00,                 // protocol:  see interfaces
  k_maxpktsz,           // ndp 0 max packet size (8,16,32,64)
  k_vendorlo,           // vendor lo
  k_vendorhi,           // vendor hi
  k_dev_productlo,      // product lo
  k_dev_producthi,      // product hi
  kbcd_dev_version_minor,  // device release lo
  kbcd_dev_version_major,  // device release hi
  k_dev_idx_str_dscr_mfg,  // manufacturer string index
  k_dev_idx_str_dscr_prd,  // product string index
  k_dev_idx_str_dscr_ser,  // cds - serial string index
  k_dev_max_configuration  // number of configurations
};

//------------------------------------------------------------------------------
// high speed device descriptor
uint8 code g_hs_dev_dscr[] =
{
  k_usb_devdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_device,  // descriptor type: device
  0x00,                 // usb version lo
  0x02,                 // usb version hi
  0x00,                 // device class: see interfaces
  0x00,                 // subclass:  see interfaces
  0x00,                 // protocol:  see interfaces
  k_maxpktsz,           // ndp 0 max packet size (8,16,32,64)
  k_vendorlo,           // vendor lo
  k_vendorhi,           // vendor hi
  k_dev_productlo,      // product lo
  k_dev_producthi,      // product hi
  kbcd_dev_version_minor,  // device release lo
  kbcd_dev_version_major,  // device release hi
  k_dev_idx_str_dscr_mfg,  // manufacturer string index
  k_dev_idx_str_dscr_prd,  // product string index
  0,                    // serial string index
  k_dev_max_configuration  // number of configurations
};
// high speed device descriptor with serial number - cds
uint8 code g_hs_dev_dscr_w_ser[] =
{
  k_usb_devdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_device,  // descriptor type: device
  0x00,                 // usb version lo
  0x02,                 // usb version hi
  0x00,                 // device class: see interfaces
  0x00,                 // subclass:  see interfaces
  0x00,                 // protocol:  see interfaces
  k_maxpktsz,           // ndp 0 max packet size (8,16,32,64)
  k_vendorlo,           // vendor lo
  k_vendorhi,           // vendor hi
  k_dev_productlo,      // product lo
  k_dev_producthi,      // product hi
  kbcd_dev_version_minor,  // device release lo
  kbcd_dev_version_major,  // device release hi
  k_dev_idx_str_dscr_mfg,  // manufacturer string index
  k_dev_idx_str_dscr_prd,  // product string index
  k_dev_idx_str_dscr_ser,  // cds - serial string index
  k_dev_max_configuration  // number of configurations
};

//------------------------------------------------------------------------------
// device qualifier descriptor
//------------------------------------------------------------------------------
// full speed device qualifier descriptor
uint8 code g_fs_devqual_dscr[] =
{
  k_usb_devqualdscrsz,  // length of descriptor in bytes
  k_usb_dscr_typ_devqual,  // descriptor type: device qualifier
  0x00,                 // usb version lo
  0x02,                 // usb version hi
  0x00,                 // device class: see interfaces
  0x00,                 // subclass:  see interfaces
  0x00,                 // protocol:  see interfaces
  k_maxpktsz,           // ndp 0 max packet size, other speed
  k_dev_max_configuration,  // number of other speed configurations
  0                     // reserved
};

//------------------------------------------------------------------------------
// high speed device qualifier descriptor
uint8 code g_hs_devqual_dscr[] =
{
  k_usb_devqualdscrsz,  // length of descriptor in bytes
  k_usb_dscr_typ_devqual,  // descriptor type: device qualifier
  0x00,                 // usb version lo
  0x02,                 // usb version hi
  0x00,                 // device class: see interfaces
  0x00,                 // subclass:  see interfaces
  0x00,                 // protocol:  see interfaces
  k_maxpktsz,           // ndp 0 max packet size, other speed
  k_dev_max_configuration,  // number of other speed configurations
  0                     // reserved
};

//------------------------------------------------------------------------------
// configuration descriptor
//------------------------------------------------------------------------------
// full speed configuration descriptor
uint8 code g_fs_cfg_dscr[] =
{
  k_usb_cfgdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_config,  // descriptor type: configuration
  k_usb_cfgdscrsz +
  k_usb_ifcdscrsz +
  k_usb_ndpdscrsz +
#ifdef k_append_dfu_dscr
  k_usb_ndpdscrsz +
  k_dfu_funcdscrsz,     // total length lo
#else
  k_usb_ndpdscrsz,      // total length lo
#endif
  0,                    // total length hi
  1,                    // number of interfaces   2 to accomodate the DFU
  0x01,                 // configuration value
  0x00,                 // index of string descriptor
  0x80,                 // attributes: bus powered, no remote wakeup
//  0xFA,                           // max power: 500ma
  0x31,                 // max power: 98ma
  // interface descriptor: BOT mass storage
  k_usb_ifcdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_interface,  // descriptor type: interface
  0,                    // interface number
  0,                    // alternate interface
  2,                    // number of endpoints
  0x08,                 // usb interface class: mass storage
  0x06,                 // usb interface subclass: scsi
  0x50,                 // interface protocol: BOT (bulk only transport)
  0x00,                 // interface string index
  // endpoint descriptor: bulk out
  k_usb_ndpdscrsz,      // length of descriptor in bytes
  0x05,                 // descriptor type: endpoint
  0x02,                 // endpoint 2, out
  0x02,                 // bulk
  k_fs_maxpktsz,        // max packet size lo
  0x00,                 // max packet size hi
  0x01,                 // polling interval
  // endpoint descriptor: bulk in
  k_usb_ndpdscrsz,      // length of descriptor in bytes
  0x05,                 // descriptor type: endpoint
  0x82,                 // endpoint 2, in
  0x02,                 // bulk
  k_fs_maxpktsz,        // max packet size lo
  0x00,                 // max packet size hi
  0x00,                 // polling interval
  // dfu functional descriptor
  k_dfu_funcdscrsz,     // length of descriptor in bytes
  k_dfu_dscr_typ_functional,  // dfu functional descriptor type
  0x07,                 // manifest, upload, dnload tolerant
  _l(k_dfu_detach_timeout),  // detach timeout lo
  _h(k_dfu_detach_timeout),  // detach timeout hi
  _l(k_dfu_max_xfer_sz),  // max transfer size lo
  _h(k_dfu_max_xfer_sz) // max transfer size hi
};

//------------------------------------------------------------------------------
// high speed configuration descriptor
uint8 code g_hs_cfg_dscr[] =
{
  k_usb_cfgdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_config,  // descriptor type: configuration
  k_usb_cfgdscrsz +
  k_usb_ifcdscrsz +
  k_usb_ndpdscrsz +
#ifdef k_append_dfu_dscr
  k_usb_ndpdscrsz +
  k_dfu_funcdscrsz,     // total length lo
#else
  k_usb_ndpdscrsz,      // total length lo
#endif
  0,                    // total length hi
  1,                    // number of interfaces
  0x01,                 // configuration value
  0x00,                 // index of string descriptor
  0x80,                 // attributes: bus powered, no remote wakeup
//  0xFA,                           // max power: 500ma
  0x31,                 // max power: 98ma
  // interface descriptor: BOT mass storage
  k_usb_ifcdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_interface,  // descriptor type: interface
  0,                    // interface number
  0,                    // alternate interface
  2,                    // number of endpoints
  0x08,                 // usb interface class: mass storage
  0x06,                 // usb interface subclass: scsi
  0x50,                 // interface protocol: BOT (bulk only transport)
  0x00,                 // interface string index
  // endpoint descriptor: bulk out
  k_usb_ndpdscrsz,      // length of descriptor in bytes
  0x05,                 // descriptor type: endpoint
  0x02,                 // endpoint 2, out
  0x02,                 // bulk
  _l(k_hs_maxpktsz),    // max packet size lo
  _h(k_hs_maxpktsz),    // max packet size hi
  0x01,                 // polling interval
  // endpoint descriptor: bulk in
  k_usb_ndpdscrsz,      // length of descriptor in bytes
  0x05,                 // descriptor type: endpoint
  0x82,                 // endpoint 2, in
  0x02,                 // bulk
  _l(k_hs_maxpktsz),    // max packet size lo
  _h(k_hs_maxpktsz),    // max packet size hi
  0x00,                 // polling interval
  // dfu functional descriptor
  k_dfu_funcdscrsz,     // length of descriptor in bytes
  k_dfu_dscr_typ_functional,  // dfu functional descriptor type
  0x07,                 // manifest, upload, dnload tolerant
  _l(k_dfu_detach_timeout),  // detach timeout lo
  _h(k_dfu_detach_timeout),  // detach timeout hi
  _l(k_dfu_max_xfer_sz),  // max transfer size lo
  _h(k_dfu_max_xfer_sz) // max transfer size hi
};

//------------------------------------------------------------------------------
// other speed configuration descriptor
//------------------------------------------------------------------------------
// full speed other speed configuration descriptor
uint8 code g_fs_oscfg_dscr[] =
{
  k_usb_cfgdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_osconfig,  // descriptor type: other speed configuration
  k_usb_cfgdscrsz +
  k_usb_ifcdscrsz +
  k_usb_ndpdscrsz +
#ifdef k_append_dfu_dscr
  k_usb_ndpdscrsz +
  k_dfu_funcdscrsz,     // total length lo
#else
  k_usb_ndpdscrsz,      // total length lo
#endif
  0,                    // total length hi
  1,                    // number of interfaces
  0x01,                 // configuration value
  0x00,                 // index of string descriptor
  0x80,                 // attributes: bus powered, no remote wakeup
//  0xFA,                           // max power: 500ma
  0x31,                 // max power: 98ma
  // interface descriptor: BOT mass storage
  k_usb_ifcdscrsz,      // length of descriptor in bytes
  k_usb_dscr_typ_interface,  // descriptor type: interface
  0,                    // interface number

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -