Thanks a lot.
For the first part I have one more doubt. I am new to quaternions, that's the issue.
If I find the required attitude in ENU frame, then should my command be q_curr * q_req, where q_curr is the current orientation of quadrotor in ENU frame, and q_req is the attitude of the acceleration vector. Is this correct?
The error in PI controller is the difference between the magnitude of required acceleration and current acceleration obtained from IMU.