|
Table of Contents
|
About
I was hunting for many days for a USB dongle that would provide GPIO entries in the form of entries in /sys/class/gpio.
I found the Oneping.com.tw PL2303 breakout board with the chip PL2303 HXD (or HX revD), which has nice 2.54mm pins for 4 GPIOs (GP0, GP1, GP2, GP3). According to the datasheet, there seems to be 4 auxiliary GPIOs (so 8 GPIOs in total), but there is no documentation on how to use them.
Oneping produces 3 different versions of the board for different GPIO output voltages: 1.6V, 3.3V, 5V. I own the 3.3V version.
Kernel patch
Wang YanQing wrote a patch (local copy pl2303-gpio-sysfs.patch) to recent kernels (this is one is tested against 3.16, 4.1) in order to expose those GPIOs in /sys/class/gpio.
First, you have to install or to download the kernel sources of your kernel, if you install them via your distribution, they will be put on /usr/src/:
root@sabayonx86-64 /usr/src [21]# equo install "sys-kernel/sabayon-sources-4.1.12"
╠ @@ Calculating dependencies...
╠ ## [N] [sabayon-weekly] sys-kernel/sabayon-sources-4.1.12|0
╠ @@ Packages needing to be installed/updated/downgraded: 1
╠ @@ Packages needing to be removed: 0
╠ @@ Download size: 0b
╠ @@ Used disk space: 558.3MB
╠ @@ You need at least: 770.3MB of free space
╠ ::: >>> (1/1) 1 package
╠ ## Downloading: 1 package
╠ ## ( mirror #1 ) [sys-kernel:sabayon-sources-4.1.12.749d89a47c204e21eba4525de38e3042e896f6d4~0.tbz2] @ http://na.mirror.garr.it
╠ ## Aggregated download: 1 item
╠ # [1] na.mirror.garr.it => sys-kernel:sabayon-sources-4.1.12.749d89a47c204e21eba4525de38e3042e896f6d4~0.tbz2
╠ ## Checking package checksum...
╠ ## ( mirror #1 ) [sys-kernel:sabayon-sources-4.1.12.749d89a47c204e21eba4525de38e3042e896f6d4~0.tbz2] success @ http://na.mirror.garr.it
╠ +++ >>> (1/1) sys-kernel/sabayon-sources-4.1.12
╠ ## Unpacking: sys-kernel:sabayon-sources-4.1.12.749d89a47c204e21eba4525de38e3042e896f6d4~0.tbz2root@sabayonx86-64 /usr/src [27]# ls -lha
total 36K
drwxr-xr-x 6 root root 4.0K Feb 25 18:46 .
drwxr-xr-x 21 root root 4.0K Feb 25 18:42 ..
-rw-r--r-- 1 root root 0 Nov 19 2005 .keep
lrwxrwxrwx 1 root root 19 Feb 25 18:45 linux -> linux-4.1.0-sabayon
drwxr-xr-x 25 root root 4.0K Feb 25 18:44 linux-4.1.0-sabayon
-rw-r--r-- 1 root root 9.3K Sep 4 2014 pl2303-gpio-sysfs.patch
drwxr-xr-x 7 root root 4.0K Oct 8 2014 rpm
drwxr-xr-x 4 root root 4.0K Feb 1 15:02 spl-0.6.5.3
drwxr-xr-x 4 root root 4.0K Feb 1 15:02 zfs-0.6.5.3I can download the patch here:
root@sabayonx86-64 /usr/src [29]# wget http://zoobab.wdfiles.com/local--files/pl2303hxd-gpio/pl2303-gpio-sysfs.patch
--2016-02-25 18:48:38-- http://zoobab.wdfiles.com/local--files/pl2303hxd-gpio/pl2303-gpio-sysfs.patch
Resolving zoobab.wdfiles.com... 54.165.29.53
Connecting to zoobab.wdfiles.com|54.165.29.53|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 9517 (9.3K) [text/x-diff]
Saving to: ‘pl2303-gpio-sysfs.patch’
pl2303-gpio-sysfs.patch 100%[========================================================>] 9.29K --.-KB/s in 0.002s
2016-02-25 18:48:39 (5.64 MB/s) - ‘pl2303-gpio-sysfs.patch’ saved [9517/9517]
root@sabayonx86-64 /usr/src [30]# ls -lha
total 36K
drwxr-xr-x 6 root root 4.0K Feb 25 18:48 .
drwxr-xr-x 21 root root 4.0K Feb 25 18:42 ..
-rw-r--r-- 1 root root 0 Nov 19 2005 .keep
lrwxrwxrwx 1 root root 19 Feb 25 18:45 linux -> linux-4.1.0-sabayon
drwxr-xr-x 25 root root 4.0K Feb 25 18:44 linux-4.1.0-sabayon
-rw-r--r-- 1 root root 9.3K Sep 4 2014 pl2303-gpio-sysfs.patch
drwxr-xr-x 7 root root 4.0K Oct 8 2014 rpm
drwxr-xr-x 4 root root 4.0K Feb 1 15:02 spl-0.6.5.3
drwxr-xr-x 4 root root 4.0K Feb 1 15:02 zfs-0.6.5.3
root@sabayonx86-64 /usr/src [31]#I had to add a symlink from "a" to "linux":
root@sabayonx86-64 /usr/src [31]# ln -s linux a
root@sabayonx86-64 /usr/src [32]# l
total 28
lrwxrwxrwx 1 root root 5 Feb 25 18:49 a -> linux
lrwxrwxrwx 1 root root 19 Feb 25 18:45 linux -> linux-4.1.0-sabayon
drwxr-xr-x 25 root root 4096 Feb 25 18:44 linux-4.1.0-sabayon
-rw-r--r-- 1 root root 9517 Sep 4 2014 pl2303-gpio-sysfs.patch
drwxr-xr-x 7 root root 4096 Oct 8 2014 rpm
drwxr-xr-x 4 root root 4096 Feb 1 15:02 spl-0.6.5.3
drwxr-xr-x 4 root root 4096 Feb 1 15:02 zfs-0.6.5.3Now apply the patch:
root@sabayonx86-64 /usr/src [33]# patch -p0 < pl2303-gpio-sysfs.patch
(Stripping trailing CRs from patch; use --binary to disable.)
patching file a/drivers/usb/serial/Kconfig
Hunk #1 succeeded at 519 (offset 3 lines).
(Stripping trailing CRs from patch; use --binary to disable.)
patching file a/drivers/usb/serial/pl2303.c
Hunk #2 succeeded at 32 with fuzz 2 (offset -102 lines).
Hunk #5 succeeded at 246 (offset 3 lines).
Hunk #6 succeeded at 478 (offset 3 lines).
Hunk #7 succeeded at 507 (offset 3 lines).
Hunk #8 succeeded at 521 (offset 3 lines).Then go to the linux directory, and run "make menuconfig":
The go to "-> Device Drivers -> USB support -> USB Serial Converter support -> USB Prolific 2303 Single Port Serial Driver -> USB Prolific 2303 Single Port GPIOs support".

