Personal tools

Log in

Changes

From IGEP - ISEE Wiki

Jump to: navigation, search

User:Pau pajuelo

10,482 bytes removed, 15:28, 5 September 2014
m
DM3730: Decode an AAC audio file (OK)
= TODO: =
Update peripheral Categorize new tutorials, finish gpio example program<br>
Categorize new tutorials<brHow to manage the kernel modules on Linux How do I edit my kernel command line == AUDIO DSP-ARM== ===Included (IGEP GST DSP):==='''AACHEDEC -> DEC AACHE (OK)''' http://download.wavetlan.com/SVV/Media/HTTP/FAAC-HE-AAC.aac gst-launch --gst-debug-level=2 filesrc location=sampleaache.m4a ! TIAuddec1 codecName=aachedec engineName=codecServer ! volume volume=0.25 ! alsasink sync=false
Finish tutorials below<broutofthebox-> ok
Upgrade IGEP Technology Devices Guides ----
Link all development tools documentation when possible '''MP3DEC -> DEC MP3 (do a diagramAUDIO ERRORS)'''
How to manage - Followed README file from ISEE - IGEP DSP - GST + DMAI Support Package 3.40.00 http://www.stephaniequinn.com/Music/Canon.mp3 gst-launch --gst-debug-level=2 filesrc location=Canon.mp3 ! TIAuddec1 codecName=mp3dec engineName=codecServer ! volume volume=0.25 ! alsasink sync=false '''Random fatal bit error''' '''mp3-plugin doesn't resolve the kernel modules on Linuxerror''' ---- '''G711DEC -> DEC PCM uLAW (speech) (NOT TESTED)''' '''G711ENC -> ENC PCM uLAW (speech) (NOT TESTED)''' ===Not included (IGEP GST DSP):==='''ACCLCDEC -> DEC AACLE (NOT TESTED)''' '''AACLDDEC -> DEC AACLD (NOT TESTED)''' '''WMA9 -> DEC WMA9 (COMPILING ISSUES)''' '''ACCLCENC -> ENC AACLE (NOT TESTED)''' '''ACCHEENC -> ENC AACHE (NOT TESTED)''' '''AACLDENC -> ENC AACLD (NOT TESTED)''' '''WMA8 -> ENC WMA8 (NOT TESTED)''' '''Problems adding codecs into igep-gst-dsp''' == DM3730== === DM3730: Decode a MP3 file (OK) (ADDED TO REPOSISTORIES)=== '''under contruction''' '''does not have an accelerated audio decoder element''' - Compiled gst-plugins-ugly using yocto tools - rpm -igst-plugins-ugly-0.*.rpm - rpm -i libmad0-0.*.rpm - rpm -i gst-plugins-ugly-mad-0.*.rpm - gst-launch filesrc location=sample.mp3 ! mad ! volume volume=0.25 ! alsasink === DM3730: Decode a RA or RM audio file (ERRORS)=== gst-launch --gst-debug-level=3 filesrc location=sample.ra ! rmdemux ! volume volume=0.25 ! alsasink http://www.superluminal.com/andalib/ra/listen.ra gst-plugins-ugly-rmdemux-0.10.19-r1.armv7a.rpm libgstsdp-0.10-0-0.10.36-r3.armv7a.rpm:libgstsdp-0.10-0 libgstsdp-0.10.so.0
How do I edit my kernel command linelibgstrtsp-0.10-0-0.10.36-r3.armv7a.rpm:libgstrtsp-0.10-0 libgstrtsp-0.10.so.0
Basic Software instructions'''Error:'''
= What can I do with IGEP PARIS ={{Table/IGEP Technology Devices|Tech_Family={{#lst0:Template00:Links|IGEP_PARIS_Tech_Family}}|Tech_ID={{#lst00.084839071 1550 0xa137b0 WARN rmdemux rmdemux.c:Template1012:Links|IGEP_PARIS_Tech_ID}}|Name={{#lstgst_rmdemux_chain:Template:Links|IGEP_PARIS_Name}}|Image={{#lst:Template:Links|IGEP_PARIS_Image}}|ISEE_MainPage={{#lst:Template:Links|IGEP_PARIS_ISEE_MainPage}}|ISEE_Hardware={{#lst:Template:Links|IGEP_PARIS_ISEE_Hardware}}}} <rmdemux0> Bogus looking header, unprintable FOURCC
__TOC__ = Overview 0:00:00.085052695 =1550 0xa137b0 WARN rmdemux rmdemux.c:1012:gst_rmdemux_chain:<rmdemux0> Bogus looking header, unprintable FOURCC
This is the 2/3 chapter of IGEP PARIS Expansion Tutorial Guide0:00:00. 085540976 1550 0xa137b0 WARN rmdemux rmdemux.c:1057:gst_rmdemux_chain:<rmdemux0> Unknown object_id .ra4
We will learn some basic tasks0:00:00.085693564 1550 0xa137b0 WARN rmdemux rmdemux.c:1012:gst_rmdemux_chain:<rmdemux0> Bogus looking header, unprintable FOURCC
= What can I do 0:00:00.085815634 === How to use EEPROM ==''(from [[How to use EEPROM]])'' 1550 0xa137b0 WARN rmdemux rmdemux.c:1012:gst_rmdemux_chain:<rmdemux0> Bogus looking header, unprintable FOURCC
'''Basic''' {{#lst0:How to use EEPROM|overview}}{{#lst00:How to use EEPROM|play}}{{#lst00.085907187 1550 0xa137b0 WARN rmdemux rmdemux.c:How to use EEPROM|paris}}'''Know more''' {{#lst1057:How to use EEPROM|know_more}}gst_rmdemux_chain:<rmdemux0> Unknown object_id RaTC
== How to use serial console = DM3730: Decode an AAC audio file (OK)===
Once you connect DV9 cable between IGEP PARIS and Host PC. Open the serial on your PC using your preferred serial communications program (minicom) and configure the port as followsEXTRA_OECONF += "--disable-examples --disable-experimental --disable-sdl --disable-cdaudio --disable-directfb \ --with-plugins=musicbrainz,wavpack,ivorbis,mpegvideoparse,'''faad2''' --disable-vdpau --disable-apexsink \ --disable-orc"Install:
* 115200
* 8N1
* no flow control (either software or hardware)
Open the serial port and the debug shell prompt should appearfaad2-2.7-r2.armv7a.rpmlibfaad2-2.7-r2.armv7a.rpmgst-plugins-bad-faad-0.10.23-r2.armv7a.rpm
A detailed guide on how to connect via serial debug port can be found by following this link: [[Using serial debug port to communicate]]'''maybe there are necessary more packages, compare actual gst-bad-recipe and add changes. Necessary add faad2 recipe'''{{Template:Navigation<pre>bitbake faad2 gst-plugins-bad</IGEP Technology Guides/What can I do/Ending}} {{Table/IGEP Technology Devicespre>|Tech_Family={{#lst:Template:Links|IGEP_PARIS_Tech_Family}}<pre> rpm -i faad2-2.7-r2.armv7a.rpm|Tech_ID={{#lst:Template:Links|IGEP_PARIS_Tech_ID}}rpm -i libfaad2-2.7-r2.armv7a.rpm|Name={{#lst:Template:Links|IGEP_PARIS_Name}}rpm -i gst-plugins-bad-faad-0.10.23-r2.1.armv7a.rpm|Image={{#lst:Template:Links|IGEP_PARIS_Image}}|ISEE_MainPage={{#lst:Template:Links|IGEP_PARIS_ISEE_MainPage}}|ISEE_Hardware={{#lst:Template:Links|IGEP_PARIS_ISEE_Hardware}}}} </pre>
gst-launch --gst-debug-level= What can I do with IGEP BERLIN 3 filesrc location={{Table/IGEP Technology Devices|Tech_Familysample.aac ! faad ! volume volume={{#lst:Template:Links|IGEP_BERLIN_Tech_Family}}|Tech_ID={{#lst:Template:Links|IGEP_BERLIN_Tech_ID}}|Name={{#lst:Template:Links|IGEP_BERLIN_Name}}|Image={{#lst:Template:Links|IGEP_BERLIN_Image}}|ISEE_MainPage={{#lst:Template:Links|IGEP_BERLIN_ISEE_MainPage}}|ISEE_Hardware={{#lst:Template:Links|IGEP_BERLIN_ISEE_Hardware}}}} 0.10 ! alsasink
__TOC__ = Overview === DM3730: Decode an WMA audio file (OK)====
This is the 2<pre>bitbake gst-ffmpeg</3 chapter of IGEP BERLIN Expansion Tutorial Guide. pre>
We will learn some basic tasks<pre>gst-launch -v filesrc location=sample.wma ! asfdemux ! decodebin ! audioconvert ! volume volume=0.25 ! alsasink </pre>
= What can I do === How to use DVI ==== How to Telit Modem ==== How to use to use TVP5151 Video Decoder ===DM3730: Decode an OGG audio file (OK)= How to use EEPROM ==''(from [[How to use EEPROM]])''
'''Basic''' {{#lstInto repositories (base plugins):How to use EEPROM|overview}}{{#lst:How to use EEPROM|play}}{{#lst:How to use EEPROM|paris}}'''Know more''' {{#lst:How to use EEPROM|know_more}}
== How to use CAN Bus ==== How to use serial console ==Once you connect DV9 cable between IGEP BERLIN and Host PChttp://upload.wikimedia.org/wikipedia/en/0/04/Rayman_2_music_sample. Open the serial on your PC using your preferred serial communications program (minicom) and configure the port as follows:ogg
* 115200* 8N1* no flow control (either software or hardware)gst-launch -v filesrc location=sample.ogg ! oggdemux ! vorbisdec ! audioconvert ! volume volume=0.25 ! alsasink
Open the serial port and the debug shell prompt should appear.== BASE0033 CONNECTOR SUMMARY TABLE==
== How to use RS-485 Configure a static IP using the same private network range ==== Get sound in (audio in) ==== Get sound out (audio out) =={{Template:Navigation/IGEP Technology Guides/What can I do/Ending}} {{Table/IGEP Technology Devices|Tech_Family={{#lst:Template:Links|IGEP_BERLIN_Tech_Family}}|Tech_ID={{#lst:Template:Links|IGEP_BERLIN_Tech_ID}}|Name={{#lst:Template:Links|IGEP_BERLIN_Name}}|Image={{#lst:Template:Links|IGEP_BERLIN_Image}}|ISEE_MainPage={{#lst:Template:Links|IGEP_BERLIN_ISEE_MainPage}}|ISEE_Hardware={{#lst:Template:Links|IGEP_BERLIN_ISEE_Hardware}}}}
= [IGEP Technology devices features table proposal] ='''under construction'''
{| cellspacing="0" cellpadding="1" border="1" style="text-align: center;"|-|| bgcolor="#cccccc" | IGEP0032 | bgcolor="#cccccc" | IGEP0030| bgcolor="#cccccc" | IGEP0030| bgcolor="#cccccc" | IGEP0020| bgcolor="#cccccc" | IGEP0010|-| '''Product name''' | bgcolor="#cccccc" | '''IGEP COM PROTON''' | bgcolor="#cccccc" | '''IGEP COM MODULE''' | bgcolor="#cccccc" | '''IGEP COM ELECTRON''' | bgcolor="#cccccc" | '''IGEPv2''' | bgcolor="#cccccc" | '''IGEP0010'''|-| | width="200" | [[Image:Igep0032 side.png|145x93px|center|link=Category:IGEP0032]] | width="200" | [[Image:Igep0030.jpg|184x120px|center|link=Category:IGEP0030]] | width="200" | [[Image:Igep0030neutron.png|184x120px|center|link=Category:IGEP0030]] | width="200" | [[Image:Igep0020.jpg|174x116px|center|link=Category:IGEP0020]] | width="200" | [[Image:Igep0010.jpg|181x114px|center|link=Category:IGEP0010]]|-| '''Devices and interfaces''' || || || || || Firmware Yocto uses the following Ethernet network configuration (discontinued productIP addresses)|-| style="text-align: right;" | ARM CPU|| DM3730 1GHz || DM3730 1GHz|| AM3703 1GHz || DM3730 1GHz || -|-| style="text-align: right;" | DSP|| TMS320DM-C64+ 800 Mhz || TMS320DM-C64+ 800 Mhz || - ||TMS320DM-C64+ 800 Mhz || -|-| style="text-align: right;" | RAM Memory|| 512 MBytes / 200 Mhz || 512 MBytes / 200 Mhz || 256 MBytes / 200 Mhz || 512 MBytes / 200 Mhz || -|-| style="text-align: right;" | Flash Memory|| 512 MBytes || 512 MBytes || 512 MBytes || 512 MBytes || -|-| style="text-align: right;" | MicroSD Card Reader|| x 1 || x 1 || x 1 || x 1 || -|-| style="text-align: right;" | USB 2.0 Host || - || - || - || x 1 || -|-| style="text-align: right;" | USB 2.0 OTG || x 1 || x 1 || x 1 || x 1 || -|-| style="text-align: right;" | RS232|| - || - || - || x 1 || -|-| style="text-align: right;" | RS485|| - || - || - || x 1 || -|-| style="text-align: right;" | JTAG|| x 1 || - || - || x 1 || -|-| style="text-align: right;" | Stereo audio In/Out|| - || - || - || x 1 || -|-| style="text-align: right;" | DVI on HDMI|| - || - || - || x 1 || -|-| style="text-align: right;" | Ethernet|| - || - || - || x 1 || -|-| style="text-align: right;" | Wifi|| - || x 1 || - || x 1 || -|-| style="text-align: right;" | Bluetooth|| - || x 1 || - || x 1 || -|-| style="text-align: right;" | EEPROM|| x 1 || - || - || - || -|-| style="text-align: right;" | S-Video|| - || - || - || T.P. || -|-| style="text-align: right;" | Camera Interface|| - || x 1 || - || N.P. || -|-| style="text-align: right;" | Analog to digital converter|| - || - || - ||N.P.|| -|-| style="text-align: right;" | Keyboard matrix|| - || - || - || N.P. || -|-| style="text-align: right;" | LEDs|| x 3 green LEDs || x 2 bicolor LEDs|| x 1 bicolor LED|| x 2 bicolor LEDs|| -|-| style="text-align: right;" | TFT Interface|| - || - || - || x 2 || -|-| style="text-align: right;" | RTC Battery Back Up|| - || - || - || x 2 || -|-| Size||35x51,2mm || 18x68,5mm || 18x68,5mm || 65x95mm || -|-| style="text-align: right;" | '''Expansion connectors'''|| Power and many functionalities from OMAP3 processor || Power and many functionalities from OMAP3 processor || Power and many functionalities from OMAP3 processor || Power 5V and 1.8V, UART, McBSP, McSPI, I2C, GPIO, RS485 with transceiver, Keyboard || -|-| style="text-align: right;" rowspan="2" | '''Main pages'''| style="text-align: center;" | [[Image:Isee logo.png|57x57px|link=http://www.isee.biz/products/processor-boards/igep-com-proton]] | style="text-align: center;" | [[Image:Isee logo.png|57x57px|link=http://www.isee.biz/products/processor-boards/igep-com-module]] | style="text-align: center;" | [[Image:Isee logo.png|57x57px|link=http://www.isee.biz/products/processor-boards/igep-com-electron]] | style="text-align: center;" | [[Image:Isee logo.png|57x57px|link=http://www.isee.biz/products/processor-boards/igepv2-board]] | style="text-align: center;" rowspan="3" | -|-| style="text-align: center;" | [[Image:Igep community logo.png|62x62px|link=Category:IGEP0032]] | style="text-align: center;" | [[Image:Igep community logo.png|62x62px|link=Category:IGEP0030]] | style="text-align: center;" | [[Image:Igep community logo.png|62x62px|link=Category:IGEP0030]]| style="text-align: center;" | [[Image:Igep community logo.png|62x62px|link=Category:IGEP0020]]|-| style="text-align: right;" | '''Getting started guide'''<br> | style="text-align: center;" | [[Image:Documentation.png|33x33px|link=Getting Started with IGEP0032 board]] | style="text-align: center;" | [[Image:Documentation.png|33x33px|link=Getting Started with IGEP0030 board]] | style="text-align: center;" | [[Image:Documentation.png|33x33px|link=Getting Started with IGEP0030 board]]| style="text-align: center;" | [[Image:Documentation.png|33x33px|link=Getting Started with IGEP0020 board]]|-| style="text-align: right;" | '''Hardware manual'''| style="text-align: center;" | [[Image:Hw manual.png|30x42px|link=http://www.isee.biz/component/zoo/item/igep-com-proton-hardware-reference-manual]] | style="text-align: center;" | [[Image:Hw manual.png|30x42px|link=http://www.isee.biz/component/zoo/item/igep-com-module-hardware-reference-manual]] | style="text-align: center;" | [[Image:Hw manual.png|30x42px|link=http://www.isee.biz/component/zoo/item/igep-electron-hardware-reference-manual-copy]] | style="text-align: center;" | [[Image:Hw manual.png|30x42px|link=http://www.isee.biz/component/zoo/item/igepv2-hardware-reference-manual]]| -|}
*eth0 − 192.168.5.1
*eth0:0 − assigned via dhcp.
* OThis Ethernet network configuration is really useful when you work using a Linux operating system like IGEP SDK Virtual Machine. Because you use eth0 device to communicate easily with your board and eth0: Available on board0 device to get Internet acces using dhcp protocol.
* N.P.But some scenarios this network configuration is not useful, for example: Not populated THESE DEVICES and/or CONNECTORS ARE AVAILABLEif you use a non-Linux operating system, BUT NOT POPULATED BY DEFAULTconnect to two IP private range interfaces is not simple. This How-to can be useful to
* T(Make diagram one: IGEP and Linux defualt communication.P.: Test pointsDiagram 2 IGEP and other SO alternative configuration)
= igep.ini parameters =
| Only for base0010<br>=B
|}
 
= How to use GPIOs (update it) =
 
== Overview ==
 
This How-To is meant to be a starting point for people to learn use GPIOs for IGEP v2 devices as quickly and easily as possible. For this how-to i used [http://releases.linaro.org/platform/linaro-m/headless/final/linaro-m-headless-tar-20101108-2.tar.gz Linaro Headless] with [[Linux Kernel 2.6.35.y|Kernel 2.6.35.y]], Ubuntu 10.04 with Linaro Toolchain, IGEP v2 RC5 and [http://downloads.igep.es/labs/gpio-driver.tar.bz2 GPIO driver].
 
There are more ways to use GPIOs in IGEP v2, but this one is very simple.<br>
 
== Feedback and Contributing ==
 
At any point, if you see a mistake you can contribute to this How-To.<br>
 
== Compile GPIO driver source code via Host<br> ==
 
Download [http://downloads.igep.es/labs/gpio-driver.tar.bz2 GPIO driver] and [[Linux Kernel 2.6.35.y|Kernel 2.6.35.y]] source code. Extract files.<br>
 
Edit GPIO driver Makefile's:
 
-In files: $/app/Makefile and $/lib/Makefile, make sure that your CROSS_COMPILE path is correct.
 
-In file: $/modules/Makefile, make sure that your CROSS_COMPILE path is correct and&nbsp;type your Kernel 2.6.35.y path.<br>
 
We will use the ncurses program for set up Kernel configuration, if you don't have this program installed then you must install it with this command:
<pre>sudo apt-get install ncurses-dev
</pre>
-Go to kernel path and type:
<pre>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- igep00x0_defconfig
</pre>
Exit Linux Kernel Configuration an return to Bash. Type:
<pre>make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules_prepare
</pre>
File $/include/generated/autoconf.h was created
 
Finally compile GPIO driver, go to main Makefile path and compile all source code using make command.
 
Send binaries created from Host to Igep v2. <br>
 
== Install binaries via IGEP<br> ==
 
Log with root user to install binaries.
 
=== Install module ===
 
Go to:$/modules and insert user-gpio-drv.ko into linux kernel with the following command:
<pre>insmod user-gpio-drv.ko
</pre>
Check that user-gpio-drv.ko is currently loaded with the following command:
<pre>lsmod</pre>
The result will be similar at that: <br>
<pre>root@localhost:~/gpio-driver/module# lsmod
Module Size Used by
user_gpio_drv 1639 0
omap_wdt 3411 0
spidev 4198 0
iommu 8558 0
rtc_twl 4411 0
rtc_core 11187 1 rtc_twl
twl4030_keypad 2970 0
</pre>
The module is loaded until system halt.
 
=== Install shared library ===
 
Go to:$/lib. libgpio.so is here.
 
If a program is linked with shared libraries, Kernel seek in specific paths when program is executed. Now is necessary link the libgpio.so path to the environment variable LD_LIBRARY_PATH, use the following command:<br>
<pre>export LD_LIBRARY_PATH=/root/gpio-driver/lib/
</pre>
Check that libgpio.so is linked correctly. Go to:$/gpio-driver/app, gpio program is here. Type next command:
<pre>ldd gpio
</pre>
ldd command, print shared library dependencies. The result will be similar at that:
<pre>root@localhost:~/gpio-driver/app# ldd gpio
libgpio.so =&gt; /root/gpio-driver/lib/libgpio.so (0x40197000)
libc.so.6 =&gt; /lib/libc.so.6 (0x401a0000)
/lib/ld-linux.so.3 (0x4008a000)
</pre>
The shared library is linked until system halt. Now you can execute gpio example program.
 
== Testing driver ==
 
To make sure than driver works well, make the next test. I used GPIO_136(sdmmc2_dat4) and GPIO_137(sdmmc2_dat5) because IGEP v2 RC5(without WIFI) don't use them by default: <br>
 
'''NOTE:''' For more information visit this [[Mux configuration|page]] (under construction). <br>
 
=== Configure Mux ===
 
Go to:/sys/kernel/debug/omap_mux, and change this mux configuration:
<pre>echo 0x104&gt;sdmmc2_dat4
echo 0x104&gt;sdmmc2_dat5
</pre>
Use cat command to check it:<br>
<pre>cat sdmmc2_dat4
cat sdmmc2_dat5
</pre>
The result will be similar at that:
<pre>root@localhost:/sys/kernel/debug/omap_mux# cat sdmmc2_dat4
name: sdmmc2_dat4.gpio_136 (0x48002164/0x134 = 0x0104), b ae4, t NA
mode: OMAP_PIN_INPUT | OMAP_MUX_MODE4
signals: sdmmc2_dat4 | sdmmc2_dir_dat0 | NA | sdmmc3_dat0 | gpio_136 | NA | NA | safe_mode
</pre>
and
<pre>root@localhost:/sys/kernel/debug/omap_mux# cat sdmmc2_dat5
name: sdmmc2_dat5.gpio_137 (0x48002166/0x136 = 0x0104), b ah3, t NA
mode: OMAP_PIN_INPUT | OMAP_MUX_MODE4
signals: sdmmc2_dat5 | sdmmc2_dir_dat1 | cam_global_reset | sdmmc3_dat1 | gpio_137 | hsusb3_tll_stp | mm3_rxdp | safe_mode
</pre>
Note: OMAP_PIN_INPUT=Input/Output pin and OMAP_PIN_OUTPUT=Output pin, for Read/Write test you need the first one. GPIO is configured in mode 4.<br>
 
=== Read/Write test ===
 
Link GPIO_136 and GPIO_137 with a wire, these pins are located in J990 connector with numbers 7 and 9. I use the next connector to join them:<br>
 
{| align="center" cellspacing="1" cellpadding="1" border="1" width="200"
|-
| [[Image:Connector used readwrite test.JPG|center|350x230px]]
|
[[Image:All connected readwrite test.JPG|center|350x230px]]
 
|}
 
<br>
 
Now type next code:
<pre>root@localhost:~/gpio-driver/app# ./gpio input 136
root@localhost:~/gpio-driver/app# ./gpio output 137 0
root@localhost:~/gpio-driver/app# ./gpio get 136
0
root@localhost:~/gpio-driver/app# ./gpio output 137 1
root@localhost:~/gpio-driver/app# ./gpio get 136
1
root@localhost:~/gpio-driver/app#
</pre>
The results (CMOS Voltages: 0V-1V8):
 
{| align="center" cellspacing="1" cellpadding="1" border="1" width="200"
|-
| [[Image:GPIO value0 readwrite test.JPG|center|350x230px]]
|
[[Image:GPIO value1 readwrite test.JPG|center|350x230px]]
 
|}
 
<br> The code above shows that driver works properly, GPIO_136 is configured like input and GPIO_137 is configured like output with value 0, when read GPIO_136 the result is 0. To make sure that works well, configure GPIO_137 with value 1, now GPIO_136 reads 1. <br> This driver have more options like IRQ, but is not explained here.
 
[[Category:USB]] [[Category:How_to_forge]] [[Category:GPIO]] [[Category:UART]] [[Category:IGEP_Technology_Devices_Guides]]
4,199
edits