sys/transceiver: implement transceiver_unregister

This commit is contained in:
Ludwig Ortmann 2014-07-08 15:29:31 +02:00
parent c264338e31
commit d034cfac29
2 changed files with 29 additions and 0 deletions

View File

@ -228,5 +228,15 @@ int transceiver_start(void);
*/
uint8_t transceiver_register(transceiver_type_t transceivers, int pid);
/**
* @brief unregister a thread for events from certain transceivers
*
* @param transceivers The transceiver types to register for
* @param pid The pid of the thread to register
*
* @return 1 on success, 0 otherwise
*/
uint8_t transceiver_unregister(transceiver_type_t transceivers, int pid);
#endif /* TRANSCEIVER_H */
/** @} */

View File

@ -251,6 +251,25 @@ uint8_t transceiver_register(transceiver_type_t t, int pid)
}
}
/* Unregister an upper layer thread */
uint8_t transceiver_unregister(transceiver_type_t t, int pid)
{
uint8_t i;
/* find pid in unregistered threads or first unused space */
for (i = 0; ((i < TRANSCEIVER_MAX_REGISTERED) &&
(reg[i].pid != pid) &&
(reg[i].transceivers != TRANSCEIVER_NONE)); i++);
if (i >= TRANSCEIVER_MAX_REGISTERED) {
return 0;
}
else if (reg[i].pid == pid) {
reg[i].transceivers ^= t;
}
return 1;
}
/*------------------------------------------------------------------------------------*/
/* Internal functions */
/*------------------------------------------------------------------------------------*/