Sunday 24 June 2012

Raspberry Pi Wireless Display Using a Cheap Parrot LCD Photo Frame

One of the first things I've tried with my Raspberry Pi is to get it to use the low cost Parrot DF3120 320x240 picture frame as a wireless display over Bluetooth. These little frames are available on Amazon for under £15!


This builds on the sterling work done here https://sites.google.com/site/repurposelinux/df3120 to hack Linux onto the DF3120. When I first saw this post, I bought a few of the frames as they looked like they might come in handy for something.

The basic idea is to set up Bluetooth networking with the Pi, and use SDL VNC viewer to display the X screen on the Parrot. 

Bluetooth Network Setup 

The first thing we need to do is get Bluetooth networking set up between the two devices.

To start off with, on the Pi side, I'm using the standard Debian squeeze image and an Atheros Communications, Inc. AR3011 Bluetooth USB dongle. Install the bluetooth package, and for my atheros dongle, I installed the firmware-atheros package:

apt-get install bluetooth firmware-atheros

On the Pi, you will also need to run bluetooth-agent to allow pairing of the parrot. For testing I just ran this at the command line with no PIN specified. This will allow the Pi to pair with anything that attempts to connect.

bluetooth-agent hci0 

On the Parrot, flash the firmware update using the PFS file and minifs image using the instructions at https://sites.google.com/site/repurposelinux/df3120. Hold down the left and center buttons while powering on to boot into Linux. Once booted, connect the Parrot to a Linux machine and set up the USB networking using 

ifconfig usb0 172.16.61.3 netmask 255.255.255.0 up
telnet 172.16.61.1 

More details on connecting to the Parrot over the USB network are here https://sites.google.com/site/repurposelinux/df3120/connecting-to-the-usb-device

To bring the network up and connect to the Pi over bluetooth, issue these commands on the Parrot:

pand --connect AA:AA:AA:AA:AA:AA
ifconfig bnep0 192.168.4.10

where AA:AA:AA:AA:AA:AA is the BD Address of the Pi. You can find this out by running hciconfig on the pi. 

On the Pi in the terminal where you have bluetooth-agent running, you should see something like:

Authorizing request for /org/bluez/1274/hci0/dev_BB_BB_BB_BB_BB_BB

There should now be a virtual network interface created by bluez on the pi, bnep0. You can give this an IP address on the Pi by issuing: (We will automate this process later)

ifconfig bnep0 192.168.4.1

You should then be able to ping or telnet to the Parrot on 192.168.4.10 from the Pi. To bring Bluetooth networking up automatically on the parrot, I added this to /etc/init.d/rcS, so mine looks like:

#echo "* Starting Bluetooth"
hciattach -s 115200 /dev/ttySAC0 bcm2035 921600 flow 00:00:00:00:00:00 >/dev/null 2>&1
hciconfig hci0 up

bdaddr 84:59:04:04:02:05                                                              
hciconfig hci0 reset                                                                  
                            
#echo "* Starting DUN connection"
#rfcomm bind /dev/rfcomm0 08:00:06:5E:8D:F5 2
#pppd /dev/rfcomm0 noauth defaultroute lcp-echo-interval 10 lcp-echo-failure 12

#echo "* Starting PAN connection"
pand --listen --role NAP
pand --connect 00:02:72:B2:E8:12
sleep 5
ifconfig bnep0 192.168.4.10

A couple of things to note - I'm using static IPs, but you could run dhcp on the Pi and assign IP addresses like that. The other thing is that for some reason on the Parrot, I was getting a different bd address every time I rebooted. To solve this I use the bdaddr command that is in the bluez test suite to set the bd address every time. 

The bdaddr utility is not included in the pre-built image for the parrot, but you can download a copy I built here - bdaddr.tar.gz

To build a copy of bdaddr, I had to rebuild the bluez package in minifs for the Parrot to include the test apps. To get this to work, you need to follow the instructions on building the DF3120 toolchain/rootfs here https://sites.google.com/site/repurposelinux/df3120 using this patch to bring a few package versions up to date where the linked versions are no longer available, and add the dependancies and config option to build the test apps (including bdaddr) in bluez:

diff -rupN minifs.orig/conf/packages/10common_base.sh minifs/conf/packages/10common_base.sh
--- minifs.orig/conf/packages/10common_base.sh 2012-06-24 20:26:02.714490989 +0100
+++ minifs/conf/packages/10common_base.sh 2012-06-24 02:10:36.030728699 +0100
@@ -3,7 +3,7 @@
 ## zlib - http://www.zlib.net/
 #######################################################################
 PACKAGES+=" zlib"
