ACKme Logo WiConnect Host Library- API Reference Guide
 
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Groups Pages
SocketIrqHandlerMap.h
1 
29 #pragma once
30 
31 #include "Wiconnect.h"
32 #include "types/PinIrqHandler.h"
33 
34 namespace wiconnect
35 {
36 
42 class SocketIrqHandlerMap
43 {
44 public:
45  /*************************************************************************************************/
46  SocketIrqHandlerMap()
47  {
48  memset(handlers, 0, sizeof(handlers));
49  }
50 
51  /*************************************************************************************************/
52  ~SocketIrqHandlerMap()
53  {
54  for(int i = 0; i < WICONNECT_MAX_PIN_IRQ_HANDLERS; ++i)
55  {
56  if(handlers[i] != NULL)
57  {
58  handlers[i]->~PinIrqHandler();
59  }
60  }
61  }
62 
63  /*************************************************************************************************/
64  bool pinIsRegistered(Pin pin)
65  {
66  for(int i = 0; i < WICONNECT_MAX_PIN_IRQ_HANDLERS; ++i)
67  {
68  if(handlers[i] != NULL && handlers[i]->irqPin == pin)
69  {
70  return true;
71  }
72  }
73  return false;
74  }
75 
76  /*************************************************************************************************/
77  WiconnectResult registerHandler(Pin pin, const Callback &callback)
78  {
79  if(pinIsRegistered(pin))
80  {
81  return WICONNECT_DUPLICATE;
82  }
83 
84  PinIrqHandler *handler = NULL;
85 
86  for(int i = 0; i < WICONNECT_MAX_PIN_IRQ_HANDLERS; ++i)
87  {
88  if(handlers[i] == NULL)
89  {
90  handler = (PinIrqHandler*)&handlerBuffers[i];
91  handlers[i] = handler;
92  }
93  }
94 
95  if(handler == NULL)
96  {
97  return WICONNECT_NOT_FOUND;
98  }
99 
100  *handler = PinIrqHandler(pin, callback);
101 
102  return WICONNECT_SUCCESS;
103  }
104 
105  /*************************************************************************************************/
106  WiconnectResult unregisterHandler(Pin pin)
107  {
108  for(int i = 0; i < WICONNECT_MAX_PIN_IRQ_HANDLERS; ++i)
109  {
110  if(handlers[i] != NULL && handlers[i]->irqPin == pin)
111  {
112  handlers[i]->~PinIrqHandler();
113  handlers[i] = NULL;
114  return WICONNECT_SUCCESS;
115  }
116  }
117 
118  return WICONNECT_NOT_FOUND;
119  }
120 
121 private:
122  PinIrqHandler *handlers[WICONNECT_MAX_PIN_IRQ_HANDLERS];
123  PinIrqHandlerBuffer handlerBuffers[WICONNECT_MAX_PIN_IRQ_HANDLERS];
124 };
125 
126 
127 
128 }
WiconnectResult
API Result code.
Generic callback function.
Definition: Callback.h:49
PinName Pin
Pin name on HOST.
Definition: sdk.h:123
Command successfully completed.