/*----------------------------------------------------------------------------*/ /* Copyright (c) FIRST 2011. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */ /*----------------------------------------------------------------------------*/ #pragma once #include "SensorBase.h" #include "Skeleton.h" #include "HAL/Semaphore.hpp" #define kNumSkeletons 1 /** * Handles raw data input from the FRC Kinect Server * when used with a Kinect device connected to the Driver Station. * Each time a value is requested the most recent value is returned. * See Getting Started with Microsoft Kinect for FRC and the Kinect * for Windows SDK API reference for more information */ class Kinect : public SensorBase { public: enum SkeletonTrackingState { kNotTracked, kPositionOnly, kTracked }; enum SkeletonQuality { kClippedRight = 1, kClippedLeft = 2, kClippedTop = 4, kClippedBottom = 8 }; struct Point4 { float x; float y; float z; float w; }; int GetNumberOfPlayers(); Point4 GetFloorClipPlane(); Point4 GetGravityNormal(); Skeleton GetSkeleton(int skeletonIndex = 1); Point4 GetPosition(int skeletonIndex = 1); uint32_t GetQuality(int skeletonIndex = 1); SkeletonTrackingState GetTrackingState(int skeletonIndex = 1); static Kinect *GetInstance(); private: Kinect(); ~Kinect(); void UpdateData(); DISALLOW_COPY_AND_ASSIGN(Kinect); uint32_t m_recentPacketNumber; MUTEX_ID m_dataLock; int m_numberOfPlayers; Point4 m_floorClipPlane; Point4 m_gravityNormal; Point4 m_position[kNumSkeletons]; uint32_t m_quality[kNumSkeletons]; SkeletonTrackingState m_trackingState[kNumSkeletons]; Skeleton m_skeletons[kNumSkeletons]; // TODO: Include structs for this data format (would be clearer than 100 magic numbers) char m_rawHeader[46]; char m_rawSkeletonExtra[42]; char m_rawSkeleton[242]; static Kinect *_instance; };