浅析STM32之usbh_def.H

【温故而知新】类似文章浅析USB HID ReportDesc (HID报告描述符)

现在将en.stm32cubef1\STM32Cube_FW_F1_V1.4.0\Middlewares\ST\STM32_USB_Host_Library\Core\Inc\usbh_def.H

/********************************************************************************* @file    usbh_def.h* @author  MCD Application Team* @version V3.2.2* @date    07-July-2015* @brief   Definitions used in the USB host library******************************************************************************* @attention** <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2>** Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");* You may not use this file except in compliance with the License.* You may obtain a copy of the License at:**        http://www.st.com/software_license_agreement_liberty_v2** Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.********************************************************************************//* Define to prevent recursive  ----------------------------------------------*/
#ifndef  USBH_DEF_H
#define  USBH_DEF_H#ifdef __cplusplusextern "C" {
#endif/* Includes ------------------------------------------------------------------*/
#include "usbh_conf.h"/** @addtogroup USBH_LIB* @{*//** @addtogroup USBH_LIB_CORE
* @{
*//** @defgroup USBH_DEF* @brief This file is includes USB descriptors* @{*/ #ifndef NULL
#define NULL  0
#endif#ifndef FALSE
#define FALSE 0
#endif#ifndef TRUE
#define TRUE  1
#endif#define ValBit(VAR,POS)                               (VAR & (1 << POS))
#define SetBit(VAR,POS)                               (VAR |= (1 << POS))
#define ClrBit(VAR,POS)                               (VAR &= ((1 << POS)^255))#define  LE16(addr)             (((uint16_t)(*((uint8_t *)(addr))))\+ (((uint16_t)(*(((uint8_t *)(addr)) + 1))) << 8))#define  LE16S(addr)              (uint16_t)(LE16((addr)))#define  LE32(addr)              ((((uint32_t)(*(((uint8_t *)(addr)) + 0))) + \(((uint32_t)(*(((uint8_t *)(addr)) + 1))) << 8) + \(((uint32_t)(*(((uint8_t *)(addr)) + 2))) << 16) + \(((uint32_t)(*(((uint8_t *)(addr)) + 3))) << 24)))#define  LE64(addr)              ((((uint64_t)(*(((uint8_t *)(addr)) + 0))) + \(((uint64_t)(*(((uint8_t *)(addr)) + 1))) <<  8) +\(((uint64_t)(*(((uint8_t *)(addr)) + 2))) << 16) +\(((uint64_t)(*(((uint8_t *)(addr)) + 3))) << 24) +\(((uint64_t)(*(((uint8_t *)(addr)) + 4))) << 32) +\(((uint64_t)(*(((uint8_t *)(addr)) + 5))) << 40) +\(((uint64_t)(*(((uint8_t *)(addr)) + 6))) << 48) +\(((uint64_t)(*(((uint8_t *)(addr)) + 7))) << 56)))#define  LE24(addr)              ((((uint32_t)(*(((uint8_t *)(addr)) + 0))) + \(((uint32_t)(*(((uint8_t *)(addr)) + 1))) << 8) + \(((uint32_t)(*(((uint8_t *)(addr)) + 2))) << 16)))#define  LE32S(addr)              (int32_t)(LE32((addr)))#define  USB_LEN_DESC_HDR                               0x02
#define  USB_LEN_DEV_DESC                               0x12
#define  USB_LEN_CFG_DESC                               0x09
#define  USB_LEN_IF_DESC                                0x09
#define  USB_LEN_EP_DESC                                0x07
#define  USB_LEN_OTG_DESC                               0x03
#define  USB_LEN_SETUP_PKT                              0x08/* bmRequestType :D7 Data Phase Transfer Direction  */
#define  USB_REQ_DIR_MASK                               0x80
#define  USB_H2D                                        0x00
#define  USB_D2H                                        0x80/* bmRequestType D6..5 Type */
#define  USB_REQ_TYPE_STANDARD                          0x00
#define  USB_REQ_TYPE_CLASS                             0x20
#define  USB_REQ_TYPE_VENDOR                            0x40
#define  USB_REQ_TYPE_RESERVED                          0x60/* bmRequestType D4..0 Recipient */
#define  USB_REQ_RECIPIENT_DEVICE                       0x00
#define  USB_REQ_RECIPIENT_INTERFACE                    0x01
#define  USB_REQ_RECIPIENT_ENDPOINT                     0x02
#define  USB_REQ_RECIPIENT_OTHER                        0x03/* Table 9-4. Standard Request Codes  */
/* bRequest , Value */
#define  USB_REQ_GET_STATUS                             0x00
#define  USB_REQ_CLEAR_FEATURE                          0x01
#define  USB_REQ_SET_FEATURE                            0x03
#define  USB_REQ_SET_ADDRESS                            0x05
#define  USB_REQ_GET_DESCRIPTOR                         0x06
#define  USB_REQ_SET_DESCRIPTOR                         0x07
#define  USB_REQ_GET_CONFIGURATION                      0x08
#define  USB_REQ_SET_CONFIGURATION                      0x09
#define  USB_REQ_GET_INTERFACE                          0x0A
#define  USB_REQ_SET_INTERFACE                          0x0B
#define  USB_REQ_SYNCH_FRAME                            0x0C/* Table 9-5. Descriptor Types of USB Specifications */
#define  USB_DESC_TYPE_DEVICE                              1
#define  USB_DESC_TYPE_CONFIGURATION                       2
#define  USB_DESC_TYPE_STRING                              3
#define  USB_DESC_TYPE_INTERFACE                           4
#define  USB_DESC_TYPE_ENDPOINT                            5
#define  USB_DESC_TYPE_DEVICE_QUALIFIER                    6
#define  USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION           7
#define  USB_DESC_TYPE_INTERFACE_POWER                     8
#define  USB_DESC_TYPE_HID                                 0x21
#define  USB_DESC_TYPE_HID_REPORT                          0x22#define USB_DEVICE_DESC_SIZE                               18
#define USB_CONFIGURATION_DESC_SIZE                        9
#define USB_HID_DESC_SIZE                                  9
#define USB_INTERFACE_DESC_SIZE                            9
#define USB_ENDPOINT_DESC_SIZE                             7/* Descriptor Type and Descriptor Index  */
/* Use the following values when calling the function USBH_GetDescriptor  */
#define  USB_DESC_DEVICE                    ((USB_DESC_TYPE_DEVICE << 8) & 0xFF00)
#define  USB_DESC_CONFIGURATION             ((USB_DESC_TYPE_CONFIGURATION << 8) & 0xFF00)
#define  USB_DESC_STRING                    ((USB_DESC_TYPE_STRING << 8) & 0xFF00)
#define  USB_DESC_INTERFACE                 ((USB_DESC_TYPE_INTERFACE << 8) & 0xFF00)
#define  USB_DESC_ENDPOINT                  ((USB_DESC_TYPE_INTERFACE << 8) & 0xFF00)
#define  USB_DESC_DEVICE_QUALIFIER          ((USB_DESC_TYPE_DEVICE_QUALIFIER << 8) & 0xFF00)
#define  USB_DESC_OTHER_SPEED_CONFIGURATION ((USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION << 8) & 0xFF00)
#define  USB_DESC_INTERFACE_POWER           ((USB_DESC_TYPE_INTERFACE_POWER << 8) & 0xFF00)
#define  USB_DESC_HID_REPORT                ((USB_DESC_TYPE_HID_REPORT << 8) & 0xFF00)
#define  USB_DESC_HID                       ((USB_DESC_TYPE_HID << 8) & 0xFF00)#define  USB_EP_TYPE_CTRL                               0x00
#define  USB_EP_TYPE_ISOC                               0x01
#define  USB_EP_TYPE_BULK                               0x02
#define  USB_EP_TYPE_INTR                               0x03#define  USB_EP_DIR_OUT                                 0x00
#define  USB_EP_DIR_IN                                  0x80
#define  USB_EP_DIR_MSK                                 0x80  #ifndef USBH_MAX_PIPES_NBR#define USBH_MAX_PIPES_NBR                             15                                                
#endif /* USBH_MAX_PIPES_NBR */#define USBH_DEVICE_ADDRESS_DEFAULT                     0
#define USBH_MAX_ERROR_COUNT                            2
#define USBH_DEVICE_ADDRESS                             1/*** @}*/ #define USBH_CONFIGURATION_DESCRIPTOR_SIZE (USB_CONFIGURATION_DESC_SIZE \+ USB_INTERFACE_DESC_SIZE\+ (USBH_MAX_NUM_ENDPOINTS * USB_ENDPOINT_DESC_SIZE))#define CONFIG_DESC_wTOTAL_LENGTH (ConfigurationDescriptorData.ConfigDescfield.\ConfigurationDescriptor.wTotalLength)typedef union
{uint16_t w;struct BW{uint8_t msb;uint8_t lsb;}bw;
}
uint16_t_uint8_t;typedef union _USB_Setup
{uint32_t d8[2];struct _SetupPkt_Struc{uint8_t           bmRequestType;uint8_t           bRequest;uint16_t_uint8_t  wValue;uint16_t_uint8_t  wIndex;uint16_t_uint8_t  wLength;} b;
} 
USB_Setup_TypeDef;  typedef  struct  _DescHeader 
{uint8_t  bLength;       uint8_t  bDescriptorType;
} 
USBH_DescHeader_t;typedef struct _DeviceDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint16_t  bcdUSB;        /* USB Specification Number which device complies too */uint8_t   bDeviceClass;uint8_t   bDeviceSubClass; uint8_t   bDeviceProtocol;/* If equal to Zero, each interface specifies its own classcode if equal to 0xFF, the class code is vendor specified.Otherwise field is valid Class Code.*/uint8_t   bMaxPacketSize;uint16_t  idVendor;      /* Vendor ID (Assigned by USB Org) */uint16_t  idProduct;     /* Product ID (Assigned by Manufacturer) */uint16_t  bcdDevice;     /* Device Release Number */uint8_t   iManufacturer;  /* Index of Manufacturer String Descriptor */uint8_t   iProduct;       /* Index of Product String Descriptor */uint8_t   iSerialNumber;  /* Index of Serial Number String Descriptor */uint8_t   bNumConfigurations; /* Number of Possible Configurations */
}
USBH_DevDescTypeDef;typedef struct _EndpointDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint8_t   bEndpointAddress;   /* indicates what endpoint this descriptor is describing */uint8_t   bmAttributes;       /* specifies the transfer type. */uint16_t  wMaxPacketSize;    /* Maximum Packet Size this endpoint is capable of sending or receiving */  uint8_t   bInterval;          /* is used to specify the polling interval of certain transfers. */
}
USBH_EpDescTypeDef;typedef struct _InterfaceDescriptor
{uint8_t bLength;uint8_t bDescriptorType;uint8_t bInterfaceNumber;uint8_t bAlternateSetting;    /* Value used to select alternative setting */uint8_t bNumEndpoints;        /* Number of Endpoints used for this interface */uint8_t bInterfaceClass;      /* Class Code (Assigned by USB Org) */uint8_t bInterfaceSubClass;   /* Subclass Code (Assigned by USB Org) */uint8_t bInterfaceProtocol;   /* Protocol Code */uint8_t iInterface;           /* Index of String Descriptor Describing this interface */USBH_EpDescTypeDef               Ep_Desc[USBH_MAX_NUM_ENDPOINTS];   
}
USBH_InterfaceDescTypeDef;typedef struct _ConfigurationDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint16_t  wTotalLength;        /* Total Length of Data Returned */uint8_t   bNumInterfaces;       /* Number of Interfaces */uint8_t   bConfigurationValue;  /* Value to use as an argument to select this configuration*/uint8_t   iConfiguration;       /*Index of String Descriptor Describing this configuration */uint8_t   bmAttributes;         /* D7 Bus Powered , D6 Self Powered, D5 Remote Wakeup , D4..0 Reserved (0)*/uint8_t   bMaxPower;            /*Maximum Power Consumption */USBH_InterfaceDescTypeDef        Itf_Desc[USBH_MAX_NUM_INTERFACES];
}
USBH_CfgDescTypeDef;/* Following USB Host status */
typedef enum 
{USBH_OK   = 0,USBH_BUSY,USBH_FAIL,USBH_NOT_SUPPORTED,USBH_UNRECOVERED_ERROR,USBH_ERROR_SPEED_UNKNOWN,
}USBH_StatusTypeDef;/** @defgroup USBH_CORE_Exported_Types* @{*/typedef enum 
{USBH_SPEED_HIGH  = 0,USBH_SPEED_FULL  = 1,USBH_SPEED_LOW   = 2,  }USBH_SpeedTypeDef;/* Following states are used for gState */
typedef enum 
{HOST_IDLE =0,HOST_DEV_WAIT_FOR_ATTACHMENT,  HOST_DEV_ATTACHED,HOST_DEV_DISCONNECTED,  HOST_DETECT_DEVICE_SPEED,HOST_ENUMERATION,HOST_CLASS_REQUEST,  HOST_INPUT,HOST_SET_CONFIGURATION,HOST_CHECK_CLASS,HOST_CLASS,HOST_SUSPENDED,HOST_ABORT_STATE,  
}HOST_StateTypeDef;  /* Following states are used for EnumerationState */
typedef enum 
{ENUM_IDLE = 0,ENUM_GET_FULL_DEV_DESC,ENUM_SET_ADDR,ENUM_GET_CFG_DESC,ENUM_GET_FULL_CFG_DESC,ENUM_GET_MFC_STRING_DESC,ENUM_GET_PRODUCT_STRING_DESC,ENUM_GET_SERIALNUM_STRING_DESC,
} ENUM_StateTypeDef;  /* Following states are used for CtrlXferStateMachine */
typedef enum 
{CTRL_IDLE =0,CTRL_SETUP,CTRL_SETUP_WAIT,CTRL_DATA_IN,CTRL_DATA_IN_WAIT,CTRL_DATA_OUT,CTRL_DATA_OUT_WAIT,CTRL_STATUS_IN,CTRL_STATUS_IN_WAIT,CTRL_STATUS_OUT,CTRL_STATUS_OUT_WAIT,CTRL_ERROR,CTRL_STALLED,CTRL_COMPLETE    
}CTRL_StateTypeDef;  /* Following states are used for RequestState */
typedef enum 
{CMD_IDLE =0,CMD_SEND,CMD_WAIT
} CMD_StateTypeDef;  typedef enum {USBH_URB_IDLE = 0,USBH_URB_DONE,USBH_URB_NOTREADY,USBH_URB_NYET,  USBH_URB_ERROR,USBH_URB_STALL
}USBH_URBStateTypeDef;typedef enum
{USBH_PORT_EVENT = 1,  USBH_URB_EVENT,USBH_CONTROL_EVENT,    USBH_CLASS_EVENT,     USBH_STATE_CHANGED_EVENT,   
}
USBH_OSEventTypeDef;/* Control request structure */
typedef struct 
{uint8_t               pipe_in; uint8_t               pipe_out; uint8_t               pipe_size;  uint8_t               *buff;uint16_t              length;uint16_t              timer;  USB_Setup_TypeDef     setup;CTRL_StateTypeDef     state;  uint8_t               errorcount;  } USBH_CtrlTypeDef;/* Attached device structure */
typedef struct
{
#if (USBH_KEEP_CFG_DESCRIPTOR == 1)  uint8_t                           CfgDesc_Raw[USBH_MAX_SIZE_CONFIGURATION];
#endif  uint8_t                           Data[USBH_MAX_DATA_BUFFER];uint8_t                           address;uint8_t                           speed;__IO uint8_t                      is_connected;    uint8_t                           current_interface;   USBH_DevDescTypeDef               DevDesc;USBH_CfgDescTypeDef               CfgDesc; }USBH_DeviceTypeDef;struct _USBH_HandleTypeDef;/* USB Host Class structure */
typedef struct 
{const char          *Name;uint8_t              ClassCode;  USBH_StatusTypeDef  (*Init)        (struct _USBH_HandleTypeDef *phost);USBH_StatusTypeDef  (*DeInit)      (struct _USBH_HandleTypeDef *phost);USBH_StatusTypeDef  (*Requests)    (struct _USBH_HandleTypeDef *phost);  USBH_StatusTypeDef  (*BgndProcess) (struct _USBH_HandleTypeDef *phost);USBH_StatusTypeDef  (*SOFProcess) (struct _USBH_HandleTypeDef *phost);  void*                pData;
} USBH_ClassTypeDef;/* USB Host handle structure */
typedef struct _USBH_HandleTypeDef
{__IO HOST_StateTypeDef     gState;       /*  Host State Machine Value */ENUM_StateTypeDef     EnumState;    /* Enumeration state Machine */CMD_StateTypeDef      RequestState;       USBH_CtrlTypeDef      Control;USBH_DeviceTypeDef    device;USBH_ClassTypeDef*    pClass[USBH_MAX_NUM_SUPPORTED_CLASS];USBH_ClassTypeDef*    pActiveClass;uint32_t              ClassNumber;uint32_t              Pipes[15];__IO uint32_t         Timer;uint8_t               id;  void*                 pData;                  void                 (* pUser )(struct _USBH_HandleTypeDef *pHandle, uint8_t id);#if (USBH_USE_OS == 1)osMessageQId          os_event;   osThreadId            thread; 
#endif  } USBH_HandleTypeDef;#if  defined ( __GNUC__ )#ifndef __weak#define __weak   __attribute__((weak))#endif /* __weak */#ifndef __packed#define __packed __attribute__((__packed__))#endif /* __packed */
#endif /* __GNUC__ */#ifdef __cplusplus
}
#endif#endif /* USBH_DEF_H *//************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
View Code

 

现在我们先看看 USBH_DevDescTypeDef结构体

/* Attached device structure */
typedef struct
{
#if (USBH_KEEP_CFG_DESCRIPTOR == 1)  uint8_t                           CfgDesc_Raw[USBH_MAX_SIZE_CONFIGURATION];
#endif  uint8_t                           Data[USBH_MAX_DATA_BUFFER];uint8_t                           address;uint8_t                           speed;__IO uint8_t                      is_connected;    uint8_t                           current_interface;   USBH_DevDescTypeDef               DevDesc; USBH_CfgDescTypeDef               CfgDesc; }USBH_DeviceTypeDef;

 

在看 USBH_DevDescTypeDef DevDesc之前我们先看 Universal Serial Bus Specification Revision 2.0

Table 9-8. Standard Device Descriptor

会发现USBH_DevDescTypeDef DevDesc就是上面的表格

typedef struct _DeviceDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint16_t  bcdUSB;        /* USB Specification Number which device complies too */uint8_t   bDeviceClass;uint8_t   bDeviceSubClass; uint8_t   bDeviceProtocol;/* If equal to Zero, each interface specifies its own classcode if equal to 0xFF, the class code is vendor specified.Otherwise field is valid Class Code.*/uint8_t   bMaxPacketSize;uint16_t  idVendor;      /* Vendor ID (Assigned by USB Org) */uint16_t  idProduct;     /* Product ID (Assigned by Manufacturer) */uint16_t  bcdDevice;     /* Device Release Number */uint8_t   iManufacturer;  /* Index of Manufacturer String Descriptor */uint8_t   iProduct;       /* Index of Product String Descriptor */uint8_t   iSerialNumber;  /* Index of Serial Number String Descriptor */uint8_t   bNumConfigurations; /* Number of Possible Configurations */
}
USBH_DevDescTypeDef;

在看 USBH_CfgDescTypeDef CfgDesc;之前我们看看

Table 9-10. Standard Configuration Descriptor

 

 

但是我们USBH_CfgDescTypeDef CfgDesc中多了USBH_InterfaceDescTypeDef        Itf_Desc[USBH_MAX_NUM_INTERFACES]

typedef struct _ConfigurationDescriptor
{
  uint8_t   bLength;
  uint8_t   bDescriptorType;
  uint16_t  wTotalLength;        /* Total Length of Data Returned */
  uint8_t   bNumInterfaces;       /* Number of Interfaces */
  uint8_t   bConfigurationValue;  /* Value to use as an argument to select this configuration*/
  uint8_t   iConfiguration;       /*Index of String Descriptor Describing this configuration */
  uint8_t   bmAttributes;         /* D7 Bus Powered , D6 Self Powered, D5 Remote Wakeup , D4..0 Reserved (0)*/
  uint8_t   bMaxPower;            /*Maximum Power Consumption */
  USBH_InterfaceDescTypeDef        Itf_Desc[USBH_MAX_NUM_INTERFACES];
}
USBH_CfgDescTypeDef;

 我们继续翻书

Table 9-12. Standard Interface Descriptor

我们会发现USBH_InterfaceDescTypeDef中有多了 USBH_EpDescTypeDef Ep_Desc[USBH_MAX_NUM_ENDPOINTS];

typedef struct _InterfaceDescriptor
{uint8_t bLength;uint8_t bDescriptorType;uint8_t bInterfaceNumber;uint8_t bAlternateSetting;    /* Value used to select alternative setting */uint8_t bNumEndpoints;        /* Number of Endpoints used for this interface */uint8_t bInterfaceClass;      /* Class Code (Assigned by USB Org) */uint8_t bInterfaceSubClass;   /* Subclass Code (Assigned by USB Org) */uint8_t bInterfaceProtocol;   /* Protocol Code */uint8_t iInterface;           /* Index of String Descriptor Describing this interface */USBH_EpDescTypeDef               Ep_Desc[USBH_MAX_NUM_ENDPOINTS];   
}
USBH_InterfaceDescTypeDef;

 还是老规则先翻书

Table 9-13. Standard Endpoint Descriptor

typedef struct _EndpointDescriptor
{uint8_t   bLength;uint8_t   bDescriptorType;uint8_t   bEndpointAddress;   /* indicates what endpoint this descriptor is describing */uint8_t   bmAttributes;       /* specifies the transfer type. */uint16_t  wMaxPacketSize;    /* Maximum Packet Size this endpoint is capable of sending or receiving */  uint8_t   bInterval;          /* is used to specify the polling interval of certain transfers. */
}
USBH_EpDescTypeDef;

 

其实上面的描述符

 

 

 

 

 

 

转载于:https://www.cnblogs.com/libra13179/p/7219891.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# (类型、对象、线程栈和托管堆)在运行时的相互关系

在介绍运行时的关系之前,先从一些计算机基础只是入手,如下图: 该图展示了已加载CLR的一个windows进程,该进程可能有多个线程,线程创建时会分配到1MB的栈空间.栈空间用于向方法传递实参,方法定义的局部变量也在实参上,上图的右侧展示了线程的栈内存,栈从高位内存地址向地位内存地…

2019-08-01 纪中NOIP模拟赛B组

T1 [JZOJ2642] 游戏 题目描述 Alice和Bob在玩一个游戏&#xff0c;游戏是在一个N*N的矩阵上进行的&#xff0c;每个格子上都有一个正整数。当轮到Alice/Bob时&#xff0c;他/她可以选择最后一列或最后一行&#xff0c;并将其删除&#xff0c;但必须保证选择的这一行或这一列所有…

knn分类 knn_关于KNN的快速小课程

knn分类 knnAs the title says, here is a quick little lesson on how to construct a simple KNN model in SciKit-Learn. I will be using this dataset. It contains information on students’ academic performance.就像标题中所说的&#xff0c;这是关于如何在SciKit-Le…

office漏洞利用--获取shell

环境&#xff1a; kali系统&#xff0c; windows系统 流程&#xff1a; 在kali系统生成利用文件&#xff0c; kali系统下监听本地端口&#xff0c; windows系统打开doc文件&#xff0c;即可中招 第一种利用方式&#xff0c; 适合测试用&#xff1a; 从git下载代码&#xff1a; …

pandas之DataFrame合并merge

一、merge merge操作实现两个DataFrame之间的合并&#xff0c;类似于sql两个表之间的关联查询。merge的使用方法及参数解释如下&#xff1a; pd.merge(left, right, onNone, howinner, left_onNone, right_onNone, left_indexFalse, right_indexFalse,    sortFalse, suffi…

python ==字符串

字符串类型(str)&#xff1a; 包含在引号&#xff08;单&#xff0c;双&#xff0c;三&#xff09;里面&#xff0c;由一串字符组成。 用途&#xff1a;姓名&#xff0c;性别&#xff0c;地址&#xff0c;学历&#xff0c;密码 Name ‘zbk’ 取值: 首先要明确&#xff0c;字符…

认证鉴权与API权限控制在微服务架构中的设计与实现(一)

作者&#xff1a; [Aoho’s Blog] 引言&#xff1a; 本文系《认证鉴权与API权限控制在微服务架构中的设计与实现》系列的第一篇&#xff0c;本系列预计四篇文章讲解微服务下的认证鉴权与API权限控制的实现。 1. 背景 最近在做权限相关服务的开发&#xff0c;在系统微服务化后&a…

mac下完全卸载程序的方法

在国外网上看到的&#xff0c;觉得很好&#xff0c;不仅可以长卸载的知识&#xff0c;还对mac系统有更深的认识。比如偏好设置文件&#xff0c;我以前设置一个程序坏了&#xff0c;打不开了&#xff0c;怎么重装都打不开&#xff0c;后来才知道系统还保留着原来的偏好设置文件。…

机器学习集群_机器学习中的多合一集群技术在无监督学习中应该了解

机器学习集群Clustering algorithms are a powerful technique for machine learning on unsupervised data. The most common algorithms in machine learning are hierarchical clustering and K-Means clustering. These two algorithms are incredibly powerful when appli…

自考本科计算机要学什么,计算机自考本科需要考哪些科目

高科技发展时代&#xff0c;怎离得开计算机技术&#xff1f;小学生都要学编程了&#xff0c;未来趋势一目了然&#xff0c;所以如今在考虑提升学历的社会成人&#xff0c;多半也青睐于计算机专业&#xff0c;那么计算机自考本科需要考哪些科目&#xff1f;难不难&#xff1f;自…

非对称加密

2019独角兽企业重金招聘Python工程师标准>>> 概念 非对称加密算法需要两个密钥&#xff1a;公钥&#xff08;publickey&#xff09;和私钥&#xff08;privatekey&#xff09;。公钥与私钥是一对&#xff0c;如果用公钥对数据进行加密&#xff0c;只有用对应的私…

政府公开数据可视化_公开演讲如何帮助您设计更好的数据可视化

政府公开数据可视化What do good speeches and good data visualisation have in common? More than you may think.好的演讲和好的数据可视化有什么共同点&#xff1f; 超出您的想象。 Aristotle — the founding father of all things public speaking — believed that th…

C++字符串完全指引之一 —— Win32 字符编码 (转载)

C字符串完全指引之一 —— Win32 字符编码原著&#xff1a;Michael Dunn翻译&#xff1a;Chengjie Sun 原文出处&#xff1a;CodeProject&#xff1a;The Complete Guide to C Strings, Part I 引言  毫无疑问&#xff0c;我们都看到过像 TCHAR, std::string, BSTR 等各种各样…

网络计算机无法访问 请检查,局域网电脑无法访问,请检查来宾访问帐号是否开通...

局域网电脑无法访问&#xff0c;有时候并不是由于网络故障引起的&#xff0c;而是因为自身电脑的一些设置问题&#xff0c;例如之前谈过的网络参数设置不对造成局域网电脑无法访问。今天分析另一个电脑设置的因素&#xff0c;它也会导致局域网电脑无法访问&#xff0c;那就是宾…

雷军的金山云D轮获3亿美元!投后估值达19亿美金

12月12日&#xff0c;雷军旗下金山云宣布D轮完成3亿美元融资&#xff0c;金额为云行业单轮融资最高。至此金山云投后估值达到19亿美元&#xff0c;成为国内估值最高的独立云服务商。金山集团相关公告显示&#xff0c;金山云在本轮融资中总计发行3.535亿股D系列优先股。骊悦投资…

转:利用深度学习方法进行情感分析以及在海航舆情云平台的实践

http://geek.csdn.net/news/detail/139152 本文主要为大家介绍深度学习算法在自然语言处理任务中的应用——包括算法的原理是什么&#xff0c;相比于其他算法它具有什么优势&#xff0c;以及如何使用深度学习算法进行情感分析。 原理解析 在讲算法之前&#xff0c;我们需要先剖…

消费者行为分析_消费者行为分析-是否点击广告?

消费者行为分析什么是消费者行为&#xff1f; (What is Consumer Behavior?) consumer behavior is the study of individuals, groups, or organizations and all the activities associated with the purchase, use, and disposal of goods and services, and how the consu…

魅族mx5游戏模式小熊猫_您不知道的5大熊猫技巧

魅族mx5游戏模式小熊猫重点 (Top highlight)I’ve been using pandas for years and each time I feel I am typing too much, I google it and I usually find a new pandas trick! I learned about these functions recently and I deem them essential because of ease of u…

非常详细的Django使用Token(转)

基于Token的身份验证 在实现登录功能的时候,正常的B/S应用都会使用cookiesession的方式来做身份验证,后台直接向cookie中写数据,但是由于移动端的存在,移动端是没有cookie机制的,所以使用token可以实现移动端和客户端的token通信。 验证流程 整个基于Token的验证流程如下: 客户…

数据科学中的数据可视化

数据可视化简介 (Introduction to Data Visualization) Data visualization is the process of creating interactive visuals to understand trends, variations, and derive meaningful insights from the data. Data visualization is used mainly for data checking and cl…