When you will save, it will have this block in the .config file:
+config USB_SERIAL_PL2303_GPIO
+ bool "USB Prolific 2303 Single Port GPIOs support"
+ depends on USB_SERIAL_PL2303 && GPIOLIB
+ ---help---
+ Say Y here if you want to use GPIOs on PL2303 USB Serial single port
+ adapter from Prolific.
+
+ It supports 2 dedicated GPIOs on PL2303HXA, 4 dedicated GPIOs on
+ PL2303HXD and PL2303RA currently.
+ If unsure, say N.Now, you can compile all the serial modules:
root@sabayonx86-64 /usr/src/linux [15]# make SUBDIRS=drivers/usb/serial modules -j5
CC [M] drivers/usb/serial/usb-serial.o
CC [M] drivers/usb/serial/generic.o
CC [M] drivers/usb/serial/bus.o
CC [M] drivers/usb/serial/aircable.o
CC [M] drivers/usb/serial/ark3116.o
CC [M] drivers/usb/serial/belkin_sa.o
CC [M] drivers/usb/serial/ch341.o
CC [M] drivers/usb/serial/cp210x.o
CC [M] drivers/usb/serial/cyberjack.o
CC [M] drivers/usb/serial/cypress_m8.o
CC [M] drivers/usb/serial/digi_acceleport.o
[...]You will then have a pl2303.ko compiled:
root@sabayonx86-64 /usr/src/linux/drivers/usb/serial [20]# ls -1 pl*.ko
pl2303.koTry to unload/load it:
root@sabayonx86-64 /usr/src/linux/drivers/usb/serial [26]# rmmod pl2303; insmod ./pl2303.ko ; lsmod | grep pl2303
pl2303 11963 0
usbserial 25891 1 pl2303You will then see in /sys/class/gpio that there is now a gpiochip available:
root@sabayon /sys/class/gpio [2]# l
total 0
--w------- 1 root root 4096 Sep 4 10:25 export
--w------- 1 root root 4096 Sep 4 10:25 unexport
root@sabayon /sys/class/gpio [3]# l
total 0
--w------- 1 root root 4096 Sep 4 10:25 export
lrwxrwxrwx 1 root root 0 Sep 4 10:26 gpiochip252 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/gpio/gpiochip252
--w------- 1 root root 4096 Sep 4 10:25 unexportYou can export the 4 GPIOs with echo:
root@sabayon /sys/class/gpio [22]# echo 252 > export
root@sabayon /sys/class/gpio [23]# echo 253 > export
root@sabayon /sys/class/gpio [24]# echo 254 > export
root@sabayon /sys/class/gpio [25]# echo 255 > export
root@sabayon /sys/class/gpio [26]# l
total 0
--w------- 1 root root 4096 Sep 4 16:02 export
lrwxrwxrwx 1 root root 0 Sep 4 16:01 gpio252 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/gpio/gpio252
lrwxrwxrwx 1 root root 0 Sep 4 16:02 gpio253 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/gpio/gpio253
lrwxrwxrwx 1 root root 0 Sep 4 16:02 gpio254 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/gpio/gpio254
lrwxrwxrwx 1 root root 0 Sep 4 16:02 gpio255 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/gpio/gpio255
lrwxrwxrwx 1 root root 0 Sep 4 15:59 gpiochip252 -> ../../devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1:1.0/gpio/gpiochip252
--w------- 1 root root 4096 Sep 4 15:59 unexportToggling the pins on the shell works, but I have to test the toggling speed with a C program.
I am noting a change in voltage from 0V to 3.3V with this:
root@sabayon /sys/class/gpio [32]# while true; do sleep 1; echo 0 > gpio252/value; sleep 1; echo 1 > gpio252/value; doneWhich confirms that it is working as expected.
Test with an HXA
I had an RS232 (using 12V) adaptor laying around, tried it as well, GP1 and GP0 were exposed:
root@sabayon /sys/class/gpio [26]# l
total 0
--w------- 1 root root 4096 Sep 4 18:35 export
lrwxrwxrwx 1 root root 0 Sep 4 18:35 gpio254 -> ../../devices/pci0000:00/0000:00:1d.0/usb6/6-2/6-2:1.0/gpio/gpio254
lrwxrwxrwx 1 root root 0 Sep 4 18:35 gpio255 -> ../../devices/pci0000:00/0000:00:1d.0/usb6/6-2/6-2:1.0/gpio/gpio255
lrwxrwxrwx 1 root root 0 Sep 4 18:34 gpiochip254 -> ../../devices/pci0000:00/0000:00:1d.0/usb6/6-2/6-2:1.0/gpio/gpiochip254
--w------- 1 root root 4096 Sep 4 18:34 unexportBut I could not change the status of the pin:
root@sabayon /sys/class/gpio [22]# echo 1 > gpio255/value
root@sabayon /sys/class/gpio [23]# cat gpio255/value
0I don't know why…
I also tried with a chinese clone (small chip covered with some black paste), got the same error, could export the 2 GPIOs, but could not write to them.
Android app and USB sniffing
The android app PL2303GPIOActivity.apk provides an GUI to toggle the 4 GPIO pins and the 4 auxiliary pins (this is a feature NOT documented anywhere). The app only works on some tablet versions of Android. After fighting with different tablets which supports OTG, I decided to give Android-x86-4.4-r1 a shot on my Lenovo X200 laptop, and it works like a charm. The only problem is that the kernel does not have support for usbmon, so I will need to recompile the whole thing to be able the sniff the USB packets. Stay tuned!
Todo
- Find a decent and simple speed tester for sysfs gpio pins
- Test avrdude and urjtag with GPIO cable support
- Blink a LED
- Speed comparison with RaspberryPi GPIO bitbanging
- Order some chips PL2303TB with 12 GPIOs
- Find out how to disable the RI/DCD/DSR/CTS pins in order to use them as GPIOs (look at the source code of the android app)
Other chips
Cypress
Cypress has also pushed a patch to support 12 GPIOs over USB with the CYUSBS234. A devboard CYUSBS232 is available at Mouser, including the standalone chip CY7C65213-28PVXI in SOP28 format.
Sparkfun sells now a nice breakout board with this Cypress chip.
FTDI
Just discovered this patch posted in June on the LKML: https://lkml.org/lkml/2014/6/9/406 . It is not merged in mainline because kernel guys are nagging about it, so I am trying it now on the ftdi-gpios-sysfs page.
Links
- https://www.youtube.com/watch?v=XZD3mCYBnwM
- http://www.oneping.com.tw/p_usb2ttl_16_18V.htm
- https://github.com/juluosdev/studygroups/wiki/PL2303HXD-Adapter
- https://play.google.com/store/apps/details?id=tw.com.prolific.pl2303hxdgpio
- http://www.oneping.com.tw/Technical_Articles/t-PL2303-Android.htm
- http://www.oneping.com.tw/downlaod/driver/Android/PL2303_Android.zip
- http://www.cnx-software.com/2014/10/20/add-gpios-to-windows-linux-android-computers-and-devices-with-ftdi-usb-adapters-breakout-boards/
- http://ncrmnt.org/wp/2014/11/04/esp8266-and-pl2303hx-gpio-adventures/
- https://github.com/nekromant/pl2303gpio
- http://resolaqq.blogspot.be/2015/08/pl-2303hxd-usb-ttl.html
- http://www.tme.vn/Product.aspx?id=1734#page=pro_info

