一种屏幕开关状态的取得方法

文档序号:3555311阅读:172来源:国知局
专利名称:一种屏幕开关状态的取得方法
技术领域
本发明涉及一种屏幕开关状态的取得方法,特别是涉及应用于一便携式电子装置(如笔记本计算机等),以取得屏幕开关的相关信息,从而借此些相关信息测试其屏幕开关功能是否正常。
背景技术
随着科技的进步,许多运算、记录、沟通、查询等工作都可通过计算机来执行,使得计算机逐渐融入人们的生活及工作中成为不可或缺的工具之一。为了能随时随地使用计算机而发展出笔记本计算机,笔记本计算机由于其具有轻便、易携带等特性因此受到各界人士的喜爱。然而,电子产品大多需电源驱动,而笔记本计算机为携带方便因此大部分的时间只能依靠电池来供电。而在供电量有限的情况下,必须要求计算机尽可能节省能源,以可以长时间使用且符合未来节约能源地趋势。
在笔记本计算机中,屏幕为主要耗电的装置,所以目前在笔记本计算机中大多设置一控制装置,以关闭屏幕的电源。就目前而言,此种省电控制多与屏幕开关(Lid Switch)结合。当使用者通过笔记本计算机运行程序且不需实时关注处理过程时,可将屏幕合上(即盖上笔记本计算机),此时Lid Switch会被按下,以使屏幕进入断电状态,但笔记本计算机中其它系统、装置不受影响,仍可继续运作。当使用者欲查看程序运作状态时,只需打开笔记本计算机,此时Lid Switch由于没有外力下压因而处于打开状态,从而屏幕恢复供电。可通过此类机制来降低笔记本计算机在屏幕的电源供应时所造成的大量电源消耗。
然而,在生产过程中,测试环节是必不可少的,不论是在研制新机型时需要反复测试,而在量产中的机型在出货前也是必须逐一地经过测试后,才可进行销售。在出厂测试过程中,基本会对笔记本计算机中所包含的全部功能和装置进行检测,因此若在笔记本计算机上多增加一功能或一装置时,相对会增加其所需的测试时间,所以如何在较短的测试时间内得到完整确实的测试结果是增加产能的主要方法之一。
尤其是,在目前笔记本计算机上所设置的Lid Switch的作用已不仅仅是用来关闭笔记本计算机的屏幕显示,还可用于将计算器置为休眠状态(Hibernation)或暂停状态(Suspend),并且这种附加功能是可以让使用者自行选定的。其基本运作原理在于通过按下Lid Switch而去触发系统的某个事件,因此系统再根据使用者的选择来实现其附加功能。所以在测试LidSwitch时,需着重下列两方面的测试(1)、测试在按下Lid Switch后,屏幕的电源是否会切断;(2)、测试在按下Lid Switch后,系统事件是否会被触发。针对第一方面的测试,可通过直观观察屏幕是否有显示即可达到目的,但第二方面的测试则不容易达成。
由于按下Lid Switch后,会设定(set)一缓存器(register),以通知系统。因此,测试一般都通过查询特定的缓存器位来确认Lid Switch功能的好坏。
目前第二方面的测试方法通常可通过两种途径达成,如下(1)、按下LidSwitch后,确认在总线(如,周边元件内部连结(peripheral componentinterconnect;简称PCI)总线(bus))上的缓存器中是否有一缓存器中的特定位被设定,从而判断测试的结果;(2)、通过发送一功能偏移量给嵌入式控制器(Embedded Controller;简称EC),在得到数值后,查看其中的特定位是否在按下Lid Switch时被设定,从而判断测试的结果。
虽然于同一种机型上所采用的测试途径是相同的,而且只需采用上述测试途径中之一,但是若为不同机型时采用测试途径就会不相同,即使系采用相同测试途径,但其中所需用到之各项参数也大多是不相同的。
由于,不同厂商所生产的笔记型计算机中可使用之Lid Switch测试途径是不同的,即使是相同厂商所生产的笔记本计算机,不同型号也会造成LidSwitch测试途径产生差异,所以目前Lid Switch功能状态的测试方法其兼容性相当差。在进行测试前,需先识别欲进行测试的笔记本计算机的机型,再使用相关的测试方法。并且,当欲进行测试的笔记本计算机为一新机型时,测试人员还需先跟生产/设计的厂商询问此种机型所使用的方法和相关信息,再根据取得的信息更改测试程序的程序代码,以使此机型的Lid Switch功能测试包含在内,此后才能开始进行测试。如此一来,使得测试程序存在了几大缺陷(1)、受限于厂商的回复速度,因此耗时是不可避免的,也就造成测试程序的开发时间加长;(2)、由于笔记本计算机的型号一直在不断地推陈出新,而以前生产的机型又不会立即废弃,因此测试程序则必须既兼顾先前机型又适用刚出产的新机型,此易造成程序代码的爆炸且不利于程序的维护;(3)、由于测试方法兼容性差,常常需跟着测试机型而进行测试程序的更动,因此在人力和物力上的投入会不断地增加成本,造成资本的浪费。所以针对上述的缺陷,寻求一种兼容性高的测试方法是迫不可待的。

