blob: 98619dea17eb393a6c669e07c87d8d4d7a0f1e2c [file] [log] [blame]
/*************************************************************
* NOTICE
*
* These are the only externally exposed functions to the
* NetworkCommunication library
*
* This is an implementation of FRC Spec for Comm Protocol
* Revision 4.5, June 30, 2008
*
* Copyright (c) National Instruments 2008. All Rights Reserved.
*
*************************************************************/
#ifndef __FRC_COMM_H__
#define __FRC_COMM_H__
#include <stdint.h>
typedef uint64_t UINT64;
typedef uint32_t UINT32;
typedef uint16_t UINT16;
typedef uint8_t UINT8;
typedef int8_t INT8;
struct FRCCommonControlData{
UINT16 packetIndex;
union {
UINT8 control;
// The order of the bits has to be flipped on little-endian machines (aka
// everything other than the cRIO that we build for) in order for it to
// work. Upstream WPILib does this based off of a different macro.
#ifndef __VXWORKS__
struct {
UINT8 checkVersions :1;
UINT8 test :1;
UINT8 resync : 1;
UINT8 fmsAttached:1;
UINT8 autonomous : 1;
UINT8 enabled : 1;
UINT8 notEStop : 1;
UINT8 reset : 1;
};
#else
struct {
UINT8 reset : 1;
UINT8 notEStop : 1;
UINT8 enabled : 1;
UINT8 autonomous : 1;
UINT8 fmsAttached:1;
UINT8 resync : 1;
UINT8 test :1;
UINT8 checkVersions :1;
};
#endif
};
UINT8 dsDigitalIn;
UINT16 teamID;
char dsID_Alliance;
char dsID_Position;
union {
INT8 stick0Axes[6];
struct {
INT8 stick0Axis1;
INT8 stick0Axis2;
INT8 stick0Axis3;
INT8 stick0Axis4;
INT8 stick0Axis5;
INT8 stick0Axis6;
};
};
UINT16 stick0Buttons; // Left-most 4 bits are unused
union {
INT8 stick1Axes[6];
struct {
INT8 stick1Axis1;
INT8 stick1Axis2;
INT8 stick1Axis3;
INT8 stick1Axis4;
INT8 stick1Axis5;
INT8 stick1Axis6;
};
};
UINT16 stick1Buttons; // Left-most 4 bits are unused
union {
INT8 stick2Axes[6];
struct {
INT8 stick2Axis1;
INT8 stick2Axis2;
INT8 stick2Axis3;
INT8 stick2Axis4;
INT8 stick2Axis5;
INT8 stick2Axis6;
};
};
UINT16 stick2Buttons; // Left-most 4 bits are unused
union {
INT8 stick3Axes[6];
struct {
INT8 stick3Axis1;
INT8 stick3Axis2;
INT8 stick3Axis3;
INT8 stick3Axis4;
INT8 stick3Axis5;
INT8 stick3Axis6;
};
};
UINT16 stick3Buttons; // Left-most 4 bits are unused
//Analog inputs are 10 bit right-justified
UINT16 analog1;
UINT16 analog2;
UINT16 analog3;
UINT16 analog4;
UINT64 cRIOChecksum;
UINT32 FPGAChecksum0;
UINT32 FPGAChecksum1;
UINT32 FPGAChecksum2;
UINT32 FPGAChecksum3;
char versionData[8];
} __attribute__((packed));
#endif