The ThinkGear SDK for .NET's API is made available to your application การแปล - The ThinkGear SDK for .NET's API is made available to your application ไทย วิธีการพูด

The ThinkGear SDK for .NET's API is

The ThinkGear SDK for .NET's API is made available to your application via the NeuroSky.ThinkGear namespace. Once you have added the ThinkGear.dll file to your project, you can then add the following code to the top of your application to access the NeuroSky.ThinkGear namespace:

using NeuroSky.ThinkGear;
Using the NeuroSky.ThinkGear Namespace

The NeuroSky.ThinkGear namespace consists of two classes:

Connector - Connects to the computer's serial COM port and reads in the port's serial stream of data as DataRowArrays.
TGParser - Parses a DataRowArray into recognizable ThinkGear Data Types that your application can use.
To use the classes, first declare a Connector instance and initialize it:

private Connector connector;
connector = new Connector();
Next, create EventHandlers to handle each type of Connector Event, and link those handlers to the Connector events.

connector.DeviceConnected += new EventHandler( OnDeviceConnected );
connector.DeviceFound += new EventHandler( OnDeviceFound );
connector.DeviceNotFound += new EventHandler( OnDeviceNotFound );
connector.DeviceConnectFail += new EventHandler( OnDeviceNotFound );
connector.DeviceDisconnected += new EventHandler( OnDeviceDisconnected );
connector.DeviceValidating += new EventHandler( OnDeviceValidating );
In the handler for the DeviceConnected event, you should create another EventHandler to handle DataReceived events from the Device, like this:

void OnDeviceConnected( object sender, EventArgs e ) {

Connector.DeviceEventArgs deviceEventArgs = (Connector.DeviceEventArgs)e;
Console.WriteLine( "New Headset Created." + deviceEventArgs.Device.DevicePortName );

deviceEventArgs.Device.DataReceived += new EventHandler( OnDataReceived );
}
Now, whenever data is received from the device, the DataReceived handler will process that data. Here is an example OnDeviceReceived() that shows how it can do this, using a TGParser to parse the DataRow[]:

