#ifndef __PHONE_DEVICE_H__ #define __PHONE_DEVICE_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "camera2/Camera2Helper.h" #include "camera2/ndkcamera.h" class CPhoneDevice : public IDevice { public: class CPhoneCamera : public NdkCamera { public: CPhoneCamera(CPhoneDevice* dev, int32_t width, int32_t height); virtual bool on_image(const cv::Mat& rgb); virtual void on_error(const std::string& msg); protected: CPhoneDevice* m_dev; }; CPhoneDevice(JavaVM* vm, jobject service); virtual ~CPhoneDevice(); virtual void SetListener(IListener* listener); virtual bool UpdateTime(time_t ts); virtual bool UpdateSchedules(); virtual bool QuerySystemProperties(map& properties); virtual bool Reboot(); virtual bool EnableGPS(bool enabled); virtual bool RequestPosition(); virtual timer_uid_t RegisterHeartbeat(unsigned int timerType, unsigned int timeout); virtual bool TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector& osds, const string& path); virtual bool CloseCamera(); virtual timer_uid_t RegisterTimer(unsigned int timerType, unsigned int timeout, unsigned long times = 0); virtual bool UnregisterTimer(timer_uid_t uid); virtual unsigned long RequestWakelock(unsigned long timeout); virtual bool ReleaseWakelock(unsigned long wakelock); virtual bool FireTimer(timer_uid_t uid, unsigned long times); bool GetNextScheduleItem(uint32_t tsBasedZero, uint32_t scheduleTime, vector& items); void UpdatePosition(double lon, double lat, time_t ts); protected: std::string GetFileName() const; bool SendBroadcastMessage(std::string action, int value); // bool MatchCaptureSizeRequest(ACameraManager *cameraManager, const char *selectedCameraId, unsigned int width, unsigned int height, uint32_t cameraOrientation_, inline bool TakePhotoCb(bool res, const IDevice::PHOTO_INFO& photoInfo, const string& path, time_t photoTime) const { if (m_listener != NULL) { return m_listener->OnPhotoTaken(res, photoInfo, path, photoTime); } return false; } void QueryPowerInfo(std::map& powerInfo); bool OnImageReady(const cv::Mat& mat); void onError(const std::string& msg); static void CloseCamera2(CPhoneCamera* camera); protected: JavaVM* m_vm; jobject m_javaService; jmethodID mRegisterTimerMid; jmethodID mRegisterHeartbeatMid; jmethodID mUnregisterTimerMid; jmethodID mUpdateTimeMid; jmethodID mRequestWakelockMid; jmethodID mReleaseWakelockMid; jmethodID mGetPowerInfoMid; jmethodID mRebootMid; jmethodID mEnableGpsMid; jmethodID mRequestPositionMid; std::string mPath; IDevice::PHOTO_INFO mPhotoInfo; vector mOsds; IListener* m_listener; atomic_ulong m_timerUidFeed; atomic_ulong m_wakelockIdFeed; std::map mTimers; mutable CPhoneCamera* mCamera; time_t mHeartbeatStartTime; unsigned int mHeartbeatDuration; }; #endif // __PHONE_DEVICE_H__