add get_connect_status api for rndis/cdc_ecm/asix
This commit is contained in:
@@ -43,7 +43,7 @@ static int usbh_cdc_ecm_set_eth_packet_filter(struct usbh_cdc_ecm *cdc_ecm_class
|
|||||||
return usbh_control_transfer(cdc_ecm_class->hport, setup, NULL);
|
return usbh_control_transfer(cdc_ecm_class->hport, setup, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int usbh_cdc_ecm_get_notification(struct usbh_cdc_ecm *cdc_ecm_class)
|
int usbh_cdc_ecm_get_connect_status(struct usbh_cdc_ecm *cdc_ecm_class)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -244,7 +244,7 @@ find_class:
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (g_cdc_ecm_class.connect_status == false) {
|
while (g_cdc_ecm_class.connect_status == false) {
|
||||||
ret = usbh_cdc_ecm_get_notification(&g_cdc_ecm_class);
|
ret = usbh_cdc_ecm_get_connect_status(&g_cdc_ecm_class);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
usb_osal_msleep(100);
|
usb_osal_msleep(100);
|
||||||
goto find_class;
|
goto find_class;
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ struct usbh_cdc_ecm {
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int usbh_cdc_ecm_get_connect_status(struct usbh_cdc_ecm *cdc_ecm_class);
|
||||||
|
|
||||||
void usbh_cdc_ecm_run(struct usbh_cdc_ecm *cdc_ecm_class);
|
void usbh_cdc_ecm_run(struct usbh_cdc_ecm *cdc_ecm_class);
|
||||||
void usbh_cdc_ecm_stop(struct usbh_cdc_ecm *cdc_ecm_class);
|
void usbh_cdc_ecm_stop(struct usbh_cdc_ecm *cdc_ecm_class);
|
||||||
|
|
||||||
|
|||||||
33
class/vendor/usbh_asix.c
vendored
33
class/vendor/usbh_asix.c
vendored
@@ -21,21 +21,21 @@ static USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_asix_tx_buffer[CONFIG_US
|
|||||||
static USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_asix_inttx_buffer[16];
|
static USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_asix_inttx_buffer[16];
|
||||||
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_asix_buf[32];
|
USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_asix_buf[32];
|
||||||
|
|
||||||
#define ETH_ALEN 6
|
#define ETH_ALEN 6
|
||||||
|
|
||||||
#define PHY_MODE_MARVELL 0x0000
|
#define PHY_MODE_MARVELL 0x0000
|
||||||
#define MII_MARVELL_LED_CTRL 0x0018
|
#define MII_MARVELL_LED_CTRL 0x0018
|
||||||
#define MII_MARVELL_STATUS 0x001b
|
#define MII_MARVELL_STATUS 0x001b
|
||||||
#define MII_MARVELL_CTRL 0x0014
|
#define MII_MARVELL_CTRL 0x0014
|
||||||
|
|
||||||
#define MARVELL_LED_MANUAL 0x0019
|
#define MARVELL_LED_MANUAL 0x0019
|
||||||
|
|
||||||
#define MARVELL_STATUS_HWCFG 0x0004
|
#define MARVELL_STATUS_HWCFG 0x0004
|
||||||
|
|
||||||
#define MARVELL_CTRL_TXDELAY 0x0002
|
#define MARVELL_CTRL_TXDELAY 0x0002
|
||||||
#define MARVELL_CTRL_RXDELAY 0x0080
|
#define MARVELL_CTRL_RXDELAY 0x0080
|
||||||
|
|
||||||
#define PHY_MODE_RTL8211CL 0x000C
|
#define PHY_MODE_RTL8211CL 0x000C
|
||||||
|
|
||||||
#define AX88772A_PHY14H 0x14
|
#define AX88772A_PHY14H 0x14
|
||||||
#define AX88772A_PHY14H_DEFAULT 0x442C
|
#define AX88772A_PHY14H_DEFAULT 0x442C
|
||||||
@@ -46,8 +46,8 @@ USB_NOCACHE_RAM_SECTION USB_MEM_ALIGNX uint8_t g_asix_buf[32];
|
|||||||
#define AX88772A_PHY16H 0x16
|
#define AX88772A_PHY16H 0x16
|
||||||
#define AX88772A_PHY16H_DEFAULT 0x4044
|
#define AX88772A_PHY16H_DEFAULT 0x4044
|
||||||
|
|
||||||
#define SPEED_100 0
|
#define SPEED_100 0
|
||||||
#define SPEED_10 1
|
#define SPEED_10 1
|
||||||
|
|
||||||
static int usbh_asix_read_cmd(struct usbh_asix *asix_class,
|
static int usbh_asix_read_cmd(struct usbh_asix *asix_class,
|
||||||
uint8_t cmd,
|
uint8_t cmd,
|
||||||
@@ -576,7 +576,7 @@ static int usbh_asix_connect(struct usbh_hubport *hport, uint8_t intf)
|
|||||||
|
|
||||||
usbh_asix_mdio_write(asix_class, asix_class->phy_addr, 0, 0x3900);
|
usbh_asix_mdio_write(asix_class, asix_class->phy_addr, 0, 0x3900);
|
||||||
usbh_asix_mdio_read(asix_class, asix_class->phy_addr, 0);
|
usbh_asix_mdio_read(asix_class, asix_class->phy_addr, 0);
|
||||||
|
|
||||||
usbh_asix_mdio_write(asix_class, asix_class->phy_addr, 0, 0x3100);
|
usbh_asix_mdio_write(asix_class, asix_class->phy_addr, 0, 0x3100);
|
||||||
usbh_asix_mdio_read(asix_class, asix_class->phy_addr, 4);
|
usbh_asix_mdio_read(asix_class, asix_class->phy_addr, 4);
|
||||||
|
|
||||||
@@ -587,8 +587,6 @@ static int usbh_asix_connect(struct usbh_hubport *hport, uint8_t intf)
|
|||||||
usbh_asix_mdio_read(asix_class, asix_class->phy_addr, 0);
|
usbh_asix_mdio_read(asix_class, asix_class->phy_addr, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
usbh_asix_set_multicast(asix_class);
|
|
||||||
|
|
||||||
USB_LOG_INFO("Init %s done\r\n", asix_class->name);
|
USB_LOG_INFO("Init %s done\r\n", asix_class->name);
|
||||||
|
|
||||||
memcpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
|
memcpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
|
||||||
@@ -628,7 +626,7 @@ static int usbh_asix_disconnect(struct usbh_hubport *hport, uint8_t intf)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int usbh_asix_get_notification(struct usbh_asix *asix_class)
|
int usbh_asix_get_connect_status(struct usbh_asix *asix_class)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@@ -642,6 +640,7 @@ int usbh_asix_get_notification(struct usbh_asix *asix_class)
|
|||||||
if (g_asix_inttx_buffer[2] & 0x01) {
|
if (g_asix_inttx_buffer[2] & 0x01) {
|
||||||
asix_class->connect_status = true;
|
asix_class->connect_status = true;
|
||||||
usbh_ax88772_mac_link_up(asix_class, SPEED_100, 1, 1, 1);
|
usbh_ax88772_mac_link_up(asix_class, SPEED_100, 1, 1, 1);
|
||||||
|
usbh_asix_set_multicast(asix_class);
|
||||||
} else {
|
} else {
|
||||||
asix_class->connect_status = false;
|
asix_class->connect_status = false;
|
||||||
usbh_ax88772_mac_link_down(asix_class);
|
usbh_ax88772_mac_link_down(asix_class);
|
||||||
@@ -670,7 +669,7 @@ find_class:
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (g_asix_class.connect_status == false) {
|
while (g_asix_class.connect_status == false) {
|
||||||
ret = usbh_asix_get_notification(&g_asix_class);
|
ret = usbh_asix_get_connect_status(&g_asix_class);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
usb_osal_msleep(100);
|
usb_osal_msleep(100);
|
||||||
goto find_class;
|
goto find_class;
|
||||||
|
|||||||
2
class/vendor/usbh_asix.h
vendored
2
class/vendor/usbh_asix.h
vendored
@@ -165,7 +165,7 @@ struct usbh_asix {
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int usbh_asix_get_notification(struct usbh_asix *asix_class);
|
int usbh_asix_get_connect_status(struct usbh_asix *asix_class);
|
||||||
|
|
||||||
void usbh_asix_run(struct usbh_asix *asix_class);
|
void usbh_asix_run(struct usbh_asix *asix_class);
|
||||||
void usbh_asix_stop(struct usbh_asix *asix_class);
|
void usbh_asix_stop(struct usbh_asix *asix_class);
|
||||||
|
|||||||
@@ -189,7 +189,7 @@ static int usbh_rndis_set_msg_transfer(struct usbh_rndis *rndis_class, uint32_t
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int usbh_rndis_get_connect_status(struct usbh_rndis *rndis_class)
|
int usbh_rndis_get_connect_status(struct usbh_rndis *rndis_class)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
uint8_t data[32];
|
uint8_t data[32];
|
||||||
@@ -200,9 +200,9 @@ static int usbh_rndis_get_connect_status(struct usbh_rndis *rndis_class)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if (NDIS_MEDIA_STATE_CONNECTED == data[0]) {
|
if (NDIS_MEDIA_STATE_CONNECTED == data[0]) {
|
||||||
rndis_class->link_status = true;
|
rndis_class->connect_status = true;
|
||||||
} else {
|
} else {
|
||||||
rndis_class->link_status = false;
|
rndis_class->connect_status = false;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -330,9 +330,9 @@ static int usbh_rndis_connect(struct usbh_hubport *hport, uint8_t intf)
|
|||||||
goto query_errorout;
|
goto query_errorout;
|
||||||
}
|
}
|
||||||
if (NDIS_MEDIA_STATE_CONNECTED == data[0]) {
|
if (NDIS_MEDIA_STATE_CONNECTED == data[0]) {
|
||||||
rndis_class->link_status = true;
|
rndis_class->connect_status = true;
|
||||||
} else {
|
} else {
|
||||||
rndis_class->link_status = false;
|
rndis_class->connect_status = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case OID_802_3_MAXIMUM_LIST_SIZE:
|
case OID_802_3_MAXIMUM_LIST_SIZE:
|
||||||
@@ -442,12 +442,12 @@ void usbh_rndis_rx_thread(void *argument)
|
|||||||
// clang-format off
|
// clang-format off
|
||||||
find_class:
|
find_class:
|
||||||
// clang-format on
|
// clang-format on
|
||||||
g_rndis_class.link_status = false;
|
g_rndis_class.connect_status = false;
|
||||||
if (usbh_find_class_instance("/dev/rndis") == NULL) {
|
if (usbh_find_class_instance("/dev/rndis") == NULL) {
|
||||||
goto delete;
|
goto delete;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (g_rndis_class.link_status == false) {
|
while (g_rndis_class.connect_status == false) {
|
||||||
ret = usbh_rndis_get_connect_status(&g_rndis_class);
|
ret = usbh_rndis_get_connect_status(&g_rndis_class);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
usb_osal_msleep(100);
|
usb_osal_msleep(100);
|
||||||
@@ -517,7 +517,7 @@ err_t usbh_rndis_linkoutput(struct netif *netif, struct pbuf *p)
|
|||||||
uint8_t *buffer;
|
uint8_t *buffer;
|
||||||
rndis_data_packet_t *hdr;
|
rndis_data_packet_t *hdr;
|
||||||
|
|
||||||
if (g_rndis_class.link_status == false) {
|
if (g_rndis_class.connect_status == false) {
|
||||||
return ERR_BUF;
|
return ERR_BUF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ struct usbh_rndis {
|
|||||||
uint32_t request_id;
|
uint32_t request_id;
|
||||||
|
|
||||||
uint32_t link_speed;
|
uint32_t link_speed;
|
||||||
bool link_status;
|
bool connect_status;
|
||||||
uint8_t mac[6];
|
uint8_t mac[6];
|
||||||
|
|
||||||
ip_addr_t ipaddr;
|
ip_addr_t ipaddr;
|
||||||
@@ -39,6 +39,7 @@ struct usbh_rndis {
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int usbh_rndis_get_connect_status(struct usbh_rndis *rndis_class);
|
||||||
int usbh_rndis_keepalive(struct usbh_rndis *rndis_class);
|
int usbh_rndis_keepalive(struct usbh_rndis *rndis_class);
|
||||||
|
|
||||||
void usbh_rndis_run(struct usbh_rndis *rndis_class);
|
void usbh_rndis_run(struct usbh_rndis *rndis_class);
|
||||||
|
|||||||
Reference in New Issue
Block a user