




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Zigbee开发手记(基于 JN5139R1)(修改了源代码,复制代码后能直接编译使用)基础概念PANPersonal Area Network的缩写,用于区别同一Channel中,不同的节点群组,只有属于同一个PAN的节点之间才能相互通讯。Channel通常翻译成通道,ZigBee所使用的频率范围从2400MH容U 2483.5MHz共16个通道,同一个网络的设备必须位于同一个通道中。MACM址 / Extended AddressMACM址是网络设备的一个唯一标识码,这一编码具有全球唯一性,由IEEE进行管理。短地址 / Network Address当ZigBee装置加入一个PAN中时,
2、会由上一层父节点分配一个16位地址,用于网络内节点之间的标识和通讯,以减小包的大小。CoordinatorZigBee网络中的一种网络设备的角色定义,用以控制整个PAN,每一个PANfB必须有一个 CoordinatorRouterZigBee网络中的一种网络设备的角色定义,用以转发数据,延伸 ZigBee网络的规模。End-DeviceZigBee网络中的一种网络设备的角色定义,作为网络的最终端节点。WSN无线传感器收集 WSN(Wireless Sensor Network)。Mesh网络即”无线蜂窝网格网络”,它是一个动态的可以不断扩展的网络架构,任意的两个设备均可以保持无线互联.Pro
3、file如果需要译成中文的话我习惯叫它规约,但是在这个手册里面我还是保留它的英文名称不再翻译,这样可以和Jennic的手册保持一致。每一个ZigBee的网络设备都应该使用一个Profile, Profile定义了设备的应用场景,比如是家庭自动化(HC威者是无限传感器网络(WSN),另外定义了设备的类型还有设备之间的信息交换规范。Profile分为两种,一种是公共的Profile,这种Profile通常由某个组织发布,用于实现不同厂商生产的ZigBee设备之间可以互相的通讯使用。私有的Profile通常只是在公司内部或者项目的内部的一个默认的标准。App Obj这个概念的全名叫 Applicat
4、ion objects,这个概念目前是一个纯概念范畴的东西,在Jennic的开发中我们并看不到这个概念白具体表现,目前我们可以理解为凡是和一个应用的相关的操作和数据都可以算属于这个应用的 Application Object.End Point每一个App Obj连接一个End Point, End Point类似于端口号的概念,他是一个数据交换的接口,在 Jennic 开发中它表现为一个整形的数值,设备之间的通讯实际上表现为 end point和end point之间的数据交换。 数据在通过协议栈请求发送的时候都需要指定发往哪个end point.Cluster通常我们翻译成簇“。它定义了
5、endpoint和endpoint之间的数据交换格式。Cluster包含一系列有着逻辑含义的属性。通常profile都会定义自己的一系列cluster。每一个endpoint上都会定义自己发送和接收的cluster.另外需要说明的是两个特殊的 endpoint定义。Endpoint 0用于配置和管理整个 ZigBee设备,通过这个 endpoint,应用可以和 ZigBee协议栈的其他层进行通讯,进行相关的初始化和配置工作。和这个endpoint接口的是ZigBee Device Object (ZDO)。另外一个特殊的 endpoint是255,这个endpoint用来向所有的 endpoi
6、ntZigbee开发手记(基于 JN5139R1)进行广播。241-254是保留的endpoint ,用户在自己的应用中不能使用。Application support sublayer提供了数据安全和绑定的功能,绑定(Binding)就是将不同的但是兼容的设备进行匹配的一种能力,比如开关和灯。Network layer完成了大部分的网络功能,包括设备之间的通讯,设备的初始化,数据的路由等等。上面的图中还提到了SAP的概念,SAP就是Service Access Point如果要翻译成中文的话我们习惯叫作服务访问接口,也就是数据或者管理的接口。不同层之间通过这些接口进行数据的交换和管理。这又是
7、一个纯概念上的含义,没有具体的表现形式和固定的实现形式。每两个层之间都有自己的SAP的实现方法。API文档JN-RM-2014-ZigBeeAppDevAPI-1v8.pdfThis manual describes the Application Development API that provides the interface to the ZigBee stack when developing ZigBee applications.本文档是zigbee协议栈的接口函数JN-RM-2021-BOS-Operating-System-3v1.pdfThis chapter provi
8、des a brief introduction to Jennic s Basic Operating System (BOS) and itsApplication Programming Interface (API). The BOS is designed to be used in conjunction with theJennic ZigBee protocol stack in wireless network applications.JN-RM-2018-ZigBeeAppFramework-API-1v6.pdfThis chapter introduces the A
9、F (Application Framework) APIs.JN-RM-2001-Integrated-Peripherals-API-3v2.pdfThis manual details the C functions of the Jennic Integrated Peripherals Application Programming Interface (API), which allows a wireless network application to interact with the peripherals on a Jennic wireless microcontrol
10、ler. These functions can be used to set up, control and respond to the on-chip peripheral blocks, such as UARTs, timers and general-purpose digital IO lines, amongst others.JN-RM-2017-ZigBeeDeviceProfileAPI-1v4.pdfThis manual describes the ZigBee Device Profile (ZDP) APIs of the Jennic ZigBee stack.
11、WSN代码解释(基于zigbee协议)先给出Coordinator的代码,后面将详细解释各个函数的功能以及组网过程/*/*Include files*/*/ #include jendefs.h#include AppHardwareApi.h#include JZ_Api.hZigbee开发手记(基于 JN5139R1)/以下是定义在文件WSN_Profile.h中。为了简洁不给WSN_Profile.h文件,把定义给出,方便大家调试#define WSN_PROFILE_ID 0 x123#define WSN_CID_SENSOR_READINGS 0 x12#define WSN PA
12、N ID0 xAFED#define WSN_CHANNEL17#define WSN DATA SINK ENDPOINT 0 x40#define WSN_DATA_SOURCE_ENDPOINT 0 x41/*/*Macro Definitions*/*/PUBLIC bool bAppTimerStarted;PUBLIC bool bNwkStarted;PUBLIC bool bNodJoined;PUBLIC bool bUartIsStop;PRIVATE uint8 u8Receiver;PRIVATE void vInit(void);PRIVATE void myLoop
13、(void *pvMsg, uint8 u8Dummy);/添加了串口操作PRIVATE void uart0Callback(uint32 u32Device, uint32 u32ItemBitmap);/*/PUBLIC void AppColdStart(void)/* Set network information */JZS sConfig.u32Channel = WSN CHANNEL;JZS_sConfig.u16PanId = WSN_PAN_ID;/* General initialisation */vInit();/* No return from the above
14、 function call */*/PUBLIC void AppWarmStart(void)*/AppColdStart();/* Local FunctionsZigbee开发手记(基于 JN5139R1)/*/PRIVATE void vlnit(void)/* Initialise Zigbee stack */JZS_u32InitSystem(TRUE);bAppTimerStarted = FALSE; bNwkStarted = FALSE; bNodJoined = FALSE;/LED 灯接 16, 17 口/* Set DIO for LEDs */ vAHI Dio
15、SetDirection(0,316);vAHI_DioSetOutput(316,0);vAHI_UartEnable(E_AHI_UART_0);/vAHI_UartReset(E_AHI_UART_0, TRUE, TRUE); /vAHI UartReset(E AHI UART 0, FALSE, FALSE); vAHI_UartSetBaudDivisor(E_AHI_UART_0, 104);vAHI_UartSetControl(E_AHI_UART_0, E_AHI_UART_EVEN_PARITY,一E_AHI_UART_PARITY_DISABLE,E AHI UART
16、 WORD LEN 8, E AHI UART 1 STOP BIT, E_AHI_UART_RTS_LOW);vAHI_UartSetInterrupt(E_AHI_UART_0,TRUE,E_AHI_UART_FIFO_LEVEL_8);bUartIsStop = TRUE;vAHI_Uart0RegisterCallback(uart0Callback);/* Start BOS */(void)bBosRun(TRUE);/* No return from the above function call */PRIVATE void myLoop(void *pvMsg, uint8
17、u8Dummy) static bool_t bToggle;if (bToggle)Zigbee开发手记(基于 JN5139R1)vAHI_DioSetOutput(116,0);if(bNodJoined)vAHI_DioSetOutput(117,0);elsevAHI_DioSetOutput(0,116);if(bNodJoined)vAHI_DioSetOutput(0,117);if(bUartIsStop)bUartIsStop = FALSE;vAHI_UartWriteData(E_AHI_UART_0,0 xaa);bUartIsStop = TRUE;bToggle =
18、 !bToggle;(void)bBosCreateTimer(myLoop, , 0, 100, NULL);PRIVATE void uart0Callback(uint32 u32Device, uint32 u32ItemBitmap) u8Receiver = u8AHI UartReadData(E AHI UART 0);vAHI_UartWriteData(E_AHI_UART_0, u8Receiver);/* Functions called by the stack*/*/ void JZA vAppEventHandler(void)if (!bAppTimerStar
19、ted & bNwkStarted)bAppTimerStarted = TRUE;(void)bBosCreateTimer(myLoop, , 0, 20, NULL); /*/PUBLIC void JZA_vPeripheralEvent(uint32 u32Device, uint32 u32ItemBitmap)switch(u32Device)case EAHIDEVICEUART0:Zigbee开发手记(基于 JN5139R1)if(bUartlsStop)(bUartIsStop = FALSE;u8Receiver = u8AHI_UartReadData(E_AHI_UA
20、RT_0);vAHI_UartWriteData(E_AHI_UART_0, u8Receiver); bUartIsStop = TRUE;/*/PUBLIC void JZA_vAppDefineTasks(void)*/*PUBLIC bool_t JZA_boAppStart(void)JZS_vStartStack(); return TRUE; I*/*PUBLIC bool_t JZA_bAfKvpObject(APS_Addrmode_e eAddrMode,uint16 u16AddrSrc,uint8 u8SrcEP,uint8 u8LQI,uint8 u8DstEP,ui
21、nt8 u8ClusterId,uint8 *pu8ClusterIDRsp,/*/PUBLIC void JZA_vAfKvpResponse( APS_Addrmode_e eAddrMode, uint16 u16AddrSrc, uint8 u8SrcEP, uint8 u8LQI,Zigbee开发手记(基于 JN5139R1)uint8 u8DstEP, uint8 u8ClusterID,AF_Transaction_s *puTransactionInd)/*/PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode, uin
22、t16 u16AddrSrc, uint8 u8SrcEP,uint8 u8LQI,uint8 u8DstEP,uint8 u8LQI,uint8 *pu8Payload, uint8 u8PayloadLen)/*/PUBLIC void JZA_vStackEvent(teJZS_EventIdentifier eEventId, tuJZS_StackEvent *puStackEvent)uint8 u8InputClusterCnt = 1;uint8 au8InputClusterList口 = WSN_CID_SENSOR_READINGS;uint8 u8OutputClust
23、erCnt = 0;uint8 au8OutputClusterList口 = ;switch(eEventId)case JZS EVENT NWK STARTED:/ load the simple descriptor now that the network has started (void)afmeAddSimpleDesc(WSN_DATA_SINK_ENDPOINT,WSN_PROFILE_ID,0 x0000,Zigbee开发手记(基于 JN5139R1)0 x00,0 x00,u8InputClusterCnt,au8InputClusterList,u8OutputClu
24、sterCnt,au8OutputClusterList);bNwkStarted = TRUE;break;case JZS_EVENT_NEW_NODE_HAS_JOINED: bNodJoined = TRUE; |break;default:break; 函数的功能以上是基于zigbee2004协议开发PUBLIC void AppColdStart这个函数是整个程序的入口,Jennic的开发程序虽然使用标准的C语言进行开发,但是它的程序构建在Application Support Layer基础上,所以没有我们熟悉的main函数入口,AppColdStart就是我们的起点了。JN-R
25、M-2014-ZigBeeAppDevAPI-1v8 文档的描述PUBLIC void AppColdStart(void);DescriptionThis function is the main entry point to the user application. Whenever the device is powered up or wakesfrom sleep (except in RAM retention mode see AppWarmStart() below), the program begins to run from this point.This functi
26、on should contain several calls to other routines in order to initialise the ZigBee stack and the Basic Operating System (BOS). These are shown in the example below.ParametersNoneReturnsNoneNone PUBLIC void AppWarmStart这个函数是程序热启动的入口,系统在休眠后重新启动的时候会自动的调用这个函数。在这个应用中我们简单的调用了 AppColdStart.JN-RM-2014-ZigB
27、eeAppDevAPI-1v8 文档的描述PUBLIC void AppWarmStart(void);DescriptionZigbee开发手记(基于 JN5139R1)This function is the re-entry point to the user application when the device wakes from sleep with memory hold. In this case, the user application is still present in memory and all variables maintain their values.
28、If not required, this function can be left empty.ParametersNoneReturnsNonePRIVATE void vInit自定义函数一个私有函数,被前面的AppColdStart函数调用,用来完成一系列的初始化工作。包括初始化系统,初始化BOS 一个小型的任务系统,然后我们的程序就在这个小型系统的调度文档中这样描述BOS指示灯,初始化传感器,最后启动了 下开始工作,进入不同的事件处理函数。JN-RM-2021-BOS-Operating-System-3v1The BOS is a simple task scheduler. It
29、 is not pre-emptive - tasks run until complete and each task has the same level of priority. The lack of context switching between tasks removes the need for individual stacks and saves on memory space.2igBeeTaskDefaultUser TaskOptiandTaskHardware Peripheral EventsFigure 1: Stack and User Tasks由此可知B
30、OS是一个任务的调度系统JN-RM-2014-ZigBeeAppDevAPI-1v8 文档中的描述PUBLIC uint32 JZS_u32InitSystem(bool_t bColdStart);DescriptionThis function initialises the Jennic ZigBee protocol stack.ParametersbColdStart TRUE if function is called during a cold start, FALSE if called during a warm start ReturnsIf bColdStart is T
31、RUE, returns version number of stack. Otherwise returns 0.该函数初始化 zigbee协议栈,必须在 AppWarmStart或者AppColdStart中调用PRIVATE void myLoop(void *pvMsg, uint8 u8Dummy)自定义函数LED灯的闪烁由BOS定时调用,实现自己想要实现的功能,这里只是简单控制在这个函数最后调用了bBosCreateTimer函数,Zigbee开发手记(基于 JN5139R1)在文档 JN-RM-2021-BOS-Operating-System-3v1 中这样描述:bool_t
32、bBosCreateTimer(void (*pfvTimerHandler)(void *, uint8),void *pvMsg,uint8 u8MsgSize,uint32 u32Delay,uint8 *pu8TimerId);DescriptionThis function creates a software timer for use by the BOS, based on the internal hardware tick timer. Once created, the timer is assigned a unique timer ID. The created ti
33、mer runs for the specified period of time. Once the timer has expired, the specified timer handler function is called and will receive the specified message.! Caution:The created timer is based on the on-chip tick timer. Your application must not use this hardware timer, otherwise abnormal operation
34、 of the BOS will result.! Caution:Do not create a timer in interrupt context, as this will cause the BOS to malfunction.Parameters*pfvTimerHandler Pointer to timer handler function that will be called by the BOS once the timer has expired*pvMsg Pointer to the message to be sent to timer handler (the
35、 data type on the transmission and reception sides must be the same)u8MsgSize Length of message to be sent, in bytesu32Delay This parameter determines the timeout period for which the timer will run. The specified value is a period multiplier - a multiple of 10 milliseconds. For example, for a 50-ms
36、 timeout period, set this value to 5*pu8TimerId Pointer to location to receive ID for the created timer. Can be NULL if the ID is not wanted (the ID is only required by the application if it wants to remove a timer before it has expired).ReturnsTRUE Timer successfully createdFALSE Unable to create t
37、imerIf the function returns FALSE, you can use the function eBosGetLastError() to obtain further information. One of the following error IDs may be returned:Error IDDescriptionE_NULL_FUNCTIONThe timer handler pointer (*pfvTimerHandler) is NULLE_NO_MEMORYThere is insufficient memory to create the tim
38、erE_NO_MSGMessage is NULL (but message length is not zero)在描述上说到因为 bBosCreateTimer函数使用的是芯片上的定时器,所以要保证这个定时器没有用于其他用 途,不然会出现错误;同时,这个函数是一次性函数,就是被 BOS调用一次,所以要实现周期调用处理函 数则必须重新调用 bBosCreateTimer。PRIVATE void uart0Callback(uint32 u32Device, uint32 u32ItemBitmap) 串口 0的中断回调函数。10Zigbee开发手记(基于 JN5139R1)PUBLIC v
39、oid JZA_vAppEventHandler周期性调用函数,协议栈会周期性的调用这个函数,这里我们定义了一个时钟。JN-RM-2014-ZigBeeAppDevAPI-1v8 文档描述:PUBLIC void JZA_vAppEventHandler(void);DescriptionThis is a user application function, which is regularly called by the BOS. This function does not require any specific event to occur in order to be called
40、. It may be used as the main user task, or to handle hardware events triggered from within an interrupt context. Note that events passed to JZA_vStackEvent will indicate when the device has started or joined a network, so activities that require an active network should be delayed until then.This fu
41、nction should only operate for a short time before returning, to allow the BOS to schedule other activities.ParametersNoneReturnsNonePUBLIC void JZA_vPeripheralEvent发生外围部件事件的时候调用的函数PUBLIC void JZA_vAppDefineTasks协议栈要求用户定义自定义任务的时候调用的函数PUBLIC bool_t JZA_boAppStart系统初始化薪后会调用这个函数,通常我们在这个函数中进行设备描述。JN-RM-
42、2014-ZigBeeAppDevAPI-1v8 文档描述:PUBLIC bool_t JZA_boAppStart(void);DescriptionThis function allows the user application to register any endpoint descriptors before starting the ZigBee stack.It can also be used to start the device running as a ZigBee Co-ordinator, Router or End Device, through a call t
43、o the ZigBee stack.ParametersNoneReturnsThis function should always return TRUE.PUBLIC void JZS_vStartStack(void);DescriptionThis function starts the Jennic ZigBee protocol stack. The device will start to function as a Co-ordinator, Router or End Device, as specified by the makefile. A Co-ordinator
44、will try to start a network. A Router or End Device will try to find and join an existing network.ParametersNoneReturnsNone11Zigbee开发手记(基于 JN5139R1)PUBLIC bool_t JZA_bAfKvpObject收到KVP调用的函数。PUBLIC void JZA_vAfKvpResponse收到KVP回应的时候协议栈调用的函数PUBLIC uint8 JZA_u8AfMsgObject收到MsgObject调用的函数。JN-RM-2014-ZigBe
45、eAppDevAPI-1v8 文档描述:PUBLIC bool_t JZA_bAfKvpObject( AF_Addrmode_e eAddrMode,uint16 u16AddrSrc,uint8 u8SrcEPuint8 u8LQI,uint8 u8DstEP,uint8 u8ClusterID,uint8 *pu8ClusterIDRsp,AF_Transaction_s *puTransactionInd, AF_Transaction_s *puTransactionRsp);DescriptionThis function receives incoming KVP command
46、 frames. The data passed back by this function is used by the ZigBee stack to construct a KVP response frame to the sender, where one is required.ParameterseAddrMode Address mode, one of: APS_ADDRMODE_NOT_PRESENT - Indirect transmission APS_ADDRMODE_SHORT - Direct transmission u16AddrSrc Network (sh
47、ort) address of source device u8SrcEP Source endpoint number (in range 1 to 240) u8LQI Link Quality Index (LQI) for received frame u8DstEP Destination endpoint number (in range 1 to 240) u8ClusterID Requested Cluster ID on the destination endpointpu8ClusterIDRsp Pointer to Cluster ID for the respons
48、epuTransactionInd Pointer to transaction structure received in commandpuTransactionRsp Pointer to transaction structure for the responseReturnsTRUE - Response will be sent (only for command types that require a response)FALSE - No response will be sentPUBLIC void JZA_vZdpResponse收到ZDP回应的时候协议栈调用的函数PU
49、BLIC void JZA_vStackEvent协议栈发生网络事件的时候调用这个函数,在这个例程中我们在这个函数中判断是否已经加入了网络,或者是否有新节点接入。JN-RM-2014-ZigBeeAppDevAPI-1v8 文档描述:Stack EventsEvent Id/Structure12Zigbee开发手记(基于 JN5139R1)Field DescriptionValuesJZS_EVENT_APS_DATA_CONFLRMkpsDataConfirmEventGenerated when a data frame is passed to the stack by the ap
50、plication using a call to afdeDataRequest().u8StatusAPS enumerations: 0 x00: APS_ENUM_SUCCESS 0 x04:Indicates success if the frame wasAPS_ENUM_NOT_SUPPORTED0 x08:successfullypassed down through theAPS_ENUM_NO_BOUND_DEVICEstack to the MAC, and an ACK was receivedNLDEenumerations:0 xC3:from the next h
51、op.NWK_ENUM_INVALID_REQUEST0 xD0:Otherwise contains the error code from theNWK_ENUM_ROUTE_DISCOVERY_FAILED 0 xD1:stack layer at which the frame failed.NWK_ENUM_TRANSACTION_EXPIREDNote:Receivinga statusofMCPSenumerations:0 xE1:APS_ENUM_SUCCESS indicates that a frameMAC_ENUM_CHANNEL_ACCESS_FAILURE 0 x
52、E5:has reached the next hop to itsMAC_ENUM_FRAME_TOO_LONG0 xE8:destination (and does not confirm that itMAC_ENUM_INVALID_PARAMETER0 xE9:has reached its final destination, unlessMAC_ENUM_NO_ACK0 xF0:this is a single hop away).MAC_ENUM_TRANSACTION_EXPIRED0 xF1:MAC_ENUM_TRANSACTION_OVERFLOWu16DstAddr0
53、x0000 - 0 xFFFENetwork address of the remote device.u8DstEPEndpoint address on the remote device.1 - 240u8SrcEPEndpoint address on the local device.1 - 240JZS_EVENT_NWK_JOINED_AS_ROUTERwkJoinedEventGenerated on a Router which has just successfully joined a network.u16Addr0 x0000 - 0 xFFFENetwork add
54、ress assigned to Router.JZS_EVENT_NWK_JOINED_AS_ENDDEVIsNwkJoinedEventGenerated on an End Device which has just successfully joined a network.u16AddrNetwork address assigned to End Device.0 x0000 - 0 xFFFEJZS_EVENT_NWK_STARTEDGenerated on a Co-ordinator which has just successfully started a network.
55、Event Id/StructureField DescriptionValuesJZS_EVENT_CONTEXT_RESTOREDGenerated when a node is started with a valid network context in its Flash memory. The node13Zigbee开发手记(基于 JN5139R1)starts running using the stored context instead of attempting to start or join a new network.ZS_EVENT_FAILED_TO_START
56、_NETWORKGenerated on a Co-ordinator that has tried to start a network but failed because there is already a network with the same PAN ID.JZS_EVENT_FAILED_TO_JOIN_NETWORKGenerated on a Router or End Device that has tried to join a network but failed, eitherbecause no network can be found or because t
57、he network will not allow the device to join.JZS_EVENT_NEW_NODE_HAS_JOINsNfewNodeEventGenerated by a Router or the Co-ordinator whena new child node joins it. Contains information on new child node.u16ShortAddrNetwork address assigned to child.0 x0000 - 0 xFFFEpsExtAddrPointer to IEEE (MAC) address
58、of child.32-bit addressu8CapabilityInfoContains the capability information for the child.Refer to ZigBee Specificationfor furtherdetailsJZS_EVENT_REMOVE_NODDRemoveNodeEventGenerated after a call to JZS_vRemoveNode(). Includes status information on process ofremoving child node from a Router or the C
59、o-ordinator.psExtAddrPointer to IEEE (MAC) address of child32-bit addresseStatusStatus of leave request.0 x00:NWK_ENUM_SUCCESS0 xC2:NWK_ENUM_INVALID_REQUEST0 xC8:NWK_ENUM_UNKNOWN_DEVICE0 xCB:NWK_ENUM_LEAVE_UNCONFIRMED0 xD1:NWK_ENUM_TRANSACTION_EXPIREDJZS_EVENT_LEAVE_INDICATIONsLeaveIndicationEventGe
60、nerated by a Co-ordinator or Router upon the successful exit of one of its children from the network. It is also generated on a device that has been asked to leave by its parent.psExtAddrPointer to IEEE (MAC) address of the child.32-bit address, or NULL if leave request received from parentEvent Id/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论