gpio.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 Fraunhofer Institute for Manufacturing Engineering and Automation (IPA)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 
18 #ifndef HAND_BRIDGE_GPIO_H_
19 #define HAND_BRIDGE_GPIO_H_
20 
21 #include "pigpio.h"
22 
23 class GPIO {
25  uint32_t out_mask0;
26  bool call(int (*func)(uint32_t), uint32_t mask, uint32_t pins){
27  return initialized && (pins & mask) == pins && (pins == 0 || func(pins) == 0);
28  }
29 public:
30  GPIO() : initialized(false), out_mask0(0) {}
31  bool isInitialized() const { return initialized; }
32  bool setInput(uint32_t pin) {
33  return initialized && gpioSetMode(pin, PI_INPUT) == 0;
34  }
35  bool setOutput(uint32_t pin) {
36  if(initialized && gpioSetMode(pin, PI_OUTPUT) == 0){
37  if(pin < 32) out_mask0 |= (1<<pin);
38  return true;
39  }
40  return false;
41  }
42  bool init(){
43  return initialized = gpioInitialise() >= 0;
44  }
45  bool clearPins(uint32_t pins){
46  return call(gpioWrite_Bits_0_31_Clear, out_mask0, pins);
47  }
48  bool setPins(uint32_t pins){
49  return call(gpioWrite_Bits_0_31_Set, out_mask0, pins);
50  }
51  bool writePin(uint32_t pin, uint32_t level) {
52  if(!initialized) return false;
53  if(pin < 32 && ((1<<pin) & out_mask0) != (1<<pin)) return false;
54 
55  return gpioWrite(pin, level ? 1 : 0) == 0;
56  }
57  bool pwmPin(uint32_t pin, float level) {
58  if(!initialized) return false;
59  if(pin >= 32 || ((1<<pin) & out_mask0) != (1<<pin)) return false;
60 
61  int range;
62  if ((range = gpioGetPWMrange(pin)) < 0) return false;
63 
64  if(level < 0 || level > 1.0) return false;
65 
66  return gpioPWM(pin, level* range) == 0;
67  }
68  uint32_t getState() {
69  return initialized ? gpioRead_Bits_0_31(): 0;
70  }
71 };
72 #endif // HAND_BRIDGE_GPIO_H_
int gpioInitialise(void)
Definition: pigpio.c:8459
bool setInput(uint32_t pin)
Definition: gpio.h:32
bool initialized
Definition: gpio.h:24
uint32_t out_mask0
Definition: gpio.h:25
uint32_t getState()
Definition: gpio.h:68
bool setOutput(uint32_t pin)
Definition: gpio.h:35
int gpioSetMode(unsigned gpio, unsigned mode)
Definition: pigpio.c:8607
bool call(int(*func)(uint32_t), uint32_t mask, uint32_t pins)
Definition: gpio.h:26
bool init()
Definition: gpio.h:42
bool pwmPin(uint32_t pin, float level)
Definition: gpio.h:57
int gpioGetPWMrange(unsigned gpio)
Definition: pigpio.c:8846
int gpioPWM(unsigned gpio, unsigned val)
Definition: pigpio.c:8744
#define PI_INPUT
Definition: pigpio.h:581
int gpioWrite_Bits_0_31_Clear(uint32_t bits)
Definition: pigpio.c:12467
#define PI_OUTPUT
Definition: pigpio.h:582
int gpioWrite(unsigned gpio, unsigned level)
Definition: pigpio.c:8707
GPIO()
Definition: gpio.h:30
bool setPins(uint32_t pins)
Definition: gpio.h:48
bool clearPins(uint32_t pins)
Definition: gpio.h:45
Definition: gpio.h:23
int gpioWrite_Bits_0_31_Set(uint32_t bits)
Definition: pigpio.c:12495
uint32_t gpioRead_Bits_0_31(void)
Definition: pigpio.c:12443
bool writePin(uint32_t pin, uint32_t level)
Definition: gpio.h:51
bool isInitialized() const
Definition: gpio.h:31


cob_hand_bridge
Author(s): Mathias Lüdtke
autogenerated on Tue Oct 20 2020 03:35:57