主要内容本章主要讲解libdrm相关结构体的说明。Mode相关结构体drmModeRestypedef struct _drmModeRes { int count_fbs; uint32_t *fbs; int count_crtcs; uint32_t *crtcs; int count_connectors; uint32_t *connectors; int count_encoders; uint32_t *encoders; uint32_t min_width, max_width; uint32_t min_height, max_height; } , *drmModeResPtr;drmModeModeInfotypedef struct _drmModeModeInfo { uint32_t clock; uint16_t hdisplay, hsync_start, hsync_end, htotal, hskew; uint16_t vdisplay, vsync_start, vsync_end, vtotal, vscan; uint32_t vrefresh; uint32_t flags; uint32_t type; char name[DRM_DISPLAY_MODE_LEN]; } drmModeModeInfo, *drmModeModeInfoPtr;drmModeFBtypedef struct _drmModeFB { uint32_t fb_id; uint32_t width, height; uint32_t pitch; uint32_t bpp; uint32_t depth; /* driver specific handle */ uint32_t handle; } drmModeFB, *drmModeFBPtr;drmModeFB2typedef struct _drmModeFB2 { uint32_t fb_id; uint32_t width, height; uint32_t pixel_format; /* fourcc code from drm_fourcc.h */ uint64_t modifier; /* applies to all buffers */ uint32_t flags; /* per-plane GEM handle; may be duplicate entries for multiple planes */ uint32_t handles[4]; uint32_t pitches[4]; /* bytes */ uint32_t offsets[4]; /* bytes */ } drmModeFB2, *drmModeFB2Ptr;drmModePropertyBlobRestypedef struct _drmModePropertyBlob { uint32_t id; uint32_t length; void *data; } drmModePropertyBlobRes, *drmModePropertyBlobPtr;drmModePropertyRestypedef struct _drmModeProperty { uint32_t prop_id; uint32_t flags; char name[DRM_PROP_NAME_LEN]; int count_values; uint64_t *values; /* store the blob lengths */ int count_enums; struct drm_mode_property_enum *enums; int count_blobs; uint32_t *blob_ids; /* store the blob IDs */ } drmModePropertyRes, *drmModePropertyPtr;drmModeCrtctypedef struct _drmModeCrtc { uint32_t crtc_id; uint32_t buffer_id; /** FB id to connect to 0 disconnect */ uint32_t x, y; /** Position on the framebuffer */ uint32_t width, height; int mode_valid; drmModeModeInfo mode; int gamma_size; /** Number of gamma stops */ } drmModeCrtc, *drmModeCrtcPtr;drmModeEncodertypedef struct _drmModeEncoder { uint32_t encoder_id; uint32_t encoder_type; uint32_t crtc_id; uint32_t possible_crtcs; uint32_t possible_clones; } drmModeEncoder, *drmModeEncoderPtr;drmModeConnectortypedef struct _drmModeConnector { uint32_t connector_id; uint32_t encoder_id; /** Encoder currently connected to */ uint32_t connector_type; uint32_t connector_type_id; drmModeConnection connection; uint32_t mmWidth, mmHeight; /** HxW in millimeters */ drmModeSubPixel subpixel; int count_modes; drmModeModeInfoPtr modes; int count_props; uint32_t *props; /** List of property ids */ uint64_t *prop_values; /** List of property values */ int count_encoders; uint32_t *encoders; /** List of encoder ids */ } drmModeConnector, *drmModeConnectorPtr;drmModeObjectPropertiestypedef struct _drmModeObjectProperties { uint32_t count_props; uint32_t *props; uint64_t *prop_values; } drmModeObjectProperties, *drmModeObjectPropertiesPtr;drmModeFormatModifierIteratortypedef struct _drmModeFormatModifierIterator { uint32_t fmt_idx, mod_idx; uint32_t fmt; uint64_t mod; } drmModeFormatModifierIterator;drmModePlanetypedef struct _drmModePlane { uint32_t count_formats; uint32_t *formats; uint32_t plane_id; uint32_t crtc_id; uint32_t fb_id; uint32_t crtc_x, crtc_y; uint32_t x, y; uint32_t possible_crtcs; uint32_t gamma_size; } drmModePlane, *drmModePlanePtr;DRM相关结构体drmVersiontypedef struct _drmVersion { int version_major; /** Major version */ int version_minor; /** Minor version */ int version_patchlevel; /** Patch level */ int name_len; /** Length of name buffer */ char *name; /** Name of driver */ int date_len; /** Length of date buffer */ char *date; /** User-space buffer to hold date */ int desc_len; /** Length of desc buffer */ char *desc; /** User-space buffer to hold desc */ } drmVersion, *drmVersionPtr;drmStatsTtypedef struct _drmStats { unsigned long count; /** Number of data */ struct { unsigned long value; /** Value from kernel */ const char *long_format; /** Suggested format for long_name */ const char *long_name; /** Long name for value */ const char *rate_format; /** Suggested format for rate_name */ const char *rate_name; /** Short name for value per second */ int isvalue; /** True if value (vs. counter) */ const char *mult_names; /** Multiplier names (e.g., KGM) */ int mult; /** Multiplier value (e.g., 1024) */ int verbose; /** Suggest only in verbose output */ } data[15]; } drmStatsT;drmBufDesctypedef struct _drmBufDesc { int count; /** Number of buffers of this size */ int size; /** Size in bytes */ int low_mark; /** Low water mark */ int high_mark; /** High water mark */ } drmBufDesc, *drmBufDescPtr;drmBufInfotypedef struct _drmBufInfo { int count; /** Number of buffers described in list */ drmBufDescPtr list; /** List of buffer descriptions */ } drmBufInfo, *drmBufInfoPtr;drmBuftypedef struct _drmBuf { int idx; /** Index into the master buffer list */ int total; /** Buffer size */ int used; /** Amount of buffer in use (for DMA) */ drmAddress address; /** Address */ } drmBuf, *drmBufPtr;drmBufMaptypedef struct _drmBufMap { int count; /** Number of buffers mapped */ drmBufPtr list; /** Buffers */ } drmBufMap, *drmBufMapPtr;drmLocktypedef struct _drmLock { volatile unsigned int lock; char padding[60]; /* This is big enough for most current (and future?) architectures: DEC Alpha: 32 bytes Intel Merced: ? Intel P5/PPro/PII/PIII: 32 bytes Intel StrongARM: 32 bytes Intel i386/i486: 16 bytes MIPS: 32 bytes (?) Motorola 68k: 16 bytes Motorola PowerPC: 32 bytes Sun SPARC: 32 bytes */ } drmLock, *drmLockPtr;drmDMAReqtypedef struct _drmDMAReq { drm_context_t context; /** Context handle */ int send_count; /** Number of buffers to send */ int *send_list; /** List of handles to buffers */ int *send_sizes; /** Lengths of data to send, in bytes */ drmDMAFlags flags; /** Flags */ int request_count; /** Number of buffers requested */ int request_size; /** Desired size of buffers requested */ int *request_list; /** Buffer information */ int *request_sizes; /** Minimum acceptable sizes */ int granted_count; /** Number of buffers granted at this size */ } drmDMAReq, *drmDMAReqPtr;drmRegiontypedef struct _drmRegion { drm_handle_t handle; unsigned int offset; drmSize size; drmAddress map; } drmRegion, *drmRegionPtr;drmTextureRegiontypedef struct _drmTextureRegion { unsigned char next; unsigned char prev; unsigned char in_use; unsigned char padding; /** Explicitly pad this out */ unsigned int age; } drmTextureRegion, *drmTextureRegionPtr;drmVBlankReqtypedef struct _drmVBlankReq { drmVBlankSeqType type; unsigned int sequence; unsigned long signal; } drmVBlankReq, *drmVBlankReqPtr;drmVBlankReplytypedef struct _drmVBlankReply { drmVBlankSeqType type; unsigned int sequence; long tval_sec; long tval_usec; } drmVBlankReply, *drmVBlankReplyPtr;drmVBlanktypedef union _drmVBlank { drmVBlankReq request; drmVBlankReply reply; } drmVBlank, *drmVBlankPtr;drmSetVersiontypedef struct _drmSetVersion { int drm_di_major; int drm_di_minor; int drm_dd_major; int drm_dd_minor; } drmSetVersion, *drmSetVersionPtr;drmPciBusInfotypedef struct _drmPciBusInfo { uint16_t domain; uint8_t bus; uint8_t dev; uint8_t func; } drmPciBusInfo, *drmPciBusInfoPtr;drmPciDeviceInfotypedef struct _drmPciDeviceInfo { uint16_t vendor_id; uint16_t device_id; uint16_t subvendor_id; uint16_t subdevice_id; uint8_t revision_id; } drmPciDeviceInfo, *drmPciDeviceInfoPtr;drmUsbBusInfotypedef struct _drmUsbBusInfo { uint8_t bus; uint8_t dev; } drmUsbBusInfo, *drmUsbBusInfoPtr;drmUsbDeviceInfotypedef struct _drmUsbDeviceInfo { uint16_t vendor; uint16_t product; } drmUsbDeviceInfo, *drmUsbDeviceInfoPtr;drmPlatformBusInfotypedef struct _drmPlatformBusInfo { char fullname[DRM_PLATFORM_DEVICE_NAME_LEN]; } drmPlatformBusInfo, *drmPlatformBusInfoPtr;drmPlatformDeviceInfotypedef struct _drmPlatformDeviceInfo { char **compatible; /* NULL terminated list of compatible strings */ } drmPlatformDeviceInfo, *drmPlatformDeviceInfoPtr;drmHost1xBusInfotypedef struct _drmHost1xBusInfo { char fullname[DRM_HOST1X_DEVICE_NAME_LEN]; } drmHost1xBusInfo, *drmHost1xBusInfoPtr;drmHost1xDeviceInfotypedef struct _drmHost1xDeviceInfo { char **compatible; /* NULL terminated list of compatible strings */ } drmHost1xDeviceInfo, *drmHost1xDeviceInfoPtr;drmDevicetypedef struct _drmDevice { char **nodes; /* DRM_NODE_MAX sized array */ int available_nodes; /* DRM_NODE_* bitmask */ int bustype; union { drmPciBusInfoPtr pci; drmUsbBusInfoPtr usb; drmPlatformBusInfoPtr platform; drmHost1xBusInfoPtr host1x; } businfo; union { drmPciDeviceInfoPtr pci; drmUsbDeviceInfoPtr usb; drmPlatformDeviceInfoPtr platform; drmHost1xDeviceInfoPtr host1x; } deviceinfo; } drmDevice, *drmDevicePtr;Hash表相关结构体HashBuckettypedef struct HashBucket { unsigned long key; void *value; struct HashBucket *next; } HashBucket, *HashBucketPtr;HashTabletypedef struct HashTable { unsigned long magic; unsigned long entries; unsigned long hits; /* At top of linked list */ unsigned long partials; /* Not at top of linked list */ unsigned long misses; /* Not in table */ HashBucketPtr buckets[HASH_SIZE]; int p0; HashBucketPtr p1; } HashTable, *HashTablePtr;Random相关结构体RandomStatetypedef struct RandomState { unsigned long magic; unsigned long a; unsigned long m; unsigned long q; /* m div a */ unsigned long r; /* m mod a */ unsigned long check; unsigned long seed; } RandomState;Skip List相关结构体SLEntrytypedef struct SLEntry { unsigned long magic; /* SL_ENTRY_MAGIC */ unsigned long key; void *value; int levels; struct SLEntry *forward[1]; /* variable sized array */ } SLEntry, *SLEntryPtr;SkipListtypedef struct SkipList { unsigned long magic; /* SL_LIST_MAGIC */ int level; int count; SLEntryPtr head; SLEntryPtr p0; /* Position for iteration */ } SkipList, *SkipListPtr;
企业数字化 ERP 产品动态
相关推荐
Qt自定义委托实现定制输入的效果 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:02:01
STM32嵌入式开发入门到实战:从芯片选型到项目避坑全指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/9 9:40:47
ESP32-S3 vs C3 Mini:PSRAM与USB选型指南,避开驱动坑 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 19:58:08
电工证的报考年龄要求值不值得考?安阳新手必看避坑指南 电工证的报考年龄要求值不值得考?安阳新手必看避坑指南 之前考的证在外省能不能转过来?其实, 电工证的报考年龄要求 是不少新手第一次报考时最关心的问题之一。很多人担心自己年纪大了,会不会被拒之门外,但事实并非如此。在河南安阳,像你这样的初次报… · 2026/11/11 13:33:42
低压电工证三相交流培训机构怎么选?内部消息教你避开复审陷阱 低压电工证三相交流培训机构怎么选?内部消息教你避开复审陷阱 证书过期了不知道怎么复审延期?很多人压根不知道低压电工证三相交流的操作证还能延期,更别说怎么操作了。特别是像我这样在濮阳做项目现场管理员的,经常接触各种特种作业人员,发现不少同事因… · 2026/11/11 13:33:42
嵊州考电工证培训机构怎么选?2026河南最新政策全解析 嵊州考电工证培训机构怎么选?2026河南最新政策全解析 急需特种作业证才能上岗找工作,这事儿真的不能再拖了。尤其在2026河南最新政策实施后,特种作业证的报考流程、考试内容和持证要求都有了新的变化。如果你在嵊州,想找一家靠谱的考电工证培训机… · 2026/11/11 13:33:42
诏安电工证值不值得考?工地太忙根本没时间复习考试 诏安电工证值不值得考?工地太忙根本没时间复习考试 工地太忙根本没时间复习考试,这是很多一线电工的共同心声。特别是在诏安这样的施工活跃地区,电工证是从事电工作业的硬门槛。但问题来了—— 诏安电工证值不值得考… · 2026/11/11 13:33:42
女电工作业日常怎么考?学历不高怕报不上名?其实你也可以! 女电工作业日常怎么考?学历不高怕报不上名?其实你也可以! 你可能正坐在家里的沙发上,看着朋友圈里的“电工小姐姐”在施工现场穿梭,心里想着: 学历不高怕报不上名 ,我真的能考电工证吗? 多少钱… · 2026/11/11 13:33:42
山东聊城电工证查询最新内部消息,别再被中介坑了 山东聊城电工证查询最新内部消息,别再被中介坑了 不知道去哪报名怕被中介坑?山东聊城电工证查询成了很多人的刚需,但信息混乱、真假难辨,一不小心就踩坑。最近有不少人私信我,说在聊城找电工证培训机构,结果要么被坑钱,要么证书根本查不到。其实这事儿… · 2026/11/11 13:32:42
电工证丢失还能补吗?千万别踩坑,丢了证等于失业 电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/11 12:18:07
电力电缆作业证直播报名入口与办理流程良心建议 电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43
_中职电工证最新政策解读 中职电工证在哪考?工地太忙根本没时间复习考试的救星来了 工地太忙根本没时间复习考试,这是很多正在备考 中职电工证 的建筑工友的真实写照。你不是不想考,而是真的没时间。但别担心,这期内容是 新乡初次报考人员… · 2026/11/11 0:00:52
昆明电工证培训价格值不值得考?老电工告诉你真相 昆明电工证培训价格值不值得考?老电工告诉你真相 之前考的证在外省能不能转过来?这个问题是很多在外地打工、换城市生活、或者是想在昆明发展的朋友最关心的。尤其是现在云南发展快,很多企业都在招持证上岗的电工,如果你手头有证但不在本地,那这个证是不… · 2026/11/11 0:00:52
特种电缆张工网上查询全攻略:外省证如何转过来 特种电缆张工网上查询全攻略:外省证如何转过来 之前考的证在外省能不能转过来?这是很多特种作业从业者最关心的问题,尤其是像特种电缆张工这类证书,直接关系到日常工作是否合规、能否顺利晋升。很多小伙伴因为证书归属地的问题,陷入职业发展的瓶颈,甚至… · 2026/11/11 0:00:52
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47