Esempio n. 1
0
/* piBoardId
 *
 * Parameters:
 * - model: int *
 * - rev: int *
 * - mem: int *
 * - maker: int *
 * - overVolted: int *
 * Return Type: void
 */
mrb_value
mrb_Pi_piBoardId(mrb_state* mrb, mrb_value self) {
  mrb_value model;
  mrb_value rev;
  mrb_value mem;
  mrb_value maker;
  mrb_value overVolted;

  /* Fetch the args */
  mrb_get_args(mrb, "ooooo", &model, &rev, &mem, &maker, &overVolted);

  /* Type checking */
  TODO_type_check_int_PTR(model);
  TODO_type_check_int_PTR(rev);
  TODO_type_check_int_PTR(mem);
  TODO_type_check_int_PTR(maker);
  TODO_type_check_int_PTR(overVolted);

  /* Unbox parameters */
  int * native_model = TODO_mruby_unbox_int_PTR(model);

  int * native_rev = TODO_mruby_unbox_int_PTR(rev);

  int * native_mem = TODO_mruby_unbox_int_PTR(mem);

  int * native_maker = TODO_mruby_unbox_int_PTR(maker);

  int * native_overVolted = TODO_mruby_unbox_int_PTR(overVolted);

  /* Invocation */
  piBoardId(native_model, native_rev, native_mem, native_maker, native_overVolted);

  return mrb_nil_value();
}
Esempio n. 2
0
char InitGpio()
{
	int   rev, mem, maker, overVolted ;
	//printf("*********** Init GPIO *************\n");
	piBoardId(&model,&rev,&mem,&maker,&overVolted);
	if (model==3) printf("Model B+ ");
	if(model<3) printf("Model B ");
	if(model>=4)
	{
		 printf("\n Model 2");
		 BCM2708_PERI_BASE = 0x3F000000 ;
		 dram_phys_base   =  0xc0000000;
		 mem_flag         =  0x04;
	}
	else
	{
		 printf("Model 1");
		 BCM2708_PERI_BASE = 0x20000000 ;
		 dram_phys_base   =  0x40000000;
		 mem_flag         =  0x0c;
	}

	dma_reg = map_peripheral(DMA_BASE, DMA_LEN);
	pwm_reg = map_peripheral(PWM_BASE, PWM_LEN);
	clk_reg = map_peripheral(CLK_BASE, CLK_LEN);

	pcm_reg =  map_peripheral(PCM_BASE, PCM_LEN); 
	gpio_reg = map_peripheral(GPIO_BASE, GPIO_LEN);
	pad_gpios_reg = map_peripheral(PADS_GPIO, PADS_GPIO_LEN);

	return 1;
	
}
Esempio n. 3
0
int cmReadall (void)
{
  int model, rev, mem ;
  int pin ;
  char *maker ;

  piBoardId (&model, &rev, &mem, &maker) ;
  if (model != PI_MODEL_CM)
    return FALSE ;

  printf ("+-----+------+-------+      +-----+------+-------+\n") ;
  printf ("| Pin | Mode | Value |      | Pin | Mode | Value |\n") ;
  printf ("+-----+------+-------+      +-----+------+-------+\n") ;

  for (pin = 0 ; pin < 28 ; ++pin)
  {
    printf ("| %3d ", pin) ;
    printf ("| %-4s ", alts [getAlt (pin)]) ;
    printf ("| %s  ", digitalRead (pin) == HIGH ? "High" : "Low ") ;
    printf ("|      ") ;
    printf ("| %3d ", pin + 28) ;
    printf ("| %-4s ", alts [getAlt (pin + 28)]) ;
    printf ("| %s  ", digitalRead (pin + 28) == HIGH ? "High" : "Low ") ;
    printf ("|\n") ;
  }

  printf ("+-----+------+-------+      +-----+------+-------+\n") ;

  return TRUE ;
}
Esempio n. 4
0
int wiringPiSPISetup (int channel, int speed)
{
    int fd ;
    int model, rev, mem, maker, overVolted ;

    piBoardId (&model, &rev, &mem, &maker, &overVolted) ;

    channel &= 1 ;

    if (model == PI_MODEL_ODROIDXU_34)    {
        if (channel)
            return wiringPiFailure (WPI_ALMOST, "ODROID-XU3/4 cannot support spi-channel 1.\n") ;

        if ((fd = open (spiDev0_XU, O_RDWR)) < 0)
            return wiringPiFailure (WPI_ALMOST, "Unable to open SPI device: %s\n", strerror (errno)) ;
    }
    else if (model == PI_MODEL_ODROIDC)  {
        if (channel)
            return wiringPiFailure (WPI_ALMOST, "ODROID-C1/C1+ cannot support spi-channel 1.\n") ;

        if ((fd = open (spiDev0, O_RDWR)) < 0)
            return wiringPiFailure (WPI_ALMOST, "Unable to open SPI device: %s\n", strerror (errno)) ;
    }
    else if (model == PI_MODEL_ODROIDC2)	{
        return wiringPiFailure (WPI_ALMOST, "ODROID-C2 cannot support spi-channel\n") ;
    }
    else  {
        if ((fd = open (channel == 0 ? spiDev0 : spiDev1, O_RDWR)) < 0)
            return wiringPiFailure (WPI_ALMOST, "Unable to open SPI device: %s\n", strerror (errno)) ;
    }

    spiSpeeds [channel] = speed ;
    spiFds    [channel] = fd ;

// Set SPI parameters.
//	Why are we reading it afterwriting it? I've no idea, but for now I'm blindly
//	copying example code I've seen online...

    if (ioctl (fd, SPI_IOC_WR_MODE, &spiMode)         < 0)
        return wiringPiFailure (WPI_ALMOST, "SPI Mode Change failure: %s\n", strerror (errno)) ;

    if (ioctl (fd, SPI_IOC_WR_BITS_PER_WORD, &spiBPW) < 0)
        return wiringPiFailure (WPI_ALMOST, "SPI BPW Change failure: %s\n", strerror (errno)) ;

    if (ioctl (fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed)   < 0)
        return wiringPiFailure (WPI_ALMOST, "SPI Speed Change failure: %s\n", strerror (errno)) ;

    return fd ;
}
Esempio n. 5
0
static void doUsbP (int argc, char *argv [])
{
    int model, rev, mem, maker, overVolted ;

    if (argc != 3)
    {
        fprintf (stderr, "Usage: %s usbp high|low\n", argv [0]) ;
        exit (1) ;
    }

    // Make sure we're on a B+

    piBoardId (&model, &rev, &mem, &maker, &overVolted) ;

    if (model != PI_MODEL_BP)
    {
        fprintf (stderr, "USB power contol is applicable to B+ boards only.\n") ;
        exit (1) ;
    }

    // Need to force BCM_GPIO mode:

    wiringPiSetupGpio () ;

    if ((strcasecmp (argv [2], "high") == 0) || (strcasecmp (argv [2], "hi") == 0))
    {
        digitalWrite (PI_USB_POWER_CONTROL, 1) ;
        pinMode (PI_USB_POWER_CONTROL, OUTPUT) ;
        printf ("Switched to HIGH current USB (1.2A)\n") ;
        return ;
    }

    if ((strcasecmp (argv [2], "low") == 0) || (strcasecmp (argv [2], "lo") == 0))
    {
        digitalWrite (PI_USB_POWER_CONTROL, 0) ;
        pinMode (PI_USB_POWER_CONTROL, OUTPUT) ;
        printf ("Switched to LOW current USB (600mA)\n") ;
        return ;
    }

    fprintf (stderr, "Usage: %s usbp high|low\n", argv [0]) ;
    exit (1) ;
}
Esempio n. 6
0
void doReadall (void)
{
  int model, rev, mem, maker, overVolted ;

  if (wiringPiNodes != NULL)	// External readall
  {
    doReadallExternal () ;
    return ;
  }

  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;

  /**/ if ((model == PI_MODEL_A) || (model == PI_MODEL_B))
    abReadall (model, rev) ;
  else if ((model == PI_MODEL_BP) || (model == PI_MODEL_AP) || (model == PI_MODEL_2))
    piPlusReadall (model) ;
  else if (model == PI_MODEL_CM)
    cmReadall () ;
  else
    printf ("Oops - unable to determine board type... model: %d\n", model) ;
}
Esempio n. 7
0
static int setup(void) {
	int fd;
	int boardRev;
	int model, rev, mem, maker, overVolted;

	boardRev = piBoardRev();

	if(boardRev == 1) {
		pinToGpio =  pinToGpioR1;
		physToGpio = physToGpioR1;
	} else {
		if(piModel2 == 1) {
			BCM2708_PERI_BASE = 0x3F000000;
		}
		pinToGpio =  pinToGpioR2;
		physToGpio = physToGpioR2;
	}

	if((fd = open("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC) ) < 0) {
		wiringXLog(LOG_ERR, "raspberrypi->setup: Unable to open /dev/mem: %s", strerror(errno));
		return -1;
	}

	gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_BASE);
	if((int32_t)gpio == -1) {
		wiringXLog(LOG_ERR, "raspberrypi->setup: mmap (GPIO) failed: %s", strerror(errno));
		return -1;
	}

	if(piBoardId(&model, &rev, &mem, &maker, &overVolted) == -1) {
		return -1;
	}
	if(model == PI_MODEL_CM) {
		wiringPiMode = WPI_MODE_GPIO;
	} else {
		wiringPiMode = WPI_MODE_PINS;
	}

	return 0;
}
Esempio n. 8
0
int wiringPiI2CSetup (const int devId)
{
  const char *device ;
  int model, rev, mem, maker, overVolted ;

  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;

  if      ( model == PI_MODEL_ODROIDC )
    device = "/dev/i2c-1" ;
  else if ( model == PI_MODEL_ODROIDXU_34 )
    device = "/dev/i2c-3" ;
  else  {
    rev = piBoardRev () ;

    if (rev == 1)
      device = "/dev/i2c-0" ;
    else
      device = "/dev/i2c-1" ;
  }

  return wiringPiI2CSetupInterface (device, devId) ;
}
Esempio n. 9
0
/**
 * --------------------------------------------------------
 * GET EDGE GPIO PIN
 * --------------------------------------------------------
 */
int getEdgePin(int pin)
{
    int model, rev, mem, maker, overVolted ;

	// validate lower bounds
	if(pin < 0)
		return -1;

	// validate upper bounds
	if(pin >= MAX_GPIO_PINS)
		return -1;

	// return the edge pin index
	// (will return -1 for invalid pin)
    piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
    if (model == PI_MODEL_CM){
        return pin;
    }
    else{
        return wpiPinToGpio(pin);
    }
}
Esempio n. 10
0
void doReadall (void)
{
  int model, rev, mem, maker, overVolted ;

  if (wiringPiNodes != NULL)	// External readall
  {
    doReadallExternal () ;
    return ;
  }

  piBoardId (&model, &rev, &mem, &maker, &overVolted) ;

  /**/ if ((model == PI_MODEL_A) || (model == PI_MODEL_B))
    abReadall (model, rev) ;
  else if (model == PI_MODEL_BP) 
    bPlusReadall () ;
  else if (model == PI_MODEL_CM)
    cmReadall () ;
  else if (model == PI_MODEL_BPR) //add for BananaPro by lemaker team
	 OrangePiReadAll();	//guenter 
  	 // guenter BPReadAll();
  else
    printf ("Oops - unable to determine board type... model: %d\n", model) ;
}
Esempio n. 11
0
int main (int argc, char *argv [])
{
    int i ;
    int model, rev, mem, maker, overVolted ;

    if (getenv ("WIRINGPI_DEBUG") != NULL)
    {
        printf ("gpio: wiringPi debug mode enabled\n") ;
        wiringPiDebug = TRUE ;
    }

    if (argc == 1)
    {
        fprintf (stderr, "%s\n", usage) ;
        return 1 ;
    }

    // Help

    if (strcasecmp (argv [1], "-h") == 0)
    {
        printf ("%s: %s\n", argv [0], usage) ;
        return 0 ;
    }

    // Sort of a special:

    if (strcmp (argv [1], "-R") == 0)
    {
        printf ("%d\n", piBoardRev ()) ;
        return 0 ;
    }

    // Version & Warranty

    if (strcmp (argv [1], "-V") == 0)
    {
        printf ("%d\n", piBoardRev ()) ;
        return 0 ;
    }

    if (strcmp (argv [1], "-v") == 0)
    {
        printf ("gpio version: %s\n", VERSION) ;
        printf ("Copyright (c) 2012-2014 Gordon Henderson\n") ;
        printf ("This is free software with ABSOLUTELY NO WARRANTY.\n") ;
        printf ("For details type: %s -warranty\n", argv [0]) ;
        printf ("\n") ;
        piBoardId (&model, &rev, &mem, &maker, &overVolted) ;
        if (model == PI_MODEL_UNKNOWN)
        {
            printf ("Your Raspberry Pi has an unknown model type. Please report this to\n") ;
            printf ("    [email protected]\n") ;
            printf ("with a copy of your /proc/cpuinfo if possible\n") ;
        }
        else
        {
            printf ("Banana Pro Details:\n") ;
            printf ("  Type: %s, Revision: %s, Memory: %dMB, Maker: %s %s\n",
                    piModelNames [model], piRevisionNames [rev], mem, piMakerNames [maker], overVolted ? "[OV]" : "") ;
        }
        return 0 ;
    }

    if (strcasecmp (argv [1], "-warranty") == 0)
    {
        printf ("gpio version: %s\n", VERSION) ;
        printf ("Copyright (c) 2012-2014 Gordon Henderson\n") ;
        printf ("\n") ;
        printf ("    This program is free software; you can redistribute it and/or modify\n") ;
        printf ("    it under the terms of the GNU Leser General Public License as published\n") ;
        printf ("    by the Free Software Foundation, either version 3 of the License, or\n") ;
        printf ("    (at your option) any later version.\n") ;
        printf ("\n") ;
        printf ("    This program is distributed in the hope that it will be useful,\n") ;
        printf ("    but WITHOUT ANY WARRANTY; without even the implied warranty of\n") ;
        printf ("    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n") ;
        printf ("    GNU Lesser General Public License for more details.\n") ;
        printf ("\n") ;
        printf ("    You should have received a copy of the GNU Lesser General Public License\n") ;
        printf ("    along with this program. If not, see <http://www.gnu.org/licenses/>.\n") ;
        printf ("\n") ;
        return 0 ;
    }

    if (geteuid () != 0)
    {
        fprintf (stderr, "%s: Must be root to run. Program should be suid root. This is an error.\n", argv [0]) ;
        return 1 ;
    }

    // Initial test for /sys/class/gpio operations:

    /**/ if (strcasecmp (argv [1], "exports"    ) == 0)
    {
        doExports     (argc, argv) ;
        return 0 ;
    }
    else if (strcasecmp (argv [1], "export"     ) == 0)
    {
        doExport      (argc, argv) ;
        return 0 ;
    }
    else if (strcasecmp (argv [1], "edge"       ) == 0)
    {
        doEdge        (argc, argv) ;
        return 0 ;
    }
    else if (strcasecmp (argv [1], "unexport"   ) == 0)
    {
        doUnexport    (argc, argv) ;
        return 0 ;
    }
    else if (strcasecmp (argv [1], "unexportall") == 0)
    {
        doUnexportall (argv [0]) ;
        return 0 ;
    }

    // Check for load command:

    if (strcasecmp (argv [1], "load" ) == 0)
    {
        doLoad     (argc, argv) ;
        return 0 ;
    }


    // Check for -g argument

    if (strcasecmp (argv [1], "-g") == 0)
    {
        wiringPiSetupGpio () ;

        for (i = 2 ; i < argc ; ++i)
            argv [i - 1] = argv [i] ;
        --argc ;
        wpMode = WPI_MODE_GPIO ;
    }

    // Check for -1 argument

    else if (strcasecmp (argv [1], "-1") == 0)
    {
        wiringPiSetupPhys () ;

        for (i = 2 ; i < argc ; ++i)
            argv [i - 1] = argv [i] ;
        --argc ;
        wpMode = WPI_MODE_PHYS ;
    }

    // Default to wiringPi mode

    else
    {
        wiringPiSetup () ;
        wpMode = WPI_MODE_PINS ;
    }

    // Check for -x argument to load in a new extension

    if (strcasecmp (argv [1], "-x") == 0)
    {
        if (argc < 3)
        {
            fprintf (stderr, "%s: -x missing extension specification.\n", argv [0]) ;
            exit (EXIT_FAILURE) ;
        }

        if (!doExtension (argv [0], argv [2]))	// Prints its own error messages
            exit (EXIT_FAILURE) ;

        for (i = 3 ; i < argc ; ++i)
            argv [i - 2] = argv [i] ;
        argc -= 2 ;
    }

    if (argc <= 1)
    {
        fprintf (stderr, "%s: no command given\n", argv [0]) ;
        exit (EXIT_FAILURE) ;
    }

    // Core wiringPi functions

    /**/ if (strcasecmp (argv [1], "mode"   ) == 0) doMode      (argc, argv) ;
    else if (strcasecmp (argv [1], "read"   ) == 0) doRead      (argc, argv) ;
    else if (strcasecmp (argv [1], "write"  ) == 0) doWrite     (argc, argv) ;
    else if (strcasecmp (argv [1], "pwm"    ) == 0) doPwm       (argc, argv) ;
    else if (strcasecmp (argv [1], "awrite" ) == 0) doAwrite    (argc, argv) ;
    else if (strcasecmp (argv [1], "aread"  ) == 0) doAread     (argc, argv) ;

    // GPIO Nicies

    else if (strcasecmp (argv [1], "toggle" ) == 0) doToggle    (argc, argv) ;

    // Pi Specifics

    else if (strcasecmp (argv [1], "pwm-bal"  ) == 0) doPwmMode    (PWM_MODE_BAL) ;
    else if (strcasecmp (argv [1], "pwm-ms"   ) == 0) doPwmMode    (PWM_MODE_MS) ;
    else if (strcasecmp (argv [1], "pwmr"     ) == 0) doPwmRange   (argc, argv) ;
    else if (strcasecmp (argv [1], "pwmc"     ) == 0) doPwmClock   (argc, argv) ;
    else if (strcasecmp (argv [1], "pwmTone"  ) == 0) doPwmTone    (argc, argv) ;
    else if (strcasecmp (argv [1], "usbp"     ) == 0) doUsbP       (argc, argv) ;
    else if (strcasecmp (argv [1], "readall"  ) == 0) doReadall    () ;
    else if (strcasecmp (argv [1], "nreadall" ) == 0) doReadall    () ;
    else if (strcasecmp (argv [1], "pins"     ) == 0) doPins       () ;
    else if (strcasecmp (argv [1], "i2cdetect") == 0) doI2Cdetect  (argc, argv) ;
    else if (strcasecmp (argv [1], "i2cd"     ) == 0) doI2Cdetect  (argc, argv) ;
    else if (strcasecmp (argv [1], "reset"    ) == 0) doReset      (argv [0]) ;
    else if (strcasecmp (argv [1], "wb"       ) == 0) doWriteByte  (argc, argv) ;
    else
    {
        fprintf (stderr, "%s: Unknown command: %s.\n", argv [0], argv [1]) ;
        exit (EXIT_FAILURE) ;
    }
    return 0 ;
}