Well, it means that something is wrong.
In fact I do not have any SDK here, just checked the source code and seen this BadHandle thing:
EXPORT_C TInt CHWRMPower::StartAveragePowerReporting(TRequestStatus& aStatus, const TUint& aInterval)
TInt err = iPowerImpl->DoStartAveragePowerReporting(aStatus, aInterval);
so I checked where it is set, and it is
TInt CHWRMPowerImpl::DoStartAveragePowerReporting(TRequestStatus& aStatus, const TUint& aInterval)
So I assume you have to implement that MHWRMBatteryPowerObserver thing and invoke SetPowerReportObserver. Some parts of these things are appear in your previous posts, so you just probably have to combine everything.
void CHWRMPowerImpl::DoSetPowerReportObserverL(MHWRMBatteryPowerObserver* aPowerReportCallback)
iBatteryPowerMeasurementsAO = CHWRMBatteryPowerMeasurementsAO::NewL(aPowerReportCallback, iClient);
Answering some of your questions: MHWRMBatteryPowerObserver can be implemented in any of your classes, it does not have to be a separate thing, neither an AO. And yes, it is required since PowerMeasurement method will get the actual measurements, periodically (as I understand).
EDIT: According to #9 (posted in the same minute as this one) you are progressing well.
EDIT2: after checking TBatteryPowerMeasurementData, it is completely different from what you want. For getting the remaining charge, you probably have to use the other method, GetBatteryInfo, and invoke it periodically from your code. The only thing what this average thing can do for you is to predict the change.