📞 WA 0812 2782 5310 - Biaya Borongan Tenaga Pasang ConBlock Taman Cluster Perumahan Surakarta
Jasa Pasang Paving Block di Surakarta
Kami adalah penyedia layanan paving blok untuk kebutuhan rumah, kantor, gudang, carport, hingga jalan kampung.
Dengan pengalaman menangani puluhan proyek besar dan kecil, tim kami mampu memberikan hasil presisi dan kuat menahan beban.
Anda dapat memilih jenis dan warna paving sesuai dengan estetika halaman atau area bangunan Anda.
Survey lokasi dan konsultasi desain paving kami berikan secara GRATIS untuk seluruh wilayah Surakarta dan sekitarnya.
Kami telah dipercaya oleh perumahan, perusahaan logistik, instansi pemerintah, serta pemilik rumah pribadi.
Cocok untuk Anda yang peduli tampilan eksterior dan fungsionalitas ruang terbuka di Surakarta.
📞 Hubungi WA: WA 0812 2782 5310
Proyek bangunan Anda butuh paving blok komersial?
Kami kontraktor paving terpercaya di Surakarta, siap untuk proyek skala besar dan kecil.
🏗️ Layanan kami:
- Pasang paving blok skala proyek dan komersial
- Tenaga ahli dan alat berat lengkap
- Proses cepat, garansi kualitas
- GRATIS survei & proposal penawaran
📍 Layanan menjangkau: , Banjarsari, Jebres, Laweyan, Pasar Kliwon, Serengan, Surakarta
Konsultasi sekarang via WA
✨ Digunakan untuk:
- 📱 WA 0812 2782 5310 - Biaya Borongan Tenaga Pasang ConBlock Taman Cluster Perumahan Surakarta
- 📱 WA 0812 2782 5310 - Biaya Pasang Batu Paving Block Minimalis Murah Jebres Surakarta
- 📱 WA 0812 2782 5310 - RAB ConBlock Lapangan Olahraga Laweyan Surakarta
#KontraktorPavingSurakarta #PavingProyek #PavingKuat #JalanKomersial #pavingjalanraya #jasapavingblock #pavingtamanmurah #pavingblockmurah #jasapavingmurah #pavingjalanraya #pavingblockmurah #pavingtamanrumput
📱 WA 0812 2782 5310 - Biaya Borongan Tenaga Pasang ConBlock Taman Cluster Perumahan Jebres Surakarta
📱 WA 0812 2782 5310 - Biaya Pasang Batu Paving Block Minimalis Murah Surakarta
📱 WA 0812 2782 5310 - RAB ConBlock Lapangan Olahraga Laweyan Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Untuk Pemasangan Paving Grass Block Minimalis Surakarta
📱 WA 0812 2782 5310 - Biaya Borong Pasang Paving Grass Block Minimalis Murah Serengan Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paving Grass Block K350 Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Total Biaya Untuk Pemasangan Paving Grass Block Segitiga Serengan Surakarta
📱 WA 0812 2782 5310 - Biaya Pemborong Paving Komplek Perumahan Laweyan Surakarta
📱 WA 0812 2782 5310 - Jasa Pemborong Batu Paving Block Komplek Perumahan Murah Serengan Surakarta
📱 WA 0812 2782 5310 - Biaya Buat Batu Paving Block Jalan Gang Jebres Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pemasangan ConBlock Pekarangan Murah Laweyan Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paving Taman Cluster Perumahan Banjarsari Surakarta
📱 WA 0812 2782 5310 - Harga Fabrikasi ConBlock Jalan Gang Jebres Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pemasangan Paving Block Minimalis Laweyan Surakarta
📱 WA 0812 2782 5310 - Biaya Pasang Paving Anti Lumut Parkiran Surakarta
📱 WA 0812 2782 5310 - Biaya Pasang Paving Anti Lumut K300 Murah Serengan Surakarta
📱 WA 0812 2782 5310 - Jasa Pemborong ConBlock Segitiga Jebres Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pasang Batu Paving Block Per Meter Persegi Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pemasangan Paving Anti Lumut Komplek Perumahan Banjarsari Surakarta
📱 WA 0812 2782 5310 - Jasa Pasang Konblok K300 Laweyan Surakarta
📱 WA 0812 2782 5310 - Pusat Pasang Paping blok K350 Serengan Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pemasangan Paving Pekarangan Jebres Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paving Block Halaman Sekolah Terpercaya Serengan Surakarta
📱 WA 0812 2782 5310 - RAB Pemasangan ConBlock Pekarangan Murah Surakarta
📱 WA 0812 2782 5310 - Biaya Borongan Tenaga Pasang Paping blok Per Meter Persegi Murah Jebres Surakarta
📱 WA 0812 2782 5310 - Total Biaya Untuk Pemasangan Paving Beton Pekarangan Laweyan Surakarta
📱 WA 0812 2782 5310 - Pusat Pasang Paving Segitiga Banjarsari Surakarta
📱 WA 0812 2782 5310 - Jasa Pemborong Konblok Arena Bermain Laweyan Surakarta
📱 WA 0812 2782 5310 - Anggaran Pasang Paving Beton Garasi Surakarta
📱 WA 0812 2782 5310 - RAB Paving Anti Lumut Jalan Gang Banjarsari Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pasang Batu Paving Block Halaman Taman Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Rencana Anggaran Biaya Paving Anti Lumut Halaman Taman Murah Jebres Surakarta
📱 WA 0812 2782 5310 - Biaya Buat Paving Grass Block Segi 6 Serengan Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Untuk Pemasangan Paving Segi 6 Jebres Surakarta
📱 WA 0812 2782 5310 - Rencana Anggaran Biaya Paving Anti Lumut Taman Cluster Perumahan Terpercaya Banjarsari Surakarta
📱 WA 0812 2782 5310 - Rencana Anggaran Biaya Paving Halaman Taman Murah Laweyan Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paving Anti Lumut Jalan Gang Serengan Surakarta
📱 WA 0812 2782 5310 - Biaya Pemborong Paving Halaman Sekolah Surakarta
📱 WA 0812 2782 5310 - Rencana Anggaran Biaya ConBlock Lapangan Olahraga Jebres Surakarta
📱 WA 0812 2782 5310 - Pusat Pasang Paving K350 Laweyan Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pasang Batu Paving Block Parkiran Serengan Surakarta
📱 WA 0812 2782 5310 - RAB Pemasangan Batu Paving Block Tempat Parkir Terpercaya Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Total Biaya Untuk Pemasangan Paving Anti Lumut Arena Bermain Murah Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Anggaran Pasang Batu Paving Block Garasi Serengan Surakarta
📱 WA 0812 2782 5310 - Biaya Buat Paping blok Per Meter Persegi Banjarsari Surakarta
📱 WA 0812 2782 5310 - Rencana Anggaran Biaya Paving Anti Lumut Parkiran Murah Banjarsari Surakarta
📱 WA 0812 2782 5310 - Biaya Pasang Paving Segitiga Serengan Surakarta
📱 WA 0812 2782 5310 - Total Biaya Untuk Pemasangan Paping blok Taman Cluster Perumahan Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paving Beton Per Meter Persegi Terpercaya Jebres Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pemasangan ConBlock K350 Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pemasangan Konblok Halaman Sekolah Murah Surakarta
📱 WA 0812 2782 5310 - Harga Fabrikasi Paving Grass Block K500 Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Untuk Pemasangan Paving Grass Block Area Parkiran Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paping blok Tempat Parkir Serengan Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paving Anti Lumut K500 Laweyan Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paving Beton Garasi Murah Serengan Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Untuk Pemasangan Paving Grass Block Arena Bermain Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - RAB Pemasangan Konblok Segitiga Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paving Beton Jalan Gang Jebres Surakarta
📱 WA 0812 2782 5310 - Anggaran Pasang Paving Beton K300 Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pemasangan Paving Beton Pekarangan Murah Serengan Surakarta
📱 WA 0812 2782 5310 - Rencana Anggaran Biaya Paving K300 Murah Surakarta
📱 WA 0812 2782 5310 - Biaya Borong Pasang Batu Paving Block Halaman Sekolah Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Anggaran Pasang Paping blok Jalan Gang Serengan Surakarta
📱 WA 0812 2782 5310 - Harga Jasa Pasang Paving Grass Block Tempat Parkir Jebres Surakarta
📱 WA 0812 2782 5310 - Biaya Pemborong ConBlock Pekarangan Jebres Surakarta
📱 WA 0812 2782 5310 - Biaya Borong Pasang Paving Anti Lumut Segitiga Banjarsari Surakarta
📱 WA 0812 2782 5310 - RAB Pemasangan Paving Anti Lumut Halaman Sekolah Banjarsari Surakarta
📱 WA 0812 2782 5310 - Total Biaya Untuk Pemasangan Konblok Tempat Parkir Banjarsari Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pemasangan Konblok Garasi Terpercaya Laweyan Surakarta
📱 WA 0812 2782 5310 - RAB Paving Beton Halaman Taman Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Biaya Buat Paping blok K500 Banjarsari Surakarta
📱 WA 0812 2782 5310 - Anggaran Pasang Batu Paving Block Area Parkiran Terpercaya Surakarta
📱 WA 0812 2782 5310 - Rencana Anggaran Biaya Paving Anti Lumut Arena Bermain Laweyan Surakarta
📱 WA 0812 2782 5310 - Biaya Borong Pasang Konblok Parkiran Surakarta
📱 WA 0812 2782 5310 - Biaya Borong Pasang Paving Beton Pekarangan Banjarsari Surakarta
📱 WA 0812 2782 5310 - Rencana Anggaran Biaya Paving Garasi Surakarta
📱 WA 0812 2782 5310 - RAB Paving Beton Parkiran Jebres Surakarta
📱 WA 0812 2782 5310 - Harga Fabrikasi Paving Grass Block Segitiga Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Biaya Pemborong ConBlock Parkiran Jebres Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pemasangan Batu Paving Block K350 Terpercaya Banjarsari Surakarta
📱 WA 0812 2782 5310 - Jasa Pemborong Paving Beton Pekarangan Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Untuk Pemasangan Paving Anti Lumut Pekarangan Laweyan Surakarta
📱 WA 0812 2782 5310 - Kontraktor Paping blok K500 Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Pusat Pasang Paping blok Halaman Sekolah Terpercaya Surakarta
📱 WA 0812 2782 5310 - Harga Fabrikasi Paping blok Halaman Taman Jebres Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pasang Paping blok Garasi Jebres Surakarta
📱 WA 0812 2782 5310 - Biaya Borongan Tenaga Pasang Batu Paving Block Halaman Taman Surakarta
📱 WA 0812 2782 5310 - Jasa Pemborong ConBlock K500 Surakarta
📱 WA 0812 2782 5310 - Anggaran Dana Pasang Paving Taman Cluster Perumahan Surakarta
📱 WA 0812 2782 5310 - Rencana Anggaran Biaya Paving Grass Block Arena Bermain Pasar Kliwon Surakarta
📱 WA 0812 2782 5310 - Biaya Buat Paving Anti Lumut Segitiga Jebres Surakarta
📱 WA 0812 2782 5310 - Jasa Pemborong Konblok Jalan Gang Laweyan Surakarta
📱 WA 0812 2782 5310 - RAB Paving Tempat Parkir Banjarsari Surakarta
📱 WA 0812 2782 5310 - Jasa Pemborong Paving Block Jalan Gang Surakarta
📱 WA 0812 2782 5310 - RAB Paping blok Segitiga Banjarsari Surakarta
📱 WA 0812 2782 5310 - Total Biaya Untuk Pemasangan Konblok Segi 6 Jebres Surakarta
📱 WA 0812 2782 5310 - Jasa Pasang Paving Block Tempat Parkir Serengan Surakarta
📱 WA 0812 2782 5310 - Biaya Borong Pasang Batu Paving Block K300 Banjarsari Surakarta
📱 WA 0812 2782 5310 - Biaya Pasang Paping blok Arena Bermain Jebres Surakarta
Post preview:
Close preview