deregisterCallback and some error handling
This commit is contained in:
@@ -12,23 +12,38 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
|
|||||||
}
|
}
|
||||||
|
|
||||||
EXTIHandler_STM32::EXTIHandler_STM32() {
|
EXTIHandler_STM32::EXTIHandler_STM32() {
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
EXTIHandler_STM32::~EXTIHandler_STM32() {
|
EXTIHandler_STM32::~EXTIHandler_STM32() {
|
||||||
// TODO Auto-generated destructor stub
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EXTIHandler_STM32::EXTI_Callback(uint16_t GPIO_Pin){
|
void EXTIHandler_STM32::EXTI_Callback(uint16_t GPIO_Pin){
|
||||||
if(objects[gpioPinToPinNumber(GPIO_Pin)]){
|
// TODO Protect array with mutex
|
||||||
objects[gpioPinToPinNumber(GPIO_Pin)]->irqHandler(nullptr);
|
EXTIHandler_STM32* object = objects[gpioPinToPinNumber(GPIO_Pin)];
|
||||||
|
if(object){
|
||||||
|
object->irqHandler(nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t EXTIHandler_STM32::registerCallback(GPIO_Pin_STM32* pin){
|
int32_t EXTIHandler_STM32::registerCallback(GPIO_Pin_STM32* pin){
|
||||||
if(objects[gpioPinToPinNumber(pin->getPin())] == nullptr){
|
// TODO Protect array with mutex
|
||||||
objects[gpioPinToPinNumber(pin->getPin())] = this;
|
int8_t pinNumber = gpioPinToPinNumber(pin->getPin());
|
||||||
|
if(!objects[pinNumber]){
|
||||||
|
objects[pinNumber] = this;
|
||||||
|
return 0;
|
||||||
|
}else{
|
||||||
|
// Already enabled
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t EXTIHandler_STM32::deregisterCallback(GPIO_Pin_STM32* pin){
|
||||||
|
// TODO Protect array with mutex
|
||||||
|
int8_t pinNumber = gpioPinToPinNumber(pin->getPin());
|
||||||
|
if(objects[pinNumber]){
|
||||||
|
objects[pinNumber] = nullptr;
|
||||||
return 0;
|
return 0;
|
||||||
}else{
|
}else{
|
||||||
return -1;
|
return -1;
|
||||||
@@ -36,6 +51,7 @@ int32_t EXTIHandler_STM32::registerCallback(GPIO_Pin_STM32* pin){
|
|||||||
}
|
}
|
||||||
|
|
||||||
int8_t EXTIHandler_STM32::gpioPinToPinNumber(uint16_t GPIO_Pin) {
|
int8_t EXTIHandler_STM32::gpioPinToPinNumber(uint16_t GPIO_Pin) {
|
||||||
|
assert_param(IS_GPIO_PIN(GPIO_Pin));
|
||||||
switch(GPIO_Pin){
|
switch(GPIO_Pin){
|
||||||
case GPIO_PIN_0:
|
case GPIO_PIN_0:
|
||||||
return 0;
|
return 0;
|
||||||
@@ -69,7 +85,7 @@ int8_t EXTIHandler_STM32::gpioPinToPinNumber(uint16_t GPIO_Pin) {
|
|||||||
return 14;
|
return 14;
|
||||||
case GPIO_PIN_15:
|
case GPIO_PIN_15:
|
||||||
return 15;
|
return 15;
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
// TODO implement error handling here
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public:
|
|||||||
static void EXTI_Callback(uint16_t GPIO_Pin);
|
static void EXTI_Callback(uint16_t GPIO_Pin);
|
||||||
protected:
|
protected:
|
||||||
int32_t registerCallback(GPIO_Pin_STM32* pin);
|
int32_t registerCallback(GPIO_Pin_STM32* pin);
|
||||||
|
int32_t deregisterCallback(GPIO_Pin_STM32* pin);
|
||||||
private:
|
private:
|
||||||
virtual void irqHandler(void* parameter) = 0;
|
virtual void irqHandler(void* parameter) = 0;
|
||||||
static int8_t gpioPinToPinNumber(uint16_t GPIO_Pin);
|
static int8_t gpioPinToPinNumber(uint16_t GPIO_Pin);
|
||||||
|
|||||||
Reference in New Issue
Block a user