发明内容
本发明所要解决的技术问题在于提供一种屏幕开关状态的取得方法,解决现有的测试方法中兼容性较差的问题。
本发明所要解决的另一个技术问题在于提供一种屏幕开关状态的取得方法,可在便携式电子装置的BIOS中取得相应屏幕开关的机器语言(machinelanguage),其中,此机器语言即为提供给操作系统的一二进制低级语言
本发明所要解决的又一个技术问题在于提供一种屏幕开关状态的取得方法,通过先进结构电源接口标准(ACPI)在BIOS中取得屏幕开关的相关信息,并得到一兼容性较高的测试方法,节省出厂测试时间及成本。
为了实现上述目的,本发明提供了一种屏幕开关状态的取得方法,应用于支持先进架构电源接口标准(ACPI)的一便携式电子装置,其中该便携式电子装置包括一屏幕开关,其特点在于,该取得方法包括下列步骤按照该ACPI的规范来取得储存于该便携式电子装置的基本输入/输出控制系统(BIOS)中的机械语言;在该机械语言中获取该屏幕开关的设备描述区间;在该设备描述区间中获取涉及实现途径的字符串,以得到一个以上的方法描述语句;在该方法描述语句中取得一个以上的设备名称串;通过该设备名称串决定一硬件途径;以及根据该硬件途径,利用该设备名称串取得一个以上的测试数据信息。
上述屏幕开关状态的取得方法,其特点在于,还包括下列步骤根据该测试数据信息通过该硬件途径以测试该屏幕开关的状态。
上述屏幕开关状态的取得方法,其特点在于,在该机械语言中获取该屏幕开关的设备描述区间的步骤中包括下列步骤在该机械语言中查找一装置定义;根据该装置定义取得一第一设备描述语句;在该第一设备描述语句中查找一名称定义;根据该名称定义取得一第一设备名称语句;在该第一设备名称语句中查找该第一运算参数;取得该第一运算参数的一标识语句,并比较该标识语句是否为一第一装置标识,以得一比较结果;以及根据该比较结果选取该第一设备描述语句,以得到该设备描述区间。
上述屏幕开关状态的取得方法,其特点在于,该方法描述语句中取得一个以上的设备名称串的步骤包括下列步骤在该方法描述语句中查找一第一关键参数;以及摘取包含该第一关键参数的字符串,以取得一个以上的设备名称串。
上述屏幕开关状态的取得方法,其特点在于,在通过该设备名称串决定一硬件途径的步骤包括下列步骤以一长度标准在该设备名称串中查找一装置定义;根据该装置定义取得一第二设备描述语句;在该第二设备描述语句中查找一名称定义;根据该名称定义取得一第二设备名称语句;在该第二设备名称语句中查找一第一运算参数;摘取出该第一运算参数的标识语句,并比较该标识语句是否为一第二装置标识,以得一比较结果;以及根据该比较结果决定该硬件途径。
上述屏幕开关状态的取得方法,其特点在于,根据该硬件途径,利用该设备名称串取得一个以上的测试数据信息的步骤中包括下列步骤在该设备名称串中取得一硬件名称串;在该硬件名称串中取得一操作空间语句和一范畴语句所定义的一个以上的空间;以及在该空间中取得设置该屏幕开关的一屏幕于该硬件途径的一硬件名称的位置,以得该测试数据信息。
上述屏幕开关状态的取得方法,其特点在于,根据该硬件途径利用该设备名称串取得一个以上的测试数据信息的步骤为根据该硬件途径利用该设备名称串取得表示该屏幕开关状态位在该硬件途径中的一偏移量。
上述屏幕开关状态的取得方法,其特点在于,根据该硬件途径利用该设备名称串取得一个以上的测试数据信息的步骤为根据该硬件途径利用该设备名称串取得表示该屏幕开关状态位在该硬件途径中的一设备号、一总线号、一功能号、一缓存器的偏移量和一状态字的有效位。
上述屏幕开关状态的取得方法,其特点在于,还包括下列步骤读取该设备名称串前一字节,以取得一操作语句;读取该设备名称串后一字节,以取得该操作语句的一语句参数长度;以及根据该语句参数长度向后读取特定字节,以取得一语句参数,其中该语句参数为该状态字的有效位。
上述屏幕开关状态的取得方法,其特点在于,还包括下列步骤以一长度标准分割该设备名称串以得到多个名称串;在该名称串中查找不具装置定义的名称串,以得一特定名称串;查找该特定名称串所在的配置空间;取得并记录该配置空间的一基地址,和该特定名称串在配置空间中的一偏移量;以及将该基地址与该偏移量相加,以取得该缓存器的偏移量。
上述屏幕开关状态的取得方法,其特点在于,还包括下列步骤在该设备名称串中取得一总线设备名称串;在该总线设备名称串中取得一总线号;根据该总线设备名称串向下存取一个以上的分类号并根据该分类号选择性取得下一级的该总线号;以及取得最后得到的该总线号。
本发明的功效,在于解决习知之测试方法其兼容性差的问题,在便携式电子装置的BIOS中,取得相应屏幕开关的机器语言(machine language),其中,此机器语言即为提供给操作系统的一二进制低级语言,并且通过先进架构电源接口标准(ACPI)在BIOS中取得屏幕开关的相关信息,得到一兼容性高的测试方法,还可节省出厂测试时间及成本。
以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。


