-
Notifications
You must be signed in to change notification settings - Fork 95
/
Copy pathModify-DSDT-to-achieve-power-display-method.html
317 lines (284 loc) · 56.3 KB
/
Modify-DSDT-to-achieve-power-display-method.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
<!DOCTYPE html><html class="theme-next muse use-motion" lang="zh-CN"><head><meta name="generator" content="Hexo 3.8.0"><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=2"><meta name="theme-color" content="#222"><script src="//fastly.jsdelivr.net/npm/pace-js@1.0.2/pace.min.js"></script><link href="/lib/pace/pace-theme-corner-indicator.min.css?v=1.0.2" rel="stylesheet"><meta name="google-site-verification" content="sDeZZSmv4NPbU3sXi1IL5l8PiZt1wVqR5EKUsxOjruY"><link href="https://fastly.jsdelivr.net/npm/@fancyapps/fancybox@3.2.5/dist/jquery.fancybox.min.css" rel="stylesheet" type="text/css"><link href="//fonts.googleapis.com/css?family=Noto Serif SC:300,300italic,400,400italic,700,700italic|Noto Serif SC:300,300italic,400,400italic,700,700italic|Roboto Mono:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css"><link href="//fastly.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"><link href="/css/main.css?v=6.6.0" rel="stylesheet" type="text/css"><link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png?v=6.6.0"><link rel="icon" type="image/png" sizes="32x32" href="/images/favicon.png?v=6.6.0"><link rel="icon" type="image/png" sizes="16x16" href="/images/favicon.png?v=6.6.0"><link rel="mask-icon" href="/images/logo.svg?v=6.6.0" color="#222"><script id="hexo.configurations">var NexT=window.NexT||{},CONFIG={root:"/",scheme:"Muse",version:"6.6.0",sidebar:{position:"left",display:"hide",offset:12,b2t:!1,scrollpercent:!0,onmobile:!0},fancybox:!0,fastclick:!1,lazyload:!1,tabs:!0,motion:{enable:!0,async:!1,transition:{post_block:"fadeIn",post_header:"slideDownIn",post_body:"slideDownIn",coll_header:"slideLeftIn",sidebar:"slideUpIn"}},algolia:{applicationID:"",apiKey:"",indexName:"",hits:{per_page:10},labels:{input_placeholder:"Search for Posts",hits_empty:"We didn't find any results for the search: ${query}",hits_stats:"${hits} results found in ${time} ms"}}}</script><meta name="description" content="这篇帖子主要来源于论坛https://github.com/RehabMan/Laptop-DSDT-Patch。但是很多笔记本并未出现在这个补丁源里,并且我们要了解补丁的意思才知道它适不适合我们的电脑。 电量补丁制作过程我们需要确定DSDT里的哪些部分需要改。用MaciASL软件打开DSDT,搜索**EmbeddedControl。在DSDT里,可能会有一到多个。同时注意一个计算机名字如下图为E"><meta name="keywords" content="教程,电池,电量,拆分"><meta property="og:type" content="article"><meta property="og:title" content="修改DSDT实现电量显示方法【转载】"><meta property="og:url" content="https://blog.daliansky.net/Modify-DSDT-to-achieve-power-display-method.html"><meta property="og:site_name" content="黑果小兵的部落阁"><meta property="og:description" content="这篇帖子主要来源于论坛https://github.com/RehabMan/Laptop-DSDT-Patch。但是很多笔记本并未出现在这个补丁源里,并且我们要了解补丁的意思才知道它适不适合我们的电脑。 电量补丁制作过程我们需要确定DSDT里的哪些部分需要改。用MaciASL软件打开DSDT,搜索**EmbeddedControl。在DSDT里,可能会有一到多个。同时注意一个计算机名字如下图为E"><meta property="og:locale" content="zh-CN"><meta property="og:updated_time" content="2020-09-12T05:53:14.000Z"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="修改DSDT实现电量显示方法【转载】"><meta name="twitter:description" content="这篇帖子主要来源于论坛https://github.com/RehabMan/Laptop-DSDT-Patch。但是很多笔记本并未出现在这个补丁源里,并且我们要了解补丁的意思才知道它适不适合我们的电脑。 电量补丁制作过程我们需要确定DSDT里的哪些部分需要改。用MaciASL软件打开DSDT,搜索**EmbeddedControl。在DSDT里,可能会有一到多个。同时注意一个计算机名字如下图为E"><link rel="alternate" href="/atom.xml" title="黑果小兵的部落阁" type="application/atom+xml"><link rel="canonical" href="https://blog.daliansky.net/Modify-DSDT-to-achieve-power-display-method.html"><script id="page.configurations">CONFIG.page={sidebar:""}</script><title>修改DSDT实现电量显示方法【转载】 | 黑果小兵的部落阁</title><noscript><style>.sidebar-inner,.use-motion .brand,.use-motion .collection-title,.use-motion .comments,.use-motion .menu-item,.use-motion .motion-element,.use-motion .pagination,.use-motion .post-block,.use-motion .post-body,.use-motion .post-header{opacity:initial}.use-motion .logo,.use-motion .site-subtitle,.use-motion .site-title{opacity:initial;top:initial}.use-motion .logo-line-before i{left:initial}.use-motion .logo-line-after i{right:initial}</style></noscript></head><body itemscope itemtype="http://schema.org/WebPage" lang="zh-CN"><div class="container sidebar-position-left page-post-detail"><div class="headband"></div><header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader"><div class="header-inner"><div class="site-brand-wrapper"><div class="site-meta"><div class="custom-logo-site-title"><a href="/" class="brand" rel="start"><span class="logo-line-before"><i></i></span> <span class="site-title">黑果小兵的部落阁</span> <span class="logo-line-after"><i></i></span></a></div><p class="site-subtitle">Hackintosh安装镜像、教程及经验分享</p></div><div class="site-nav-toggle"><button aria-label="切换导航栏"><span class="btn-bar"></span> <span class="btn-bar"></span> <span class="btn-bar"></span></button></div></div><nav class="site-nav"><ul id="menu" class="menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="menu-item-icon fa fa-fw fa-home"></i><br>首页</a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="menu-item-icon fa fa-fw fa-archive"></i><br>归档</a></li><li class="menu-item menu-item-categories"><a href="/categories/" rel="section"><i class="menu-item-icon fa fa-fw fa-th"></i><br>分类</a></li><li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="menu-item-icon fa fa-fw fa-tags"></i><br>标签</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="menu-item-icon fa fa-fw fa-user"></i><br>关于</a></li><li class="menu-item menu-item-search"><a href="javascript:;" class="popup-trigger"><i class="menu-item-icon fa fa-search fa-fw"></i><br>搜索</a></li></ul><div class="site-search"><div class="popup search-popup local-search-popup"><div class="local-search-header clearfix"><span class="search-icon"><i class="fa fa-search"></i> </span><span class="popup-btn-close"><i class="fa fa-times-circle"></i></span><div class="local-search-input-wrapper"><input autocomplete="off" placeholder="搜索..." spellcheck="false" type="text" id="local-search-input"></div></div><div id="local-search-result"></div></div></div></nav></div></header><a href="https://github.com/daliansky" class="github-corner" title="Follow me on GitHub" aria-label="Follow me on GitHub" rel="noopener" target="_blank"><svg width="80" height="80" viewbox="0 0 250 250" style="fill:#222;color:#fff;position:absolute;top:0;border:0;right:0" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"/><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin:130px 106px" class="octo-arm"/><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"/></svg></a><main id="main" class="main"><div class="main-inner"><div class="content-wrap"><div id="content" class="content"><div id="posts" class="posts-expand"><div class="reading-progress-bar"></div><article class="post post-type-normal" itemscope itemtype="http://schema.org/Article"><div class="post-block"><link itemprop="mainEntityOfPage" href="https://blog.daliansky.net/Modify-DSDT-to-achieve-power-display-method.html"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="name" content="黑果小兵"><meta itemprop="description" content="黑果小兵,daliansky,blog.daliansky.net,macOS,Hackintosh,黑苹果,linux"><meta itemprop="image" content="/images/avatar.png"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="黑果小兵的部落阁"></span><header class="post-header"><h1 class="post-title" itemprop="name headline">修改DSDT实现电量显示方法【转载】</h1><div class="post-meta"><span class="post-time"><span class="post-meta-item-icon"><i class="fa fa-calendar-o"></i> </span><time title="创建时间:2018-03-15 12:52:20" itemprop="dateCreated datePublished" datetime="2018-03-15T12:52:20+08:00">2018-03-15</time> <span class="post-meta-divider">|</span> <span class="post-meta-item-icon"><i class="fa fa-calendar-check-o"></i> </span><time title="修改时间:2020-09-12 13:53:14" itemprop="dateModified" datetime="2020-09-12T13:53:14+08:00">2020-09-12</time> </span><span class="post-category"><span class="post-meta-divider">|</span> <span class="post-meta-item-icon"><i class="fa fa-folder-o"></i> </span><span itemprop="about" itemscope itemtype="http://schema.org/Thing"><a href="/categories/教程/" itemprop="url" rel="index"><span itemprop="name">教程</span></a></span> </span><span class="post-meta-divider">|</span> <span class="post-meta-item-icon" title="阅读次数"><i class="fa fa-eye"></i> <span class="busuanzi-value" id="busuanzi_value_page_pv"></span></span><div class="post-symbolscount"><span class="post-meta-item-icon"><i class="fa fa-file-word-o"></i> </span><span title="本文字数">8.9k</span> <span class="post-meta-divider">|</span> <span class="post-meta-item-icon"><i class="fa fa-clock-o"></i> </span><span title="阅读时长">16 分钟</span></div></div></header><div class="post-body" itemprop="articleBody"><div><div><div class="post-gallery"></div></div></div><blockquote><p>这篇帖子主要来源于论坛https://github.com/RehabMan/Laptop-DSDT-Patch。</p><p>但是很多笔记本并未出现在这个补丁源里,并且我们要了解补丁的意思才知道它适不适合我们的电脑。</p></blockquote><h2 id="电量补丁制作过程"><a class="markdownIt-Anchor" href="#电量补丁制作过程"></a> 电量补丁制作过程</h2><ol><li><p>我们需要确定DSDT里的哪些部分需要改。</p><p>用<code>MaciASL</code>软件打开DSDT,搜索**<code>EmbeddedControl</code><strong>。在<code>DSDT</code>里,可能会有一到多个。同时注意一个计算机名字如下图为</strong><code>EC0</code>**</p></li></ol><figure class="highlight haskell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">OperationRegion</span> (<span class="type">ECF2</span>, <span class="type">EmbeddedControl</span>, <span class="type">Zero</span>, <span class="number">0xFF</span>)</span><br></pre></td></tr></table></figure><p> 上面的代码,我们只需要关注<code>ec</code>域声明的名字,即**<code>ECF2</code><strong>(别的可能是<code>ECF0</code>等)。<br> 我们开始搜索</strong><code>Field(ECF2</code>**。</p><ol start="2"><li>我们需要查看Field里所有<strong>大于8位</strong>的元素,例如:</li></ol><figure class="highlight haskell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">Field</span> (<span class="type">ECF2</span>, <span class="type">ByteAcc</span>, <span class="type">Lock</span>, <span class="type">Preserve</span>)</span><br><span class="line"> {</span><br><span class="line"> <span class="type">Offset</span> (<span class="number">0x10</span>),</span><br><span class="line"> <span class="type">BDN0</span>, <span class="number">56</span>,</span><br><span class="line">...</span><br></pre></td></tr></table></figure><p> 可以看到**<code>BDN0</code>**是一个大于8位的字段。</p><p> 我们对其进行记录。之后我们要确定除了这里还有没有其他地方调用了这个字段。搜索他的名字:<strong><code>BDN0</code></strong>。如果**只有这里被用到则不用拆分可以删除记录,**如果除了这里还有其他地方用到,则进行记录。</p><p> 整理到如下的结果:</p><p> 可以看到我有意对16位 32位以及高于32位进行了一个空行的区分,大家也可以这样,这对下面的修改操作有着重要意义。</p><h3 id="补丁的制作方法"><a class="markdownIt-Anchor" href="#补丁的制作方法"></a> 补丁的制作方法</h3><h4 id="对于16位和32位字段的处理"><a class="markdownIt-Anchor" href="#对于16位和32位字段的处理"></a> 对于16位和32位字段的处理</h4><p>对于16位的<code>BDC0</code>,我么需要把它拆分为两部分(低字节,高字节)。在拆分的时候,<strong>需要注意两点</strong>:<br> 1.拆分后,它的名字应该是 4个字符 。不能多,也不能少。如图</p><ol><li>// 拆分前: BDC0, 16</li><li>DC00, 8,</li><li>DC01, 8,</li></ol><p>复制代码</p><p> 2.<strong>拆分后到名字不能已经出现在dsdt中(最好也不要与拆分到名字重复,虽然没什么问题,但是如果多次打这个补丁就会发生错误)</strong>,可以先想好几个名字,然后在dsdt中搜索,如果没有就可以。<br> 然后。重点来了,<strong>拆分16位字段的补丁结构</strong>。(这里只会拆分ec域内的名称)</p><ol><li>into device label H_EC code_regex BDC0,\s+16, replace_matched begin DC00,8,DC01,8, end;</li></ol><p>复制代码</p><p> 对于各部分的含义以及修改方法:<br> 1.into device label** H_EC**<br> 含义:针对H_EC这个设备操作。对于自己电脑的名称请查看<strong>制作过程第一步的截屏处</strong>。<br> 2.code_regex** BDC0,\s+16,**<br>含义:code_regex表示寻找后面的匹配项。 后面的BDC0,\s+16,是寻找的内容,对于小白,只要知道把<strong>BDC0</strong>替换成你所记录的16位名称即可。<br>相关解释:\s+表示多个空格。所以这句话的意思是搜索BDCO,16,<br> 个人建议:这一步中的最后的“,”个人觉得没必要加,因为如果这个数据出现在右括号前贼不会有这个“,”。<br> 3.replace_matched begin** DC00,8,DC01,8,** end;<br> 含义:replace_matched begin…end表示将前面搜索到的字段替换为省略后里的字段。**DC00,8,DC01,8,**即替换为的内容。这里DC00 DC01即你要改为的名 字。<br> 注意和上文的对应,如过上文按照我的建议不加最后的“,”则这里应为“<strong>DC00,8,DC01,8”</strong>!<br> 到了这里,我们已经可以自己写替换(或者说拆分)16位字段的补丁了。但是,对于示例DSDT,BDC0是被用到的字段,因此,只是拆分它是不行的。用到它的地方也需要修改。例如这些地方:</p><ol><li>Store (BDC0, Index (DerefOf (Index (Local0, 0x02)), Zero))</li><li>Store (ShiftRight (BDC0, 0x08), Index (DerefOf (Index (Local0, 0x02)), One))</li></ol><p>复制代码</p><p> 由于拆分,BDC0已经变成两个字段了,于是,我们需要1个工具方法来处理拆分后的字段。</p><ol><li>into method label B1B2 remove_entry;</li><li>into definitionblock code_regex . insert</li><li>begin</li><li>Method (B1B2, 2, NotSerialized)\n</li><li>{\n</li><li>Return(Or(Arg0, ShiftLeft(Arg1, 8)))\n</li><li>}\n</li><li>end;</li></ol><p>复制代码</p><p> 对于小白直接将这个加入加入你的补丁中就ok。<br> 对这个补丁的解读:<br> 1.into method label B1B2 remove_entry; 查找B1B2方法,如果有,删除它。<br> 2.into definitionblock code_regex . insert 把后面的内容插入DefinitionBlock { }(每个dsdt的第一个就是这个)内。<br> 对于dsdt内其他部分的修改,如下:上面是本身的效果,下面为修改结束的效果:</p><ol><li>Store (BDC0, Index (DerefOf (Index (Local0, 0x02)), Zero))</li><li>Store (ShiftRight (BDC0, 0x08), Index (DerefOf (Index (Local0, 0x02)), One))</li></ol><p>复制代码</p><ol><li>Store (B1B2(DC00,DC01), Index (DerefOf (Index (Local0, 0x02)), Zero))</li><li>Store(ShiftRight (B1B2(DC00,DC01), 0x08), Index (DerefOf (Index (Local0, 0x02)), One))</li></ol><p>复制代码</p><p> 于是有了这个补丁:</p><ol><li>into method label GBTI code_regex (BDC0, replaceall_matched begin (B1B2(DC00,DC01), end;</li></ol><p>复制代码</p><p> 主要介绍下几个参数:</p><p> 1.into method label <strong>GBTI</strong></p><p>这部分GBTI为dsdt出现的BDC0的方法,至于如何查看,点中你想要的参数,maciasl自然会显示,如下图:灰色部分即为你要修改为的名称,注意有些是有_的也要完全相同的加进去<br> 2.code_regex <strong>(BDC0,</strong></p><p>这部分(BDC0,与上面的查找相同,不过这部分并不能直接把BDC0改成你自己的方法就完事!!!举个例子:</p><ol><li>Store (^^PCI0.LPCB.EC0.XIF1, Index (PAK0, One))</li></ol><p>复制代码</p><p> 如果我要改这个中的XIF1应该怎么写? 应该写为:(^^PCI0.LPCB.EC0.XIF1,<br> 所以这个地方就是看自己的代码具体的情况,改成自己的形式,并且每个标点符号左边要加""<br> 3. replaceall_matched begin <strong>(B1B2(DC00,DC01),</strong> end;<br> 这部分括号内就是你要修改为的内容,还以2中例子,应该改成什么?<br> 应该改为:(B1B2(^<sup>PCI0.LPCB.EC0.XID1,</sup>^PCI0.LPCB.EC0.XID2),<br> 这个地方就是把B1B2括号内的两个参数改成你本身括号内的内容,并且把你想改的参数分别改掉。<br> **特别提醒:1.<strong><strong>以上都是对于在dsdt中,store(要修改参数,xxx)的形式</strong><br>** 如果出现store(xxx,要修改的参数)则我们要改前改后的形式如下:</strong></p><ol><li>Store (Arg0, ENCR)//修改前</li><li>Store (ShiftRight(Arg0,8),ENC2)</li><li>Store (Arg0,ENC1)</li></ol><p>复制代码</p><p> 具体代码请结合上处解释自行书写,另外 换行为/n,空格为/s。 2.<strong>如果出现Or (你要修改的参数,xxx,你要修改的参数)的形式则应该修改为如下形式:</strong></p><ol><li>Or (BATD, 0xC0, BATD)//修改前</li><li>Store(ShiftRight(Or(B1B2(BTD0,BTD1),0xC0),8), BTD1)</li><li>Store(Or(B1B2(BTD0,BTD1),0xC0), BTD0)</li></ol><p>复制代码</p><p> 3.<strong>如果出现****And (你要修改的参数,xxx,你要修改的参数)<strong><strong>的</strong></strong>形式则修改形式如下:</strong></p><ol><li>And (BATD, 0xFF3F, BATD)//修改前</li><li>Store(ShiftRight(And(B1B2(BTD0,BTD1),0xFF3F),8), BTD1)</li><li>Store(And(B1B2(BTD0,BTD1),0xFF3F), BTD0)</li></ol><p>复制代码</p><p> 至此,16位修改完毕,得到形如下补丁:</p><ol><li># 16-bit registers</li><li>into device label H_EC code_regex BDC0,\s+16 replace_matched begin DC00,8,DC01,8 end;</li><li>into device label H_EC code_regex BDC1,\s+16 replace_matched begin DC10,8,DC11,8 end;</li><li>into device label H_EC code_regex BFC0,\s+16 replace_matched begin FC00,8,FC01,8 end;</li><li>into device label H_EC code_regex BFC1,\s+16 replace_matched begin FC10,8,FC11,8 end;</li><li>into device label H_EC code_regex BDV0,\s+16 replace_matched begin DV00,8,DV01,8 end;</li><li>into device label H_EC code_regex BDV1,\s+16 replace_matched begin DV10,8,DV11,</li><li># fix 16-bit methods</li><li>into method label GBTI code_regex (BDC0, replaceall_matched begin (B1B2(DC00,DC01), end;</li><li>into method label GBTI code_regex (BDC1, replaceall_matched begin (B1B2(DC10,DC11), end;</li><li>into method label GBTI code_regex (BFC0, replaceall_matched begin (B1B2(FC00,FC01), end;</li><li>into method label GBTI code_regex (BFC1, replaceall_matched begin (B1B2(FC10,FC11), end;</li><li>into method label BTIF code_regex (BFC0, replaceall_matched begin (B1B2(FC00,FC01), end;</li><li>into method label BTIF code_regex (BFC1, replaceall_matched begin (B1B2(FC10,FC11), end;</li><li>into method label ITLB code_regex (BFC1, replaceall_matched begin (B1B2(FC10,FC11), end;</li></ol><p>复制代码</p><p>接着是32位字段的修改<br> 这是与16位类似的处理方法:直接打进去就好</p><ol><li>nto method label B1B4 remove_entry;</li><li>into definitionblock code_regex . insert</li><li>begin</li><li>Method (B1B4, 4, NotSerialized)\n</li><li>{\n</li><li> Store(Arg3, Local0)\n</li><li> Or(Arg2, ShiftLeft(Local0, 8), Local0)\n</li><li> Or(Arg1, ShiftLeft(Local0, 8), Local0)\n</li><li> Or(Arg0, ShiftLeft(Local0, 8), Local0)\n</li><li> Return(Local0)\n</li><li>}\n</li><li>end;</li></ol><p>复制代码</p><p> 32位的修改方法与16位差不多。形如:</p><ol><li># 32-bit registers</li><li>into device label H_EC code_regex BTY0,\s+32 replace_matched begin TY00,8,TY01,8,TY02,8,TY03,8 end;</li><li>into device label H_EC code_regex BTY1,\s+32 replace_matched begin TY10,8,TY11,8,TY12,8,TY13,8 end;</li><li># fix 32-bit methods</li><li>into method label GBTI code_regex (BTY0, replaceall_matched begin (B1B4(TY00,TY01,TY02,TY03), end;</li></ol><p>复制代码</p><p> 这部分不懂的去看16位的修改方法,完全相同,只是数据变成了四个!<strong>二、大于32位的字段补丁处理</strong><br><strong>对于大于32位的字段不用进行拆分操作,只需要将用到的地方进行处理就行了。</strong><br>** 我们先来认识个东西:偏移量。偏移量是啥? 看看图中的offset代表的就是偏移量。中间的咋算?**<br>** 偏移量逢8进1,所以在对嘴上面的offset往下加就可以得出,如图:**</p><ol><li>Offset (0x04),</li><li> CMCM, 8, //0x04</li><li> CMD1, 8, //0x05(8位是1字节,所以加1)</li><li> CMD2, 8, //0x06</li><li> CMD3, 8, //0x07</li><li> Offset (0x18), 这里空了一些,不用纠结,按原始DSDT给出的偏移量计算就好(会给开头的偏移量)</li><li> Offset (0x19),</li><li> SMST, 8, //0x19</li><li> MBMN, 80, //0x1A</li><li> MBPN, 96, //0x25 = 0x1A+A+1(0x1A是上一个的起始地址,A的得来:80除以8得10,也就是上一个占了10个字节,16进制表示就是A。 0x2A+A是它占到了哪个地址,它的下一个地址才是下一个开始,所以再加1。)</li><li> GPB1, 8, // 0x32 = 0x25 + C(96位占了12个字节)+1</li><li> GPB2, 8, //0x33</li><li> GPB3, 8, //0x34</li><li> GPB4, 8, //0x35</li></ol><p>复制代码</p><p> 另外上r神的方法:(其中的H_EC同上 请改为自己的设备名,不知道在呢?去看一!)</p><ol><li># utility methods to read/write buffers from/to EC</li><li>into method label RE1B parent_label H_EC remove_entry;</li><li>into method label RECB parent_label H_EC remove_entry;</li><li>into device label H_EC insert</li><li>begin</li><li>Method (RE1B, 1, NotSerialized)\n</li><li>{\n</li><li> OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n</li><li> Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n</li><li> Return(BYTE)\n</li><li>}\n</li><li>Method (RECB, 2, Serialized)\n</li><li>// Arg0 - offset in bytes from zero-based EC\n</li><li>// Arg1 - size of buffer in bits\n</li><li>{\n</li><li> ShiftRight(Arg1, 3, Arg1)\n</li><li> Name(TEMP, Buffer(Arg1) { })\n</li><li> Add(Arg0, Arg1, Arg1)\n</li><li> Store(0, Local0)\n</li><li> While (LLess(Arg0, Arg1))\n</li><li> {\n</li><li> Store(RE1B(Arg0), Index(TEMP, Local0))\n</li><li> Increment(Arg0)\n</li><li> Increment(Local0)\n</li><li> }\n</li><li> Return(TEMP)\n</li><li>}\n</li><li>end;</li></ol><p>复制代码</p><ol><li>into method label WE1B parent_label H_EC remove_entry;</li><li>into method label WECB parent_label H_EC remove_entry;</li><li>into device label H_EC insert</li><li>begin</li><li>Method (WE1B, 2, NotSerialized)\n</li><li>{\n</li><li> OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n</li><li> Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n</li><li> Store(Arg1, BYTE)\n</li><li>}\n</li><li>Method (WECB, 3, Serialized)\n</li><li>// Arg0 - offset in bytes from zero-based EC\n</li><li>// Arg1 - size of buffer in bits\n</li><li>// Arg2 - value to write\n</li><li>{\n</li><li> ShiftRight(Add(Arg1,7), 3, Arg1)\n</li><li> Name(TEMP, Buffer(Arg1) { })\n</li><li> Store(Arg2, TEMP)\n</li><li> Add(Arg0, Arg1, Arg1)\n</li><li> Store(0, Local0)\n</li><li> While (LLess(Arg0, Arg1))\n</li><li> {\n</li><li> WE1B(Arg0, DerefOf(Index(TEMP, Local0)))\n</li><li> Increment(Arg0)\n</li><li> Increment(Local0)\n</li><li> }\n</li><li>}\n</li><li>end;</li></ol><p>复制代码</p><p> 两个方法不用同时打,简单来说如果你要改的参数挨着左括号则用一,如果你改的参数离右括号进就用二! 修改形式:如图改法:</p><ol><li>Store(MBMN, XXXX) -> Store(RECB(0x1A, 80), XXXX)</li></ol><p>复制代码</p><p> 这时补丁就是</p><ol><li>into method label XXXX code_regex (MBMN, replaceall_matched begin (RECB(0x1A,80), end;</li><li>into method label XXXX code_regex (MBPN, replaceall_matched begin (RECB(0x25,96), end;</li></ol><p>复制代码</p><p> 对比16位改对应的位置 如果你的要改参数离右括号进则:</p><ol><li>Store (Arg3, _SB.PCI0.LPCB.EC0.SMD0) -> _SB.PCI0.LPCB.EC0.WECB(0x1C,264,Arg3)</li></ol><p>复制代码</p><p> 这时补丁则为:</p><ol><li>nto method label SMRW code_regex Store\s(Arg3,\s\_SB.PCI0.LPCB.EC0.SMD0) replaceall_matched begin \_SB.PCI0.LPCB.EC0.WECB(0x1C,264,Arg3) end;</li></ol><p>复制代码</p><p>最后总结下补丁结构:</p><ol><li># Tip: If you get a 0% battery status,you should also patch the Rehabman’s “Fix Mutex with non-zero SyncLevel” patch.</li><li># You also can patch the both of your computer’s battery patch and the Rehabman’s patch at one time.</li><li></li><li># 注意:如果打过电量补丁后,有获取的电池状态显示为0%的情况,还需要打 Rehabman的 “Fix Mutex with non-zero SyncLevel” 补丁。</li><li># 你也可以,一次性打好 自己电脑的电量补丁 和 Rehabman 的那个补丁。</li><li></li><li># ==== Field devide 字段拆分 ====</li><li></li><li># ==== Replace called method 替换调用方法 ====</li><li></li><li># ==== Data handling method 数据处理方法 ====</li></ol><p>复制代码</p><p>最后的解释:文中多次提到特殊情况和离括号的的远近不同的处理方法,这是为什么呢?<br>很简答的原因是sotre(A,B)是一个从左到右的操作,也就是将A写到B<br>所以如果A是你的参数则是读的操作,而如果是B则是写的操作,也就用到不同的方法。<br>而Or 的第三个参数,是把前两个数的计算结果,写入到第三个参数的意思。<br>And 的第三个参数,是把前两个数的计算结果,写入到第三个参数的意思。<br>不过能理解store就够了。<br>** 将整理好的补丁保存位txt格式就能打入了 软件中点patch。点open就行**<br>最后,特别感谢翻译贴和r神的帖子,也希望你们都能搞定电量显示的问题,另外,如果成功请回馈社会将补丁放于最上面所说帖子的补丁源!</p></div><div><div id="wechat_subscriber" style="display:block;padding:10px 0;margin:20px auto;width:100%;text-align:center"><a href="https://hackintosher.taobao.com"><img id="wechat_subscriber_qcode" src="/uploads/WeChatandShop.png" alt="黑果小兵 wechat" style="max-width:90%"></a><div>微信扫一扫,订阅/直达【黑果小兵的部落阁】</div></div></div><div class="updated"><svg xmlns="http://www.w3.org/2000/svg" width="130" height="20"><lineargradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></lineargradient><clippath id="a"><rect width="130" height="20" rx="3" fill="#fff"/></clippath><g clip-path="url(#a)"><path fill="#555" d="M0 0h55v20H0z"/><path fill="#97CA00" d="M55 0h75v20H55z"/><path fill="url(#b)" d="M0 0h130v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="Menlo,monospace" font-size="110"><text x="285" y="150" fill="#010101" fill-opacity=".3" textlength="450" transform="scale(.1)">更新日期</text><text x="285" y="140" textlength="450" transform="scale(.1)">更新日期</text><text x="915" y="150" fill="#010101" fill-opacity=".3" textlength="650" transform="scale(.1)">2020-09-12</text><text x="915" y="140" textlength="650" transform="scale(.1)">2020-09-12</text></g></svg></div><div><div><div style="text-align:center;color:#ccc;font-size:14px">-------------本文结束<i class="fa fa-apple"></i>感谢您的阅读-------------</div></div></div><div><div style="padding:10px 0;margin:20px auto;width:90%;text-align:center"><button id="rewardButton" disable="enable" onclick='var qr=document.getElementById("QR");"none"===qr.style.display?qr.style.display="block":qr.style.display="none"'><span>打赏</span></button><div>如果文章对您有帮助,就请站长喝杯咖啡吧 ´◡`</div><div id="QR" style="display:none"><div id="wechat" style="display:inline-block"><img id="wechat_qr" src="/images/wechatpay.jpg" alt="黑果小兵 微信支付"><p>微信支付</p></div><div id="alipay" style="display:inline-block"><img id="alipay_qr" src="/images/alipay.jpg" alt="黑果小兵 支付宝"><p>支付宝</p></div></div></div></div><div><div><ul class="qq-qun"><div><p></p><h2>QQ群列表:</h2><p></p><p>630724380 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=JyGkfKK7U3Xq3TDtpqKOTq_gW7SBg4Uh&jump_from=webapi" target="_blank" rel="noopener">黑果小兵黑苹果技术群7</a> 2000人 新开群<br>713810838 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=e8E-1Ge2lCoBSTlj8Y4zMxX7l7-V63Iv&jump_from=webapi" target="_blank" rel="noopener">黑果小兵黑苹果技术群8</a> 2000人 新开群<br>688324116 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=Fp4HZ5e8A61oCu0GMS5YUqP6COc43-AO&jump_from=webapi" target="_blank" rel="noopener">一起黑苹果</a> 2000人<br>331686786 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=No8zvDfvDicT-GfSApw1RMBI-3MQ7zM3&jump_from=webapi" target="_blank" rel="noopener">一起吃苹果</a> 2000人<br>257995340 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=acztqL9efoqAOoptc_3moZ9b3Sgczu9_&jump_from=webapi" target="_blank" rel="noopener">一起啃苹果</a> 2000人群 远景报备群<br>875482673 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=aZNyoRum_er2mruqmnbX_93ncHNgsyak&jump_from=webapi" target="_blank" rel="noopener">黑果小兵黑苹果技术群</a> 2000人<br>1058822256 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=1sIT0BDaejgr9t1Hlw16cMnw_Z96zleV&jump_from=webapi" target="_blank" rel="noopener">黑果小兵黑苹果技术群2</a> 2000人<br>819662911 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=aJx9xO7vAmyslCuOdK0bRMmDLpvOCeRw&jump_from=webapi" target="_blank" rel="noopener">黑果小兵黑苹果技术群3</a> 2000人<br>954098809 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=iu042k0X5snr--dzAxOzcsvD9Zft9yx7&jump_from=webapi" target="_blank" rel="noopener">黑果小兵黑苹果技术群4</a> 2000人<br>1161377948 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=kBV9vCnz-NqtXXJiwnUhaLyJN1D7G0n6&jump_from=webapi" target="_blank" rel="noopener">黑果小兵黑苹果技术群5</a> 2000人<br>553283949 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=kr_hZc5pKK4TCDRaFPwRlfAiB4528InP&jump_from=webapi" target="_blank" rel="noopener">黑果小兵黑苹果技术群6</a> 2000人<br>701278330 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=x57TlUmxz88oXGDWjMOOsWokYi8klE11&jump_from=webapi" target="_blank" rel="noopener">黑苹果无线网卡交流群</a> 1000人群 DW1820A技术支持群<br>891434070 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=TUAxSUUtw_T1N62V0kF1sWvMcDr_eoxc&jump_from=webapi" target="_blank" rel="noopener">Catalina黑苹果交流群</a> 2000人群 远景报备群<br>939122730 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=g_rpf7m0LJllE6WHY9c0gVvCTBm1MtuN&jump_from=webapi" target="_blank" rel="noopener">Catalina黑苹果交流II群</a> 2000人群<br>891677227 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=xsuIOzF7RXYaRTTbJ5o_UjzohRDUx5UY&jump_from=webapi" target="_blank" rel="noopener">黑果小兵高级群</a> 2000人群<br>943307869 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=aoSvqrbysdjPo0Wa_XvvPuMG9NMEtOie&jump_from=webapi" target="_blank" rel="noopener">黑果小兵高级群II</a> 2000人群<br>419298796 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=4gWtT2-pOWZYIGwIpVaTNft2aOJP-5qs&jump_from=webapi" target="_blank" rel="noopener">零刻黑苹果技术交流群</a> 500人群 非专用机型请勿加入<br>275356796 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=H7hFwiVkZq71L7se6rz3hE9QcacqL-dV&jump_from=webapi" target="_blank" rel="noopener">morefine黑苹果技术交流群</a> 500人群 非专用机型请勿加入<br>869792897 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=MTDHb2QgLH3gkaymtdFCpk77J5ufWJpH&jump_from=webapi" target="_blank" rel="noopener">minisforum U820黑苹果技术群</a> 500人群 非专用机型请勿加入<br>942112153 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=N5cjw5ksrnmk-RMQ4fPCOo5D_Dxiu47B&jump_from=webapi" target="_blank" rel="noopener">天逸510s Mini黑苹果交流群</a> 1000人群 非专用机型请勿加入<br>673294583 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=GgcMJM5-98yB-fc6zyGcTI3OuesrSBRk&jump_from=webapi" target="_blank" rel="noopener">小新Pro黑苹果技术群</a> 2000人群 非专用机型请勿加入<br>946132482 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=r-m99xC-BPIRdVkEjU6duvqXMJ-1FOwA&jump_from=webapi" target="_blank" rel="noopener">小新Pro黑苹果</a> 500人群 非专用机型请勿加入<br>158976808 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=c9DeeyUg9x4dZlOpIVmj4R4g38p-YCZ1&jump_from=webapi" target="_blank" rel="noopener">DELL黑苹果交流群</a> 1000人群 非专用机型请勿加入<br>247451054 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=h7fvRnWmdaMK2D0qVQLzJsjCC9PwB5h3&jump_from=webapi" target="_blank" rel="noopener">小米Pro黑苹果高级群</a> 2000人群 非专用机型请勿加入<br>943181023 <a href="https://qm.qq.com/cgi-bin/qm/qr?k=OGO_GSX9ZhtbQ_HNns57Vdxm5pR1wH6V&jump_from=webapi" target="_blank" rel="noopener">联想小新Air黑苹果交流群</a> 500人群 非专用机型请勿加入<br></p><p></p><h2>Telegram群:</h2><p></p><p>黑果小兵的部落阁 <a href="http://t.me/daliansky" target="_blank">http://t.me/daliansky</a><br>黑果小兵的部落阁 #安装问题讨论 <a href="https://t.me/Hackintosh_Installer" target="_blank">https://t.me/Hackintosh_Installer</a></p><p></p><h2>淘宝店铺:</h2><p></p><p>黑果小兵的部落阁 <a href="https://hackintosher.taobao.com" target="_blank">https://hackintosher.taobao.com</a></p></div></ul></div></div><div><ul class="post-copyright"><li class="post-copyright-author"><strong>本文作者: </strong>黑果小兵</li><li class="post-copyright-link"><strong>本文链接:</strong> <a href="https://blog.daliansky.net/Modify-DSDT-to-achieve-power-display-method.html" title="修改DSDT实现电量显示方法【转载】">https://blog.daliansky.net/Modify-DSDT-to-achieve-power-display-method.html</a></li><li class="post-copyright-license"><strong>版权声明: </strong>本博客所有文章除特别声明外,均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" rel="noopener" target="_blank"><i class="fa fa-fw fa-creative-commons"></i>BY-NC-SA</a> 许可协议。转载请注明出处!</li></ul></div><footer class="post-footer"><div class="post-tags"><a href="/tags/教程/" rel="tag"><i class="fa fa-tag"></i> 教程</a> <a href="/tags/电池/" rel="tag"><i class="fa fa-tag"></i> 电池</a> <a href="/tags/电量/" rel="tag"><i class="fa fa-tag"></i> 电量</a> <a href="/tags/拆分/" rel="tag"><i class="fa fa-tag"></i> 拆分</a></div><div class="post-nav"><div class="post-nav-next post-nav-item"><a href="/macOS-High-Sierra-10.13.3-(17D47)-official-version-and-Clover-4391-original-image.html" rel="next" title="【黑果小兵】macOS High Sierra 10.13.3 17D47 正式版 with Clover 4391原版镜像"><i class="fa fa-chevron-left"></i> 【黑果小兵】macOS High Sierra 10.13.3 17D47 正式版 with Clover 4391原版镜像</a></div><span class="post-nav-divider"></span><div class="post-nav-prev post-nav-item"><a href="/macOS-High-Sierra-10.13.4-17E199-Release-Version-and-Clover-4418-Original-Image.html" rel="prev" title="【黑果小兵】macOS High Sierra 10.13.4 17E199 正式版 with Clover 4418原版镜像">【黑果小兵】macOS High Sierra 10.13.4 17E199 正式版 with Clover 4418原版镜像 <i class="fa fa-chevron-right"></i></a></div></div></footer></div></article></div></div><div id="gitalk-container"></div></div><div class="sidebar-toggle"><div class="sidebar-toggle-line-wrap"><span class="sidebar-toggle-line sidebar-toggle-line-first"></span> <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span> <span class="sidebar-toggle-line sidebar-toggle-line-last"></span></div></div><aside id="sidebar" class="sidebar"><div id="sidebar-dimmer"></div><div class="sidebar-inner"><ul class="sidebar-nav motion-element"><li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap">文章目录</li><li class="sidebar-nav-overview" data-target="site-overview-wrap">站点概览</li></ul><div class="site-overview-wrap sidebar-panel"><div class="site-overview"><div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person"><a href="/"><img class="site-author-image" itemprop="image" src="/images/avatar.png" alt="黑果小兵"></a><p class="site-author-name" itemprop="name">黑果小兵</p><p class="site-description motion-element" itemprop="description">黑果小兵</p></div><nav class="site-state motion-element"><div class="site-state-item site-state-posts"><a href="/archives/"><span class="site-state-item-count">127</span> <span class="site-state-item-name">日志</span></a></div><div class="site-state-item site-state-categories"><a href="/categories/index.html"><span class="site-state-item-count">26</span> <span class="site-state-item-name">分类</span></a></div><div class="site-state-item site-state-tags"><a href="/tags/index.html"><span class="site-state-item-count">289</span> <span class="site-state-item-name">标签</span></a></div></nav><div class="feed-link motion-element"><a href="/atom.xml" rel="alternate"><i class="fa fa-rss"></i> RSS</a></div><div class="links-of-author motion-element"><span class="links-of-author-item"><a href="https://github.com/daliansky" title="GitHub → https://github.com/daliansky" rel="noopener" target="_blank"><i class="fa fa-fw fa-github"></i></a> </span><span class="links-of-author-item"><a href="http://www.jianshu.com/u/df9143008845" title="简书 → http://www.jianshu.com/u/df9143008845" rel="noopener" target="_blank"><i class="fa fa-fw fa-heartbeat"></i></a> </span><span class="links-of-author-item"><a href="http://shang.qq.com/wpa/qunwpa?idkey=db511a29e856f37cbb871108ffa77a6e79dde47e491b8f2c8d8fe4d3c310de91" title="QQ → http://shang.qq.com/wpa/qunwpa?idkey=db511a29e856f37cbb871108ffa77a6e79dde47e491b8f2c8d8fe4d3c310de91" rel="noopener" target="_blank"><i class="fa fa-fw fa-qq"></i></a></span></div><div class="links-of-blogroll motion-element links-of-blogroll-block"><div class="links-of-blogroll-title"><i class="fa fa-fw fa-link"></i> Links</div><ul class="links-of-blogroll-list"><li class="links-of-blogroll-item"><a href="https://blog.tlhub.cn" title="https://blog.tlhub.cn" rel="noopener" target="_blank">Athlonreg</a></li><li class="links-of-blogroll-item"><a href="http://www.sqlsec.com" title="http://www.sqlsec.com" rel="noopener" target="_blank">国光</a></li></ul></div></div></div><div class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active"><div class="post-toc"><div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#电量补丁制作过程"><span class="nav-number">1.</span> <span class="nav-text">电量补丁制作过程</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#补丁的制作方法"><span class="nav-number">1.1.</span> <span class="nav-text">补丁的制作方法</span></a><ol class="nav-child"><li class="nav-item nav-level-4"><a class="nav-link" href="#对于16位和32位字段的处理"><span class="nav-number">1.1.1.</span> <span class="nav-text">对于16位和32位字段的处理</span></a></li></ol></li></ol></li></ol></div></div></div></div></aside></div></main><footer id="footer" class="footer"><div class="footer-inner"><div class="copyright"><a href="http://www.beian.miit.gov.cn" rel="noopener" target="_blank">辽ICP备15000696号-3 </a>© 2016 – <span itemprop="copyrightYear">2024</span> <span class="with-love" id="animate"><i class="fa fa-apple"></i> </span><span class="author" itemprop="copyrightHolder">黑果小兵</span> <span class="post-meta-divider">|</span> <span class="post-meta-item-icon"><i class="fa fa-area-chart"></i> </span><span title="站点总字数">859k</span> <span class="post-meta-divider">|</span> <span class="post-meta-item-icon"><i class="fa fa-coffee"></i> </span><span title="站点阅读时长">26:03</span></div><div class="busuanzi-count"><script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><span class="site-uv" title="总访客量"><i class="fa fa-user"></i> <span class="busuanzi-value" id="busuanzi_value_site_uv"></span> </span><span class="site-pv" title="总访问量"><i class="fa fa-eye"></i> <span class="busuanzi-value" id="busuanzi_value_site_pv"></span></span></div></div></footer><div class="back-to-top"><i class="fa fa-arrow-up"></i> <span id="scrollpercent"><span>0</span>%</span></div></div><script>"[object Function]"!==Object.prototype.toString.call(window.Promise)&&(window.Promise=null)</script><script src="/lib/jquery/index.js?v=2.1.3"></script><script src="/lib/velocity/velocity.min.js?v=1.2.1"></script><script src="/lib/velocity/velocity.ui.min.js?v=1.2.1"></script><script src="https://fastly.jsdelivr.net/npm/@fancyapps/fancybox@3.2.5/dist/jquery.fancybox.min.js"></script><script src="//fastly.jsdelivr.net/gh/theme-next/theme-next-reading-progress@1.1/reading_progress.min.js"></script><script src="/js/src/utils.js?v=6.6.0"></script><script src="/js/src/motion.js?v=6.6.0"></script><script src="/js/src/scrollspy.js?v=6.6.0"></script><script src="/js/src/post-details.js?v=6.6.0"></script><script src="/js/src/bootstrap.js?v=6.6.0"></script><script src="//fastly.jsdelivr.net/npm/gitalk@1.7.2/dist/gitalk.min.js"></script><link rel="stylesheet" href="//fastly.jsdelivr.net/npm/gitalk@1.7.2/dist/gitalk.css"><script src="//fastly.jsdelivr.net/npm/js-md5@0.7.3/src/md5.min.js"></script><script>var gitalk=new Gitalk({clientID:"0da3e792a21a77938da6",clientSecret:"4d2869563000629ee6dbed48fbbf878aea151cb6",repo:"daliansky.github.io",owner:"daliansky",admin:["daliansky"],id:md5(location.pathname),distractionFreeMode:"true",proxy:"https://gitalk.daliansky.workers.dev/?https://github.com/login/oauth/access_token"});gitalk.render("gitalk-container")</script><script>// Popup Window;
var isfetched = false;
var isXml = true;
// Search DB path;
var search_path = "search.xml";
if (search_path.length === 0) {
search_path = "search.xml";
} else if (/json$/i.test(search_path)) {
isXml = false;
}
var path = "/" + search_path;
// monitor main search box;
var onPopupClose = function (e) {
$('.popup').hide();
$('#local-search-input').val('');
$('.search-result-list').remove();
$('#no-result').remove();
$(".local-search-pop-overlay").remove();
$('body').css('overflow', '');
}
function proceedsearch() {
$("body")
.append('<div class="search-popup-overlay local-search-pop-overlay"></div>')
.css('overflow', 'hidden');
$('.search-popup-overlay').click(onPopupClose);
$('.popup').toggle();
var $localSearchInput = $('#local-search-input');
$localSearchInput.attr("autocapitalize", "none");
$localSearchInput.attr("autocorrect", "off");
$localSearchInput.focus();
}
// search function;
var searchFunc = function(path, search_id, content_id) {
'use strict';
// start loading animation
$("body")
.append('<div class="search-popup-overlay local-search-pop-overlay">' +
'<div id="search-loading-icon">' +
'<i class="fa fa-spinner fa-pulse fa-5x fa-fw"></i>' +
'</div>' +
'</div>')
.css('overflow', 'hidden');
$("#search-loading-icon").css('margin', '20% auto 0 auto').css('text-align', 'center');
$.ajax({
url: path,
dataType: isXml ? "xml" : "json",
async: true,
success: function(res) {
// get the contents from search data
isfetched = true;
$('.popup').detach().appendTo('.header-inner');
var datas = isXml ? $("entry", res).map(function() {
return {
title: $("title", this).text(),
content: $("content",this).text(),
url: $("url" , this).text()
};
}).get() : res;
var input = document.getElementById(search_id);
var resultContent = document.getElementById(content_id);
var inputEventFunction = function() {
var searchText = input.value.trim().toLowerCase();
var keywords = searchText.split(/[\s\-]+/);
if (keywords.length > 1) {
keywords.push(searchText);
}
var resultItems = [];
if (searchText.length > 0) {
// perform local searching
datas.forEach(function(data) {
var isMatch = false;
var hitCount = 0;
var searchTextCount = 0;
var title = data.title.trim();
var titleInLowerCase = title.toLowerCase();
var content = data.content.trim().replace(/<[^>]+>/g,"");
var contentInLowerCase = content.toLowerCase();
var articleUrl = decodeURIComponent(data.url);
var indexOfTitle = [];
var indexOfContent = [];
// only match articles with not empty titles
if(title != '') {
keywords.forEach(function(keyword) {
function getIndexByWord(word, text, caseSensitive) {
var wordLen = word.length;
if (wordLen === 0) {
return [];
}
var startPosition = 0, position = [], index = [];
if (!caseSensitive) {
text = text.toLowerCase();
word = word.toLowerCase();
}
while ((position = text.indexOf(word, startPosition)) > -1) {
index.push({position: position, word: word});
startPosition = position + wordLen;
}
return index;
}
indexOfTitle = indexOfTitle.concat(getIndexByWord(keyword, titleInLowerCase, false));
indexOfContent = indexOfContent.concat(getIndexByWord(keyword, contentInLowerCase, false));
});
if (indexOfTitle.length > 0 || indexOfContent.length > 0) {
isMatch = true;
hitCount = indexOfTitle.length + indexOfContent.length;
}
}
// show search results
if (isMatch) {
// sort index by position of keyword
[indexOfTitle, indexOfContent].forEach(function (index) {
index.sort(function (itemLeft, itemRight) {
if (itemRight.position !== itemLeft.position) {
return itemRight.position - itemLeft.position;
} else {
return itemLeft.word.length - itemRight.word.length;
}
});
});
// merge hits into slices
function mergeIntoSlice(text, start, end, index) {
var item = index[index.length - 1];
var position = item.position;
var word = item.word;
var hits = [];
var searchTextCountInSlice = 0;
while (position + word.length <= end && index.length != 0) {
if (word === searchText) {
searchTextCountInSlice++;
}
hits.push({position: position, length: word.length});
var wordEnd = position + word.length;
// move to next position of hit
index.pop();
while (index.length != 0) {
item = index[index.length - 1];
position = item.position;
word = item.word;
if (wordEnd > position) {
index.pop();
} else {
break;
}
}
}
searchTextCount += searchTextCountInSlice;
return {
hits: hits,
start: start,
end: end,
searchTextCount: searchTextCountInSlice
};
}
var slicesOfTitle = [];
if (indexOfTitle.length != 0) {
slicesOfTitle.push(mergeIntoSlice(title, 0, title.length, indexOfTitle));
}
var slicesOfContent = [];
while (indexOfContent.length != 0) {
var item = indexOfContent[indexOfContent.length - 1];
var position = item.position;
var word = item.word;
// cut out 100 characters
var start = position - 20;
var end = position + 80;
if(start < 0){
start = 0;
}
if (end < position + word.length) {
end = position + word.length;
}
if(end > content.length){
end = content.length;
}
slicesOfContent.push(mergeIntoSlice(content, start, end, indexOfContent));
}
// sort slices in content by search text's count and hits' count
slicesOfContent.sort(function (sliceLeft, sliceRight) {
if (sliceLeft.searchTextCount !== sliceRight.searchTextCount) {
return sliceRight.searchTextCount - sliceLeft.searchTextCount;
} else if (sliceLeft.hits.length !== sliceRight.hits.length) {
return sliceRight.hits.length - sliceLeft.hits.length;
} else {
return sliceLeft.start - sliceRight.start;
}
});
// select top N slices in content
var upperBound = parseInt('1');
if (upperBound >= 0) {
slicesOfContent = slicesOfContent.slice(0, upperBound);
}
// highlight title and content
function highlightKeyword(text, slice) {
var result = '';
var prevEnd = slice.start;
slice.hits.forEach(function (hit) {
result += text.substring(prevEnd, hit.position);
var end = hit.position + hit.length;
result += '<b class="search-keyword">' + text.substring(hit.position, end) + '</b>';
prevEnd = end;
});
result += text.substring(prevEnd, slice.end);
return result;
}
var resultItem = '';
if (slicesOfTitle.length != 0) {
resultItem += "<li><a href='" + articleUrl + "' class='search-result-title'>" + highlightKeyword(title, slicesOfTitle[0]) + "</a>";
} else {
resultItem += "<li><a href='" + articleUrl + "' class='search-result-title'>" + title + "</a>";
}
slicesOfContent.forEach(function (slice) {
resultItem += "<a href='" + articleUrl + "'>" +
"<p class=\"search-result\">" + highlightKeyword(content, slice) +
"...</p>" + "</a>";
});
resultItem += "</li>";
resultItems.push({
item: resultItem,
searchTextCount: searchTextCount,
hitCount: hitCount,
id: resultItems.length
});
}
})
};
if (keywords.length === 1 && keywords[0] === "") {
resultContent.innerHTML = '<div id="no-result"><i class="fa fa-search fa-5x" /></div>'
} else if (resultItems.length === 0) {
resultContent.innerHTML = '<div id="no-result"><i class="fa fa-frown-o fa-5x" /></div>'
} else {
resultItems.sort(function (resultLeft, resultRight) {
if (resultLeft.searchTextCount !== resultRight.searchTextCount) {
return resultRight.searchTextCount - resultLeft.searchTextCount;
} else if (resultLeft.hitCount !== resultRight.hitCount) {
return resultRight.hitCount - resultLeft.hitCount;
} else {
return resultRight.id - resultLeft.id;
}
});
var searchResultList = '<ul class=\"search-result-list\">';
resultItems.forEach(function (result) {
searchResultList += result.item;
})
searchResultList += "</ul>";
resultContent.innerHTML = searchResultList;
}
}
if ('auto' === 'auto') {
input.addEventListener('input', inputEventFunction);
} else {
$('.search-icon').click(inputEventFunction);
input.addEventListener('keypress', function (event) {
if (event.keyCode === 13) {
inputEventFunction();
}
});
}
// remove loading animation
$(".local-search-pop-overlay").remove();
$('body').css('overflow', '');
proceedsearch();
}
});
}
// handle and trigger popup window;
$('.popup-trigger').click(function(e) {
e.stopPropagation();
if (isfetched === false) {
searchFunc(path, 'local-search-input', 'local-search-result');
} else {
proceedsearch();
};
});
$('.popup-btn-close').click(onPopupClose);
$('.popup').click(function(e){
e.stopPropagation();
});
$(document).on('keyup', function (event) {
var shouldDismissSearchPopup = event.which === 27 &&
$('.search-popup').is(':visible');
if (shouldDismissSearchPopup) {
onPopupClose();
}
});</script><script src="/js/src/js.cookie.js?v=6.6.0"></script><script src="/js/src/scroll-cookie.js?v=6.6.0"></script><script src="/live2dw/lib/L2Dwidget.min.js?094cbace49a39548bed64abff5988b05"></script><script>L2Dwidget.init({pluginRootPath:"live2dw/",pluginJsPath:"lib/",pluginModelPath:"assets/",model:{scale:1.2,hHeadPos:.5,vHeadPos:.618,jsonPath:"/live2dw/assets/tororo.model.json"},display:{superSample:2,width:150,height:300,position:"right",hOffset:0,vOffset:-20},mobile:{show:!1,scale:.5},react:{opacityDefault:.7,opacityOnHover:.2},log:!1,tagMode:!1})</script></body></html>