SDK docs do say for this panic that: "This panic is raised when a timer event is requested from an asynchronous timer service, an RTimer, and a timer event is already outstanding. It is caused by calling either the At(), After() or Lock() member functions after a previous call to any of these functions, but before the timer event requested by those functions has completed. "
So do see that you never activate it twice, or simply cancel previous request when making new one. i.e. in your CamExTimer implementation, inside the At/After/Inactivity, add Cancel(); line in the beginning of the function.