void OnDataReceived( object sender, EventArgs e ){

/* Cast the event sender as a Device object, and e as the Device's DataEventArgs */
Device d = (Device)sender;
Device.DataEventArgs de = (Device.DataEventArgs)e;

/* Create a TGParser to parse the Device's DataRowArray[] */
TGParser tgParser = new TGParser();
tgParser.Read( de.DataRowArray );

/* Loop through parsed data TGParser for its parsed data... */
for( int i=0; i
0/5000
จาก: -
เป็น: -
ผลลัพธ์ (ไทย) 1: [สำเนา]
คัดลอก!
The ThinkGear SDK for .NET's API is made available to your application via the NeuroSky.ThinkGear namespace. Once you have added the ThinkGear.dll file to your project, you can then add the following code to the top of your application to access the NeuroSky.ThinkGear namespace:using NeuroSky.ThinkGear;Using the NeuroSky.ThinkGear NamespaceThe NeuroSky.ThinkGear namespace consists of two classes:Connector - Connects to the computer's serial COM port and reads in the port's serial stream of data as DataRowArrays.TGParser - Parses a DataRowArray into recognizable ThinkGear Data Types that your application can use.To use the classes, first declare a Connector instance and initialize it:private Connector connector;connector = new Connector();Next, create EventHandlers to handle each type of Connector Event, and link those handlers to the Connector events.connector.DeviceConnected += new EventHandler( OnDeviceConnected );connector.DeviceFound += new EventHandler( OnDeviceFound );connector.DeviceNotFound += new EventHandler( OnDeviceNotFound );connector.DeviceConnectFail += new EventHandler( OnDeviceNotFound );connector.DeviceDisconnected += new EventHandler( OnDeviceDisconnected );connector.DeviceValidating += new EventHandler( OnDeviceValidating );In the handler for the DeviceConnected event, you should create another EventHandler to handle DataReceived events from the Device, like this:void OnDeviceConnected( object sender, EventArgs e ) { Connector.DeviceEventArgs deviceEventArgs = (Connector.DeviceEventArgs)e; Console.WriteLine( "New Headset Created." + deviceEventArgs.Device.DevicePortName ); deviceEventArgs.Device.DataReceived += new EventHandler( OnDataReceived );}Now, whenever data is received from the device, the DataReceived handler will process that data. Here is an example OnDeviceReceived() that shows how it can do this, using a TGParser to parse the DataRow[]:void OnDataReceived( object sender, EventArgs e ){ /* Cast the event sender as a Device object, and e as the Device's DataEventArgs */ Device d = (Device)sender; Device.DataEventArgs de = (Device.DataEventArgs)e; /* Create a TGParser to parse the Device's DataRowArray[] */ TGParser tgParser = new TGParser(); tgParser.Read( de.DataRowArray ); /* Loop through parsed data TGParser for its parsed data... */ for( int i=0; i // See the Data Types documentation for valid keys such // as "Raw", "PoorSignal", "Attention", etc. if( tgParser.ParsedData[i].ContainsKey("Raw") ){ Console.WriteLine( "Raw Value:" + tgParser.ParsedData[i]["Raw"] ); } if( tgParser.ParsedData[i].ContainsKey("PoorSignal") ){ Console.WriteLine( "PQ Value:" + tgParser.ParsedData[i]["PoorSignal"] ); } if( tgParser.ParsedData[i].ContainsKey("Attention") ) { Console.WriteLine( "Att Value:" + tgParser.ParsedData[i]["Attention"] ); } if( tgParser.ParsedData[i].ContainsKey("Meditation") ) { Console.WriteLine( "Med Value:" + tgParser.ParsedData[i]["Meditation"] ); } }}When you would like to begin the Mental Effort and/or Familiarity 1) calculations, use the connector to enable them:connector.setMentalEffortEnable(true);connector.setTaskFamiliarityEnable(true);Once you have the handlers set up as described above, you can have your Connector actually connect to a device/headset/COM port by using one of the Connect methods described in Connect to a device below. If the portName is valid and the connection is successful, then your OnDataReceived() method will automatically be called and executed whenever data arrives from the headset.Before exiting, your application must close the Connector's open connections by calling the Connector's close() method.connector.close();If close() is not called on an open connection, and that connection's process is still alive (i.e. a background thread, or a process that only closed the GUI window without terminating the process itself), then the headset will still be connected to the process, and no other process will be able to connect to the headset until it is disconnected.EventsIf you choose to connect by stating a specific COM port, it will take the following steps:connector.Connect(portName);connector.Connect in turn validates the COM port. So the DeviceValidating event is triggeredif the COM port was valid, it connects to the device. The DeviceFound event is never triggeredif the COM port was invalid, the DeviceNotFound event is triggered.If you choose to connect by using the AUTO approach, it will take the following steps:connector.Find();if it is able to find a COM port with valid ThinkGear Packets, it triggers DeviceFound. Otherwise, the Device
การแปล กรุณารอสักครู่..
ผลลัพธ์ (ไทย) 2:[สำเนา]
คัดลอก!
ThinkGear SDK สำหรับ NET ของ API ให้บริการแก่ใบสมัครของคุณผ่านทาง namespace NeuroSky.ThinkGear เมื่อคุณได้เพิ่มไฟล์ ThinkGear.dll กับโครงการของคุณแล้วคุณสามารถเพิ่มรหัสต่อไปยังด้านบนของแอพลิเคชันของคุณเพื่อเข้าถึง namespace NeuroSky.ThinkGear นี้ใช้ NeuroSky.ThinkGear; ใช้ NeuroSky.ThinkGear Namespace การ namespace NeuroSky.ThinkGear ประกอบด้วยสองชั้น: . ต่อ - เชื่อมต่อกับพอร์ต COM อนุกรมของคอมพิวเตอร์และอ่านในกระแส Serial Port ของข้อมูลเป็น DataRowArrays . TGParser - แยกวิเคราะห์ DataRowArray เข้ามารู้จักประเภท ThinkGear ข้อมูลว่าโปรแกรมที่คุณสามารถใช้ในการใช้การเรียนครั้งแรกประกาศ ตัวอย่างเช่นการเชื่อมต่อและเริ่มต้นมัน: เชื่อมต่อ Connector ส่วนตัวเชื่อมต่อ = เชื่อมต่อใหม่ (); ถัดไปสร้าง EventHandlers ที่จะจัดการกับเหตุการณ์แต่ละประเภทการเชื่อมต่อและเชื่อมโยงขนย้ายวัสดุเหล่านั้นให้กับเหตุการณ์ที่เกิดขึ้นเชื่อมต่อ. connector.DeviceConnected + = EventHandler ใหม่ (OnDeviceConnected); เชื่อมต่อ .DeviceFound + = EventHandler ใหม่ (OnDeviceFound); connector.DeviceNotFound + = EventHandler ใหม่ (OnDeviceNotFound); connector.DeviceConnectFail + = EventHandler ใหม่ (OnDeviceNotFound); connector.DeviceDisconnected + = EventHandler ใหม่ (OnDeviceDisconnected); connector.DeviceValidating + = ใหม่ EventHandler (OnDeviceValidating) ในการจัดการสำหรับเหตุการณ์ DeviceConnected คุณควรสร้าง EventHandler อื่นในการจัดการกับเหตุการณ์ DataReceived จากอุปกรณ์เช่นนี้เป็นโมฆะ OnDeviceConnected (ผู้ส่งวัตถุ, EventArgs E) { Connector.DeviceEventArgs deviceEventArgs = (Connector.DeviceEventArgs) E; Console.WriteLine ( "ชุดหูฟังใหม่ที่สร้างขึ้น." + deviceEventArgs.Device.DevicePortName); deviceEventArgs.Device.DataReceived + = EventHandler ใหม่ (OnDataReceived); } ตอนนี้เมื่อใดก็ตามที่ได้รับข้อมูลจากอุปกรณ์ตัวจัดการ DataReceived จะประมวลผลข้อมูลที่ นี่คือตัวอย่าง OnDeviceReceived () ที่แสดงให้เห็นถึงวิธีการที่จะสามารถทำเช่นนี้โดยใช้ TGParser แยกวิเคราะห์ DataRow []: โมฆะ OnDataReceived (ผู้ส่งวัตถุ, EventArgs E) { / * Cast ผู้ส่งเหตุการณ์เป็นวัตถุอุปกรณ์และ e เป็น อุปกรณ์ DataEventArgs * / อุปกรณ์ d = (อุปกรณ์) ผู้ส่ง; Device.DataEventArgs เดอ = (Device.DataEventArgs) E; / * สร้าง TGParser การแยกของอุปกรณ์ DataRowArray [] * / TGParser tgParser = ใหม่ TGParser (); tgParser.Read ( de.DataRowArray); / * ห่วงผ่านข้อมูลแยกวิเคราะห์ TGParser ข้อมูลแยกวิเคราะห์ของ ... * / for (int i = 0; ฉัน











































// ดูเอกสารประเภทข้อมูลสำหรับคีย์ที่ถูกต้องเช่น
// เป็น "วัตถุดิบ", "PoorSignal", "เรียน" ฯลฯถ้า (tgParser.ParsedData [I] .ContainsKey ( "ดิบ")) { Console.WriteLine ( " ราคาวัตถุดิบ: "+ tgParser.ParsedData [I] [" ดิบ "]); } if (tgParser.ParsedData [I] .ContainsKey (" PoorSignal ")) { Console.WriteLine (" PQ ค่า: "+ tgParser.ParsedData [ I] [ "PoorSignal"]); } if (tgParser.ParsedData [I] .ContainsKey ( "เรียน")) { Console.WriteLine ( "อัฐค่า:" + tgParser.ParsedData [I] [ "เรียน"]); } ถ้า (tgParser.ParsedData [I] .ContainsKey ( "การทำสมาธิ")) { Console.WriteLine ( "ราคา Med:" + tgParser.ParsedData [I] [ "การทำสมาธิ"]); } } } เมื่อคุณต้องการที่จะเริ่มต้น ความพยายามจิตและ / หรือคุ้นเคย 1) การคำนวณใช้เชื่อมต่อเพื่อให้พวกเขา: connector.setMentalEffortEnable (จริง); connector.setTaskFamiliarityEnable (จริง); เมื่อคุณมีตัวจัดการการตั้งค่าตามที่อธิบายไว้ข้างต้นคุณสามารถมีการเชื่อมต่อของคุณจริงเชื่อมต่อ ไปยังอุปกรณ์ / หูฟัง / พอร์ต COM โดยใช้หนึ่งในวิธีการเชื่อมต่อที่อธิบายไว้ในเชื่อมต่อกับอุปกรณ์ด้านล่าง หาก PORTNAME ถูกต้องและการเชื่อมต่อที่ประสบความสำเร็จแล้ว OnDataReceived () วิธีการของคุณจะถูกเรียกโดยอัตโนมัติและดำเนินการเมื่อใดก็ตามที่ข้อมูลที่มาจากชุดหูฟัง. ก่อนที่จะออกใบสมัครของคุณจะต้องปิดเปิดการเชื่อมต่อการเชื่อมต่อโดยการเรียกใกล้ตัวเชื่อมต่อของวิธี () connector.close (); ถ้าปิด () ไม่ได้เรียกร้องให้มีการเชื่อมต่อเปิดและขั้นตอนการเชื่อมต่อที่ยังมีชีวิตอยู่ (เช่นด้ายพื้นหลังหรือกระบวนการที่ปิดหน้าต่างเพียง GUI โดยไม่ต้องยุติการดำเนินการเอง) แล้วชุดหูฟัง . จะยังคงเชื่อมต่อกับกระบวนการและกระบวนการอื่น ๆ จะสามารถเชื่อมต่อกับหูฟังจนกว่าจะมีการตัดการเชื่อมต่อเหตุการณ์หากคุณเลือกที่จะเชื่อมต่อโดยระบุพอร์ต COM ที่เฉพาะเจาะจงก็จะทำตามขั้นตอนต่อไปนี้: connector.Connect (PORTNAME ); connector.Connect ในการเปิดตรวจสอบพอร์ต COM ดังนั้นเหตุการณ์ที่จะถูกเรียก DeviceValidating ถ้าพอร์ต COM ที่ถูกต้องมันจะเชื่อมต่อไปยังอุปกรณ์ เหตุการณ์ DeviceFound ไม่เคยเรียกถ้าพอร์ต COM ที่ไม่ถูกต้องเหตุการณ์ DeviceNotFound จะถูกเรียก. ถ้าคุณเลือกที่จะเชื่อมต่อโดยใช้วิธีการอัตโนมัติก็จะทำตามขั้นตอนต่อไปนี้: connector.Find (); ถ้ามันเป็นความสามารถที่จะหา พอร์ต COM ที่ถูกต้องกับ ThinkGear แพ็คเก็ตมันเป็นต้นเหตุ DeviceFound มิฉะนั้นอุปกรณ์










































การแปล กรุณารอสักครู่..
ผลลัพธ์ (ไทย) 3:[สำเนา]
คัดลอก!
thinkgear SDK สำหรับ NET . เป็น API ให้โปรแกรมของคุณผ่านทาง namespace neurosky.thinkgear . เมื่อคุณได้เพิ่มไฟล์ thinkgear.dll โครงการของคุณ คุณสามารถเพิ่มรหัสต่อไปนี้ไปยังด้านบนของใบสมัครของคุณเพื่อเข้าถึง namespace neurosky.thinkgear :การใช้ neurosky.thinkgear ;ใช้ namespace neurosky.thinkgearมสเปซ neurosky.thinkgear ประกอบด้วยสองชั้น :เชื่อม - เชื่อมต่อกับคอมพิวเตอร์แบบอนุกรมพอร์ต COM และอ่านในพอร์ตอนุกรมกระแสข้อมูลเป็น datarowarrays .tgparser - วิเคราะห์เป็น datarowarray เป็นที่รู้จัก thinkgear ประเภทข้อมูลที่โปรแกรมของคุณสามารถใช้ใช้คลาสแรกประกาศ Connector ตัวอย่างและการเริ่มต้นมัน :ส่วนเชื่อมต่อ ;เชื่อมต่อใหม่ = connector() ;ต่อไป สร้าง eventhandlers เพื่อจัดการกับแต่ละชนิดของขั้วต่อเหตุการณ์ และเชื่อมโยงสัมผัสเหล่านั้นเพื่อเชื่อมต่อเหตุการณ์connector.deviceconnected + = ใหม่ eventhandler ( ondeviceconnected )connector.devicefound + = ใหม่ eventhandler ( ondevicefound )connector.devicenotfound + = ใหม่ eventhandler ( ondevicenotfound )connector.deviceconnectfail + = ใหม่ eventhandler ( ondevicenotfound )connector.devicedisconnected + = ใหม่ eventhandler ( ondevicedisconnected )connector.devicevalidating + = ใหม่ eventhandler ( ondevicevalidating )ในการจัดการกับเหตุการณ์ deviceconnected คุณควรสร้างอีก eventhandler จัดการ datareceived เหตุการณ์จากอุปกรณ์ เช่นนี้ :โมฆะ ondeviceconnected ( ผู้ส่งวัตถุ eventargs E ) {connector.deviceeventargs deviceeventargs = ( Connector deviceeventargs ) E ;คอนโซล writeline ( " ใหม่หูฟังที่สร้าง " + deviceeventargs.device.deviceportname )deviceeventargs.device.datareceived + = ใหม่ eventhandler ( ondatareceived )}ในตอนนี้ หากข้อมูลที่ได้รับจากอุปกรณ์ datareceived ผู้ดูแลจะดำเนินการข้อมูลที่ . นี่คือตัวอย่าง ondevicereceived() ที่แสดงให้เห็นว่ามันสามารถทำโดยใช้ tgparser เพื่อวิเคราะห์ datarow [ ] :โมฆะ ondatareceived ( ผู้ส่งวัตถุ eventargs E ) {/ * โยนงานผู้ส่งเป็นอุปกรณ์ วัตถุ และ E เป็น dataeventargs * / อุปกรณ์อุปกรณ์ D = ( อุปกรณ์ ) ผู้ส่ง ;device.dataeventargs de = ( dataeventargs อุปกรณ์ ) E ;/ * สร้าง tgparser แยกอุปกรณ์เป็น datarowarray [ ] * /tgparser tgparser ใหม่ = tgparser() ;tgparser อ่าน ( de.datarowarray )/ * ห่วงแจง tgparser ข้อมูลสำหรับวิเคราะห์ข้อมูล . . . . . . . * /( int = 0 ; i < tgparser.parseddata.length ; i + + ) {/ / ดูเอกสารชนิดข้อมูลสำหรับคีย์ที่ถูกต้อง เช่น/ / เป็น " วัตถุดิบ " , " poorsignal " , " ความสนใจ " ฯลฯถ้า ( tgparser . parseddata [ ฉัน ] containskey ( " ดิบ " ) ) {คอนโซล writeline ( " ดิบค่า : " + tgparser . parseddata [ I ] [ " ดิบ " ] )}ถ้า ( tgparser . parseddata [ ฉัน ] containskey ( " poorsignal " ) ) {คอนโซล writeline ( PQ ค่า : " + tgparser . parseddata [ I ] [ " poorsignal " ] )}ถ้า ( tgparser . parseddata [ ฉัน ] containskey ( " ความสนใจ " ) ) {คอนโซล writeline ( “ค่า : " + tgparser . parseddata [ I ] [ " ความสนใจ " ] )}ถ้า ( tgparser . parseddata [ ฉัน ] containskey ( " สมาธิ " ) ) {คอนโซล writeline ( " ด้วยค่า : " + tgparser . parseddata [ I ] [ " สมาธิ " ] )}}}เมื่อคุณต้องการที่จะเริ่มต้นความพยายามทางจิตและ / หรือความคุ้นเคย 1 ) การคำนวณ ใช้เชื่อมต่อเพื่อให้พวกเขา :ตัวเชื่อมต่อ setmentaleffortenable ( ที่แท้จริง )ตัวเชื่อมต่อ settaskfamiliarityenable ( ที่แท้จริง )เมื่อคุณได้จัดการตั้งค่าตามที่อธิบายไว้ข้างต้น คุณสามารถมีการเชื่อมต่อของคุณจริงสามารถเชื่อมต่อกับอุปกรณ์ / หูฟัง / พอร์ต โดยใช้หนึ่งในวิธีการที่อธิบายไว้ในเชื่อมต่อการเชื่อมต่อกับอุปกรณ์ดังนี้ ถ้า portname ใช้ได้ และการเชื่อมต่อที่ประสบความสำเร็จ แล้ววิธีการ ondatareceived() ของคุณโดยอัตโนมัติจะถูกเรียกและถูกประหารเมื่อข้อมูลมาถึงจากหูฟังก่อนที่จะออกจากโปรแกรมต้องปิดเปิดการเชื่อมต่อของการเชื่อมต่อโดยการเรียกวิธี close() ของตัวเชื่อมต่อclose() ; Connectorถ้า close() ไม่ได้เรียกว่าการเปิดการเชื่อมต่อและการเชื่อมต่อของกระบวนการยังมีชีวิตอยู่ ( เช่นพื้นหลังด้ายหรือกระบวนการที่เพียงปิดหน้าต่าง GUI โดยไม่ยกเลิกกระบวนการเอง ) แล้วหูฟังจะยังคงสามารถเชื่อมต่อกับกระบวนการ และไม่มีกระบวนการอื่นจะสามารถเชื่อมต่อกับชุดหูฟัง จนกว่า มีการเชื่อมต่อเหตุการณ์ต่าง ๆถ้าคุณเลือกที่จะเชื่อมต่อ โดยระบุพอร์ต COM ที่เฉพาะเจาะจงก็จะใช้ขั้นตอนต่อไปนี้ :เชื่อมต่อ เชื่อมต่อ ( portname )เชื่อมต่อ เชื่อมต่อในการเปิดตรวจสอบพอร์ต COM . ดังนั้น devicevalidating เหตุการณ์ทริกเกอร์ถ้าพอร์ต ถูกต้อง มันเชื่อมต่อกับอุปกรณ์ การ devicefound เหตุการณ์ไม่เคยเรียกถ้าพอร์ต COM เป็นโมฆะ , devicenotfound เหตุการณ์ทริกเกอร์ถ้าคุณเลือกที่จะเชื่อมต่อโดยใช้วิธีการอัตโนมัติ จะใช้ขั้นตอนต่อไปนี้ :find() ; Connectorถ้ามันสามารถหาพอร์ตที่ถูกต้อง thinkgear ด้วยแพ็คเก็ต มันเรียก devicefound . มิฉะนั้น , อุปกรณ์
การแปล กรุณารอสักครู่..
 
ภาษาอื่น ๆ
การสนับสนุนเครื่องมือแปลภาษา: กรีก, กันนาดา, กาลิเชียน, คลิงออน, คอร์สิกา, คาซัค, คาตาลัน, คินยารวันดา, คีร์กิซ, คุชราต, จอร์เจีย, จีน, จีนดั้งเดิม, ชวา, ชิเชวา, ซามัว, ซีบัวโน, ซุนดา, ซูลู, ญี่ปุ่น, ดัตช์, ตรวจหาภาษา, ตุรกี, ทมิฬ, ทาจิก, ทาทาร์, นอร์เวย์, บอสเนีย, บัลแกเรีย, บาสก์, ปัญจาป, ฝรั่งเศส, พาชตู, ฟริเชียน, ฟินแลนด์, ฟิลิปปินส์, ภาษาอินโดนีเซี, มองโกเลีย, มัลทีส, มาซีโดเนีย, มาราฐี, มาลากาซี, มาลายาลัม, มาเลย์, ม้ง, ยิดดิช, ยูเครน, รัสเซีย, ละติน, ลักเซมเบิร์ก, ลัตเวีย, ลาว, ลิทัวเนีย, สวาฮิลี, สวีเดน, สิงหล, สินธี, สเปน, สโลวัก, สโลวีเนีย, อังกฤษ, อัมฮาริก, อาร์เซอร์ไบจัน, อาร์เมเนีย, อาหรับ, อิกโบ, อิตาลี, อุยกูร์, อุสเบกิสถาน, อูรดู, ฮังการี, ฮัวซา, ฮาวาย, ฮินดี, ฮีบรู, เกลิกสกอต, เกาหลี, เขมร, เคิร์ด, เช็ก, เซอร์เบียน, เซโซโท, เดนมาร์ก, เตลูกู, เติร์กเมน, เนปาล, เบงกอล, เบลารุส, เปอร์เซีย, เมารี, เมียนมา (พม่า), เยอรมัน, เวลส์, เวียดนาม, เอสเปอแรนโต, เอสโทเนีย, เฮติครีโอล, แอฟริกา, แอลเบเนีย, โคซา, โครเอเชีย, โชนา, โซมาลี, โปรตุเกส, โปแลนด์, โยรูบา, โรมาเนีย, โอเดีย (โอริยา), ไทย, ไอซ์แลนด์, ไอร์แลนด์, การแปลภาษา.

Copyright ©2025 I Love Translation. All reserved.

E-mail: