Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: SSD1306_smart_watch
Fork of mbed-src by
Diff: common/Serial.cpp
- Revision:
- 15:4892fe388435
- Parent:
- 13:0645d8841f51
- Child:
- 36:ab3ee77451e7
--- a/common/Serial.cpp Mon Aug 05 14:54:27 2013 +0000
+++ b/common/Serial.cpp Wed Aug 07 16:43:59 2013 +0300
@@ -44,15 +44,32 @@
return serial_writable(&_serial);
}
-void Serial::attach(void (*fptr)(void), IrqType type) {
+pFunctionPointer_t Serial::attach(void (*fptr)(void), IrqType type) {
+ pFunctionPointer_t pf = NULL;
+ _irq[type].clear();
if (fptr) {
- _irq[type].attach(fptr);
+ pf = _irq[type].add(fptr);
serial_irq_set(&_serial, (SerialIrq)type, 1);
} else {
serial_irq_set(&_serial, (SerialIrq)type, 0);
}
+ return pf;
}
+pFunctionPointer_t Serial::add_handler_helper(void (*fptr)(void), IrqType type, bool front) {
+ if (NULL == fptr)
+ return NULL;
+ pFunctionPointer_t pf = front ? _irq[type].add_front(fptr) : _irq[type].add(fptr);
+ serial_irq_set(&_serial, (SerialIrq)type, 1);
+ return pf;
+}
+
+bool Serial::remove_handler(pFunctionPointer_t pf, IrqType type) {
+ bool res = _irq[type].remove(pf);
+ if (res && _irq[type].size() == 0)
+ serial_irq_set(&_serial, (SerialIrq)type, 0);
+ return res;
+}
void Serial::_irq_handler(uint32_t id, SerialIrq irq_type) {
Serial *handler = (Serial*)id;
