




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
在Java應(yīng)用程序中訪問USB設(shè)備在本文通過提供使Java應(yīng)用程序可以使用USB設(shè)備的API而使這個過程變得更容易.Java平臺一直都以其平臺無關(guān)性自豪。雖然這種無關(guān)性有許多好處,但是它也使得編寫與硬件交互的Java應(yīng)用程序的過程變得相當(dāng)復(fù)雜。在本文中,研究科學(xué)家蔣清野討論了兩個項(xiàng)目,它們通過提供使Java應(yīng)用程序可以使用USB設(shè)備的API而使這個過程變得更容易。雖然這兩個項(xiàng)目仍然處于萌芽狀態(tài),但是它們都顯示了良好的前景,并已經(jīng)成為一些實(shí)用應(yīng)用程序的基礎(chǔ)。通用串行總線(UniversalSerialBusUSB)規(guī)范的第一個版本發(fā)表于1996年1月。因?yàn)樗牡统杀?、高?shù)據(jù)傳輸率、使用容易和靈活性,USB在計算機(jī)行業(yè)里獲得了廣泛接受。今天,許多周邊設(shè)備和裝置都是通過USB接口連接到計算機(jī)上的。目前,大多數(shù)一般用途的操作系統(tǒng)都提供了對USB設(shè)備的支持,并且用C或者C++可以相對容易地開發(fā)訪問這些外設(shè)的應(yīng)用程序。不過,Java編程語言在設(shè)計上對硬件訪問提供的支持很少,所以編寫與USB設(shè)備交互的應(yīng)用程序是相當(dāng)困難的。IBM的DanStreetman最早開始了在Java語言中提供對USB設(shè)備的訪問的努力。2001年,他的項(xiàng)目通過Java規(guī)范請求(JavaSpecificationRequest,JSR)過程被接受為Java語言的候選擴(kuò)展標(biāo)準(zhǔn)。這個項(xiàng)目現(xiàn)在稱為JSR-80并且指定了官方包javax.usb。同時,在2000年6月,MojoJojo和DavidBrownell在SourceForge開始了jUSB項(xiàng)目。這兩個項(xiàng)目都開發(fā)出了Linux開發(fā)人員可以使用的包,盡管它們都還很不完善。這兩個項(xiàng)目也都開始試圖向其他操作系統(tǒng)上的Java應(yīng)用程序提供對USB設(shè)備的訪問,盡管它們都還沒有開發(fā)出可以使用的包(參閱參考資料中有關(guān)本文中討論的這兩個項(xiàng)目及其他項(xiàng)目的資料)。在本文中,將對jUSB和JSR-80項(xiàng)目作一個簡要介紹,不過,我們首先要看一下USB協(xié)議的具體細(xì)節(jié),這樣您就可以理解這兩個項(xiàng)目是如何與USB設(shè)備交互的。我們還將提供代碼片段以展示如何用這兩個項(xiàng)目的API訪問USB設(shè)備。USB介紹1994年,一個由四個行業(yè)伙伴(Compaq、Intel、Microsoft和NEC)組成的聯(lián)盟開始制定USB協(xié)議。該協(xié)議最初的目的是將PC與電話相連并提供容易擴(kuò)展和重新配置的I/O接口。1996年1月,發(fā)表了USB規(guī)范的第一個版本,1998年9月發(fā)表了后續(xù)版本(版本1.1)。這個規(guī)范允許127臺設(shè)備同時連接到一起,總的通信帶寬限制為12Mbps。后來,又有三個成員(Hewlett-Packard、Lucent和Philips)加入了這個聯(lián)盟。2000年4月,發(fā)表了USB規(guī)范的2.0版本,它支持高達(dá)480Mbps的傳輸率。今天,USB在高速(視頻、圖像、儲存和全速(音頻、寬帶、麥克風(fēng)數(shù)據(jù)傳輸應(yīng)用中起了關(guān)鍵作用。它還使各種低速設(shè)備:鍵盤、鼠標(biāo)、游戲外設(shè)、虛擬現(xiàn)實(shí)外設(shè))連接到PC上。USB協(xié)議有嚴(yán)格的層次結(jié)構(gòu)。在所有USB系統(tǒng)中,只有一個主設(shè)備,到主計算機(jī)的的USB接口稱為主控器(hostcontroller)。主控器有兩個標(biāo)準(zhǔn)??開放主控器接口(Compaq的OpenHostControllerInterface,OHCI)和通用主控器接口(Intel的UniversalHostController
Interface,UHCI)。這兩個標(biāo)準(zhǔn)提供了同樣的能力,并可用于所有的USB設(shè)備,UHCI的硬件實(shí)現(xiàn)更簡單一些,但是需要更復(fù)雜的設(shè)備驅(qū)動程序(因而CPU的負(fù)荷更大一些)。USB物理互連是分層的星形拓樸,最多有七層。一個hub是每個星形的中心,USB主機(jī)被認(rèn)為是roothub。每一段連線都是hub與USB設(shè)備的點(diǎn)對點(diǎn)連接,后者可以是為系統(tǒng)提供更多附加點(diǎn)的另一個hub,也可以是一個提供功能的某種設(shè)備。主機(jī)使用主/從協(xié)議與USB設(shè)備通信。這種方式解決了包沖突的問題,但是同時也阻止了附加的設(shè)備彼此建立直接通信。所有傳輸?shù)臄?shù)據(jù)都是由主控器發(fā)起的。數(shù)據(jù)從主機(jī)流向設(shè)備稱為下行(downstream)或者輸出(out)傳輸,數(shù)據(jù)從設(shè)備流向主機(jī)稱為上行(upstream)或者輸入(市)傳輸。數(shù)據(jù)傳輸發(fā)生在主機(jī)和USB設(shè)備上特定的端點(diǎn)(endpoint)之間,主機(jī)與端點(diǎn)之間的數(shù)據(jù)鏈接稱為管道(pipe)。一個給定的USB設(shè)備可以有許多個端點(diǎn),主機(jī)與設(shè)備之間數(shù)據(jù)管道的數(shù)量與該設(shè)備上端點(diǎn)的數(shù)量相同。一個管道可以是單向或者是雙向的,一個管道中的數(shù)據(jù)流與所有其他管道中的數(shù)據(jù)流無關(guān)。USB網(wǎng)絡(luò)中的通信可以使用下面四種數(shù)據(jù)傳輸類型中的任意一種:控制傳輸:這些是一些短的數(shù)據(jù)包,用于設(shè)備控制和配置,特別是在設(shè)備附加到主機(jī)上時。批量傳輸:這些是數(shù)量相對大的數(shù)據(jù)包。像掃描儀或者SCSI適配器這樣的設(shè)備使用這種傳輸類型。中斷傳輸:這些是定期輪詢的數(shù)據(jù)包。主控器會以特定的間隔自動發(fā)出一個中斷。等時傳輸:這些是實(shí)時的數(shù)據(jù)流,它們對帶寬的要求高于可靠性要求。音頻和視頻設(shè)備一般使用這種傳輸類型。像串行端口一樣,計算機(jī)上每一個USB端口都由USB控制器指定了一個惟一的標(biāo)識數(shù)字(端口ID)。當(dāng)USB設(shè)備附加到USB端口上時,就將這個惟一端口ID分配給這臺設(shè)備,并且USB控制器會讀取設(shè)備描述符。設(shè)備描述符包括適用于該設(shè)備的全局信息、以及設(shè)備的配置信息。配置定義了一臺USB設(shè)備的功能和I/O行為。一臺USB設(shè)備可以有一個或者多個配置,這由它們相應(yīng)的配置描述符所描述。每一個配置都有一個或者多個接口,它可以視為一個物理通信渠道;每一個接口有零個或者多個端點(diǎn),它可以是數(shù)據(jù)提供者或者數(shù)據(jù)消費(fèi)者,或者同時具有這兩種身份。接口由接口描述符描述,端點(diǎn)由端點(diǎn)描述符描述。并且一臺USB設(shè)備可能還有字符串描述符以提供像廠商名、設(shè)備名或者序列號這樣的附加信息。正如您所看到的,像USB這樣的協(xié)議為使用Java這種強(qiáng)調(diào)平臺和硬件無關(guān)性的語言的開發(fā)人員提出了挑戰(zhàn)?,F(xiàn)在讓我們看兩個試圖解決這個問題的項(xiàng)目。jUSBAPI
jUSB項(xiàng)目是由MojoJojo和DavidBrownell于2000年6月創(chuàng)立的。其目標(biāo)是提供一組免費(fèi)的、在Linux平臺上訪問USB設(shè)備的JavaAPI。這個API是按照LesserGPL(LGPL)條款發(fā)表的,這意味著您可以在專有和免費(fèi)軟件項(xiàng)目中使用它。這個API提供了對多個物理USB設(shè)備的多線程訪問,并支持本機(jī)和遠(yuǎn)程設(shè)備。具有多個接口的設(shè)備可以同時被多個應(yīng)用程序(或者設(shè)備驅(qū)動程序)所訪問,其中每一個應(yīng)用程序(或者設(shè)備驅(qū)動程序)都占據(jù)一個不同的接口。該API支持控制傳輸、批量傳輸和中斷傳輸,不支持等時傳輸,因?yàn)榈葧r傳輸用于媒體數(shù)據(jù)(如音頻和視頻),JMFAPI已經(jīng)在其他標(biāo)準(zhǔn)設(shè)備驅(qū)動程序上對此提供了很好的支持(參閱參考資料)。當(dāng)前,該API可以在具有Linux2.4核心或者以前的2.2.18核心的GNU/Linux版本上工作。因此可支持大多數(shù)最新的版本,例如,該API可以在沒有任何補(bǔ)丁或者升級的RedHat7.2和9.0上工作。jUSBAPI包括以下包:?usb.core:這個包是jUSBAPI的核心部分。它使得Java應(yīng)用程序可以從USB主機(jī)訪問USB設(shè)備。?usb.linux:這個包包含usb.core.Host對象的Linux實(shí)現(xiàn)、bootstrapping支持和其他可以提升LinuxUSB支持的類。這個實(shí)現(xiàn)通過虛擬USB文件系統(tǒng)(usbdevfs)訪問USB設(shè)備。?usb.windows:這個包包含usb.core.Host對象的Windows實(shí)現(xiàn)、bootstrapping支持和其他可以提升WindowsUSB支持的類。這個實(shí)現(xiàn)仍然處于非常初級的階段。?usb.remote:這個包是usb.coreAPI的遠(yuǎn)程版本。它包括一個RMIproxy和一個daemon應(yīng)用程序,它讓Java應(yīng)用程序可以訪問遠(yuǎn)程計算機(jī)上的USB設(shè)備。?usb.util:這個包提供了一些有用的實(shí)用程序,可以將firmware下載到USB設(shè)備上、將USB系統(tǒng)的內(nèi)容轉(zhuǎn)儲到XML中、以及將只有bulkI/O的USB設(shè)備工具轉(zhuǎn)換成一個套接字(socket)o?usb.devices:這個可選包收集了用jUSBAPI訪問不同USB設(shè)備的Java代碼,包括柯達(dá)數(shù)碼相機(jī)和Rio500MP3播放器。這些API經(jīng)過特別編寫以簡化訪問特定USB設(shè)備的過程,并且不能用于訪問其他設(shè)備。這些API是在usb.coreAPI之上構(gòu)建的,它們可以工作在所有支持jUSB的操作系統(tǒng)上。?usb.view:這個可選包提供了基于Swing的USB樹簡單瀏覽器。它是一個展示jUSBAPI應(yīng)用的很好的示例程序。盡管usb.core.Host對象的實(shí)現(xiàn)對于不同的操作系統(tǒng)是不同的,但是Java程序員只需要理解usb.core包就可以用jUSBAPI開始應(yīng)用程序的開發(fā)。表1列出了usb.core的接口和類,Java程序員應(yīng)該熟悉它們:表1.jUSB中的接口和類
接口/類說明Bus將一組USB設(shè)備連接到Host上Host表示具有一個或者多個Bus的USB控制器Configuration提供對設(shè)備所支持的USB配置的訪問,以及對與該配置關(guān)聯(lián)的接口的訪問Descriptor具有USB類型的描述符的實(shí)體的基類Device提供對USB設(shè)備的訪問DeviceDescriptor提供對USB設(shè)備描述符的訪問EndPoint提供對USB端點(diǎn)描述符的訪問、在給定設(shè)備配置中構(gòu)造設(shè)備數(shù)據(jù)輸入或者輸出HostFactory包含bootstrapping方法Hub提供對USBhub描述符以及一些hub操作的訪問Interface描述一組端點(diǎn),并與一個特定設(shè)備配置相關(guān)聯(lián)PortIdentifier為USB設(shè)備提供穩(wěn)定的字符串標(biāo)識符,以便在操作和故障診斷時使用用jUSBAPI訪問一臺USB設(shè)備的正常過程如下:?通過從HostFactory得到USBHost進(jìn)行Bootstrap0?從Host訪問USBBus,然后從這個Bus訪問USBroothub(即USBDevice)0?得到hub上可用的USB端口數(shù)量,遍歷所有端口以找到正確的Device。?訪問附加到特定端口上的USBDevice。可以用一臺Device的Portidentifier直接從Host訪問它,也可以通過從roothub開始遍歷USBBus找到它。.用ControlMessage與該Device直接交互,或者從該Device的當(dāng)前Configuration中要求一個Interface,并與該Interface上可用的Endpoint進(jìn)行I/O。清單1展示了如何用jUSBAPI獲得USB系統(tǒng)中的內(nèi)容。這個程序編寫為只是查看roothub上可用的USB設(shè)備,但是很容易將它改為遍歷整個USB樹。這里的邏輯對應(yīng)于上述步驟1到步驟4o清單1.用jUSBAPI獲得USB系統(tǒng)的內(nèi)容importusb.core.*;publicclassListUSB{publicstaticvoidmain(String[]args){
try{//BootstrapbygettingtheUSBHostfromtheHostFactory.Hosthost=HostFactory.getHost();//ObtainalistoftheUSBbusesavailableontheHost.Bus[]bus=host.getBusses();inttotal_bus=bus.length;//TraversethroughalltheUSBbuses.for(inti=0;i<>{//AccesstheroothubontheUSBbusandobtainthe//numberofUSBportsavailableontheroothub.Deviceroot=bus[i].getRootHub();inttotal_port=root.getNumPorts();//TraversethroughalltheUSBportsavailableonthe//roothub.Itshouldbementionedthatthenumbering//startsfrom1,not0.for(intj=1;j<=total_port;j++){//ObtaintheDeviceconnectedtotheport.Devicedevice=root.getChild(j);if(device!=null){
//USBdeviceavailable,dosomethinghere.}}}}catch(Exceptione){System.out.println(e.getMessage());}}清單2展示了在應(yīng)用程序成功地找到了Device的條件下,如何與Interface和EndPoint進(jìn)行批量I/O。這個代碼段也可以修改為執(zhí)行控制或者中斷I/O。它對應(yīng)于上述步驟5。清單2.用jUSBAPI執(zhí)行批量I/Oif(device!=null){//ObtainthecurrentConfigurationofthedeviceandthenumberof//InterfacesavailableunderthecurrentConfiguration.Configurationconfig=device.getConfiguration();inttotal_interface=config.getNumInterfaces();//TraversethroughtheInterfacesfor(intk=0;k<>{//AccessthecurrentlyInterfaceandobtainthenumberof//endpointsavailableontheInterface.
Interfaceitf=config.getInterface(k,0);inttotal_ep=itf.getNumEndpoints();//Traversethroughalltheendpoints.//Accesstheendpoint,andobtainitsI/Otype.Endpointep=itf.getEndpoint(l);Stringio_type=ep.getType();booleaninput=ep.isInput();//Iftheendpointisaninputendpoint,obtainits//InputStreamandreadindata.5InputStreamin;in=ep.getInputStream();//Readindataherein.close();},?__s//OutputStreamandwriteoutdata.elseO…;
out=ep.getOutputStream();//Writeoutdatahere.out.close();}}}}jUSB項(xiàng)目在2000年6月到2001年2月期間非?;钴S。該API的最新的版本0.4.4發(fā)表于2001年2月14日。從那以后只提出了很少的改進(jìn),原因可能是IBM小組成功地成為了Java語言的候選擴(kuò)展標(biāo)準(zhǔn)。不過,基于jUSB已經(jīng)開發(fā)出一些第三方應(yīng)用程序,包括JPhoto項(xiàng)目(這是一個用jUSB連接到數(shù)碼照相機(jī)的應(yīng)用程序)和jSyncManager項(xiàng)目(這是一個用jUSB與使用Palm操作系統(tǒng)的PDA同步的應(yīng)用程序)。JSR-80API(javax.usb)正如前面提到的,JSR-80項(xiàng)目是由IBM的DanStreetman于1999年創(chuàng)立的。2001年,這個項(xiàng)目通過Java規(guī)范請求(JSR)過程被接受為Java語言的候選擴(kuò)展標(biāo)準(zhǔn)。這個項(xiàng)目現(xiàn)在稱為JSR-80并且被正式分派了Java包javax.usb。這個項(xiàng)目使用CommonPublicLicense的許可證形式,并通過JavaCommunityProcess進(jìn)行開發(fā)。這個項(xiàng)目的目標(biāo)是為Java平臺開發(fā)一個USB接口,可以從任何Java應(yīng)用程序中完全訪問USB系統(tǒng)。JSR-80API支持USB規(guī)范所定義的全部四種傳輸類型。目前,該API的Linux實(shí)現(xiàn)可以在支持2.4核心的大多數(shù)最新GNU/Linux版本上工作,如RedHat7.2和9.0。JSR-80項(xiàng)目包括三個包:javax-usb(javax.usbAPI)、javax-usb-ri(操作系統(tǒng)無關(guān)的基準(zhǔn)實(shí)現(xiàn)的公共部分)以及javax-usb-ri-linux(Linux平臺的基準(zhǔn)實(shí)現(xiàn),它將公共基準(zhǔn)實(shí)現(xiàn)鏈接到LinuxUSB堆棧)。所有這三個部分都是構(gòu)成Linux平臺上java.usbAPI完整功能所必需的。在該項(xiàng)目的電子郵件列表中可以看到有人正在致力于將這個API移植到其他操作系統(tǒng)上(主要是MicrosoftWindows),但是還沒有可以工作的版本發(fā)表。盡管JSR-80API的操作系統(tǒng)無關(guān)的實(shí)現(xiàn)在不同的操作系統(tǒng)上是不同的,但是Java程序員只需要理解javax.usb包就可以開始開發(fā)應(yīng)用程序了。表2列出了javax.usb中的接口和類,Java程序員應(yīng)該熟悉它們:表2.JSR-80API中的接口和類
UsbConfiguration表示USB設(shè)備的配置UsbConfigurationDescriptorUSB配置描述符的接口UsbDeviceUSB設(shè)備的接口UsbDeviceDescriptorUSB設(shè)備描述符的接口UsbEndpointUSB端點(diǎn)的接口UsbEndpointDescriptorUSB端點(diǎn)描述符的接口UsbHubUSBhub的接口UsbInterfaceUSB接口的接口UsbInterfaceDescriptorUSB接口描述符的接口UsbPipeUSB管道的接口UsbPortUSB端口的接口UsbServicesjavax.usb實(shí)現(xiàn)的接口UsbHostManagerjavax.usb的入口點(diǎn)用JSR-80API訪問USB設(shè)備的正常過程如下:?通過從UsbHostManager得到相應(yīng)的UsbServices進(jìn)行Bootstrap0?通過UsbServices訪問roothub。在應(yīng)用程序中roothub就是一個UsbHub。?獲得連接到roothub的UsbDevices清單。遍歷所有低級hub以找到正確的UsbDevice。?用控制消息(UsbControlIrp)與UsbDevice直接交互,或者從UsbDevice的相應(yīng)UsbConfiguration中要求一個Usblnterface并與該Usblnterface上可用的UsbEndpoint進(jìn)行I/Oo?如果一個UsbEndpoint用于進(jìn)行I/O,那么打開與它關(guān)聯(lián)的UsbPipe。通過這個UsbPipe可以同步或者異步提交上行數(shù)據(jù)(從USB設(shè)備到主計算機(jī))和下行數(shù)據(jù)(從主計算機(jī)到USB設(shè)備)。?當(dāng)應(yīng)用程序不再需要訪問該UsbDevice時,關(guān)閉這個UsbPipe并釋放相應(yīng)的Usblnterfaceo在清單3中,我們用JSR-80API獲得USB系統(tǒng)的內(nèi)容。這個程序遞歸地遍歷USB系統(tǒng)上的所有USBhub并找出連接到主機(jī)計算機(jī)上的所有USB設(shè)備。這段代碼對應(yīng)于上述步驟1到步驟3o清單3,用JSR-80API獲得USB系統(tǒng)的內(nèi)容importjavax.usb.*;
importjava.util.List;publicclassTraverseUSB{publicstaticvoidmain(Stringargv[]){try{//AccessthesystemUSBservices,andaccesstotheroot//hub.Thentraversethroughtheroothub.UsbServicesservices=UsbHostManager.getUsbServices();UsbHubrootHub=services.getRootUsbHub();traverse(rootHub);}catch(Exceptione){}}publicstaticvoidtraverse(UsbDevicedevice){if(device.isUsbHub()){//ThisisaUSBHub,traversethroughthehub.ListattachedDevices=((UsbHub)device).getAttachedUsbDevices();for(inti=0;i<>{traverse((UsbDevice)attachedDevices.get(i));
}}else{//ThisisaUSBfunction,notahub.//Dosomething.}}}清單4展示了在應(yīng)用程序成功地找到Device后,如何與Interface和EndPoint進(jìn)行I/O。這段代碼還可以修改為進(jìn)行所有四種數(shù)據(jù)傳輸類型的I/O。它對應(yīng)于上述步驟4到步驟6。清單4,用JSR-80API進(jìn)行I/OpublicstaticvoidtestIO(UsbDevicedevice){try{//AccesstotheactiveconfigurationoftheUSBdevice,obtain//alltheinterfacesavailableinthatconfiguration.UsbConfigurationconfig=device.getActiveUsbConfiguration();ListtotalInterfaces=config.getUsbInterfaces();//Traversethroughalltheinterfaces,andaccesstheendpoints//availabletothatinterfaceforI/O.for(inti=0;i<>
Usblnterfaceinterf=(Usblnterface)totallnterfaces.get(i);interf.claim();ListtotalEndpoints=interf.getUsbEndpoints();for(intj=0;j<>{//Accesstheparticularendpoint,determinethedirection//ofitsdataflow,andtypeofdatatransfer,andopenthe//datapipeforI/O.UsbEndpointep=(UsbEndpoint)totalEndpoints.get(i);intdirection=ep.getDirection();inttype=ep.getType();UsbPipepipe=ep.getUsbPipe();pipe.open();//PerformI/OthroughtheUSBpipehere.pipe.close();}interf.release();}}catch(Exceptione){}}JSR-80項(xiàng)目從一開始就非?;钴S。2003年2月發(fā)表了javax.usbAPI、RI和RI的0.10.0版本??雌饋磉@一版本會提交給JSR-80委員會做最終批準(zhǔn)。預(yù)計正式成為Java語
言的擴(kuò)展標(biāo)準(zhǔn)后,其他操作系統(tǒng)上的實(shí)現(xiàn)會很快出現(xiàn)。Linux開發(fā)者團(tuán)體看來對JSR-80項(xiàng)目的興趣比jUSB項(xiàng)目更大,使用Linux平臺的javax.usbAPI的項(xiàng)目數(shù)量在不斷地增加。結(jié)束語jUSBAPI和JSR-80API都為應(yīng)用程序提供了從運(yùn)行Linux操作系統(tǒng)的計算機(jī)中訪問USB設(shè)備的能力。JSR-80API提供了比jUSBAPI更多的功能,很有可能成為Java
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合伙貸款買貨車協(xié)議書
- 農(nóng)產(chǎn)品幫扶采購協(xié)議書
- smt合作開廠協(xié)議書
- 茶葉企業(yè)訂購協(xié)議書
- 采礦勞務(wù)施工協(xié)議書
- 餐廳設(shè)施移交協(xié)議書
- 道路開挖押金協(xié)議書
- 被迫墮胎補(bǔ)償協(xié)議書
- Brand KPIs for second-hand apparel online shops Kleinanzeigen (eBay-Kleinanzeigen) in Germany-外文版培訓(xùn)課件(2025.2)
- 集鎮(zhèn)房屋置換協(xié)議書
- 五年級下冊數(shù)學(xué)約分練習(xí)100題附答案
- 跨文化交流中的語言適應(yīng)性研究
- 第5.2課 《飛向太空的航程》同步練習(xí) (原卷版)
- 新概念英語第二冊Lesson8課件
- 地攤市集活動策劃方案
- 勞務(wù)外包與勞務(wù)派遣課件
- 白酒行業(yè)財務(wù)知識培訓(xùn)課件
- 智慧倉儲配送機(jī)器人案例
- 中醫(yī)護(hù)理-生活起居的護(hù)理內(nèi)容
- 《商標(biāo)權(quán)授權(quán)與侵權(quán)》課件
- 預(yù)應(yīng)力錨索基本試驗(yàn)方案
評論
0/150
提交評論