Hello:

I am not the most familiar with the ADC device so it is possible that it was 
being used incorrectly but in any event I ran across something I wanted to 
discuss. The call to os_dev_open() allows a device to be opened multiple times 
(there is a reference count there). However, the call to nrf52_adc_open() 
returns an error (OS_EBUSY) if the device has already been opened.

This presented a problem in the following case: consider two independent 
packages both of which want to use ADC_0. Each package is going to attempt to 
open the ADC device (since it has no idea if it was already opened) but the 
second attempt to open the device will result in an error code returned. 
Depending on how the code is written in the package, this could be a problem. 
Given that an ADC is almost always a mutli-channel peripheral (one adc device 
has multple channels) I would suspect the above case to be common: multiple 
packages wanting an ADC channel from a single device. 

I am not sure if anything needs to be done here; just wanted to see if folks 
thought there should different behavior with regards to the function returning 
an error if the device was already opened. If not, folks are going to have to 
be careful when they write code using the adc device. Seems to me if nothing is 
going to change we have two options:

1) The device gets created and opened in some place and handed to the packages 
that need it.
2) The device gets created (say by the bsp) and each package can attempt to 
open the device. If os_dev_lookup() returns !NULL but os_dev_open() returns 
NULL it means that the device has already been opened.

Something about #2 just sort of bothers me. I do not like ambiguous stuff like 
that; how do you know if there was an error for another reason?

Thoughts/comments/suggestions greatly appreciated!

Reply via email to