SPI sending function The Next CEO of Stack OverflowSPI to soft UARTMonitor/Debug SPI using another GPIO Pin?SPI sclk no outputHelp understanding + hacking spi-bcm2708.cCan Raspberry PI function as SPI slave?SPI device errorfilenotfounderror with SPI functionConnect SPI display to raspberry pi zeroWhat's wrong with my SPI interface?How could I write a C function using the wiringPi SPI library to read the X and Y measurements from this 2-axis inclinometer?

What was the first Unix version to run on a microcomputer?

How many extra stops do monopods offer for tele photographs?

Running a General Election and the European Elections together

Domestic-to-international connection at Orlando (MCO)

Won the lottery - how do I keep the money?

Where do students learn to solve polynomial equations these days?

Why is information "lost" when it got into a black hole?

No sign flipping while figuring out the emf of voltaic cell?

Can we say or write : "No, it'sn't"?

Can MTA send mail via a relay without being told so?

RigExpert AA-35 - Interpreting The Information

Bartok - Syncopation (1): Meaning of notes in between Grand Staff

Are police here, aren't itthey?

How do I align (1) and (2)?

What is the value of α and β in a triangle?

is it ok to reduce charging current for li ion 18650 battery?

How to install OpenCV on Raspbian Stretch?

Why the difference in type-inference over the as-pattern in two similar function definitions?

Is it okay to majorly distort historical facts while writing a fiction story?

Some questions about different axiomatic systems for neighbourhoods

Is it ever safe to open a suspicious HTML file (e.g. email attachment)?

How a 64-bit process virtual address space is divided in Linux?

What steps are necessary to read a Modern SSD in Medieval Europe?

Newlines in BSD sed vs gsed



SPI sending function



The Next CEO of Stack OverflowSPI to soft UARTMonitor/Debug SPI using another GPIO Pin?SPI sclk no outputHelp understanding + hacking spi-bcm2708.cCan Raspberry PI function as SPI slave?SPI device errorfilenotfounderror with SPI functionConnect SPI display to raspberry pi zeroWhat's wrong with my SPI interface?How could I write a C function using the wiringPi SPI library to read the X and Y measurements from this 2-axis inclinometer?










1















I'm currently reworking a project from someone who graduated a few years back and I'm supposed to change the function of his work for a bit.



I have trouble understanding these few lines from SPI communication, how does this work? :



 *ptr = (3<<4) | (1<<7); //clear
*(ptr +SPI_FIFO) = udata2>>8;
*(ptr +SPI_FIFO) = udata2;
while (!(*ptr & (1 << 16))); // Transfer DONE

*ptr &= ~(1<<7);

*ptr = (3<<4) | (1<<7) | (1<<0); //clear
*(ptr +SPI_FIFO) = udata1>>8;
*(ptr +SPI_FIFO) = udata1;
while (!(*ptr & (1<<16))); // Transfer DONE
*ptr &= ~(1<<7);


To explain what I know: The function 'send' expects 2 float values in interval <-1;1> and through circuits it changes output voltage from minimum of -12.5V to maximum of 12.5V.
When I tried to send various values to function from interval it got stuck on:



 while (!(*ptr & (1 << 16)));


As I investigated the code more I realized that either I'm dumb or the person who wrote this is dumb because how does this work ?



 *(ptr +SPI_FIFO) = udata2>>8;
*(ptr +SPI_FIFO) = udata2;


Any help is appreciated.
Thank you.



If needed the whole code is below.



SPI.h:



#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>


#ifndef _SPI
#define _SPI

#define IOBASE 0x20000000
#define GPIO_BASE (IOBASE + 0x200000)
#define SPI0_BASE (IOBASE + 0x204000)
#define TIMER_BASE (IOBASE + 0x3000)

//SPI
#define SPI_CS 0
#define SPI_FIFO 1
#define SPI_CLK 2
#define SPI_DLEN 3
#define SPI_LTOH 4
#define SPI_DC 5



class SPI

int fd;
volatile unsigned int* ptr;
volatile unsigned int* uk_GPIO;
public:
SPI();
~SPI();
void inline send(float, float);
int connected(void);
;

