Esempio n. 1
0
int pigpio_start(char *addrStr, char *portStr)
{
   if (!gPigStarted)
   {
      gPigCommand = pigpioOpenSocket(addrStr, portStr);

      if (gPigCommand >= 0)
      {
         gPigNotify = pigpioOpenSocket(addrStr, portStr);

         if (gPigNotify >= 0)
         {
            gPigHandle = pigpio_command(gPigNotify, PI_CMD_NOIB, 0, 0, 1);

            if (gPigHandle < 0) return pigif_bad_noib;
            else
            {
               gLastLevel = read_bank_1();

               pthNotify = start_thread(pthNotifyThread, 0);
               if (pthNotify)
               {
                  gPigStarted = 1;
                  return 0;
               }
               else return pigif_notify_failed;
            }
         }
         else return gPigNotify;
      }
      else return gPigCommand;
   }
   return 0;
}
Esempio n. 2
0
void t8()
{
   int v, t, i;

   printf("Bank read/write tests.\n");

   gpio_write(GPIO, 0);
   v = read_bank_1() & (1<<GPIO);
   CHECK(8, 1, v, 0, 0, "read bank 1");

   gpio_write(GPIO, 1);
   v = read_bank_1() & (1<<GPIO);
   CHECK(8, 2, v, (1<<GPIO), 0, "read bank 1");

   clear_bank_1(1<<GPIO);
   v = gpio_read(GPIO);
   CHECK(8, 3, v, 0, 0, "clear bank 1");

   set_bank_1(1<<GPIO);
   v = gpio_read(GPIO);
   CHECK(8, 4, v, 1, 0, "set bank 1");

   t = 0;
   v = (1<<16);
   for (i=0; i<100; i++)
   {
      if (read_bank_2() & v) t++;
   };
   CHECK(8, 5, t, 60, 75, "read bank 2");

   v = clear_bank_2(0);
   CHECK(8, 6, v, 0, 0, "clear bank 2");

   v = clear_bank_2(0xffffff);
   CHECK(8, 7, v, PI_SOME_PERMITTED, 0, "clear bank 2");

   v = set_bank_2(0);
   CHECK(8, 8, v, 0, 0, "set bank 2");

   v = set_bank_2(0xffffff);
   CHECK(8, 9, v, PI_SOME_PERMITTED, 0, "set bank 2");
}
Esempio n. 3
0
void t8(int pi)
{
   int v;

   printf("Bank read/write tests.\n");

   gpio_write(pi, GPIO, 0);
   v = read_bank_1(pi) & (1<<GPIO);
   CHECK(8, 1, v, 0, 0, "read bank 1");

   gpio_write(pi, GPIO, 1);
   v = read_bank_1(pi) & (1<<GPIO);
   CHECK(8, 2, v, (1<<GPIO), 0, "read bank 1");

   clear_bank_1(pi, 1<<GPIO);
   v = gpio_read(pi, GPIO);
   CHECK(8, 3, v, 0, 0, "clear bank 1");

   set_bank_1(pi, 1<<GPIO);
   v = gpio_read(pi, GPIO);
   CHECK(8, 4, v, 1, 0, "set bank 1");

   v = read_bank_2(pi);

   if (v) v = 0; else v = 1;

   CHECK(8, 5, v, 0, 0, "read bank 2");

   v = clear_bank_2(pi, 0);
   CHECK(8, 6, v, 0, 0, "clear bank 2");

   v = clear_bank_2(pi, 0xffffff);
   CHECK(8, 7, v, PI_SOME_PERMITTED, 0, "clear bank 2");

   v = set_bank_2(pi, 0);
   CHECK(8, 8, v, 0, 0, "set bank 2");

   v = set_bank_2(pi, 0xffffff);
   CHECK(8, 9, v, PI_SOME_PERMITTED, 0, "set bank 2");
}
Esempio n. 4
0
int pigpio_start(char *addrStr, char *portStr)
{
   int pi;
   int *userdata;

   for (pi=0; pi<MAX_PI; pi++)
   {
      if (!gPiInUse[pi]) break;
   }

   if (pi >= MAX_PI) return pigif_too_many_pis;

   gPiInUse[pi] = 1;

   pthread_mutex_init(&gCmdMutex[pi], NULL);

   gPigCommand[pi] = pigpioOpenSocket(addrStr, portStr);

   if (gPigCommand[pi] >= 0)
   {
      gPigNotify[pi] = pigpioOpenSocket(addrStr, portStr);

      if (gPigNotify[pi] >= 0)
      {
         gPigHandle[pi] = pigpio_notify(pi);

         if (gPigHandle[pi] < 0) return pigif_bad_noib;
         else
         {
            gLastLevel[pi] = read_bank_1(pi);

            /* must be freed by pthNotifyThread */
            userdata = malloc(sizeof(*userdata));
            *userdata = pi;

            gPthNotify[pi] = start_thread(pthNotifyThread, userdata);

            if (gPthNotify[pi]) return pi;
            else                return pigif_notify_failed;

         }
      }
      else return gPigNotify[pi];
   }
   else return gPigCommand[pi];
}