设备树及基本信息需求说明
- 格式:doc
- 大小:438.00 KB
- 文档页数:9
Linux设备树(三属性)三属性(property)device_type = "memory"就是⼀个属性,等号前边是属性,后边是值。
节点是⼀个逻辑上相对独⽴的实体,属性是⽤来描述节点特性的,根据需要⼀个节点由0个,1个或多个属性表⽰节点的特性。
⼀个属性由名字和值两部分组成。
和节点的名字类似,规范要求属性名字由1到31个字符组成。
和节点名字字符的种类有些区别,不允许有⼤写字母,增加了问号和井号两个字符。
不清楚为什么没有和节点名字完全保持⼀致,井号对于初学者容易误解,以为是注释。
0-9 数字a-z ⼩写字母, 逗号. 句点(英)_ 下划线+ 加号- 破折号(英)问号# 井号为了容易区分以及避免重复,标准未定义的属性名字应该⽤公司或组织名称开头,⽐如:fsl,channel-fifo-lenibm,ppc-interrupt-server#slinux,network-index属性的值在内存中由0个或多个字节存储。
标准定义的基本类型包括:空,u32,u64,字符串,<prop-encoded-array>,字符数组6种。
空前边我们已经提到,当不需要值就可以表⽰节点的特性时,属性的值可以为空。
u32,u64,字符串,字符数组和c语⾔的定义没有区别,注意的是规范要求都是⼤端表⽰,字符串也是以0x00结尾。
<prop-encoded-array>是⼀个结构体数组,数组的元素具体是什么根据属性的定义确定,后边我们讲到具体的属性时会详细说明。
规范中还有⼀个类型的属性值,叫<phandle>,这个类型的属性在内存中存储时本质上是u32。
规范预定义了⼀些标准的属性。
“compatible”,“model”,"device_type"都是⽤来表⽰节点基本信息的。
“compatible”属性是⽤来匹配驱动的,他的类型是字符串数组,每个字符串表⽰⼀种设备的类型,从具体到⼀般。
设备树设备树是一种描述硬件结构的文本文件,广泛应用于嵌入式系统开发中。
它提供了一种通用的方式来描述系统中有哪些硬件设备、它们的属性以及它们之间的关系。
设备树的出现极大地简化了嵌入式系统的开发过程,让不同硬件架构之间可以共用相同的软件代码,提高了系统的可移植性和可维护性。
设备树的基本概念设备树使用一种类似于树形结构的表示方式来描述系统中的硬件设备。
它由节点(node)和属性(properties)组成,每个节点描述一个硬件设备或一个硬件功能单元,每个节点的属性描述了这个设备的特征或配置信息。
设备树文件以.dts 或.dtsi为后缀,通常由设备树编译器编译成二进制形式的.dtb文件,用于在系统启动阶段被加载并解析。
设备树的节点按照层次结构组织,每个节点可以有多个子节点,形成树形关系。
节点之间通过属性进行关联,属性可以是简单的键值对,也可以是复杂的数据结构。
每个节点都有一个唯一的路径,称为全局路径(full path),用于唯一标识这个节点在设备树中的位置。
设备树的优势设备树的出现带来了许多优势,其中包括但不限于以下几点:增强了移植性设备树的描述是硬件无关的,通过设备树描述的硬件信息可以在不同的硬件平台上共享使用。
这使得嵌入式软件可以更容易地实现在不同硬件平台上的移植,降低了移植工作的难度和成本。
简化了系统配置设备树将硬件描述和驱动程序分离开来,硬件描述独立于操作系统和驱动程序形式存在,这样可以通过修改设备树来配置硬件信息,而不必直接修改驱动程序。
这种分离简化了系统配置,降低了维护成本。
增强了系统的灵活性和扩展性通过设备树,系统可以很容易地识别新增加的硬件设备,并动态地调整系统的硬件资源分配。
这种灵活性和扩展性使得系统更容易适应不同的硬件配置和需求变化。
设备树的应用设备树广泛应用于各种嵌入式系统中,特别是Linux系统。
在Linux系统中,设备树描述了系统中的硬件设备,内核启动时会加载设备树并解析其中的设备信息,使得内核可以识别和管理系统中的硬件设备。
设备树是嵌入式系统中常用的一种描述硬件信息的数据结构,它在Linux内核中被广泛应用。
设备树传递流程是指在Linux内核启动过程中,设备树如何被加载和传递给内核的过程。
本文将对设备树传递流程进行全面解析,包括设备树的基本概念、设备树的编译和加载过程、设备树的传递和解析过程等方面进行深入讨论。
一、设备树的基本概念1. 设备树的概念设备树是一种描述硬件信息的数据结构,它使用树形结构来组织系统中的各种设备和资源的信息。
设备树可以描述处理器、内存、外设、总线等硬件资源之间的连接关系,以及它们的属性和配置信息。
在嵌入式系统中,设备树通常采用.dts或.dtb文件的形式存在,它在系统启动时被加载到内存中,供内核使用。
2. 设备树的作用设备树的主要作用是将系统中的硬件信息与操作系统内核进行解耦,使得操作系统内核可以在不同硬件评台上运行而不需要修改内核代码。
通过设备树,系统的硬件配置信息可以在启动时由Bootloader加载到内存中,内核在启动时可以根据设备树的信息来动态地注册设备驱动程序和配置硬件资源,从而实现对不同硬件评台的适配。
二、设备树的编译和加载过程1. 设备树的编译设备树通常采用.dts(Device Tree Source)文件的形式进行描述,这是一种类似于C语言的描述性语言。
在编译设备树时,可以使用设备树编译器(dtc)将.dts文件编译成.dtb(Device Tree Blob)文件,它是设备树在内存中的二进制表示形式。
2. 设备树的加载在系统启动时,Bootloader负责加载设备树文件到内存中的某个固定位置区域,以便内核在启动时能够访问设备树的信息。
设备树一般被加载到内存的高位置区域处,这样内核就可以方便地找到设备树的位置。
三、设备树的传递和解析过程1. 设备树的传递在Linux内核的启动过程中,Bootloader会将设备树的位置区域传递给内核。
这通常是通过设备树的指针传递给内核的启动参数的方式实现的。
设备树及基本信息需求说明一、业务说明本系统为设备信息管理平台,已有系统框架,ibatis架构,数据库与数据库基本操作文件都已写出,现需要做的模块是设备树和设备基本信息维护页面。
二、数据库表说明表名:MIP_Product三、现有文件列表及其说明四、需要完成的文件列表页面文件名可修改,文件路径都为WebLib.Web\BaseInfo\Product五、 任务需求说明1. 设备树通过层次编码,把设备分为一级系统、二级系统等,三位编码表示一个层次,例如001表示一级系统,001001表示二级系统,等等。
设备树各层次可以展开折叠,其形式可参见下图(部门树在本系统已具有)。
页面说明左侧设备树,右侧是与设备相关的信息,右侧的信息采用Coolite 中的Tab 控件来实现,目前只需要实现“设备信息”即可,Tab 中的每一个按钮对应一个独立的页面,页面初始化时,这些页面不载入,当点击Tab 中的按钮,如设备信息,该页面通过Ajax 方式载入。
2.设备树的显示与维护●此部分功能与部门管理模块相似。
1.设备具有编号,根据设备编号来生成设备树结构2.点击“选择编号”按钮,会下拉一个页面(此下拉功能直接使用coolite的控件即可方便实现),从页面中获得设备所属系统的代码,此页面可以先不做,先模拟返回一个编号即可,此编号对应系统数据表“MIP_System”中的“Serial”字段,当点击返回后,重新根据“Serial”编码生成设备树结构。
3.点击“查看信息”按钮,会跳转到另一个页面——系统信息页面,此页面开发工作后期做,需要传递的参数为通过“选择编号”按钮所获取的“Serial”数值。
当点击某一个设备节点时,节点参数传递到右侧的Tab页面中,对应的页面也同步更新,注意“系统基本页面”不必更新,此页面仅仅当选择了“选择编号”这个按钮,并且编号发生变更时才需要更新●应具有与部门树类似的功能:模糊查询、添加设备、删除设备,上下移动,1)模糊查询功能在设备树上方设置模糊查询功能,输入设备名称的某几个关键字,点击“查询”按钮,设备树中包含关键字的设备将展开并以亮色显示,若有多个设备包含关键字,则这些所有设备都以亮色显示,并通过“下一个”或“上一个”按钮进行切换选中状态。
Linux设备树说明【转】⼀、什么是设备树? 在Linux3.x之前的内核源码中,存在⼤量对板级细节信息描述的代码。
这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx⽬录中。
每年新出的 ARM 架构芯⽚少说都有数⼗、数百款,每⼀款芯⽚⼜会有很多款基于该芯⽚的板⼦,这些板⼦上的设备⼜不相同,每⼀块板⼦都要有⾃⼰的板级信息⽂件,所以Linux 内核下板级信息⽂件将会成指数级增长!关键是这些板级信息⽂件还都是.c 或.h ⽂件,它们都会被编译进 Linux 内核中,导致 Linux 内核“虚胖”。
因此为了解决这个问题,引⼊设备树。
设备树(Device Tree),将这个词分开就是“设备”和“树”,描述设备树的⽂件叫做DTS(Device Tree Source),这个 DTS ⽂件采⽤树形结构描述板级设备,也就是开发板上的设备信息,⽐如CPU数量、内存基地址、IIC接⼝上接了哪些设备、SPI接⼝上接了哪些设备等等,如下图所⽰: 在上图中,树的主⼲就是系统总线,IIC控制器、GPIO 控制器、SPI控制器等都是接到系统主线上的分⽀。
IIC 控制器有分为 IIC1和 IIC2两种,其中IIC1上接了FT5206 和 AT24C02这两个 IIC 设备,IIC2上只接了 MPU6050 这个设备。
DTS⽂件的主要功能就是按照上图所⽰的结构来描述板⼦上的设备信息,DTS ⽂件描述设备信息是有相应的语法规则要求的。
所以总结来说就是:设备树是⼀种描述硬件资源的数据结构。
它通过bootloader将硬件资源传给内核,使得内核和硬件资源描述相对独⽴,也即设备树⽂件不需要编译进内核。
设备树的主要优势:在设备树出现以前,所有关于设备的具体信息都要写在驱动⾥,⼀旦外围设备变化,驱动代码就要重写。
⽽引⼊设备树之后,对于同⼀SOC的不同主板,只需更换设备树⽂件.dtb即可实现不同主板的⽆差异⽀持,⽽⽆需更换内核⽂件。
设备树使用简介摘要:是不是所有的Linux内核都是完美的?毕竟诸多黑客效力于此,当然不是,至少在内核3.x版本之前不是,之前的代码臃肿,代码利用率较低,直到设备树的引入,彻底改善这一情况;一、FDT的概念系统启动时,Bootloader开始加载,将内核文件,如zImage读取到内存中,内核按照我们的代码,逐一去配置每个寄存器,每个外设,似乎没有什么问题。
但是试想一下,100种ARM芯片,就要写100个配置文件么?当然,如果你非要这么做,我也无话可说。
如果能抽象出一种数据结构,它可以直接抽象出内核需要配置的所有硬件以及硬件属性,BootLoader预读取到内存中,在内核启动以后,可以直接配置,对于用户而言,配置MCU 的外围时我们直接面对的就只是这个DTS文件,极其方便快捷。
FDT准确来讲是一种数据结构,使得硬件可以用形如XML的描述语言来描述。
二、设备树结构图一设备树结构设备树一般包含以上内容:根节点“/”下的model ,这个一般为字符串类型,它描述了厂商以及板子名称;根节点“/”下的compitable,这个一般为字符串类型,用以匹配model选定的开发板对应的代码;包括后续外围驱动的匹配均是有这个compitable来完成;根节点“/”下的aliases,这个设备节点只能放在根节点目录,主要用以存放外设的别名,简单讲,"/soc/aips-bus@02000000/spba-bus@02000000/serial@02020000"其实是一个串口,但是开发人员自己看起来并不直观,我可以在aliases中写作:serial ="/soc/aips-bus@02000000/spba-bus@02000000/serial@02020000";serial即可代替刚才的串口设备;根节点“/”下的chosen:这个并非物理设备节点,而是内核启动参数的节点,类似于uboot阶段的bootargs参数;当然,这个节点也可以是子节点,不一定要在根节点下;实例:chosen {stdout-path = &uart1;};snvs@020b0000:除以上节点,剩下的我一般称之为物理设备节点(可能不准确),以snvs 外设举例,直接举例;实例:snvs@020b0000{conpitable = “fsl,imx6ul-snvs”;reg = <0x020b0000 0x4000>;interrupts = <0x0 0x4 0x4>;};(1)“@”后面紧跟就是该外设在MCU总线的地址,这个不难理解,可以理解为外设的基地址,外设模型name@addresss;”(2)“compitable”:如上陈述,非常关键的属性,匹配外设驱动,属性模型 compitable = “[manufacture,[model]]”;(3)“reg”:该属性为外设地址属性,第一个参数为该节点总线地址,后者为地址长度;(4)“interrupt”:顾名思义,该外设的中断,para1表示该中断是不是SPI中断(shared peripheral interrupt),注意名词区分,参数值为1表示为SPI中断,反之不是SPI中断;para2是该中断号;para3表示触发方式,参数值为1,表示上升沿触发,为4表示高电平触发;如果需要低电平以及下降沿触发,硬件需要加非门;三、编译设备树与反编译设备树编译,我们都知道使用如下命令编译:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs 或者make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all实际上,是dtc这个文件在负责把dts解释成dtb文件,该文件在内核源码根目录 ./scripts/dtc编译命令:./scripts/dtc/dtc –I dts –O dtb /home/gyh/tmp/imx6y2c-256m.dtb ./arch/arm/boot/dts/imx6y2c-256m.dts 反编译命令:./scripts/dtc/dtc -I dtb -O dts -o /home/gyh/tmp/imx6y2c_asm.dts ./arch/arm/boot/dts/imx6y2c-256m.dtb 对于Linux命令的使用,可以使用help cmdname 或者man cmdname,对于dtc,非内建命令,man dtc:-I <input format>Input formats are:dts - device tree source textdtb - device tree blobfs - /proc/device-tree style directory-O <output format>Output formats are:dts - device tree source textdtb - device tree blobasm - assembler source系统提供的dts一般引用dtsi这个母设备树,所以大量外设都是直接引用dtsi中的,因此很难理解这些字符串是怎样的匹配驱动程序的,但是一旦将已经生产的dtb文件反编译,生产的dts文件将更直观;但是易读性也更差。
设备树(Device tree)是一套用来描述硬件属相的规则.设备树是从软件使用的角度描述硬件的,不是从硬件设计的角度描述的。
我们在写设备树时没有必要按照硬件逻辑生搬硬套,也不要指望通过阅读设备树弄清楚硬件是如何设计的。
对于软件可以自动识别的硬件,如USB设备,PCI设备,也是没有必要通过设备树描述的。
我个人觉得规范内容是可以分为两个层次的。
第一层是关于设备树组织形式的,如设备树结构,节点名字的构成等,第一个层次是基础,是理解第二个层次的前提。
第二层是关于设备树内容的,如多核CPU怎样描述,一个具体的设备如何描述。
第二层可以看成是第一层的具体应用。
DTS(Device tree syntax,另一种说法是Device tree source)是设备树源文件,为了方便阅读及修改,采用文本格式。
DTC(Device tree compiler)是一个小工具,负责将DTS转换成DTB(Device tree blob)。
设备树首先是一个树形结构,并且是一棵树。
除了根节点外其他子节点都有唯一的父节点,节点下可以有子节点和属性(子节点可以看成是树枝,属性可以看成是叶子)。
属性由名字和值组成(名字是必须的,但是值不是必须的,如果只要根据是否存在这个属性就可以表示我们想要的功能,那么可以不需要有值)。
节点(node)的表示首先说节点的表示方法,除了根节点只用一个斜杠“/”表示外,其他节点的表示形式如“node-name@unit-address”。
@前边是节点名字,后边是节点地址。
节点地址是用来区别同名节点的,不是软件意义上的地址,但是有些情况可以用软件地址作为这个地址。
除此之外规范还要求,如果节点有地址,那么节点下边必须有一个叫reg的属性,并且该地址必须和reg的属性的第一个地址相同。
如果节点没有reg属性,那么节点地址及前边的@必须都不能有。
除了名字和地址外,节点前边还可以有一个标签(label),这个标签不是必须的,一般只有在别个地方需要引用这个节点时才会用标签标示这个节点,因为如果用全路径太繁琐了。
设备树节点的定义和声明
设备树是一种描述硬件设备及其与系统之间连接关系的数据结构,它以一种结构化的方式来描述设备的特性和属性。
在设备树中,每个设备都被表示为一个节点,节点之间通过父子关系来描述设备之间的连接关系。
每个节点都包含设备的属性和配置信息,以便系统能够正确地识别和管理设备。
节点的定义通常包括以下几个方面:
1. 名称:节点的名称用于唯一标识该设备,通常使用设备的厂商和型号来命名。
2. 类型:节点的类型指明了设备的种类,例如,是一个串口设备、网络设备还是一个传感器设备等。
3. 特性和属性:节点包含的特性和属性描述了设备的一些基本信息,如设备的地址、中断号、传输速率等。
这些属性有助于系统正确地配置和管理设备。
4. 子节点:节点可以包含子节点,用于描述设备之间的连接关系。
子节点可以继承父节点的一些属性,从而简化设备的描述。
节点的声明是指在设备树中声明一个新的节点,以便系统能够识别和使用该设备。
在声明节点时,需要指定节点的名称、类型和属性等信息。
节点的声明通常包括以下几个步骤:
1. 定义节点:定义一个新的节点,指定节点的名称和类型。
2. 添加属性:为节点添加属性,描述设备的一些基本信息。
3. 声明子节点:如果设备存在子设备,需要声明子节点并设置相应的属性。
4. 链接到父节点:将节点链接到父节点,描述设备之间的连接关系。
通过设备树节点的定义和声明,系统能够准确地描述和管理硬件设备,使系统能够正确地配置和使用这些设备。
设备树的使用不仅简化了设备的配置和管理,还提高了系统的可移植性和可扩展性,使系统更加灵活和易于维护。
设备树使用手册本文将介绍如何为一个新机器编写设备树。
我们准备提供一个有关设备树概念的概述和如何使用这些设备树来描述一个机器。
完整的设备树数据格式的技术说明书请参考 ePAPR 规范。
ePAPR 规范涵盖了比本文基本主题更丰富的细节,要查阅本文没有涉及到的高级用法请参考该规范。
目录1. 基本数据格式2. 基本概念2.1 模型机2.2 初始结构2.3 中央处理器2.4 节点名称2.5 设备2.6 理解 compatible 属性3. 如何编址3.1 CPU 编址3.2 内存映射设备3.3 非内存映射设备3.4 范围(地址转换)4. 中断的工作方式5. 设备特定数据6. 特殊的节点6.1 aliases 节点6.2 chosen 节点7. 高级主题7.1 高级模型机7.2 PCI 主桥7.2.1 PCI 总线编号7.2.2 PCI 地址转换7.3 高级中断映射8. 附注基本数据格式设备树是一个包含节点和属性的简单树状结构。
属性就是键-值对,而节点可以同时包含属性和子节点。
例如,以下就是一个.dts 格式的简单树:/{node1 {a-string-property = "A string";a-string-list-property = "first string", "second string";a-byte-data-property = [0x01 0x23 0x34 0x56];child-node1 {first-child-property;second-child-property = <1>;a-string-property = "Hello, world";};child-node2 {};};node2 {an-empty-property;a-cell-property = <1 2 3 4>; /* each number (cell) is a uint32 */ child-node1 {};};};这棵树显然是没什么用的,因为它并没有描述任何东西,但它确实体现了节点的一些属性:■一个单独的根节点:“/”■两个子节点:“node1”和“node2”■两个node1 的子节点:“child-node1”和“child-node2”■一堆分散在树里的属性。
1、ARM Linux社区为什么要引入设备树Linux之父Linus Torvalds闲来无事,在翻看ARM Linux代码的时候,有一天终于忍不住了。
他在2011年3月17日的ARM Linux邮件列表中说道:“This whole ARM thing is a f*cking pain in the ass”。
这句话迫使ARM Linux社区引入了设备树。
Linus Torvalds为什么会发飙呢?而ARM Linux社区的牛人为什么又乖乖地听话了?你得首先理解Linux设备驱动框架中一个非常好的设计:设备信息和驱动分离。
为了说明设备信息和驱动分离的概念,这里用一个简单的模拟代码来解释:【例-1】实现一个代码,把要使用的信息简单写死在代码中:int add() /*模拟驱动代码*/{return 3+5; /*模拟设备信息*/}优点:简单缺点:一旦加数和被加数发生变化就得改代码改进设计如下:【例-2】实现一个代码,把要使用的信息和操作代码分离开来:struct dev{int id;int x;int y;}; /*模拟设备信息结构*/strcut drv{int id;int (*add)(struct dev *info);}; /*模拟驱动结构*/int add(struct dev *info) /*模拟驱动代码*/{return info->x + info->y; /*模拟设备信息-通过参数传递进来*/}struct drv drv = {.id = 1,.add = add,};/*模拟设备信息*/struct dev dev = {.id = 1,.x = 3,.y = 5,};/*模拟总线初始化匹配设备信息和驱动代码*/int bus(){if(dev.id == drv.id){return drv.add(&dev);}...}优点:不管加数和被加数怎么变化,不需要修改代码,仅需要修改信息缺点:结构比较复杂那这个设备信息和驱动分离的设计跟驱动有什么关系呢?熟悉硬件编程的同学都知道,硬件一般的构成可以使用下图简单表述:操作外设的驱动代码逻辑,只要硬件是一样的,就不会变化。
设备树及基本信息需求说明
一、业务说明
本系统为设备信息管理平台,已有系统框架,ibatis架构,数据库与数据库基本操作文件都已写出,现需要做的模块是设备树和设备基本信息维护页面。
二、数据库表说明
表名:MIP_Product
三、现有文件列表及其说明
四、需要完成的文件列表
页面文件名可修改,文件路径都为WebLib.Web\BaseInfo\Product
MIP_ProductView.aspx.designer.cs
3 产品编辑页
面MIP_ProductEdit.aspx
MIP_ProductEdit.aspx.cs
MIP_ProductEdit.aspx.designer.cs
4 产品新增页
面MIP_ProductAdd.aspx
MIP_ProductAdd.aspx.cs
MIP_ProductAdd.aspx.designer.cs
5 选择产品页
面MIP_ProductChoose.aspx
MIP_ProductChoose.aspx.cs
MIP_ProductChoose.aspx.designer.cs
6 产品搜索页
面MIP_ProductSearch.aspx
MIP_ProductSearch.aspx.cs
MIP_ProductSearch.aspx.designer.cs
此页面可与产品结构树页面放
在一起,不过搜索功能模块要
分开
五、任务需求说明
1.设备树
通过层次编码,把设备分为一级系统、二级系统等,三位编码表示一个层次,例如001表示一级系统,001001表示二级系统,等等。
设备树各层次可以展开折叠,其形式可参见下图(部门树在本系统已具有)。
页面说明
左侧设备树,右侧是与设备相关的信息,右侧的信息采用Coolite中的Tab控件来实现,目前只需要实现“设备信息”即可,Tab中的每一个按钮对应一个独立的页面,页面初始化时,这些页面不载入,当点击Tab中的按钮,如设备信息,该页面通过Ajax方式载入。
2.设备树的显示与维护
●此部分功能与部门管理模块相似。
1.设备具有编号,根据设备编号来生成设备树结构
2.点击“选择编号”按钮,会下拉一个页面(此下拉功能直接使用coolite的控件即可方便
实现),从页面中获得设备所属系统的代码,此页面可以先不做,先模拟返回一个编号即可,此编号对应系统数据表“MIP_System”中的“Serial”字段,当点击返回后,重新根据“Serial”编码生成设备树结构。
3.点击“查看信息”按钮,会跳转到另一个页面——系统信息页面,此页面开发工作后期
做,需要传递的参数为通过“选择编号”按钮所获取的“Serial”数值。
当点击某一个设备节点时,节点参数传递到右侧的Tab页面中,对应的页面也同步更新,注意“系统基本页面”不必更新,此页面仅仅当选择了“选择编号”这个按钮,并且编号发生变更时才需要更新
●应具有与部门树类似的功能:模糊查询、添加设备、删除设备,上下移动,
1)模糊查询功能
在设备树上方设置模糊查询功能,输入设备名称的某几个关键字,点击“查询”按钮,设备树中包含关键字的设备将展开并以亮色显示,若有多个设备包含关键字,则这些所有设备都以亮色显示,并通过“下一个”或“上一个”按钮进行切换选中状态。
2)添加设备功能
i.选择某个设备右键菜单有“添加设备功能”,系统的其他页面将处于不可编辑状态;在
各文本框后实时出现填写提示,页面中可选择设备的上级系统并以此对此设备自动编码。
ii.添加设备后:更新设备树,并使焦点位于新增加的设备节点上;
iii.更新右侧Tab中显示的页面,注意仅仅更新当前被选择的tab页面,更新时,将新的设备编码传入该页面即可。
iv.“照片”处应有照片上传功能,点击后弹出上传功能窗口。
照片的格式有:JPG,BMP,GIF 等,而且,应该可以传入设备的多张照片。
v.点击“保存”按钮,若保存成功则弹出“保存成功”窗口,此设备将添加到设备树中;
若保存出错,则要弹出保存出错的原因窗口并返回到填写页面,填写无误的文本框将保存原内容,光标移到出错的文本框上,并在出错文本框后显示此字段填写出错原因vi.点击“重置”按钮所有填写的字段将恢复到填写之前的状态
vii.此页面可结合设备基本信息edit页面进行编写。
页面风格参见部门管理中新增部门页面
3)删除设备功能
点击“删除”按钮,将弹出确认删除提示,若树中处于选中状态的设备没有子设备,确认后删除;若选中的设备有子设备,将弹出窗口“删除失败!原因:此设备下还有子设备!”
需求完成的功能:
1.更新设备节点,并将焦点位于被删除节点的上一个节点
2.同步更新右侧tab页面的信息
3.删除节点时,会给出相关提示,如果有下层节点,则不能直接删除。
4)上下移动功能
在快捷菜单上有将此设备上移,将此设备下移功能,选中的设备(连同其下的所有子系统)将在树中所在层次内上移(或下移)一个“设备”单位
另外:
✧右击设备弹出快捷菜单(类似下图)有功能:
✧
➢增加同级设备、增加下属设备。
此功能即是把添加设备页面上的选取上级设备文本框默认选取右键选定的设备作为父节点,也可以再次点击更改父节点。
➢编辑此设备。
传递设备ID号给编辑页面,并弹出编辑页面
➢删除此设备
➢将此设备上移
➢将此设备下移
3.设备基本信息页面
一、View页面
设备的基本信息的字段从数据库表MIP_Product读取,其中Serial,ProductCode字段页面不显示。
页面的格式大致可参见下图,由于字段较多可分为两列显示,使页面整体上显得协调整洁大方。
1)字段Length,Width,Height以米为单位,GuaranteePeriod以月为单位,价格以元为单
位,在文本框后显示单位
2)照片方框右下角有按钮“点击查看大图”,可在新的窗口查看大图,若有多张照片,则
可切换查看
3)在View页面下方有编辑按钮,点击后出现edit页面
二、Edit页面
1)编辑页面风格可参考下截图
2)“照片”应具有照片上传功能,以上传或更换照片
3)出厂日期ReleaseDate以短格式Y/M/D显示,编辑时有两种方式:从方框后的小日
历上选取,也可手工输入(此时提示填写日期格式)
4)每个字段填写时要即时出现填写提示,这些提示根据字段是否可空、长度给出人性
化的提示
5)设计单位DesComName,生产单位ProComName,维修单位MaintenanceDepName,
录入方式:从保障机构中选择或人工输入(当保障机构信息库中没有时),保障机构信
息库见数据库表MIP_SupportForce,MIP_SupportForce_Ability,
MIP_SupportForce_Experience
如果是从保障机构中选择的单位,则保存时应当将装备ID添加到保障信息库中对应的保障机构MIP_SupportForce_Ability表中CanSupEquip字段下和MIP_SupportForce_Experience表中的ProductID下;如果是人工输入,在列表选择中加入一个条目“其他”,点击其他时手工输入,完成后,先将新输入机构名称的加到机构库MIP_SupportForce中,然后再将设备ID存储到上述两个数据库表中。
6)保障专家ProductExpert
录入方式:从专家库中选择或人工输入(当专家信息库MIP_Expert中没有时)
专家信息库见数据库表MIP_Expert,MIP_Expert_Ability,
MIP_Expert_Experience
如果是从专家信息库中选择的专家,则保存时应当将设备ID添加到专家信息库中对应的MIP_Expert_Ability表中FamiliarEquip字段和MIP_Expert_Experience数据表中的ExperienceEquip字段下;如果是人工输入,则列表选择中加入一个条目“其他”,点击其他时手工输入,完成后,先将新输入专家名称的加到专家库MIP_Expert中,然后再将设备ID存储到上述两个数据库表中。
7)保存出现错误时出现错误原因窗口提示,重新填写时原来填写正确的字段将保存下
来而不需要重新填写,填写出错的方框右边将出现红色的出错提示,并把光标留在
填写错误的文本框中;保存成功时弹出提示保存成功窗口。
8)点击“重置”按钮,页面里所有文本框内填写的内容将恢复到填写之前的状态
六、控件使用要求
尽量使用Coolite系列控件。