#endif


SPI.cpp:



#include "SPI.h"
#include <cstdlib>

SPI::SPI()


void inline SPI::send(float data1, float data2)
(1<<0); //clear
*(ptr +SPI_FIFO) = udata1>>8;
*(ptr +SPI_FIFO) = udata1;
while (!(*ptr & (1<<16))); // Transfer DONE
*ptr &= ~(1<<7);

//printf ("read %2.2x%2.2x n", *(ptr + SPI_FIFO), *(ptr + SPI_FIFO));

SPI::~SPI()

munmap((void*)ptr,4096);
close(fd);


int SPI::connected(void)











share|improve this question









New contributor




Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
























    1















    I'm currently reworking a project from someone who graduated a few years back and I'm supposed to change the function of his work for a bit.



    I have trouble understanding these few lines from SPI communication, how does this work? :



     *ptr = (3<<4) | (1<<7); //clear
    *(ptr +SPI_FIFO) = udata2>>8;
    *(ptr +SPI_FIFO) = udata2;
    while (!(*ptr & (1 << 16))); // Transfer DONE

    *ptr &= ~(1<<7);

    *ptr = (3<<4) | (1<<7) | (1<<0); //clear
    *(ptr +SPI_FIFO) = udata1>>8;
    *(ptr +SPI_FIFO) = udata1;
    while (!(*ptr & (1<<16))); // Transfer DONE
    *ptr &= ~(1<<7);


    To explain what I know: The function 'send' expects 2 float values in interval <-1;1> and through circuits it changes output voltage from minimum of -12.5V to maximum of 12.5V.
    When I tried to send various values to function from interval it got stuck on:



     while (!(*ptr & (1 << 16)));


    As I investigated the code more I realized that either I'm dumb or the person who wrote this is dumb because how does this work ?



     *(ptr +SPI_FIFO) = udata2>>8;
    *(ptr +SPI_FIFO) = udata2;


    Any help is appreciated.
    Thank you.



    If needed the whole code is below.



    SPI.h:



    #include <sys/mman.h>
    #include <fcntl.h>
    #include <unistd.h>


    #ifndef _SPI
    #define _SPI

    #define IOBASE 0x20000000
    #define GPIO_BASE (IOBASE + 0x200000)
    #define SPI0_BASE (IOBASE + 0x204000)
    #define TIMER_BASE (IOBASE + 0x3000)

    //SPI
    #define SPI_CS 0
    #define SPI_FIFO 1
    #define SPI_CLK 2
    #define SPI_DLEN 3
    #define SPI_LTOH 4
    #define SPI_DC 5



    class SPI

    int fd;
    volatile unsigned int* ptr;
    volatile unsigned int* uk_GPIO;
    public:
    SPI();
    ~SPI();
    void inline send(float, float);
    int connected(void);
    ;

    #endif


    SPI.cpp:



    #include "SPI.h"
    #include <cstdlib>

    SPI::SPI()


    void inline SPI::send(float data1, float data2)
    (1<<0); //clear
    *(ptr +SPI_FIFO) = udata1>>8;
    *(ptr +SPI_FIFO) = udata1;
    while (!(*ptr & (1<<16))); // Transfer DONE
    *ptr &= ~(1<<7);

    //printf ("read %2.2x%2.2x n", *(ptr + SPI_FIFO), *(ptr + SPI_FIFO));

    SPI::~SPI()

    munmap((void*)ptr,4096);
    close(fd);


    int SPI::connected(void)











    share|improve this question









    New contributor




    Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
    Check out our Code of Conduct.






















      1












      1








      1








      I'm currently reworking a project from someone who graduated a few years back and I'm supposed to change the function of his work for a bit.



      I have trouble understanding these few lines from SPI communication, how does this work? :



       *ptr = (3<<4) | (1<<7); //clear
      *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;
      while (!(*ptr & (1 << 16))); // Transfer DONE

      *ptr &= ~(1<<7);

      *ptr = (3<<4) | (1<<7) | (1<<0); //clear
      *(ptr +SPI_FIFO) = udata1>>8;
      *(ptr +SPI_FIFO) = udata1;
      while (!(*ptr & (1<<16))); // Transfer DONE
      *ptr &= ~(1<<7);


      To explain what I know: The function 'send' expects 2 float values in interval <-1;1> and through circuits it changes output voltage from minimum of -12.5V to maximum of 12.5V.
      When I tried to send various values to function from interval it got stuck on:



       while (!(*ptr & (1 << 16)));


      As I investigated the code more I realized that either I'm dumb or the person who wrote this is dumb because how does this work ?



       *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;


      Any help is appreciated.
      Thank you.



      If needed the whole code is below.



      SPI.h:



      #include <sys/mman.h>
      #include <fcntl.h>
      #include <unistd.h>


      #ifndef _SPI
      #define _SPI

      #define IOBASE 0x20000000
      #define GPIO_BASE (IOBASE + 0x200000)
      #define SPI0_BASE (IOBASE + 0x204000)
      #define TIMER_BASE (IOBASE + 0x3000)

      //SPI
      #define SPI_CS 0
      #define SPI_FIFO 1
      #define SPI_CLK 2
      #define SPI_DLEN 3
      #define SPI_LTOH 4
      #define SPI_DC 5



      class SPI

      int fd;
      volatile unsigned int* ptr;
      volatile unsigned int* uk_GPIO;
      public:
      SPI();
      ~SPI();
      void inline send(float, float);
      int connected(void);
      ;

      #endif


      SPI.cpp:



      #include "SPI.h"
      #include <cstdlib>

      SPI::SPI()


      void inline SPI::send(float data1, float data2)
      (1<<0); //clear
      *(ptr +SPI_FIFO) = udata1>>8;
      *(ptr +SPI_FIFO) = udata1;
      while (!(*ptr & (1<<16))); // Transfer DONE
      *ptr &= ~(1<<7);

      //printf ("read %2.2x%2.2x n", *(ptr + SPI_FIFO), *(ptr + SPI_FIFO));

      SPI::~SPI()

      munmap((void*)ptr,4096);
      close(fd);


      int SPI::connected(void)











      share|improve this question









      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.












      I'm currently reworking a project from someone who graduated a few years back and I'm supposed to change the function of his work for a bit.



      I have trouble understanding these few lines from SPI communication, how does this work? :



       *ptr = (3<<4) | (1<<7); //clear
      *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;
      while (!(*ptr & (1 << 16))); // Transfer DONE

      *ptr &= ~(1<<7);

      *ptr = (3<<4) | (1<<7) | (1<<0); //clear
      *(ptr +SPI_FIFO) = udata1>>8;
      *(ptr +SPI_FIFO) = udata1;
      while (!(*ptr & (1<<16))); // Transfer DONE
      *ptr &= ~(1<<7);


      To explain what I know: The function 'send' expects 2 float values in interval <-1;1> and through circuits it changes output voltage from minimum of -12.5V to maximum of 12.5V.
      When I tried to send various values to function from interval it got stuck on:



       while (!(*ptr & (1 << 16)));


      As I investigated the code more I realized that either I'm dumb or the person who wrote this is dumb because how does this work ?



       *(ptr +SPI_FIFO) = udata2>>8;
      *(ptr +SPI_FIFO) = udata2;


      Any help is appreciated.
      Thank you.



      If needed the whole code is below.



      SPI.h:



      #include <sys/mman.h>
      #include <fcntl.h>
      #include <unistd.h>


      #ifndef _SPI
      #define _SPI

      #define IOBASE 0x20000000
      #define GPIO_BASE (IOBASE + 0x200000)
      #define SPI0_BASE (IOBASE + 0x204000)
      #define TIMER_BASE (IOBASE + 0x3000)

      //SPI
      #define SPI_CS 0
      #define SPI_FIFO 1
      #define SPI_CLK 2
      #define SPI_DLEN 3
      #define SPI_LTOH 4
      #define SPI_DC 5



      class SPI

      int fd;
      volatile unsigned int* ptr;
      volatile unsigned int* uk_GPIO;
      public:
      SPI();
      ~SPI();
      void inline send(float, float);
      int connected(void);
      ;

      #endif


      SPI.cpp:



      #include "SPI.h"
      #include <cstdlib>

      SPI::SPI()


      void inline SPI::send(float data1, float data2)
      (1<<0); //clear
      *(ptr +SPI_FIFO) = udata1>>8;
      *(ptr +SPI_FIFO) = udata1;
      while (!(*ptr & (1<<16))); // Transfer DONE
      *ptr &= ~(1<<7);

      //printf ("read %2.2x%2.2x n", *(ptr + SPI_FIFO), *(ptr + SPI_FIFO));

      SPI::~SPI()

      munmap((void*)ptr,4096);
      close(fd);


      int SPI::connected(void)








      gpio spi c++ c






      share|improve this question









      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.











      share|improve this question









      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      share|improve this question




      share|improve this question








      edited 12 hours ago







      Dominik Ficek













      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.









      asked 12 hours ago









      Dominik FicekDominik Ficek

      62




      62




      New contributor




      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.





      New contributor





      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.






      Dominik Ficek is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
      Check out our Code of Conduct.




















          1 Answer
          1






          active

          oldest

          votes


















          2














          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.






          share|improve this answer























          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            10 hours ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            10 hours ago











          Your Answer






          StackExchange.ifUsing("editor", function ()
          return StackExchange.using("schematics", function ()
          StackExchange.schematics.init();
          );
          , "cicuitlab");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "447"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );






          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fraspberrypi.stackexchange.com%2fquestions%2f95968%2fspi-sending-function%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.






          share|improve this answer























          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            10 hours ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            10 hours ago















          2














          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.






          share|improve this answer























          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            10 hours ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            10 hours ago













          2












          2








          2







          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.






          share|improve this answer













          You need to refer to the BCM2835 ARM Peripherals document.



          It specifies many of the Pi's hardware interfaces.



          In this case SPI appears to be the main SPI device documented from page 148.



          *ptr = (3<<4) | (1<<7); // 1
          *(ptr +SPI_FIFO) = udata2>>8; // 2
          *(ptr +SPI_FIFO) = udata2; // 3
          while (!(*ptr & (1 << 16))); // 4


          ptr is a word pointer(32 bits) to the base of the SPI registers (the CS register).



          1. clears the FIFOs and starts SPI.

          2. writes the MSB of udata2 to the hardware FIFO.

          3. writes the LSB of udata2 to the hardware FIFO.

          4. spins until the CS register indicates the transfer is complete.

          Note that writing to the hardware FIFO address adds a byte to the transmit FIFO, reading from the hardware FIFO address removes a byte from the receive FIFO.



          It may be worthwhile to point out that this code may have been written before the availability of the Pi Linux SPI driver. I would suggest you now use the Linux SPI driver.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 11 hours ago









          joanjoan

          50.3k35182




          50.3k35182












          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            10 hours ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            10 hours ago

















          • Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

            – Dominik Ficek
            10 hours ago











          • Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

            – joan
            10 hours ago
















          Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

          – Dominik Ficek
          10 hours ago





          Thank you this is certainly helpful. I have one more question, what is it that changes the value of CS register so it indicates the completion of transfer? I'm clearly stuck at that, I never leave the 4th point.

          – Dominik Ficek
          10 hours ago













          Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

          – joan
          10 hours ago





          Bit 16 being set in the CS register indicates the transfer is complete. See page 154. The hardware sets it.

          – joan
          10 hours ago










          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.









          draft saved

          draft discarded


















          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.












          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.











          Dominik Ficek is a new contributor. Be nice, and check out our Code of Conduct.














          Thanks for contributing an answer to Raspberry Pi Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid


          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.

          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fraspberrypi.stackexchange.com%2fquestions%2f95968%2fspi-sending-function%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Tórshavn Kliima | Partnerstääden | Luke uk diar | Nawigatsjuun62° 1′ N, 6° 46′ W62° 1′ 0″ N, 6° 46′ 0″ WWMOTórshavn

          南部首創開放式體驗廚房 用智慧廚具做出好料理

          大學姐愛和弟洗澡 突襲浴室求共浴