-hset zlib url "http://www.zlib.net/zlib-1.2.6.tar.gz"
+hset zlib url "http://www.zlib.net/zlib-1.2.7.tar.gz"
 configure-zlib() {
  configure ./configure \
diff -rupN minifs.orig/conf/packages/11graphical.sh minifs/conf/packages/11graphical.sh
--- minifs.orig/conf/packages/11graphical.sh 2012-06-24 20:26:02.714490989 +0100
+++ minifs/conf/packages/11graphical.sh 2012-06-24 02:14:55.366933145 +0100
@@ -5,7 +5,7 @@ hset libjpeg url "http://www.ijg.org/fil
 # http://www.libpng.org/pub/png/libpng.html
 PACKAGES+=" libpng"
-hset libpng url "ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.4.8.tar.bz2"
+hset libpng url "ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.4.11.tar.bz2"
 hset libpng depends "zlib"
 hset libpng configscript "libpng-config"
diff -rupN minifs.orig/conf/packages/14bluez.sh minifs/conf/packages/14bluez.sh
--- minifs.orig/conf/packages/14bluez.sh 2012-06-24 20:26:02.714490989 +0100
+++ minifs/conf/packages/14bluez.sh 2012-06-24 12:47:30.981169269 +0100
@@ -15,9 +15,22 @@ deploy-dbus() {
  deploy deploy_binaries
 }
+PACKAGES+=" check"
+hset check url "http://downloads.sourceforge.net/project/check/check/0.9.8/check-0.9.8.tar.gz"
+hset check depends ""
+
+configure-check() {
+        configure-generic
+}
+
+deploy-check() {
+        deploy deploy_binaries
+}
+
+
 PACKAGES+=" bluez"
-hset bluez url "http://www.kernel.org/pub/linux/bluetooth/bluez-4.81.tar.gz"
-hset bluez depends "dbus libiconv libgettext libglib"
+hset bluez url "http://www.kernel.org/pub/linux/bluetooth/bluez-4.101.tar.gz"
+hset bluez depends "check dbus libiconv libgettext libglib"
 configure-bluez() {
  configure-generic \
@@ -43,7 +56,8 @@ configure-bluez() {
  --enable-service \
  --enable-tools \
  --disable-udevrules \
- --disable-usb
+ --disable-usb \
+ --enable-test
 }
 deploy-bluez() {

To automate things on the Pi side, I added the following to /etc/network/interfaces

iface bnep0 inet static
address 192.168.4.1
netmask 255.255.255.0

And to automatically start bluetooth-agent for pairing I added this to the bluetooth startup script. Note that this will allow any device to connect with no PIN, so beware!

--- bluetooth.orig 2012-06-24 21:43:17.024405263 +0100
+++ bluetooth 2012-06-24 20:03:45.376014045 +0100
@@ -25,6 +25,7 @@
 DAEMON=/usr/sbin/bluetoothd
 HCIATTACH=/usr/sbin/hciattach
+BLUETOOTH_AGENT=/usr/bin/bluetooth-agent 
 HID2HCI=/usr/sbin/hid2hci
 HID2HCI_ENABLED=1
@@ -164,6 +165,11 @@
  log_progress_msg "compatibily daemons not started, see bluez-compat package"
  fi
+        sleep 3
+        for i in `hciconfig | grep hci | cut -f1 -d:` ; do
+ $BLUETOOTH_AGENT $i & 
+ done
+
  log_end_msg 0
   ;;
   stop)
@@ -180,6 +186,9 @@
  start-stop-daemon --stop $SSD_OPTIONS
  log_progress_msg "bluetoothd"
  stop_uarts || true
+
+ killall $BLUETOOTH_AGENT > /dev/null 2>&1
+
  log_end_msg 0
   ;;
   restart|force-reload)

VNC Setup

The next step is to get VNC up and running. On the Pi, install a the tightVNC server and viewer:

apt-get install tightvncserver xtightvncviewer 

Then run the server on the Pi - it will ask for a password to connect the first time.

vncserver -geometry 320x240 -depth 8 :1

On the Parrot, run the SDL vnc viewer:

SDLvncviewer 192.168.4.1:1 

Enter the password you specified earlier, and you should now see your desktop displayed on the Parrot. Yay!

From an X session on the pi, you can run 

vncviewer :1 

To open a vnc session where you can control the desktop on the Pi. Enjoy.












183 comments:

  1. Despite having my Pi hooked up to a diminutive monochrome CRT (which looks GREAT) you've convinced me to spend a few quid on a Parrot DF3120 at Amazon... Excellent work!

    ReplyDelete
  2. Great job! I already own two DF3120 picture frames, and I was planning to do something similar with mi Guruplug Server+.

    ReplyDelete
    Replies
    1. Hi to all, because I am in fact eager of reading this web site’s post to be updated regularly.
      It contains nice information.
      دانلود آهنگ جدید

      Delete
    2. Useful article for me. Thank you for letting me know. News Your Blog has useful information; you are a skilled webmaster. Live Chat

      Delete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Awsome job. I've been looking through a few methods of connecting a display. This one beats 'em all. One question... Did you upgrade the Parrots' RAM as the good guys at repurpose_linux suggested?

    ReplyDelete
  5. Hi, Thanks! No - I haven't attempted the memory upgrade as I'm just using the picture frames as remote displays, and not doing anything more demanding on the frame itself.

    ReplyDelete
  6. Great job. Unfortunately it was unsuccessful, there is no bnep0. pand seemingly works, maybe not in reality.

    pand --connect AA:AA:AA:AA:AA:AA
    / # ifconfig bnep0 192.168.4.10
    ifconfig: SIOCSIFADDR: No such device

    Any idea what to do?

    Thank you.
    George Fenyvesi

    ReplyDelete
    Replies
    1. AA:AA:AA... is my Mac adress.

      Delete
    2. Hi George,

      There should me messages in /var/log/syslog on the Pi that will let you know if the Parrot is attempting to connect, and what the problem might be. Do you have any messages in there?

      Delete
  7. I am afraid that the problem is on the PI side. The syslog contains:
    Bluetooth: hci0 ACL packet for unknown connection handle 2

    I am using Wheezy version and was not able to set up Bluetooth correctly. What is the content of /var/lib/bluetooth/AA:AA.../config file?
    My version is:

    name raspberrypi-0
    class 0x520100
    onmode discoverable
    mode discoverable
    discovto 0
    pairable yes

    Thank you for your help.

    George

    ReplyDelete
    Replies
    1. I wanted to not having PINs. But I have:
      syslog:

      No agent available for request type 0
      raspberrypi bluetoothd[1548]: PIN code negative reply: Operation not permitted

      Delete
  8. /var/lib/bluetooth/AA:AA.../config is automatically generated, and I don't have the Pi with me here, but I can look later for you. Do you have bluetooth_agent running? - in another console try running

    bluetooth_agent hci0

    do you see the 'Authorizing request..' message, and and do you get the same error in syslog?

    ReplyDelete
    Replies
    1. Dear Chris,

      I am a bit confused because:
      1. I am not really a Linux guy;
      2. I read that in blueZ v4.x the bluetooth-agent is obsolete (simle-agent is the obscurous new one), so I didn't care with it. Anyway it doesn't work.

      $ bluetooth-agent hci0
      Can't get default adapter
      Rejected send message, 2 matched rules; type="method_call", sender=":1.20" (uid=1000 pid=2245 comm="bluetooth-agent hci0 ") interface="org.bluez.Manager" member="DefaultAdapter" error name="(unset)" requested_reply="0" destination="org.bluez" (uid=0 pid=1544 comm="/usr/sbin/bluetoothd ")

      Delete
    2. The bluetooth packages in wheezy may bedifferent from squeeze, although it could be a permissions issue - are you running bluetooth-agent as root?

      Once I get round to trying out the wheezy beta, I'll get it set up and update this post. In the meantime do you have a particular requirement to run wheezy, or could you use the squeeze image as a basis for your project?

      Delete
    3. Chris,

      the situation remained the same. I am not strictly connected to Wheezy, but this version seems to be better and I made a lot of modifications I should start again. So it would be better to have Wheezy, if it is possible.
      If you would be so kind to copy the content of your /var/lib/bluetooth/AA:AA.../config file, maybe it could help. The setup of blueZ is a misery.

      Thanks for your patience.

      George

      The screen copies:

      On the PI side:
      pi@raspberrypi ~ $ sudo bluetooth-agent sci0 0000
      (I suggested being not neccessary, because pand dooesn't seem to require PIN)

      The status of the adapter:
      pi@raspberrypi ~ $ hciconfig -a
      hci0: Type: BR/EDR Bus: USB
      BD Address: 00:15:83:15:A3:10 ACL MTU: 672:4 SCO MTU: 48:1
      UP RUNNING PSCAN ISCAN
      RX bytes:3656 acl:28 sco:0 events:126 errors:0
      TX bytes:1257 acl:34 sco:0 commands:61 errors:0
      Features: 0xff 0x3e 0x85 0x38 0x18 0x18 0x00 0x00
      Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
      Link policy: RSWITCH HOLD SNIFF
      Link mode: SLAVE ACCEPT
      Name: 'raspberrypi-0'
      Class: 0x520100
      Service Classes: Networking, Object Transfer, Telephony
      Device Class: Computer, Uncategorized
      HCI Version: 2.0 (0x3) Revision: 0xc5c
      LMP Version: 2.0 (0x3) Subversion: 0xc5c
      Manufacturer: Cambridge Silicon Radio (10)

      On the Parrot site:

      / # pand --connect 00:15:83:15:A3:10
      / # ifconfig
      lo Link encap:Local Loopback
      inet addr:127.0.0.1 Mask:255.0.0.0
      UP LOOPBACK RUNNING MTU:16436 Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

      usb0 Link encap:Ethernet HWaddr 9A:10:7A:D7:7E:FB
      inet addr:172.16.61.1 Bcast:172.16.61.255 Mask:255.255.255.0
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:98 errors:0 dropped:0 overruns:0 frame:0
      TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000
      RX bytes:12251 (11.9 KiB) TX bytes:988 (988.0 B)
      / # ifconfig bnep0 192.168.4.10
      ifconfig: SIOCSIFADDR: No such device

      Delete
    4. __________________
      The situation is even stranger. The Parrot can see the PI, but can't connect.

      / # hcitool scan
      Scanning ...
      00:15:83:15:A3:10 raspberrypi-0
      / # pand --connect 00:15:83:15:A3:10
      / # ifconfig bnep0 192.168.4.10
      ifconfig: SIOCSIFADDR: No such device

      A question:
      My minifs for Parrot is not from the original repurposelinux because it seemed not to work (perhaps it is a .bz2 despite of its .img name), but from http://www.martinhubacek.cz/arm/df3120-linux-picture-frame with enabled CHMOD. What version did you use?

      Thanks.
      George

      Delete
  9. I used the original repurposelinux image, works fine when you use dd to copy it to the card. I also built my own from source with the above patch so I could enable the test utilities in bluez.

    Looking at your syslog, I still think that you issues are that you don't have an agent to pair with the parrot, note that your line should not read

    sudo bluetooth-agent sci0 0000

    but

    sudo bluetooth-agent hci0

    to specify pairing with no pin. As the parrot is sending a pairing request to the Pi, you will need to have an agent running on the pi.

    To test if it's a pairing issue, try

    echo "BB:BB:BB:BB:BB:BB [all]" >> /var/lib/bluetooth/AA\:AA\:AA\:AA\:AA\:AA/trusts

    Where AA:... is the bdaddr of the Pi, and BB:... is the bdaddr of the Parrot. This will temporarily establish a pairing

    Then try to connect, then see what the syslog output is.

    ReplyDelete
    Replies
    1. Chris,

      You are right.

      The correct version is:
      sudo bluetooth-agent hci0, but unfortunately it doesn't work either without a passkey:

      agent [--adapter adapter-path] [--path agent-path] []

      I don't understand that in your description there is no pairing at all. What time is it done in your case? Did you set noPIN on PI? How?

      On the other hand you are right because after the Parrot pand --connect the PI syslog is:
      Jul 12 19:55:09 raspberrypi bluetoothd[1448]: No agent available for request type 0
      Jul 12 19:55:09 raspberrypi bluetoothd[1448]: PIN code negative reply: Operation not permitted

      I tried your idea:
      I wrote the Parrot MAC into the /var/lib/bluetooth/AA\:AA\:AA\:AA\:AA\:AA/trusts, connected from Parrot, the result is the same:
      Jul 12 20:22:43 raspberrypi bluetoothd[1448]: No agent available for request type 0
      Jul 12 20:22:43 raspberrypi bluetoothd[1448]: PIN code negative reply: Operation not permitted

      It is strange, that the line I wrote into ...\trusted disappeared. I used sudo mc + nano.


      What is the content of /var/lib/bluetooth/AA:AA.../config file?

      Thanks.

      George

      Delete
  10. Hi - It would seem that things have changed in wheezy, and I won't be able to give you a definite answer until I've had a chance to install it myself, which I'll try to get onto soon.

    my /var/lib/bluetooth/AA.../config just has

    name raspberrypi-0
    class 0x4a0100

    But these files are automatically generated by bluez, which is why your trusts file gets overwritten

    However, in my /etc/bluetooth/network.conf I have,

    [General]

    # Disable link encryption: default=false
    DisableSecurity=true

    but I'm not sure if that will make any difference.

    ReplyDelete
  11. OK - booting wheezy now, will let you know how I get on :-)

    ReplyDelete
  12. Indeed - there does seem to be some issues with wheezy and USB Bluetooth. I'll look into it and update here if I find a solution...

    ReplyDelete
    Replies
    1. You are great, Chris.

      Thanks.
      George

      Delete
    2. Chris,

      I have a strictly stupid but practically not so silly question. In this VNC setup you can control the Pi from another computer (mouse/keyboard), the Parrot is only a hardcopy of the other VNC session's screen. It would be great if the PI's mouse and keyboard could control directly the Parrot. I know that is doesn't have USB host and so on. Is there any solution when only the screen is connected to the "VCN session" but the control remains at the PI side?

      Delete
    3. I tried on the PI side:
      vncserver -viewonly -geometry 320x240 -depth 8 :3

      Using the IP on USB on the Parrot side it is unable to connect, maybe because of the needed password:
      / # SDLvncviewer 172.16.61.3:3
      02/01/2007 19:27:14 ConnectToTcpAddr: connect
      02/01/2007 19:27:14 Unable to connect to VNC server

      If the Xserver wouldn't ask for password, then it might work.
      I'll try it.

      Delete
  13. Should there be any other files than the IMG file on the SD card? The firmware upgrade appeared to work alright but it doesn't appear to apply the USB CDC to my system when booted and connected (not in 'ifconfig'). Anything you could suggest?

    Thanks

    ReplyDelete
  14. Hi.

    Any progress on Gyorgy's problem - I'm in a similar situation?

    I seem to be stuck on a response from the Parrot:

    "root@raspberrypi:/home/pi# bluetooth-agent hci0 &
    [1] 3533
    root@raspberrypi:/home/pi# ifconfig bnep0 192.168.4.1
    SIOCSIFADDR: No such device
    bnep0: ERROR while getting interface flags: No such device"

    Then when I do on the Parrot:

    "pand --connect 00:10:60:D2:C2:C8"

    I get the following response on the Pi:

    "Pincode request for device /org/bluez/2134/hci0/dev_40_38_04_00_14_03"

    BTW - I find I need to do all this stuff as root - "sudo su".
    Also I found the line: bluetooth-agent hci0 needs an & so it runs in the BG.

    I'd be grateful for some help here, please!

    Jim

    ReplyDelete
    Replies
    1. Hi - Yes, I have made some progress, but not quite there yet. The newer versions of Bluetooth that are on the more recent RasPi distributions will not allow bluetooth connections without a PIN, and the agent used to supply the PIN on the Parrot, and acknowledge the PIN on the Pi use D-Bus.

      I have built an image for the Parrot that includes D-Bus and the agent to supply a PIN, and have got it to successfully pair with the Pi, I just need to get the networking up and scripted and package it up, then I'll update the post here.

      I'll try to get some time on it this week if I can!

      Cheers,

      Chris

      Delete
    2. Hi Chris,
      what agent did you include in the Parrot to submit the PIN for the pairing with the RPi?

      I do understand that 'pand' do not allow the transmission of a PIN, right?

      Delete
  15. Thanks for the reply, Chris.

    I know nothing about Bluetooth, but what's the issue with PINs - can't an arbitrary one be issued, like an IP address?

    Incidentally the distro I'm using is Rasbian.

    Jim

    ReplyDelete
  16. Further to the above:

    I find that if I do a hcitool scan with the Pi and the Parrot is in its native picture frame mode, I get a response:

    Scanning ...
    00:12:1C:CA:78:17 Parrot PHOTO

    But I don't get a response with the Parrot running Linux.

    This suggests to me that Bluetooth is working OK on the Pi, but not on the Parrot+Linux.

    Jim

    ReplyDelete
  17. Hi Chris did you ever find the answer?
    Chris E.

    ReplyDelete
  18. Hi got pairing with passkey working, but it is still not perfect though...

    I more or less used this GitHub repository to get dbus on the parrot working: https://github.com/tuopppi/minifs-df3120

    On the RPi side, I added the passkey to /var/lib/bluetooth/-BT-MAC-/pincodes (this file takes on pin per line i.e.: AA:BB:CC:DD:EE:FF 1234). I listen for connections with "pand --listen --role GN". After this I need to restart the bluetooth service (I don't know why...)
    [I although added the Parrot to the trusted devices using "bt-device" - I think this is in the bluez-tools package... this is obviously only once necessary]

    On the Parrot I started the agent from the git repo: "agent 1234 &" and connect with "pand --connect MAC".

    Both sides list the connection with "pand -l" and on the RPi side everything seems to be okay, bnep0 created and configureable. But on the parrot side something is still amiss: The bnep0 interfaces is created but I cannot bring it up, when I assign an IP address I get "SIOCSIFFLAGS: Cannot assign requested address". ifconfig shows the assigned address but the interface is still down.

    Note: I although followed the "Connection refused(111)" solution from this post, but I am not sure if it is really necessary, maybe the bluetooth service restart was sufficient:
    https://bbs.archlinux.org/viewtopic.php?id=145001

    ReplyDelete
    Replies
    1. Would it be possible for you to put your built image somewhere I could download it?

      I'm having no luck building from source...

      Thanks,
      Steve

      Delete
  19. Much appreciated you all that much to share these connections. Will look at this.. IT Consulting Firms

    ReplyDelete
  20. Great! It sounds good. Thanks for sharing.. sunrise alarm clock

    ReplyDelete
  21. In every business, an internet connection is required. An internet connection is crucial to all forms of business since it allows a company to connect with the world. Wolf Of Canada

    ReplyDelete
  22. i read a lot of stuff and i found that the way of writing to clearifing that exactly want to say was very good so i am impressed and ilike to come again in future.. http://bestcheapvpn.com

    ReplyDelete
  23. Interesting topic for a blog. I have been searching the Internet for fun and came upon your website. Fabulous post. Thanks a ton for sharing your knowledge! It is great to see that some people still put in an effort into managing their websites. I'll be sure to check back again real soon. vpn reviews

    ReplyDelete
  24. These are some great tools that i definitely use for SEO work. This is a great list to use in the future.. TutuApp VIP Download

    ReplyDelete
  25. This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information. Keep it up. Keep blogging. Looking to reading your next post. AppEven Download

    ReplyDelete
  26. awesome article. I am reading your blog regularly and also sharing with my class mate. Download TutuApp

    ReplyDelete
  27. This comment has been removed by the author.

    ReplyDelete
  28. This is such a great resource that you are providing and you give it away for free. I love seeing websites that understand the value of providing a quality resource for free. It is the old what goes around comes around routine. bodyboss reviews

    ReplyDelete
  29. Fantastic blog you have here. You’ll discover me looking at your stuff often. Saved! wlan passwort hacken

    ReplyDelete
  30. Here we provide you the some useful information about gift card so read this information mygiftcardsite
    mygiftcardsite
    mygiftcardsite
    mygiftcardsite

    ReplyDelete
  31. Thanks for this post, but please i want to share bodyboss results .

    ReplyDelete


  32. Very Awesome write up !!! You have provided best efforts Here Thank You for This
    Great Blog Post. I am going to Bookmark your Blog for Further Visit.

    Walmartone Login
    Starbucks gift card balance
    Mygiftcardsite
    Freedom APK
    Walmart Credit Card Login
    Tell Subway

    ReplyDelete
  33. This is a amazing publish ! it was very useful. I look ahead in studying more of your perform. Also, I made sure to save your web page so I can come returning later. I experienced every moment of studying it.

    ReplyDelete
  34. This is my first time go to see at here and i am truly pleassant to read all at single place.

    ReplyDelete
  35. I really love the way you arranged every word accordingly which shows you don't have to be a poor home manager to write great articles. Also check out these garbage disposal systems

    ReplyDelete
  36. who dont want to download a paid app for free? Well, in this post we are going to introduce such app that will allow you to download any app at free of cost. We are talking about Panda Helper APK for Android.
    Download Panda Helper VIP

    ReplyDelete
  37. The paid applications present in the Google Play Store are available on GetAPK Market for free.
    GetApk App Market

    ReplyDelete
  38. i read a lot of stuff and i found that the way of writing to clearifing that exactly want to say www.bloglovin.com/@wixefag/5-coolest-tips-to-manage-your-playstation was very good so i am impressed and ilike to come again in future..

    ReplyDelete
  39. is no doubt in the app you can easily download the app the most exciting features are waiting for you can easily go with Tutu App. There are nothing extra features required in this app because the most important items for more mercedes coupe class for sale

    ReplyDelete
  40. Thai lottery people are looking for thai lottery winning tips and they can surely get them on https://thailotterywinningtips.info/

    ReplyDelete
  41. I am continually amazed by the amount of information available on this subject. What you presented was well researched and well worded in order to get your stand on this across to all your readers.

    ReplyDelete
  42. TutuApp is a trending app nowadays because it contains many new and good features of games, music, etc. Tutuapp APK
    TutuApp APK
    Tutu App
    Tutu App APK
    TutuApp Free
    TutuApp ios

    ReplyDelete
  43. OneVanilla Mastercard Balance Check
    Things change with time, obviously, if you know, what this implies you can come to see loads of things concerning life. This isn't a position you should surrender and possibly not permit fabulous stuff in the long run you. This why you should embrace the modifications which incorporate. You could be someone who reliably loves most things you see and furthermore might need to go to it, so ensure you additionally remember that money don't remain with the individuals who spend pointlessly. 1 stunning thing is that vanilla prepaid mastercard furnishes you with the possibility of going for those exercises that is important to you and it's ensured.
    check one vanilla balance
    one vanilla balance
    one vanilla check balance

    ReplyDelete
  44. Another way people think they're eating right is having fruit & coffee for breakfast, a salad for lunch, and a bowl of pasta for dinner.

    ReplyDelete
  45. If hormone production is off so will your metabolism be.

    ReplyDelete
  46. This could be moreover a terrific content my spouse and i honestly appreciated investigating. It can be by no means daily my spouse and i offer the chance to watch one thing. Leptitox

    ReplyDelete
  47. Roadrelics buy and sale original vintage signs, Antique signs, Old signs, Advertising signs and more in the USA. We sell only 100% original signs.Antique advertising signs Cinderella Solution

    ReplyDelete
  48. Aries is the first sign of the zodiac. It is mostly an April zodiac sign but starts from March 21 through April 19. Aries is the cardinal sign that ushers in the Spring season, the time of rebirth and revival. The Aries zodiac sign represents new beginnings and daring enterprise. Here are 25 secrets about the Aries personality. Carb Nite PDF

    ReplyDelete
  49. Regular exercise relieves back pain by strengthening and stretching the muscles that support the spine and helps to prevent future injury.

    ReplyDelete
  50. This comment has been removed by the author.

    ReplyDelete
  51. My friend suggested I may like this web site. He used to be entirely right.
    tipshint.com

    ReplyDelete
  52. This is very interesting, You are a very skilled blogger. I've joined your rss feed and look forward to seeking more of your wonderful post. Also, I've shared your website in my social networks!
    hotmail.com

    ReplyDelete
  53. Just pure brilliance from you here. I have never expected something less than this from you and you have not disappointed me at all. I suppose you will keep the quality work going on.

    ReplyDelete
  54. Thanks very much for this article this is useful for me i was so happy to read it Thank you again I hope it will help me in the future

    ReplyDelete
  55. Its a great pleasure reading your post.Its full of information I am looking for and I love to post a comment that "The content of your post is awesome" Great work.

    ReplyDelete
  56. Amazing... This is all I can say to your website it is amazing and you will enjoy it

    ReplyDelete
  57. Super site! I am Loving it!! Will return again, Im taking your sustenance moreover, Thanks.

    ReplyDelete
  58. These are some great tools that i definitely use for SEO work. This is a great list to use in the future.. Download Lucky Patcher

    ReplyDelete
  59. Thanks for sharing this wonderful article. Recruitment Beam

    ReplyDelete
  60. The bulk sale of Water Slim is now sold in the Slim online store, you can make your purchase in bulk exclusively from this store. If you are looking to sell wholesale slime at a very reasonable price and do not want to buy a very high number, we will help you to buy the products you want from us. These days, slime is an interesting and lovable material among children, which is like dough and is easily placed in your hands, and its main audience is children.
    فروش عمده واتر اسلایم

    ReplyDelete
  61. Electricity Glenelg17 July 2020 at 09:37

    Good Post for making wireless display from tv to computer.
    Easy Power Plan

    ReplyDelete
  62. Thanks for sharing this info. Get the latest jobs update in Nigeria at Recruitment Boy

    ReplyDelete
  63. Reports like yours help support the efforts of small businesses like mine. Thank you. Scholartico

    ReplyDelete
  64. You should mainly superior together with well-performing material, which means that see it:
    Flow 3xl

    ReplyDelete
  65. This is a great Blog. thanks for sharing great information with us. Flow 3xl

    ReplyDelete
  66. Your presence is great on this post. We love sharing good posts with our fans. Whenever you need more posts you can ask me for topic and title. Excellent work. Flow 3xl

    ReplyDelete
  67. Thanks for another informative blog. The place else
    could I am getting that kind of information written in such
    an ideal way? I’ve a undertaking that I am just now operating on, and I’ve been on the glance out for
    such info.
    wavepad sound editor crack
    unhackme crack
    steinberg padshop pro crack
    cyberlink powerdirector crack

    ReplyDelete
  68. Your site has great articlesThis content helps me a lot
    I wanted to thank you here
    دانلود آهنگ جدید
    دانلود ریمیکس

    ReplyDelete
  69. I think it’s okay to use affordable-college-essay USA for students wants like correcting the text.
    testoryze reviews

    ReplyDelete
  70. thanks for sharing this great post...

    ReplyDelete
  71. موبایل قسطی با قیمت بسیار عالی و شرایط اقساطی مناسب از فروشگاه تی موبایل کرج

    ReplyDelete
  72. I really like the design and
    layout of your website. Eyes are easy, making me
    more satisfied and come here often. Have you hired developers to
    create themes? Great work!
    anytrans crack
    sketch crack
    deep freeze standard crack
    malwarebytes anti malware crack

    ReplyDelete
  73. Hello it’s me, I am also visiting this web page regularly, this website is actually nice and the users are truly
    sharing nice and nice post for sharing
    adobe photoshop crack
    microsoft office 365 product key crack
    iobit driver booster pro crack

    ReplyDelete
  74. Meticore Pill is a dietary enhancement that means to help people take out weight by improving the framework to remain and enter in the condition of ketosis. On the off chance that you relied upon exercise or ordinary eating routine alone, as per the maker, its weight uphold properties may help you consume fats quicker than.
    https://www.heraldnet.com/marketplace/meticore-reviews-2021-update-scam-complaints-customers-beware-mymeticore-com-pills/

    ReplyDelete
  75. Denti Strength Pills Offer Your oral wellbeing must be evaluated consistently, and in the event that you have a background marked by intense diseases or terrible wellbeing, talk with your dental specialist to examine any basic issues. They are additionally ready to talk with a dental expert who can help you for certain different issues you may have. Remember that awesome oral cleanliness is basic, however remember it doesn't generally should be exorbitant or complex.https://apnews.com/press-release/newmediawire/business-metal-markets-corporate-news-products-and-services-tooth-decay-1e89eb910bf9d77df9ee750542dee842

    ReplyDelete
  76. Made using six extra physical ingredients, the product runs safely. It has been planned for both these genders, specifically for older people who believe they're having weight gain because of increasing years but can' t mark this correct reason behind it. Manufactured being the highest and strictest standards, the increase is tested. As per this official site, by regularly getting Meticore tablets, you may be able to go back into body within three to six months but! Meticore weight reduction supplement may assist you with getting back your resolute certainty and furthermore chop down your danger of medical issues that are connected to being overweight by empowering weight reduction.

    https://www.prnewswire.com/news-releases/meticore-reviews-2021---meticorecom-weight-loss-supplement-customer-review-report-301206028.html

    ReplyDelete
  77. This Meticore increase makes the approach toward weight loss that most other supplements don’t. It looks at metabolism from another viewpoint and places what just is wrong with it to take the question and help in fat failure. Essentially, some families are unable to lose weight because of low content temperature. What's this, you might be questioning? Meticore functions as a digestion boosting supplement that objectives corpulence at the main driver. By accelerating your digestion, your body can shed fat effectively and keep it off. With no symptoms or long haul complexities, Meticore is a sheltered method to arrive at your optimal weight.

    https://www.newsmax.com/specials/meticore-bodymass-diet-weightloss/2021/01/14/id/1005648/

    ReplyDelete
  78. Meticore Pill is a dietary enhancement that means to help people take out weight by improving the framework to remain and enter in the condition of ketosis. On the off chance that you relied upon exercise or ordinary eating routine alone, as per the maker, its weight uphold properties may help you consume fats quicker than.
    https://www.austinchronicle.com/daily/events/2021-01-04/meticore-reviews-scam-consumer-reports-or-legit-weight-loss-supplement/

    ReplyDelete
  79. Made using six extra physical ingredients, the product runs safely. It has been planned for both these genders, specifically for older people who believe they're having weight gain because of increasing years but can' t mark this correct reason behind it. Manufactured being the highest and strictest standards, the increase is tested. As per this official site, by regularly getting Meticore tablets, you may be able to go back into body within three to six months but! Meticore weight reduction supplement may assist you with getting back your resolute certainty and furthermore chop down your danger of medical issues that are connected to being overweight by empowering weight reduction.

    ReplyDelete
  80. This Meticore increase makes the approach toward weight loss that most other supplements don’t. It looks at metabolism from another viewpoint and places what just is wrong with it to take the question and help in fat failure. Essentially, some families are unable to lose weight because of low content temperature. What's this, you might be questioning? Meticore functions as a digestion boosting supplement that objectives corpulence at the main driver. By accelerating your digestion, your body can shed fat effectively and keep it off. With no symptoms or long haul complexities, Meticore is a sheltered method to arrive at your optimal weight.

    https://www.austinchronicle.com/daily/events/2020-12-16/meticore-reviews-scam-consumer-reports-or-legit-weight-loss-supplement/

    ReplyDelete
  81. Watch full match replays and highlights of Premier League, Champions League, La Liga, Bundesliga, Serie A, Ligue 1 and Europa League. Watch Full Matches Replay videos of European top leagues such as Premier league, La Liga, Bundesliga, Bundesliga, Ligue 1, Scottish Premiership, Championship ... in our website fullmatchesreplay.com, Here you can find all Full Match Replay of Full Latest Matches, Highlights Football, Soccer Highlights, Soccer Replay, Football Replay, English Premier League for free on fullmatchesreplay.com, and don't forget to watch all nba replay games today with Full HD online FREE nba replays 2021 on our website fullmatchesreplay.com, Watch NBA REPLAY HD Full Game Replays available for FREE to watch online. NBAHDReplay on your PC, mobile IOs,Android.

    ReplyDelete
  82. جاذبه‌های دیدنی و گردشگری یزد حیرت‌انگیز و منحصربه‌فرد است و سالانه مسافران زیادی را به‌سوی خود جذب می‌کند. سفر به این شهر جدای دیدن از بناهای خشتی فوق‌العاده شگفت‌انگیز یزد، کوله باری از خاطره و سوغات را برای مسافران به ارمغان می‌آورد. اگر شما هم قصد بازدید از این شهر دیدنی را دارید لذت چشیدن سوغاتی‌ های بی‌نظیر آن را از دست ندهید. اما شاید کنجکاو باشید که بدانید سوغاتی ‌های خاص این شهر دیدنی چیست؟

    یزد، شهر سنت‌های شیرین است که خاطره‌ای فراموش‌نشدنی را در ذهن گردشگران آن به یادگار می‌گذارد. پس از ورود به یزد و اقامت در هتل های یزد
    همچون هتل داد یزد ، تجربه‌ای شگفت‌انگیز را آغاز خواهید کرد. بنابراین برای شروع سفر رؤیایی و حیرت‌انگیز خود بهتر است پیش از سفر، اقدام به رزرو هتل نمایید تا پس از ورود به این شهر خشتی بی‌نظیر، تنها زمان خود را برای خلق لحظات جادویی صرف کنید.

    ReplyDelete
  83. wonderful site. There is a lot of useful information here. I'm sending
    For many friends and also to share.
    Thanks for the race, of course!
    dfx audio enhancer
    dxo photolab
    ammyy admin
    netflix
    blue iris pro
    itools

    ReplyDelete
  84. What a well written and compassionate article. I found your thoughts and wisdom to be encouraging and helpful. ReviewsByTina

    ReplyDelete
  85. This comment has been removed by the author.

    ReplyDelete
  86. Amazing, great write up that you have here. I believe you have an amazing team, just as we do over here on Pastquestionpdf.com.ng and that is why we have one of the best information on Anambra College of Nursing Form.


    ReplyDelete
  87. XLStat I like your all post. You have done really good work. Thank you for the information you provide, it helped me a lot.

    ReplyDelete
  88. iBoysoft Data Recovery Pro Keygen support almost all types of data recovery, including photos, documents, music, videos and e-mail, and the program can perform data recovery on different storage devices.
    iBoysoft Data Recovery Pro Keygen

    ReplyDelete
  89. Thank you for providing the information. Now I would like to divert you from your topic and will explain you more about QuickBooks and the error related to it.

    EaseUS Todo Backup Crack

    Ashampoo Music Studio Crack

    Forest Pack Pro Crack

    Microsoft Office Crack

    Install Keyscape Version Crack

    vMix Pro Crac

    ReplyDelete
  90. Advanced System Repair Hey! I’m a regular visitor to your amazing website. By the way, I work with Allegiant Airlines. Because of the current pandemic situation, traveling is like gambling of life

    ReplyDelete
  91. https://iqbalpc.com/4k-youtube-to-mp3-crack/
    https://iqbalpc.com/
    You have done a great job on this article. It’s very readable and highly intelligent. You have even managed to make it understandable and easy to read. Keep it up!

    ReplyDelete
  92. It's really strong for you from a general viewpoint all window programming establishment. This site is tangling its article are focal and boggling. I kept up the experience of and bookmark this site on my chrome. This is the place where you can get all break programming in like manner present in a sensible way.
    https://apkzamn.com/

    ReplyDelete
  93. It's truly solid for you from an overall perspective all window programming foundation. This site is tangling its article are central and boggling. I kept up the experience of and bookmark this site on my chrome. This is where you can get all break programming in like way present in a reasonable manner.
    https://zzcrack.com/

    ReplyDelete
  94. Thank you for sharing this list of free dofollow blog commenting sites that will work great for my SEO marketing goals.
    https://turkycrack.com/sidify-apple-crack/

    ReplyDelete
  95. When you add valuable comments on blog commenting sites, your visibility increases. I’ll tell you how! There are so many people reading the same blog and going through the comments. When they come across your comment – they might find it interesting and worth their while to visit your website. Thus the key here is to put your name in front of the maximum number of people related to your industry.
    N-Track Studio Suite Crack

    Quick Heal Antivirus Pro Crack

    Personal Backup Crack

    Avid Pro Tools Crack

    ReaConverter Pro Crack


    AquaSoft Stages Crack

    ReplyDelete
  96. Excellent work I Really impressed and got lots of information from your post and encourage me to work as best as i can. keep it!

    Geekbench Pro Crack

    Program4Pc Video Converter Crack

    EaseUS Data Recovery Wizard14 Crack

    Epic Pen Pro 3 Crack

    Microsoft Office 365 Crack

    Push Video Wallpaper Crack

    Computer science is the theoretical study of computer and software (Turing's essay is an example of computer science),

    CLO Standalone Crack

    Audials Music Crack

    iMyFone LockWiper Crack

    Quick Heal Total Security Crack

    Puzzle Wonderland Crack

    Knowledge Has No End Limits Keep Sharing Your Knowledge //////////

    ReplyDelete
  97. Excellent work I Really impressed and got lots of information from your post and encourage me to work as best as i can. keep it!

    Geekbench Pro Crack

    Program4Pc Video Converter Crack

    EaseUS Data Recovery Wizard14 Crack

    Epic Pen Pro 3 Crack

    Microsoft Office 365 Crack

    Drive SnapShot Crack

    Computer science is the theoretical study of computer and software (Turing's essay is an example of computer science),

    Microsoft Visio Professional Crack

    Antivirus VK Pro Crack

    EmEditor Professional Crack

    VMware Fusion Pro Crack

    ApowerEdit Crack

    Knowledge Has No End Limits Keep Sharing Your Knowledge //////////

    ReplyDelete
  98. Excellent work I Really impressed and got lots of information from your post and encourage me to work as best as i can. keep it!

    Geekbench Pro Crack

    Program4Pc Video Converter Crack

    EaseUS Data Recovery Wizard14 Crack

    Epic Pen Pro 3 Crack

    Microsoft Office 365 Crack

    Avast Premier Security Crack

    Computer science is the theoretical study of computer and software (Turing's essay is an example of computer science),

    Bandizip Enterprise Crack

    Bitdefender Total Security Crack

    1CLICK DVD Copy Pro Crack

    PreSonus Studio One Pro Crack

    XSplit Broadcaster Crack

    Knowledge Has No End Limits Keep Sharing Your Knowledge //////////

    ReplyDelete
  99. Nice blog with full of information, Thanks for sharing with us .if you face any kind any challenge of any exams, downloadfreepastquestion.com
    is the s.best portal for down loading your past question papers
    up to data of any kind. The materials are about ten years and contains answers with working. To download is free. It will definitely help you to past any exam

    ReplyDelete
  100. I must appreciate the author of this article because it is not easy to put this together.....
    jupeb expo 2021
    waec runz
    Legit
    waec runs
    waec runz
    waec runs 2021

    ReplyDelete
  101. I am really pleased by your writing skills and the appearance of your blog.
    Is it a sponsored topic or did you personalize it?
    Any method to retain the wonderful level of writing, a great weblog like this nowadays is unusual
    dune 2 vst crack
    bandicam crack

    ReplyDelete
  102. Hi! I want to write to you! For communication, we keep other contacts.
    Your article about AOL? I need a specialist in this field to solve my problem.
    I could! I hope we `ll meet
    fast video cataloger with crack
    letasoft sound booster
    final cut pro x crack
    macrium reflect crack

    ReplyDelete


  103. I am very impressed with your post because this post is very beneficial for me and provide a new knowledge to me
    Vps Avenger Mac Crack

    ReplyDelete
  104. Hey i read your article, good work its so interested I am a regular visitor and i always visit your posts and also provide use ful information and also visit my website
    slite

    ReplyDelete

  105. I thought this was a pretty interesting read when it comes to this topic. Thank you
    onecracks.com
    unhackme-crack
    nero-burning-rom-crack
    sandboxie-crack

    ReplyDelete

  106. All kinds of apps are available here. Visit my site.
    I hope it will prove helpful for you.
    Good Work! Keep It Up.
    It's An Amazing Site.
    PassFab Android Unlocker With Crack
    JetBrains PhpStorm

    ReplyDelete
  107. Thanks for the best blog. it was very useful for me.keep sharing such ideas in the future as well. the just reviews

    ReplyDelete
  108. Thank you very much for your good content
    https://www.sabalanmusic.ir/

    ReplyDelete
  109. it's easy to understand, thanks
    much more. Very good information. Fortunately, I stumbled upon your site (crashed).
    I ordered the latest book! I have visited various blogs, but music videos are available on this very good site. Your style is very different from my other people's style.
    reading things from. Thank you for posting if you have
    Chance, imagine I just booked this site.
    amd ryzen master crack
    screenhunter pro crack
    driver magician crack
    performancetest crack

    ReplyDelete
  110. This design is spectacular! You most certainly know how to keep a reader amused.
    Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Excellent job.
    I really enjoyed what you had to say, and more than that, how you presented it.
    Too cool!
    trustport antivirus crack
    freemake video converter crack
    edraw max 2 crack
    easeus data recovery wizard crack

    ReplyDelete
  111. Well informative content, thanks for sharing it with us . Also anyone preparing for LAUTECH entrance examination should check out this blog to download updated LAUTECH school of nursing Past questions.

    ReplyDelete
  112. Betfair Betfair - JT Hub
    Betfair, 천안 출장안마 Betfair 광양 출장안마 Limited, is a global integrated 충청북도 출장마사지 sports betting platform that offers the 청주 출장안마 latest in sports 공주 출장샵 betting and gaming, casino, horse racing and

    ReplyDelete
  113. I appreciate your hard work and you have the more information...
    anytrans crack


    ReplyDelete
  114. Wow, amazing block structure! How long
    Have you written a blog before? Working on a blog seems easy.
    The overview of your website is pretty good, not to mention what it does.

    Live Home 3D Pro Crack Free Downloard

    CyberLink PowerDirector Crack Free Downloard
    DaVinci Resolve Crack Free Downloard
    Cool Edit Pro Crack Free Downloard
    FL Studio Crack Free Downloard

    ReplyDelete
  115. İnsan böyle şeyler görünce mutlu oluyor

    ReplyDelete

  116. teacup poodles for sale under $500
    teacup poodle for sale near me
    toy poodles for sale
    teacup yorkie for sale
    teacup maltese puppies for sale
    https://greenlandpuppies.com/teacup-maltese-puppies-for-sale/
    https://greenlandpuppies.com/teacup-maltipoo-puppies-for-sale/
    https://greenlandpuppies.com/teacup-poodle-puppies-for-sale/
    https://greenlandpuppies.com/teacup-yorkie-for-sale/
    breezepuppies.com

    ReplyDelete
  117. Hello, Dear Thanks for sharing such great content with the US it’s really amazing content so please keep sharing. I also have something for you so please check out

    Adobe InDesign Ios Macbook Torrent

    ReplyDelete
  118. There are a lot of blogs over the Internet. But I can surely say that your blog is amazing in all. It has all the qualities that a perfect blog should have. home staging company

    ReplyDelete
  119. Thanks for sharing this post. Your work is amazing. You can also check out Renga Architecture Crack for Free. You can also visit the Website justsofts.com

    ReplyDelete
  120. Hi to all, because I am in fact eager of reading this web site’s post to be updated regularly.
    music jadid

    ReplyDelete
  121. Besides weight load of the chair, we also want assume about|to contemplate} whether each chair is stackable. This requires our product designers and mold designers to work collectively to develop a CNC machining protected and cozy that’s stackable. You can count on us to ship high-quality molds made to precision inside turn-around occasions as brief as 10 days.

    ReplyDelete