版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、耳机插入检测学习总结在An droid中,耳机检测功能以及hook按键驱动功能的设计属于用户输入 系统的驱动设计范畴,因此有必要对用户输入系统的代码流程有一个比较清晰的 了解。在An droid中,用户输入系统主要是针对一些诸如键盘、触摸屏等硬件而设 计的一套代码系统。在an droid上层,java通过获取这些设备产生的事件做出相 应的响应。而在Java框架和应用程序层,通常使用运动事件获得触摸屏、轨迹 球等设备的信息,用按键事件获得各种键盘的信息。用户输入系统的基本层次结 构如图1所示:圏1如加局用户输入系统的基本层次结枸在An droid中,用户输入系统自下而上,主要分为驱动程序、本地库
2、处理部 分、Java类对输入事件的处理、对Java程序的接口。An droid用户输入系统的结 构如图2所示。驱动程序:在/dev/i nput目录中,通常是Eve nt类型的驱动程序EventHub:本地框架层的EventHub是libui中的一部分,它实现了对驱动 程序的控制,并从中获得信息KeyLayout (按键布局)和KeyCharacterMap (按键字符映射)文件。同时, libui中有相应的代码对其操作。定义按键布局和按键字符映射需要运行时配置文 件的支持,它们的后缀名分别为 kl和kcmJava框架层的处理:在 Java框架层具有KeyInputDevice等类用于处理由
3、Eve ntHub传送上来的信息,通常信息由数据结构Raw In putEve nt和KeyEve nt来表示。通常情况下,对于按键事件,则直接使用KeyEvent来传送给应用程序层, 对于触摸屏和轨迹球等事件,则由RawInputEvent经过转换后,形成MotionEvent 时间传送给应用程序层在 An droid的应用程序层中,通过重新实现on TouchEve nt和onTrackballEvent等函数来接收运动事件(MotionEvent),通过重新实现 onKeyDown和onKeyUp等函数来接收按键事件(KeyEvent)。这些类包含在 an droid.view 包中。.
4、kcwJn Ai vku-A wvMiliwrtL. VLndJ1* iiitk呻 MIJLiva .PIicliLin iAif itHd'ii 丹打 riII BIHI1 ! 11 T nuKflmn >»Kf3flipKcTnpiMQiicni.eRhwEti卩ml dm IFl-flllXWOiif 和 feirfad+ d-fcH + 8 iTVNnliveFr jjrtLT*isrL«+iIrt jgi""氏 aKernelT<iudiMon當 i' Key样撷in%才一-一一亠一一一S 2用户输入系统的结枸K.C
5、5 LapuilX. 昱工In put驱动程序是Li nux输入设备的驱动程序,分成游戏杆(joystick)鼠标 (mouse和mice)和事件设备(Eve nt queue 3种驱动程序。其中事件驱动程序 是目前通用的驱动程序,可支持键盘、鼠标、触摸屏等多种输入设备。In put驱动程序的主设备号是13, 3种驱动程序的设备号分配如下所示joystick游戏杆:031mouse鼠标:32 62mice 鼠标:63事件(Eve nt)设备:6495实际上,每一种In put设备占用5位,因此每种设备包含的个数是 32个Eve nt设备在用户空间大多使用read、ioctl、poll等文件系统
6、的接口进行操 作,read用于读取输入信息,ioctl用于获得和设置信息,poll调用可以进行用户 空间的阻塞,当内核有按键等中断时,通过在中断中唤醒poll的内核实现,这样 在用户空间的poll调用也可以返回。Eve nt设备在文件系统中的设备节点为:/dev/i nput/eve ntX。主设备号为13,次设备号递增生成,为 6495,各个具体的设备在 misc、 touchscreen keyboard 等目录中。Eve nt输入驱动的架构如图3所示。输入设备驱动程序的头文件:kernel/include/linux/input.h。输入设备驱动程序的核心和 Eve nt部分代码分别是:
7、kernel/drivers/input/input.c 和 kernel/drivers/input/ evdev.cir.pul工EvcntcQ 爺号f M- iT!'1 mnu站)onInput駆瓦1椁41?LS 1(input.叮):dj'fJC. unci iirpin dc、fapjl MQQitWr dn)M常 Hl"itMi STS、曲栈卅篤恠件图3 Eunt设體验动的架构input.h中定义了 struct input_dev结构,该结构体代表了一种设备,结构体内 部的成员代表了 In put驱动程序的各种信息,对于 Eve nt设备分为同步设备、键
8、 盘、相对设备(鼠标)、绝对设备(触摸屏)等。input_dev中定义并归纳了各种设备的信息,例如按键、相对设备、绝对设 备、杂项设备、LED、声音设备,强制反馈设备、开关设备等。01069: 01070: 01071: 1072: 01073: 107: Q1Q75; 01076: 01077: 01078: 01079: 01080: oioei: oioes: 01003: 1084! 01065; 1065; 01067: 01063: 010S9; Q1Q50; 口1口£1: 01092: 01093! 01094: 01095: 109S: 01097: 1093: 10
9、99: 01100: 01101: 01102; 01103: 01104: 01105: 01106: 01107: 01103! 01109; 0111: 01111: 01112: 01113: 01113 : 01115: 01116: 01117:* struct inputdmu -sn input dmt/icg* ©nsma! rairie & th& device*(n)phys: physical path to the device in the system hierarchy*(3)umq: unique identification cod
10、e for the device (if device has it)* oid: id of the dsvice (struct input_id)* ®evbit! bitmap of typss of events supported by the device (Ey_KEYj* EV_RELj etc.)* cs)keybit: bitmap of ke/s/button吕 this device has* ©relbit; bitmap of relative axes for the device* ©absbit: bitmap of absol
11、ute axes for the device* mscbit: bitmap of miscellaneous events supported by the device* ©ledbit: bitmap of leds present on the device*(2)sndbit: bitmap of sound effects supported by the device* ffbit: bitmap of force feedback effects supported by the device* ©swbit: bitmap of switches pre
12、sent an the device* (hint-eventS-per-jDacket: average number of events generated by thedevice in a packet < he tween E V_SYM/ SVN_REPORT events). Used by event handlers to estirnate size of the buffer needed to hold* events.* cS)key匚odEimmx: size of keycode tabl已* ©kevcodesize: size of eleme
13、nts in keycode table* ©ksycade; of cncade to keycode fothis device* ©setkeycode: optional method to alter current keymap, used to implement* sparse keymaps. If net supplied default mechanism will be used.* The method is being called while holding eventjock and thus must* net sleep*(2)getke
14、ycocle: optional method to retrieve current keymap. If not supplied default mechanism will be used. The method is being called while holding event_lock and thus must not sleep* ff: force feedback structure associated with the device if devicesupports force feedb-ack effects* ©repeat_key: stones
15、 key code of the last key pressed; used to implement* software autorepeat* ©timer: timer for software autorepeat* ©rep: current values for autorepeat parameters (delay, rate)* ©mt: pointer to rray uf struct input_mt_5lot holding current valuerf tracked contacts* Omtsize: number of MT
16、slots the device uses* ©slot: MT slot currentlly being transmitted+(5)absinfo; rray of struct absinfo elemerte holding informationabout absolute axes (current yalue, minflatj fuzz,* resolution)*(S)key; re fie 匚 ts current state of device's keys/ tujttons* ©led: reflects current state o
17、f device's LEDs* snd; refle匚ts current state of sound effects* ©sw: reflects cure nt state of device's swit 匚 hu百* open< this method is called when the very fi砒 user clls* input_open_devi匚色().The driver must prepare the devi匚腿to start qeneratinq events (start polling thread,第4页011500
18、1151: 0112 : 01153 : 01154: 01155: 01156; 01157; 01158: 011S9:: 01160:: 01161! 01162: 01163: 0116-1: 01165: 0116 6:; 01167; 01168: 1169: 01170: 1171!: 01172 r 01173 : 0117: 1175: 0117 6; 01177:; 0117E! 0 11*79 : 011B0; onei: 01182 t 01103 : 01104!01105011B6Q11B701188011S501190011910119201193struct i
19、nput.H启 # const chr riafnej const char phys; const char uniq; struct input_id id,unsigned long evliitBITS_TO_LONGS(EV_CNT); unsigned long keybitBITS TO LOMCS(KEY_QNT); unsinad long relbit0ITS_TO_LONGS(REL_CMT)j ursign&dl long absbitBITS_TOlLOMGS(ABS_匚NT); ursign&di long in5ehitBIT9_TO_LOIMGS
20、(;MSC_CKJr); unsigned long ledbitBITS_ToJZoMGS(LED_CNT); unsigned long sndbitBITS_TO_LONCS(SMD_CNT); unsigned long ffbit0ITS_TO_LOIGS(FF_CNT); unsigned hng swbit BITS_TO_LONGS(SW_匚MT);unsigned int hint_events_per_packetjunsiqn&d irit keycodemax; unsigned irit keycodesize;void *k9ycode;int (*setk
21、eycoda)(struct inpiJt_dGV *dev, unsigned int scncodej uncigned int keycode);int (* getkey co de) (struct iinput_dev *dev? unsigned int scnccde unsigned int * keycode);struct ff_devi匚日unsigned int repeat_key; struct timer _list timer;int rep REP匚NT;struct input_rnt_;lot mt;int mtsl2e; int slot;struct
22、 input_absinfQ bsinfojungnadl long keyBITS_TO_LOJGS(KEV_CNT); urisighad long ledB!TS_TO_LONCS(LED_CNT>unsigned long sndalTS_TO LOMCSSND_CNT); unsigned long swBITSKOJEONGS(SW_CNT);0113 4; intinput dpv01135 :void (*duib!)(slr<JGL tiiput_duvint (fhihXtriict *npnt_riflvUriict +filp);0119 ; int (*e
23、vent)(struct input_devunsigned int type unsigned int code int va/ue)ir llciR r''dlimm;MrutA input_handle *yrob;012 nc ro 1Z0; :5pinlock_t Evert_locK,;'12 12 :s+rurtr tTLitR miitex;C 12 口 J ;'12 口弓:i .ninet int ucers:21Z 35 :tool yuingi_awfly;OlSOt :-C 1ZD-7:Lgl012 De i012D3:IruiJ.cJe
24、ilctf duv;C121C :C121 _:slrucllist_hedLh沁Ir 1212;structli?t_heacnndp丄Z1J: 0? tend ii uutdev ?;第6页UlD-dl019*6;013S7:01395:01359:I Q14DD:01401cince:0105;0M0:D14D5SU14Qal)014071OHO®:01409!014 HQ;01411: 01412s j U1413!HIT和百l<014 IS I3 TIG 01417: ul41a:014ZDS0142:1:0142:1 :01435:01424:0145:01426s
25、1112"?:口 1临目;DI 39:D143:014M:014SZIOH338 j 014!01435;1 01416: 0143:0143-3 :uH39s在具体的Eve nt驱动程序的实现中,如果得到按键的事件,通常需要通过以 下的接口向上进行通知,这些内容也在input.h中定义如下所示:vo d input event: struct input dsv f dev, ng gred mt t#口日 unsigned irit cnH日 ir - vcihie1 iRpUt_inj|>BCt_6Vfiirit stninr inpu_h.irrilp handle,
26、unigrecf inf twJOB 朗5iigr -1 -it mdnP r - uilun;stati匚 in inm v Jid input report key;struct input cisv * dev, un= igr ed int cotiB, Gt value)tnput_evflnt( dsw, EV_ LV rmdft, ' ! vfllimij)static inline vuidl input_report_rel fstrurf input dev *devt ur&iqried it code int value)iiiput_uvurit( d
27、uViLuiJa VdlUH)j-rati - in mid jripiJt_rBport_abS irur lnput_riov "rinv. jinsignsdl int rnrln r vnhminput event( dev, EV AB! cade vlue);J"inline VJld input_reporl ff_status sVrudL lriput_duv duy untijriLjd If L cuJu Iilydluu< " inpiit_nvnnt( riev E*-FF-5TATUH nnrifl,static iniiniii
28、、ii i put_rvpurt _!>w I Ltd i slru J lnpuL_dwv ' duv unjiud ir: cuJw, il valuu il>put Hvgptf day E7 sV ttiJt! I I vdlu«);z.l.jL . in i l jjid input_SynCi&iruut lripui_duv "dijvjf啓i w_ rr, 片1);匚 inlint vjid sync struct input.dBuinput_uvunt(duv, £'; SY'J,
29、 SYt-LT WPC2T. u:,r.>t - -I r- viid inpiltmt Slot strun lti|fiirt_rir?v ' rtnv. inT qlnrinput-!flu FV 4B' . -I- : f.-ll c. t <ilnr ;J/_ J I Hpiil_S6t_C Sip Ability >truLU. Input_duv ''davj ji il. u iinf. I ypt? id iSHjnec- n1. g<Jti );由此可知,事实上,对不同设备内容的报告均是通过in put_eve nt(
30、)函数来完成的,选择使用了不同参数而已。对于input_event()函数的实现在input.c中:032 9y + +0330* input_everit() - neport ne input event003 3 1*(S)dev: device that generated the eventDC33Z* cotype; type of the event+(cods: event codeOD334牛 value: value of the event0033 5申0053 6* This function should be used by drivers implementing
31、 various input00337* devices to report input events. See also inputnjE匚吕厂it().0C339屮 NOTE: input_event() may be safielv used right after input device was00340* allocated with input-allocatB-deviceOj even before it is registered00341* with iHput_register_devi亡色()_. but the eyent will mst res亡h any of
32、 the00342* input handlers. Such early invocation of input_euent() may be used00343* to 'seed1 initial state of a switch or initial position ot aLsolute00344* axis, etc,DD515V0D346void inpu. eventfstruct input dev *dev.OD347unsigned int tvpe, unsiqned int code, int value)D0348 0349unsigned long f
33、lags;口 口托口00351if (i5_event_s»jpported(type dev->evbitjOD352i0035jspin_lock_irqsave(S<dev->event。匚匕 flags);DD3S4add-iriput-randomn&sstvpe, codej vslue); 035Slnput_hancile_euent(ciEvJ type, code, value);00356spin unlock irqrestore(Qsdev->event lock, flags);003570Q35S0359EXPORTSYM
34、BOLdnput.event);003 6000361在手机系统中经常使用的键盘(keyboard)和小键盘(kaypad)属于按键设 备EV_KEY,轨迹球属于相对设备 EV_REL,触摸屏属于绝对设备 EV_ABS。关于按键数值的定义的代码片断如下所示:第9页00113; 0114: ns: 116: 0117: 口口113: 00119: 00120; 121: 00122: 00123!00124!00125: 126: 127: 00129: 00129: 00120: 0013 11; 132: 00133: D01:3J 00135! 00136: 0137: 133: 0013
35、9; 0014: 00141: 00142: 13: 00144: D0145! 00146! 00147: 00148: 19: OOlSOi 00151: 00152: 00153: 154: 001SS: 0156: 001S7! 00158: 0159: 016: 00161; 00162: 001(53: 0014: 16S; 00166: 167:Keys and buttonsMost of the keys/buttons are rriodeled after U5B hut 1.12 (see http:/wwwusb org/developer5/hidpage)H Ab
36、breviations in the comments;AC - Application ControlAL - Applicaticn Launch ButtonSC - Syst巳m Controldefine KEY_.RESERVED0岸define KEY_ESC1define KEY_L2Xfdefire KEY_23defire KEY.卉define KEY45define KEY56rfdefire KEV_6?rfdefirie KEY_7S#defirie KEY_89define KEY_10define KEY_011岸define KEY_M1IXIUS12#def
37、irie KEY_.EQUAL13Xfdefire KEY_.BACKSPACE1叫defire KEY.TAB15define KEY_Q16define KEYW17rfdefire KEV_匚iarfdefirie KEY_R15#defirie KEY_T20define KEY_y21define KEY_u22ffdefire KEY_I23ffdefirie KEY_o24Xfdefire KEY_p25f*defire KEY._LEFTDRAGEdefine KEY_RIGHTB RAGE21define KEY_ENTER2Bdefire KEVLEFTCTRL29fdef
38、irie KEY_A30#defirie_S31#define KEY.Zd32define KEY_F33tfdefire KEY_G34ffdefire KEY_H35Xfdefire KEY_36f*defire KEY._K37define KEY_L33define KEY_SEMICOLOM39defire KEVAPOSTROPHE40define KEY_GRAVE=41#defirie KEY.LEFTSHIIFT42#define KEY_BACKSLASH43define KEY_Z44以上片段仅仅是一部分keys的定义,其中,在众多的keys中就有耳机的定 义:第11页
39、(JU721 : /*0 它一:* switch events口口 7Z3口口72; 007Z5: 072C: 7£7; CT7ZO ; 0729; 730; 口731; 732; 0733: 0734 r 725: 00737; 0073S1 00739: 0740: 00741! 00742 : 0743 : 0744: 074S: 0746: 0747! 074E: 0749: 07E0: M 7E1; 口口752: 口口7S3 : 00754; 口口755; 。口756; 757; 075G:define define define definedefine dafine d
40、afine 卡 dmfinm jtdefine #dafin dfine #def>ne #defins define defineSW_lidoxoc set = IJ shutSW_TABLtT_MODE OJtOl /* set 二 tablet mode */ SW_HEADPHONE_INSERT QzO2 / * set = inserted */尺FKILL_ALLOjkOS /* rftill master switch, type "any"et = rqdio enabledEW_RADIOSVCFKJLLALL / * deprecated */
41、ew_MCROPHONE_lNS£RT koa / * set - inwmrtmd */ SWDOCK«£ / * set = plugged into deck */SW_L1NEOUT_INSERT O:hO-£ ; * swt = hearted */SM JACK PMVG1CAL INSERT 0x0" /* set - mechanical switch fiW_VID£OOUT_lM££RTQvQE J * set = inserted */ SM_CAMERA_LENS_COVER/ * set
42、= lens CCn/fired */SW_KEYPAD_SLIDE0>0a 严 Q 二 keypad slide a Jt *;SW_FRONT_PROXTMFTYOxOfc ;* set = front proximity sensor active */SW.MAX0x0fSW_CIT(5W_MA>:+1)Mi sc evertsdefine MSC_SERIAL define MSC_PULSELEO define MSC_GESTUREdefine MSC_RAWdefine MSC_SCANdefine MSC_MAXdefine MSC_CNT0x0匚口 MOI0x0
43、2口菽口匸0x04Ci)cCi7 (MSC_MAX1JLEDsdefine LED_rtUMLoxoc第12页第#页在kernal'soundcorejack.c中不仅定义了耳机,对其他类型的jack设备也进行了定义:032 6:27: static int jack_switch_types=028:SW_HEADPHONE_1MSERT29:sw_M1 匚 ROPHONE.INSERT,0030;sw""LINEQUT_rNSERTp31;SW.JACKJHYSrCALJNSERTjuoasa:SWJ/IDEOQUT.INSERT,0003 3:;00034:J
44、ack.c用于处理诸如耳机一类的jack设备的注册,创建,释放和上报等。00035: static int Snd jdCk dCV free(struct snd_de/ice * device) 00036:(00037;struct sndJack *jaGk = device->device_dataj00039 :if (jack-> privatefree)00040 :jack->private_free(j ack);00041:'ODO42 :/ * If the input device is registered with the input s
45、ubsystem00043 :* then we need to use a different deallocator. */00044 :if (jack->registered)00045:i nput_unregister_de vice(ja 匚 k- >input_dev;00046 :inputjfree _devlce(iack->input_dev00048:""0009;kfree(jdck->id);00050;kfree(jck);00052 :return o;|OOOS3: 00054:口0亡£占stat c i
46、nt Snd jack deV rCISt8r(struE± srd devize device)iDDCStf a57 struct indjack J jack 二 dt; v ice - > d e v ice_d a tdi;00亡Mstruct =nd匸ard K card 一 dtitflce-jedrd;0 口的.ii il mi*i,DOC 6C'XIC61snnriniftMckongme, si7eof(jack->nane), '%?喘卵,CD址eard-ihortnstTiej)aclc->ifl0口戢a匚k->inpu
47、t_dav->na - jack->namajDQC640065-广 Default to the sound csrrl daice. */0口百 Git (1 j| ac<- >i n purtd e v - >de'. p are nt oce?jack->iinput_dl0u->d9v parent - sndl_card_get_clGvice_iink|*card);era亡昶OOC6&/ * Add capabilities for any 竅。丫空 that are nahkcl M/0 口 W :for ( = D;
48、 i < ARRAY SlZE(-acl:->key); )0 口 mnt testbit - GIC_JACK_DTN_J » ijXIC7Z .0 口右.if ( ! (Ju匚koty匚e St 1菲化让1X)074CDIltillUB;DQC75:OC76:if 0 jack-HcB讪 D0C77jck- k/fi - BTN_ 3 + i;oa?eoo亡亍三ill 卩 uL 当 tjlL iLa p d bi lit y (j ick* > 111 put dev E_KE¥jci 匚 X nk 号iDocaa,卜0匚乾«rr = inp
49、ut. reyi5ler_deviLtt(jjuk->inpul_ <J»v)ace;if (er = o)0匚和耳;jcl-jrcgistcrEd = 1;0匚补亍006tf;return err;0067. ? end sn dl_i aick_d e regi stEr ?g亡E第14页00102: si ns: 00104; 口 DIM; 00106; 口 D1CT7: OO1OS; 00109: 口 D11CI: 口0111; 口D11E; 0011; 00L14: OOL1S; 00L16: 00L17: 00L18: 00L19: DLZO; 00L21:
50、001£2: 00L23: 00L24: 00L2S: 00L£6: 00Lii7; 00L28: 00L29: 001301 001311 00132: 00133: 00134: 00135: C10L36; 0137: ooise: 00139: 00140: 00141: 00142: 00143: 0144: 00145: UU 14 b:00147:mt sndQck_rwvv(2tmct 5nd_card *cardj const char *辺 int typgj trurTsnriJnk jjflck)struct sndjack jack;nt err;
51、nt i;static struct snd_devicc_cp ops - .dev_free = snd_ja ck_de v_freej.dev register = sncl-iacdeveqisterj;jack = kzalloc(sizeof(struct sndjack), GFP_KERNEL);if (jack - - NULL)roturn - EM0MEM;ack->id = kstrduptldj GFPJCERNEL);ack->input_dev = input_allocate_device();if (jack-input_disv -= NULL
52、) err = - ENOMEM;gntn Xfsiljnput;耳匚 k->input_dev->phys = llALSA"acl< >typo - typo;for (i = ; i < ARRAY_8IZE(Jackswitch_tYpes); i+卜if (type Be (1 « i) lnput_set_capabillty(j3ck*>lnpLit_devf EV_SW, jack_siitch_lypes i);err 丄 siid-device-nevjtccrdj SNDRV_DEV_JACkj jackj &
53、;cp5);if (err < 0)goto IfaiLinput;*Jjack = jack;return D;门 put:input free devicefjack-Input dev)kfree(jack;return err; ? &ind brid_jdu<._new ?EXPOR T_SYM B O L(§ndatk_n 旳);第15页U0210 0211 0212 0213 0214 021SQD216002 17 02 IS002 1900220void SndQCk_EpOftotract sridjck jack. int status) 0
54、221 0222 022300224 Q2Z5口口 2270022S口口 223U0230口口 23100232 0233 0234 O23SCd V £= if (! jack)return;for (i = 0; i < ARRAY_SIZE(Jack->key); i+)- int testbit 二 SND_JACK_BTN_O » i;if (Jack->type & testbit)input_report_key(jack->iinput_dejj jdck->k&yif status ft: testbit);for (i = ; i < ARRAY_SIZE(jaclc_swit:t:h_1:¥pE£ : +- int testbit = 1 « i;if (jack->type & testbit) input_report_sv7itch' jack->input_devj jcjck_switch_ty pesfi d stotus & testbit);inpu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025华电湖北发电有限公司所属部分企业面向系统内外公开招聘11人笔试历年参考题库附带答案详解
- 2025中国能建葛洲坝电力公司本部部门公开招聘笔试历年参考题库附带答案详解
- 房地产开发项目可行性研究分析报告
- 2025-2030建筑机械行业兼并重组机会研究及决策咨询报告
- 高考历史二轮复习之疯狂专练4近代西方资本主义政治制度
- 2026定制化护肤品技术突破与商业模式探索报告
- 2026媒体广告行业市场竞争与供需分析发展趋势投资评估规划报告
- 2026大米加工副产品高值化利用技术专利布局分析报告
- 2026墨西哥浆果种植行业市场现状分析投资机会规划方案评估报告
- 2026卢森堡食品饮料行业市场供需分析及投资评估规划分析研究报告
- 2025年银行业务知识考试题及答案
- 苏教译林版五年级下册英语Unit5 Helping our parents 单元测试卷(附答案)
- 幼儿园大班语言《睡睡镇》课件
- 脱甲烷塔结构及工艺流程
- 学校与家庭合作共同促进学生全面成长培训课件
- 作物育种理论与技术的变革
- 翻译后修饰对蛋白质功能的调节课件
- 环境监测固体废物监测
- 超星尔雅走进东盟李太生网络通识课题库与答案
- YS/T 756-2011碳酸铯
- 小学科学苏教版四年级下册第二单元第7课《太阳》课件
评论
0/150
提交评论