| /*----------------------------------------------------------------------------*/ |
| /* Copyright (c) FIRST 2008. 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. */ |
| /*----------------------------------------------------------------------------*/ |
| |
| #ifndef __DASHBOARD_H__ |
| #define __DASHBOARD_H__ |
| |
| #include "DashboardBase.h" |
| #include "NetworkCommunication/FRCComm.h" |
| #include <stack> |
| #include <vector> |
| #include <vxWorks.h> |
| |
| /** |
| * Pack data into the "user data" field that gets sent to the dashboard laptop |
| * via the driver station. |
| */ |
| class Dashboard : public DashboardBase |
| { |
| public: |
| explicit Dashboard(SEM_ID statusDataSemaphore); |
| virtual ~Dashboard(); |
| |
| enum Type {kI8, kI16, kI32, kU8, kU16, kU32, kFloat, kDouble, kBoolean, kString, kOther}; |
| enum ComplexType {kArray, kCluster}; |
| |
| void AddI8(INT8 value); |
| void AddI16(INT16 value); |
| void AddI32(INT32 value); |
| void AddU8(UINT8 value); |
| void AddU16(UINT16 value); |
| void AddU32(UINT32 value); |
| void AddFloat(float value); |
| void AddDouble(double value); |
| void AddBoolean(bool value); |
| void AddString(char* value); |
| void AddString(char* value, INT32 length); |
| |
| void AddArray(); |
| void FinalizeArray(); |
| void AddCluster(); |
| void FinalizeCluster(); |
| |
| void Printf(const char *writeFmt, ...); |
| |
| INT32 Finalize(); |
| void GetStatusBuffer(char** userStatusData, INT32* userStatusDataSize); |
| void Flush() {} |
| private: |
| static const INT32 kMaxDashboardDataSize = USER_STATUS_DATA_SIZE - sizeof(UINT32) * 3 - sizeof(UINT8); // 13 bytes needed for 3 size parameters and the sequence number |
| |
| // Usage Guidelines... |
| DISALLOW_COPY_AND_ASSIGN(Dashboard); |
| |
| bool ValidateAdd(INT32 size); |
| void AddedElement(Type type); |
| bool IsArrayRoot(); |
| |
| char *m_userStatusData; |
| INT32 m_userStatusDataSize; |
| char *m_localBuffer; |
| char *m_localPrintBuffer; |
| char *m_packPtr; |
| std::vector<Type> m_expectedArrayElementType; |
| std::vector<INT32> m_arrayElementCount; |
| std::vector<INT32*> m_arraySizePtr; |
| std::stack<ComplexType> m_complexTypeStack; |
| SEM_ID m_printSemaphore; |
| SEM_ID m_statusDataSemaphore; |
| }; |
| |
| #endif |
| |