void SetGPIOPinDir(int whichPin, int dir) { /* Sets the direction of GPIO pins. As described in the manual, dir == 0 is input */ SetGPIOPinDirMask(dir ? BIT2MASK(whichPin) : 0, BIT2MASK(whichPin)); } /* SetGPIOPinDir */
int addbit(bitset ss, int ibit) { int ibyte = BIT2BYTE(ibit); BYTE mask = BIT2MASK(ibit); if (ss[ibyte] & mask) return 0; /* Bit already set */ ss[ibyte] |= mask; return 1; }
static int init(void) { int ret; setup_timer( &my_timer, my_timer_callback, 0 ); ret = mod_timer( &my_timer, jiffies + msecs_to_jiffies(1000) ); if (ret) printk("Error in mod_timer\n"); printk("Loading module"); printk("mask: %lu \n", BIT2MASK(4)); SetGPIOPinDirMask(8405245 ,1); // alle pin directions AAN printk("mask: %lu \n", GetGPIOPinDirMask()); SetGPIOPin(4); SetGPIOPin(7); SetGPIOPin(3); printk("mask: %lu \n", GetGPIOPinDirMask()); return 0; }
/* Copy past van GPIO */ int GetGPIOPin(int whichPin) {return ((GPLR) >> whichPin) & 0x01;} /* ReadGPIOPin */ unsigned long GetGPIOMask(void) {return GPLR;} /* ReadGPIOMask */ void SetGPIOPin(int whichPin) { GPSR = 1 << whichPin;} /* SetGPIOPin */ void SetGPIOMask(unsigned long mask) {GPSR = mask;} /* SetGPIOMask */ void ClearGPIOPin(int whichPin) {GPCR = 1 << whichPin;} /* ClearGPIOPin */ void ClearGPIOMask(unsigned long mask) {GPCR = mask;} /* ClearGPIOMask */ void ModifyGPIOPins(unsigned long val, unsigned long mask) { if(val & mask)SetGPIOMask(val & mask); if(~val & mask) SetGPIOMask(~val & mask); } /* ModifyGPIOPins */ void SetGPIOPinDir(int whichPin, int dir) {SetGPIOPinDirMask(dir ? BIT2MASK(whichPin) : 0, BIT2MASK(whichPin));} /* SetGPIOPinDir */
/* Bitset primitives used by the parser generator */ #include "pgenheaders.h" #include "bitset.h" bitset newbitset(int nbits) { int nbytes = NBYTES(nbits); bitset ss = (char *)PyObject_MALLOC(sizeof(BYTE) * nbytes); if (ss == NULL) Py_FatalError("no mem for bitset"); ss += nbytes; while (--nbytes >= 0) *--ss = 0; return ss; } void delbitset(bitset ss) { PyObject_FREE(ss); } int addbit(bitset ss, int ibit) { int ibyte = BIT2BYTE(ibit); BYTE mask = BIT2MASK(ibit); if (ss[ibyte] & mask) return 0; /* Bit already set */ ss[ibyte] |= mask; return 1; } #if 0 /* Now a macro */ int testbit(bitset ss, int ibit) { return (ss[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0; }
void ClearPPCPin(int whichPin) { ModifyPPCPins(BIT2MASK(0), BIT2MASK(whichPin)); } /* ClearPPCPin */
void SetPPCPin(int whichPin) { ModifyPPCPins(BIT2MASK(whichPin), BIT2MASK(whichPin)); } /* SetPPCPin */