图1为本发明一实施例的屏幕开关状态的取得方法的流程图2为图1中步骤120的一实施例的详细流程图3为图1中步骤130的一实施例的详细流程图4为图1中步骤140的一实施例的详细流程图5为图1中步骤150的一实施例的详细流程图6为图1中步骤160的第一实施例的详细流程图7为图6中步骤161的一实施例的详细流程图8为图1中步骤160的第二实施例的详细流程图9为图1中步骤160的第三实施例的详细流程图10为图1中步骤160的第四实施例的详细流程图11为图1中步骤160的第五实施例的详细流程图12为图11中步骤561的一实施例的详细流程图;以及
图13为图1中步骤170的一实施例的详细流程图。
其中,附图标记
步骤110-取得BIOS中的机械语言
步骤120-获取屏幕开关的设备描述区间
步骤130-获取涉及实现途径的字符串,以得到方法描述语句
步骤140-取得设备名称串
步骤150-判断硬件途径
步骤160-取得测试数据信息
步骤170-进行屏幕开关状态测试
步骤121-在机械语言中查找装置定义
步骤122-取得第一设备描述语句
步骤123-查找名称定义
步骤124-取得第一设备名称语句
步骤125-查找第一运算参数
步骤1251-有无找到?
步骤126-取得标识语句,并比较标识语句是否为第一装置标识
步骤1261-是否是?
步骤127-得到屏幕开关的设备描述区间
步骤131-在设备描述区间中查找方法定义
步骤132-取得方法描述语句
步骤141-在方法描述语句中查找第一关键参数
步骤142-取得设备名称串
步骤151-在设备名称串中查找装置定义
步骤152-取得第二设备描述语句
步骤153-查找名称定义
步骤154-取得第二设备名称语句
步骤155-查找第一运算参数
步骤1551-有无找到?
步骤156-取得标识语句,并比较标识语句是否为第二装置标识
步骤1561-是否是?
步骤157-根据比较结果得知硬件途径
步骤161-在设备名称串中取得硬件名称串
步骤1611-在设备名称串中查找倒数第二个名称定义
步骤1612-取得硬件名称串
步骤162-取得操作空间语句和范畴语句所定义的空间
步骤163-取得屏幕在硬件中名称的位置
步骤261-读取在设备名称串前一个字节,以取得操作语句
步骤262-读取在设备名称串后一个字节,以取得操作语句的语句参数长度
步骤263-根据语句参数长度再向后读取一特定字节,以取得语句参数
步骤361-将设备名称串分割成多个名称串
步骤362-查找不具装置定义的名称串中,得一特定名称串
步骤363-查找特定名称串所在的配置空间
步骤364-取得并记录此配置空间的基地址,和名称串在配置空间中的偏移量
步骤365-将基地址与偏移量相加,以取得寄存器的偏移量
步骤461-取得设备名称串的倒数第二个字段
步骤462-查找第二运算参数,以取得第二运算参数的信息
步骤463-查找高字和低字,以得到高字值和低字值
步骤561-在设备名称串中取总线设备名称串
步骤5611-在设备名称串中查找装置定义
步骤5612-取得第二设备描述语句
步骤5613-查找描称定义
步骤5614-取得第二设备名称语句
步骤5615-查找第一运算参数
步骤56151-有无找到?
步骤5616-取得标识语句,并比较标识语句是否为第三装置标识
步骤56161-是否是?
步骤5617-得到总线设备名称串
步骤562-取得一总线号
步骤563-根据总线设备名称串向下存取各设备的分类号并根据分类号选择性取得下一级总线号
步骤564-取得最后得到的总线号
步骤171-根据取得的总线号、设备号、功能号和缓存器偏移量存取PCI总线上的缓存器,以得到一个数值
步骤172-将此数值按照操作语句,与屏幕开关状态有效参数进行运算
具体实施例方式
首先说明本发明的主要构想。可应用本发明的便携式电子装置可为一笔记本计算机,而其具有兼具省电控制功能的屏幕开关(Lid Switch)。目前,绝大部分的笔记本计算机都支持先进架构电源接口标准(AdvancedConfiguration and Power Interface;简称ACPI),而此先进架构电源接口标准即为一些表状结构和一些二进制低级语言。并且,此些表状结构和二进制低级语言会设定于笔记本计算机的基本输入/输出控制系统(basicinput/output system;简称BIOS)中,在操作系统激活之前调入内存,再搭配硬件可以检测主机板温度、风扇转速和电源供应器的电压等信息,以提供适当的电源与主机工作频率,来达到效率与省电并存的效果。其中,有一部分是操作系统不可以更改的,其即包含了许多硬件的端口地址、运算偏移量以及硬件的操作数。然而,这些硬件信息中包含了一些可用以了解测定Lid Switch引发中断的方法的特定内容。也就是说,通过此些特定内容即可得知LidSwitch功能状态的实现途径和一些端口信息。因此,本发明通过取得在便携式电子装置的BIOS中,相应屏幕开关的机器语言(machine language),而此机器语言即为提供给操作系统的二进制低级语言。进一步,再根据这些机器语言进行测试程序的修改,如此一来,通过此方式去执行屏幕开关的测试,其兼容性高且相较之下所需的测试时间也较为短。
以下举出具体实施例以详细说明本发明的内容,并以图标作为辅助说明。说明中提及的符号参照附图标记。
本发明可应用于支持先进架构电源接口标准(ACPI)的便携式电子装置(如一笔记本计算机),且此便携式电子装置具有一屏幕开关(Lid Switch),用以进行此屏幕开关的执行状态测试。其中,此屏幕开关除了可用以关闭屏幕电源也可用以进行省电设定执行的控制。
参照图1,步骤110,本实施例首先取得储存于BIOS中的机械语言;接着,步骤120,在机械语言中获取屏幕开关(lid switch)的设备描述区间;步骤130,再在设备描述区间中获取涉及实现途径的字符串,以得到方法描述语句;步骤140,然后,在方法描述语句中取得设备名称串;步骤150,通过设备名称串判断硬件途径;步骤160,并根据硬件途径,通过设备名称串取得测试数据信息。最后,步骤170,通过硬件途径和测试数据信息测试lid switch。
其中,BIOS内建于计算机中,用以控制输出、输入(键盘,屏幕及软硬盘等装置)及各项基本功能(开机、配备设定及自我检查等)的系统。而上述机器语言即为ACPI机器语言(ACPI Machine Language;简称AML)。其硬件途径可为嵌入式控制器(EC)途径,也可为操作周边组件内部连结(PCI)设备途径。
而在步骤110中可按照ACPI的规范来取得储存于BIOS中的机械语言。
在获取屏幕开关(lid switch)的设备描述区间的步骤中,即步骤120,可通过下列步骤来达到。参照图2,步骤121,先在取得的机械语言中查找装置定义;步骤122,并根据装置定义取得第一设备描述语句;步骤123,再于第一设备描述语句中查找名称定义;步骤124,并根据名称定义取得第一设备名称语句;步骤125,接着在第一设备名称语句中查找第一运算参数;步骤126,取得第一运算参数的标识语句,并比较此标识语句是否为第一装置标识,以得一比较结果;最后,步骤127,根据比较结果选取第一设备描述语句,以得到lid switch的设备描述区间。
换句话说,步骤121,即依次在机械语言中寻找装置定义。找到装置定义时,步骤122,则摘取此装置定义的语句区间,此即为第一设备描述语句。再来,步骤123,在得到的第一设备描述语句中寻找名称定义。找到名称定义时,步骤124,则摘取出此名称定义的语句区间,此即为第一设备名称语句。接着,步骤125,再在第一设备名称语句中寻找第一运算参数,步骤1251,其中若于第一设备名称语句不具有第一运算参数时,则在第一设备描述语句中接续寻找下一个名称定义,即回到步骤123。而在找到第一运算参数时,步骤126,则摘取出第一运算参数的标识语句,并比较此标识语句是否为第一装置标识,步骤1261,其中若标识语句不为第一装置标识时,则需于机械语言中接续寻找下一个装置定义,即回到步骤121。步骤127,当取得的标识语句为第一装置标识时,此装置定义的语句区间即为lid switch的设备描述区间。
在此实施例中,装置定义可为“Device”,而第一设备描述语句即为“Device”所包含的语句范围;名称定义即为“Name”,而第一设备名称语句即为“Name”所包含的语句范围,如Name<_HID,“PNP0C0D”>;其中,第一运算参数即更改设备指令,也就是“_HID”,而上述的第一装置标识即为“PNP0C0D”,因此得到的比较结果则是指“_HID”是否为“PNP0C0D”。
举例来说在从BISO取得的机械语言中查找使用Device<0x5b 0x82>定义可得到一串机械语言为0x08 0x5f 0x48 0x49 0x44 0x0c 0x41 0xd0 0x0c0x0d的设备名称;其中,0x08为代表“Name”的机械语言,0x5f 0x48 0x49 0x44为代表“_HID”的机械语言,0x0c则说明“_HID”的值的区间为向后的四个字节,0x41 0xd0 0x0c 0x0d为代表“PNP0C0D”的机械语言,因此通过上述的方法我们即可取得lid switch的设备描述区间。
在得到方法描述语句的步骤中,即步骤130,可通过下列步骤来达成。参照图3,步骤131,在设备描述区间中查找方法定义;步骤132,以及根据方法定义取得方法描述语句。
在这里,步骤131,即依次在设备描述区间中寻找方法定义。找到方法定义时,步骤132,则获取此方法定义的语句区间,此即为方法描述语句。其中,方法定义可为“Method”,而方法描述语句即为“Method”所包含的语句范围。
在于方法描述语句中取得设备名称串的步骤中,即步骤140,可通过下列步骤来达成。参照图4,步骤141,在方法描述语句中查找第一关键参数;找到第一关键参数后,步骤142,摘取包含第一关键参数的字符串,以取得设备名称串。
在此实施例中,第一关键参数可为“\_SB”,而包含第一关键参数的字符串即为设备名称串。
在通过设备名称串判断硬件途径的步骤中,即步骤150,可通过下列步骤来达成。参照图5,首先,步骤151,以一长度标准在设备名称串中查找装置定义;步骤152,在找到装置定义时,可根据装置定义取得第二设备描述语句;步骤153,接着,在第二设备描述语句中查找名称定义;步骤154,在找到名称定义时,可根据名称定义取得第二设备名称语句;步骤155,再在第二设备名称语句中查找第一运算参数,步骤1551,其中若在第二设备名称语句不具有第一运算参数时,则重新在设备名称串中以一长度标准寻找下一个装置定义,即回到步骤151;步骤156,而在找到第一运算参数时,则摘取出第一运算参数的标识语句,并比较此标识语句是否为第二装置标识,以得出一比较结果,步骤1561,其中若标识语句不为第二装置标识时,则也重新在设备名称串中以一长度标准寻找下一个装置定义,即回到步骤151;步骤157,根据比较结果得知硬件途径。其中,步骤151以四个字节为长度标准于字符串中依次查找装置定义。
于此实施例中,装置定义也可为“Device”,因此第二设备描述语句即为“Device”所包含的语句范围;名称定义为“Name”,而第二设备名称语句即为“Name”所包含的语句范围,如Name<_HID,“PNP0A09”>;与上述相同,第一运算参数即更改设备指令,也就是“_HID”,而在此的第二装置标识为“PNP0A09”,因此得到的比较结果则是指“_HID”是否为“PNP0A09”。以目前来说,若在包含“\_SB”的字符串(即,设备名称串)中具有代表“_HID”为PNP0C09的语句时,则表示此种机型读取Lid Switch状态的硬件途径为嵌入式控制器(EC)途径,否则表示硬件途径为操作PCI设备途径的方法。
下列分别就EC途径和PCI总线途径来详细说明上述步骤。
●EC途径
目前,以EC途径读取Lid Switch状态的检测方法中,不确定的参数包括表示Lid Switch状态位在EC中的偏移量。也就是此偏移量大多会随着机型的改变而不同。此偏移量可通过设备名称串取得。首先,找到代表EC设备的名称串,这个名称串通常在设备名称串的倒数第二个,且EC设备的名称串后面的四个字节就是Lid Switch在EC命名空间中的名称,我们称它为屏幕(Lid)在EC中的名称。
当硬件途径为EC途径时,在根据硬件途径通过设备名称串取得测试数据信息的步骤中,即步骤160,可通过下列步骤来实现。参照图6,步骤161,首先在设备名称串中取得硬件名称串;步骤162,在硬件名称串中取得操作空间语句和范畴语句所定义的空间;步骤163,最后在空间中取得屏幕在硬件中名称的位置,以得测试数据信息。
在此实施例中,操作空间定义可为“OperationRegion”,而范畴定义为“Field”;操作空间语句和范畴语句所定义的空间就是EC各功能偏移量的命名空间,且在此空间中所找到Lid在EC中名称的位置,即是我们所需要的偏移量。也就是,在此测试数据信息为此偏移量。
其中,由于EC设备的名称串通常在设备名称串的倒数第二个,且在EC设备的名称串后面的四个字节即是Lid Switch在EC命名空间中的名称,我们称它为Lid在EC中的名称。
因此,在方法描述语句中取得硬件名称串的步骤中,即步骤161,可通过下列步骤来实现。参照图7,步骤1611,在设备名称串中查找倒数第二个名称定义;步骤1612,以及通过此名称定义取得硬件名称串。
并且,在取得操作空间语句和范畴语句所定义的空间的步骤中,即步骤162,可取得硬件名称串的后面的四个字节。
最后,即可利用通过EC的测试途径搭配取得的偏移量进行Lid Switch测试,也就是,通过发送一取得的偏移量给嵌入式控制器(EC),在得到数值后,查看其中的特定位是否在按下Lid Switch时被设定,从而得到测试的结果。
举例来说,首先,按照ACPI的规范取得储存于BIOS中的机械语言,在其中查找Device定义,以取得找使用“Device”定义的第一设备描述语句,并且在第一设备描述语句中找到一设备名称为“LID”,并在“LID”的定义区间中找到其更改设备指令为一第一装置标识,也就是“_HID”为“PNP0C0D”,则“Device(LID)”的区间(即,第一设备描述语句)中包括了与Lid Switch相关的实现方法和功能,也就是于“Device(LID)”的区间中包括了Lid Switch的相关设备描述。在此,取得的“Device(LID)”的区间如下
Device(LID){   Name(_HID,EisaId("PNP0C0D"))   Method(_LID,0,NotSerialized)   {   If(ECON)   {<!-- SIPO <DP n="12"> --><dp n="d12"/>  If(\_SB_.PCI0.LPCB.EC0_.LIDC)  {Return(0x00)}  Else  {Return(0x01)}  }  Else  {Return(0x01)}   }   Name(_PRW,Package(0x02)   {  0x18,  0x04   })}Scope(\_SB_){  Device(PCI0)  {  Name(_HID,“PNP0A03”)  ……  Device(LPCB)  {  Name(_ADR,0x001f0000)  ……  Device(EC0_)  {  Name(_HID,“PNP0C09”)  ……  OperationRegion(ECF2,EmbeddedControl,0x00,0xFF)  Field(ECF2,ByteAcc,Lock,Preserve) <!-- SIPO <DP n="13"> --><dp n="d13"/>   {   Offset (0x30),   PBAC, 1,   Offset (0x90),   LSCI, 8,   LHKY, 8,   LIDC, 1,   DKON, 1,   ……   }   ……   }   ……  }  }  }
接着,查找使用“Method<0x14>”(即,方法定义)的实现语句区间,此即为方法描述语句,在此区间查找“\_SB”(即,第一关键参数)可得到一字符串,即可得到一设备名称串为“\_SB_.PCI0.LPCB.EC0_.LIDC”。以四个字节为长度标准,在字符串中分析各个名称语句的设备类型。方法同第一步,查找“Device”取得第二设备描述语句,接着查找“Name”取得第二设备名称语句,再通过“_HID”和“_ADR”进行判断,并且依次反复进行以分析完字符串中各个第二设备名称语句的。在上例中,“\_SB_”表示设备总集,不参加分析动作,“PCI0”的“_HID”为“PNP0A03”,表示“PCI0”是PCI总线。在“PCI0”的定义区间中找“LPCB”的定义,在“LPCB”的范围中找不到“_HID”的定义,所以找到“_ADR”记录下来备用,“_ADR”的值为“0x001f0000”。然后再在“LPCB”的区间中找“EC0_”的装置定义,找到“EC0_”的“_HID”为“PNP0C09”,即表明“EC0_”是EC,所以表示当前机型上读取Lid Switch状态的方法是通过EC读取。
接续分析设备名称串,在“EC0_”的定义范围内,“LIDC”没有进行设备定义,所以再在“EC0_”的操作空间中查找。找到“LIDC”在“EC0_”的操作空间中的偏移量为0x92。再将0x92代入以前的方法中,即可完成读取LidSwitch状态的功能。
●操作PCI设备途径
目前,以操作PCI设备途径读取Lid Switch状态的检测方法中,不确定的参数(即测试数据信息)包括PCI设备的设备号、总线号、功能号、缓存器的偏移量和状态字的有效位。这些参数大多会随着机型的改变而不同。这些参数通过设备名称串取得。
因此当硬件途径为操作PCI设备途径时,在根据硬件途径通过设备名称串取得测试数据信息的步骤中,即步骤160,可为通过设备名称串取得PCI设备的设备号、总线号、功能号、缓存器的偏移量和状态字的有效位。
其中,‘状态字的有效位’的取得方法,如下参照图8,步骤261,首先读取设备名称串前一个字节,以取得操作语句;步骤262,读取设备名称串后一个字节,以取得操作语句的语句参数长度;步骤263,最后,根据语句参数长度再向后读取一特定字节,以取得语句参数。
也就是,找到包含“\_SB_”的设备名称串后,向前读取一个字节,此字节为操作语句,如“AND<0x7b>”语句,接着读取设备名称串后面一个字节,此字节表示语句参数的长度,因此,假设此语句参数的长度为0x0a则再读一个字节,得到的语句参数就是我们需要的参数,也就是Lid Switch状态的有效参数;若语句参数的长度为0x0b则需再读取两个字节,才是语句参数;而若语句参数的长度为0x0c则再读取四个字节。
其中,‘缓存器的偏移量’的取得方法,如下参照图9,步骤361,首先在设备名称串中,以四个字节为长度标准分割成多个名称串;步骤362,查找不具装置定义的名称串中,得一特定名称串;步骤363,查找特定名称串所在的配置空间;步骤364,取得并记录此配置空间的基地址,和名称串在配置空间中的偏移量;步骤365,最后将基地址与偏移量相加,以取得缓存器的偏移量。在此,装置定义即为指Device<0x5b 0x82>。
‘设备号和功能号’的取得方法,如下参照图10,步骤461,取得设备名称串的倒数第二个字段;步骤462,在字段中查找第二运算参数,以取得第二运算参数的信息;最后,步骤463,在第二运算参数的信息中查找高字和低字,以得到高字值和低字值,其中高字值即为设备号而低字值即为功能号。
‘总线号’的取得方法,如下参照图11,步骤561,在设备名称串中取得第一运算参数为第二装置标识的名称串,以得到总线设备名称串;步骤562,从总线设备名称串中取得一总线号;步骤563,根据总线设备名称串向下存取各设备的分类号(Class Code)并根据分类号选择性取得下一级的总线号,其中当发现存取的分类号为桥设备时则取得第二总线号;步骤564,取得最后得到的总线号,此即为所需的测试数据信息中的总线号。
也就是,先在设备名称串中找到“_HID”为“PNP0A03”的设备的名称串,此即为PCI总线,因此从中可得的总线号为“0”。总线设备名称串向后,分别按照PCI设备操作方法存取设备分类号,如果发现它是PCI的桥设备,则记录此下一级总线号。当分析完整个设备名称串后,此即为所需的测试数据信息中的总线号。
其中总线设备名称串的取得方法,即步骤561,可由下列步骤来实现。参照图12,步骤5611,以一长度标准在设备名称串中查找装置定义;步骤5612,在找到装置定义时,可根据装置定义取得第二设备描述语句;步骤5613,接着,在第二设备描述语句中查找名称定义;步骤5614,在找到名称定义时,可根据名称定义取得第二设备名称语句;步骤5615,在第二设备名称语句中寻找第一运算参数,步骤56151,其中若在第二设备名称语句不具有第一运算参数时,则重新在设备名称串中以一长度标准寻找下一个装置定义,即回到步骤5611;步骤5616,而在找到第一运算参数时,则摘取出第一运算参数的标识语句,并比较此标识语句是否为第三装置标识,步骤56161,其中若标识语句不为第三装置标识时,则也重新在设备名称串中以一长度标准寻找下一个装置定义,即回到步骤5611;步骤5617,取得第一运算参数为第三装置标识的名称串,以得到总线设备名称串。
在此,装置定义也可为“Device”,因此第二设备描述语句即为“Device”所包含的语句范围;名称定义为“Name”,而第二设备名称语句即为“Name”所包含的语句范围,如Name<_HID,“PNP0A03”>;与上述相同,第一运算参数即为更改设备指令,也就是“_HID”,而在此的第三装置标识为“PNP0A03”,因此得到的比较结果则是指“_HID”是否为“PNP0A03”。
通过硬件途径和测试数据信息测试lid switch,即步骤170,可通过下列步骤来实现。参照图13,步骤171,根据取得的总线号、设备号、功能号和缓存器偏移量存取PCI总线上的缓存器,以得到一个数值;步骤172,再将这个数值按照操作语句<通常是“与”定义的操作语句,即“AND”>,与Lid Switch状态有效参数进行运算,即可得到Lid Switch的信息。
举例来说,首先,按照ACPI的规范取得储存于BIOS中的机械语言,在其中查找Device定义,以取得使用Device定义的第一设备描述语句,并且在第一设备描述语句中找到一设备名称为“C13B”,并于“C13B”的定义区间中找到其更改设备指令为一第一装置标识,也就是“_HID”为“PNP0C0D”,则“Device(C13B)”的区间(即,第一设备描述语句)中包括了与Lid Switch相关的实现方法和功能,也就是在“Device(C13B)”的区间中包括了Lid Switch的相关设备描述。在此,取得之“Device(C13B)”的区间如下
Device(C13B)  {   Name(_HID,EisaId("PNP0C0D"))   Name(_PRW,Package(0x02)   {   0x03,   0x04   })   Method(_LID,0,NotSerialized)   {   Store(0x00,Local0)   If(And(\_SB.C045.C074.C07D,0x08))   {   Store(0x01,Local0)   }   Return(Local0)  }  }  Scope(\_SB_)<!-- SIPO <DP n="17"> --><dp n="d17"/>  {  Device(C045)  {  Name(_HID,“PNP0A03”)  Name(_ADR,0x00)  ……   Device(C074)  {  Name(_ADR,0x00110000)  OperationRegion(C075,PCI_Config,0x40,0xA0)  Field(C075,AnyAcc,NoLock,Preserve)  {  ……  Offset(0x44),   C07C,32,   C07D,8,  }   }  }  }
接着,查找使用“Method<0x14>”(即,方法定义)的实现语句区间,此即为方法描述语句,在此区间查找“\_SB”(即,第一关键参数)可得到一字符串,即可得到一设备名称串为“\_SB_.C045.C074.C07D”。依照四个字节为长度标准,在字符串中分析各个名称语句的设备类型。方法同第一步,查找“Device”取得第二设备描述语句,接着查找“Name”取得第二设备名称语句,再通过“_HID”和“_ADR”进行判断,并且依次反复进行以分析完字符串中各个第二设备名称语句的。在上例中,“\_SB_”表示设备总集,不参加分析动作,“C045”的“_HID”为“PNP0A03”,所以“C045”是PCI总线,它的总线号为“0”,记录下来。再查找“C074”的信息,发现它没有“_HID”信息,表示它是一个普通PCI设备。读取它的“_ADR”信息为“0x00110000”。最后查找“C07D”的信息,发现它不是一个设备,因为它不是使用“Device<0x5b 0x82>”定义的,它在名为“C075”的配置空间中,而这个配置空间数据在PCI设备“C074”的。所以此时可以确定在该种机型上,Lid Switch的状态信息记录在一个PCI设备的配置空间中,这个设备在BIOS中的代号就是“C074”。
其中,设备名称串向前读一个字节可得到名称串的操作语句为“AND”。向后读一个字节为“0x0a”,表示Lid Switch状态有效参数占一个字节,再读出一个字节为“0x08”,即可得到Lid Switch状态有效参数的值为“0x08”。
并且,由于“C074”的“_ADR”等于“0x00110000”,因此根据ACPI的规范可以得知这个设备的设备号为“0x11”,功能号为“0x00”。
由于“C07D”记录了Lid Switch的信息,且其属于“C074”的配置空间“C075”,因此通过“OperationRegion<0x5b 0x80>”语句,可得知配置空间“C075”的基地址为“0x40”。而通过“Field<0x5b 0x81>”语句,可得知“C07D”在配置空间中的偏移量为“0x48”。所以相对于PCI设备“C074”的偏移量就是“0x40”加“0x48”,等于“0x88”。
根据得到的总线号<0x00>、设备号<0x11>、功能号<0x00>、偏移量<0x88>等测试数据信息,通过PCI设备的存取方法读出一个数值。将这个数值按照第二步中得到的操作语句And和Lid Switch的状态有效参数,进行相应操作就可以得到Lid Switch的状态。And表示需要进行“与”操作,所以相应操作就是访问读出的数值与上0x08,即是Lid Switch的状态。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明权利要求的保护范围。
权利要求
1、一种屏幕开关状态的取得方法,应用于支持先进架构电源接口标准的一便携式电子装置,其中该便携式电子装置包括一屏幕开关,其特征在于,该取得方法包括下列步骤
按照该先进架构电源接口标准的规范来取得储存于该便携式电子装置的基本输入/输出控制系统中的机械语言;
在该机械语言中获取该屏幕开关的设备描述区间;
在该设备描述区间中获取涉及实现途径的字符串,以得到一个以上的方法描述语句;
在该方法描述语句中取得一个以上的设备名称串;
通过该设备名称串决定一硬件途径;以及
根据该硬件途径,利用该设备名称串取得一个以上的测试数据信息。
2、根据权利要求1所述的屏幕开关状态的取得方法,其特征在于,还包括下列步骤根据该测试数据信息通过该硬件途径以测试该屏幕开关的状态。
3、根据权利要求1所述的屏幕开关状态的取得方法,其特征在于,在该机械语言中获取该屏幕开关的设备描述区间的步骤中包括下列步骤
在该机械语言中查找一装置定义;
根据该装置定义取得一第一设备描述语句;
在该第一设备描述语句中查找一名称定义;
根据该名称定义取得一第一设备名称语句;
在该第一设备名称语句中查找该第一运算参数;
取得该第一运算参数的一标识语句,并比较该标识语句是否为一第一装置标识,以得一比较结果;以及
根据该比较结果选取该第一设备描述语句,以得到该设备描述区间。
4、根据权利要求1所述的屏幕开关状态的取得方法,其特征在于,该方法描述语句中取得一个以上的设备名称串的步骤包括下列步骤
在该方法描述语句中查找一第一关键参数;以及
摘取包含该第一关键参数的字符串,以取得一个以上的设备名称串。
5、根据权利要求1所述的屏幕开关状态的取得方法,其特征在于,在通过该设备名称串决定一硬件途径的步骤包括下列步骤
以一长度标准在该设备名称串中查找一装置定义;
根据该装置定义取得一第二设备描述语句;
在该第二设备描述语句中查找一名称定义;
根据该名称定义取得一第二设备名称语句;
在该第二设备名称语句中查找一第一运算参数;
摘取出该第一运算参数的标识语句,并比较该标识语句是否为一第二装置标识,以得一比较结果;以及
根据该比较结果决定该硬件途径。
6、根据权利要求1所述的屏幕开关状态的取得方法,其特征在于,根据该硬件途径,利用该设备名称串取得一个以上的测试数据信息的步骤中包括下列步骤
在该设备名称串中取得一硬件名称串;
在该硬件名称串中取得一操作空间语句和一范畴语句所定义的一个以上的空间;以及
在该空间中取得设置该屏幕开关的一屏幕于该硬件途径的一硬件名称的位置,以得该测试数据信息。
7、根据权利要求1所述的屏幕开关状态的取得方法,其特征在于,根据该硬件途径利用该设备名称串取得一个以上的测试数据信息的步骤为根据该硬件途径利用该设备名称串取得表示该屏幕开关状态位在该硬件途径中的一偏移量。
8、根据权利要求1所述的屏幕开关状态的取得方法,其特征在于,根据该硬件途径利用该设备名称串取得一个以上的测试数据信息的步骤为根据该硬件途径利用该设备名称串取得表示该屏幕开关状态位在该硬件途径中的一设备号、一总线号、一功能号、一缓存器的偏移量和一状态字的有效位。
9、根据权利要求8所述的屏幕开关状态的取得方法,其特征在于,还包括下列步骤
读取该设备名称串前一字节,以取得一操作语句;
读取该设备名称串后一字节,以取得该操作语句的一语句参数长度;以及
根据该语句参数长度向后读取特定字节,以取得一语句参数,其中该语句参数为该状态字的有效位。
10、根据权利要求8所述的屏幕开关状态的取得方法,其特征在于,还包括下列步骤
以一长度标准分割该设备名称串以得到多个名称串;
在该名称串中查找不具装置定义的名称串,以得一特定名称串;
查找该特定名称串所在的配置空间;
取得并记录该配置空间的一基地址,和该特定名称串在配置空间中的一偏移量;以及
将该基地址与该偏移量相加,以取得该缓存器的偏移量。
11、根据权利要求8所述的屏幕开关状态的取得方法,其特征在于,还包括下列步骤
在该设备名称串中取得一总线设备名称串;
在该总线设备名称串中取得一总线号;
根据该总线设备名称串向下存取一个以上的分类号并根据该分类号选择性取得下一级的该总线号;以及
取得最后得到的该总线号。
全文摘要
本发明涉及一种屏幕开关状态的取得方法,应用于支持先进架构电源接口标准(ACPI)的便携式电子装置,便携式电子装置包括屏幕开关,取得方法包括下列步骤按照该ACPI的规范取得储存于便携式电子装置的基本输入/输出控制系统(BIOS)中的机械语言;在机械语言中获取屏幕开关的设备描述区间;在设备描述区间中获取涉及实现途径的字符串,得到一个以上的方法描述语句;在方法描述语句中取得一个以上的设备名称串;通过设备名称串决定一硬件途径;以及根据硬件途径,利用设备名称串取得一个以上的测试数据信息。本发明通过先进架构电源接口标准在BIOS中取得屏幕开关的相关信息,得到兼容性高的测试方法,节省出厂测试时间及成本。
文档编号G06F11/22GK1797358SQ20041010278
公开日2006年7月5日 申请日期2004年12月28日 优先权日2004年12月28日
发明者宋建福, 刘文涵, 刘萍, 刘一波, 胡幸 申请人:英业达股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1