地面站终端 App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

313 lines
12 KiB

/*****************************************************************************
* Copyright (c) 2008, University of Florida
* All rights reserved.
*
* This file is part of OpenJAUS. OpenJAUS is distributed under the BSD
* license. See the LICENSE file for details.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* * Neither the name of the University of Florida nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
****************************************************************************/
// File Name: jausMessage.h
//
// Written By: Danny Kent (jaus AT dannykent DOT com), Tom Galluzzo (galluzzo AT gmail DOT com)
//
// Version: 3.3.0a
//
// Date: 08/07/08
//
// Description: This file defines all the attributes of a JausMessage and all pre-defined command codes according to RA 3.2
#ifndef JAUS_MESSAGE_H
#define JAUS_MESSAGE_H
#include "jaus.h"
#define JAUS_HEADER_SIZE_BYTES 16
#define JAUS_LOW_PRIORITY 0
#define JAUS_DEFAULT_PRIORITY 6
#define JAUS_HIGH_PRIORITY 11
#define JAUS_ACK_NAK_NOT_REQUIRED 0
#define JAUS_ACK_NAK_REQUIRED 1
#define JAUS_NEGATIVE_ACKNOWLEDGE 2
#define JAUS_ACKNOWLEDGE 3
#define JAUS_ACK JAUS_ACKNOWLEDGE
#define JAUS_NAK JAUS_NEGATIVE_ACKNOWLEDGE
#define JAUS_SERVICE_CONNECTION_MESSAGE 1
#define JAUS_NOT_SERVICE_CONNECTION_MESSAGE 0
#define JAUS_EXPERIMENTAL_MESSAGE 1
#define JAUS_NOT_EXPERIMENTAL_MESSAGE 0
#define JAUS_VERSION_2_0 0
#define JAUS_VERSION_2_1 0
#define JAUS_VERSION_3_0 1
#define JAUS_VERSION_3_1 1
#define JAUS_VERSION_3_2 2
#define JAUS_VERSION_3_3 2 // Not a bug, 2 is defined as 3.2 and 3.3
#define JAUS_MAX_DATA_SIZE_BYTES 4080
#define JAUS_SINGLE_DATA_PACKET 0
#define JAUS_FIRST_DATA_PACKET 1
#define JAUS_NORMAL_DATA_PACKET 2
#define JAUS_RETRANSMITTED_DATA_PACKET 4
#define JAUS_LAST_DATA_PACKET 8
#define JAUS_MAX_SEQUENCE_NUMBER 65535
// Jaus Command Class Messages
#define JAUS_SET_COMPONENT_AUTHORITY 0x0001
#define JAUS_SHUTDOWN 0x0002
#define JAUS_STANDBY 0x0003
#define JAUS_RESUME 0x0004
#define JAUS_RESET 0x0005
#define JAUS_SET_EMERGENCY 0x0006
#define JAUS_CLEAR_EMERGENCY 0x0007
#define JAUS_CREATE_SERVICE_CONNECTION 0x0008
#define JAUS_CONFIRM_SERVICE_CONNECTION 0x0009
#define JAUS_ACTIVATE_SERVICE_CONNECTION 0x000A
#define JAUS_SUSPEND_SERVICE_CONNECTION 0x000B
#define JAUS_TERMINATE_SERVICE_CONNECTION 0x000C
#define JAUS_REQUEST_COMPONENT_CONTROL 0x000D
#define JAUS_RELEASE_COMPONENT_CONTROL 0x000E
#define JAUS_CONFIRM_COMPONENT_CONTROL 0x000F
#define JAUS_REJECT_COMPONENT_CONTROL 0x0010
#define JAUS_SET_TIME 0x0011
#define JAUS_CREATE_EVENT 0x01F0
#define JAUS_UPDATE_EVENT 0x01F1
#define JAUS_CANCEL_EVENT 0x01F2
#define JAUS_CONFIRM_EVENT_REQUEST 0x01F3
#define JAUS_REJECT_EVENT_REQUEST 0x01F4
#define JAUS_SET_DATA_LINK_STATUS 0x0200
#define JAUS_SET_DATA_LINK_SELECT 0x0201
#define JAUS_SET_SELECTED_DATA_LINK_STATE 0x0202
#define JAUS_SET_WRENCH_EFFORT 0x0405
#define JAUS_SET_DISCRETE_DEVICES 0x0406
#define JAUS_SET_GLOBAL_VECTOR 0x0407
#define JAUS_SET_LOCAL_VECTOR 0x0408
#define JAUS_SET_TRAVEL_SPEED 0x040A
#define JAUS_SET_GLOBAL_WAYPOINT 0x040C
#define JAUS_SET_LOCAL_WAYPOINT 0x040D
#define JAUS_SET_GLOBAL_PATH_SEGMENT 0x040F
#define JAUS_SET_LOCAL_PATH_SEGMENT 0x0410
#define JAUS_SET_JOINT_EFFORTS 0x0601
#define JAUS_SET_JOINT_POSITIONS 0x0602
#define JAUS_SET_JOINT_VELOCITIES 0x0603
#define JAUS_SET_TOOL_POINT 0x0604
#define JAUS_SET_END_EFFECTOR_POSE 0x0605
#define JAUS_SET_END_EFFECTOR_VELOCITY_STATE 0x0606
#define JAUS_SET_JOINT_MOTION 0x0607
#define JAUS_SET_END_EFFECTOR_PATH_MOTION 0x0608
#define JAUS_SET_CAMERA_POSE 0x0801
#define JAUS_SELECT_CAMERA 0x0802
#define JAUS_SET_CAMERA_CAPABILITIES 0x0805
#define JAUS_SET_CAMERA_FORMAT_OPTIONS 0x0806
#define JAUS_CREATE_VKS_OBJECTS 0x0A20
#define JAUS_DELETE_VKS_OBJECTS 0x0A25
#define JAUS_SET_VKS_FEATURE_CLASS_METADATA 0x0A21
#define JAUS_TERMINATE_VKS_DATA_TRANSFER 0x0A24
#define JAUS_SET_PAYLOAD_DATA_ELEMENT 0x0D01
#define JAUS_SPOOL_MISSION 0x0E00
#define JAUS_RUN_MISSION 0x0E01
#define JAUS_ABORT_MISSION 0x0E02
#define JAUS_PAUSE_MISSION 0x0E03
#define JAUS_RESUME_MISSION 0x0E04
#define JAUS_REMOVE_MESSAGES 0x0E05
#define JAUS_REPLACE_MESSAGES 0x0E06
// Jaus Query Class Messages
#define JAUS_QUERY_COMPONENT_AUTHORITY 0x2001
#define JAUS_QUERY_COMPONENT_STATUS 0x2002
#define JAUS_QUERY_TIME 0x2011
#define JAUS_QUERY_COMPONENT_CONTROL 0x200D
#define JAUS_QUERY_EVENTS 0x21F0
#define JAUS_QUERY_DATA_LINK_STATUS 0x2200
#define JAUS_QUERY_SELECTED_DATA_LINK_STATUS 0x2201
#define JAUS_QUERY_HEARTBEAT_PULSE 0x2202
#define JAUS_QUERY_PLATFORM_SPECIFICATIONS 0x2400
#define JAUS_QUERY_PLATFORM_OPERATIONAL_DATA 0x2401
#define JAUS_QUERY_GLOBAL_POSE 0x2402
#define JAUS_QUERY_LOCAL_POSE 0x2403
#define JAUS_QUERY_VELOCITY_STATE 0x2404
#define JAUS_QUERY_WRENCH_EFFORT 0x2405
#define JAUS_QUERY_DISCRETE_DEVICES 0x2406
#define JAUS_QUERY_GLOBAL_VECTOR 0x2407
#define JAUS_QUERY_LOCAL_VECTOR 0x2408
#define JAUS_QUERY_TRAVEL_SPEED 0x240A
#define JAUS_QUERY_WAYPOINT_COUNT 0x240B
#define JAUS_QUERY_GLOBAL_WAYPOINT 0x240C
#define JAUS_QUERY_LOCAL_WAYPOINT 0x240D
#define JAUS_QUERY_PATH_SEGMENT_COUNT 0x240E
#define JAUS_QUERY_GLOBAL_PATH_SEGMENT 0x240F
#define JAUS_QUERY_LOCAL_PATH_SEGMENT 0x2410
#define JAUS_QUERY_MANIPULATOR_SPECIFICATIONS 0x2600
#define JAUS_QUERY_JOINT_EFFORTS 0x2601
#define JAUS_QUERY_JOINT_POSITIONS 0x2602
#define JAUS_QUERY_JOINT_VELOCITIES 0x2603
#define JAUS_QUERY_TOOL_POINT 0x2604
#define JAUS_QUERY_JOINT_FORCE_TORQUES 0x2605
#define JAUS_QUERY_CAMERA_POSE 0x2800
#define JAUS_QUERY_CAMERA_COUNT 0x2801
#define JAUS_QUERY_RELATIVE_OBJECT_POSITION 0x2802
#define JAUS_QUERY_SELECTED_CAMERA 0x2804
#define JAUS_QUERY_CAMERA_CAPABILITIES 0x2805
#define JAUS_QUERY_CAMERA_FORMAT_OPTIONS 0x2806
#define JAUS_QUERY_IMAGE 0x2807
#define JAUS_QUERY_VKS_FEATURE_CLASS_METADATA 0x2A21
#define JAUS_QUERY_VKS_BOUNDS 0x2A22
#define JAUS_QUERY_VKS_OBJECTS 0x2A23
#define JAUS_QUERY_IDENTIFICATION 0x2B00
#define JAUS_QUERY_CONFIGURATION 0x2B01
#define JAUS_QUERY_SUBSYSTEM_LIST 0x2B02
#define JAUS_QUERY_SERVICES 0x2B03
#define JAUS_QUERY_PAYLOAD_INTERFACE 0x2D00
#define JAUS_QUERY_PAYLOAD_DATA_ELEMENT 0x2D01
#define JAUS_QUERY_SPOOLING_PREFERENCE 0x2E00
#define JAUS_QUERY_MISSION_STATUS 0x2E01
// Jaus Inform Class Messages
#define JAUS_REPORT_COMPONENT_AUTHORITY 0x4001
#define JAUS_REPORT_COMPONENT_STATUS 0x4002
#define JAUS_REPORT_TIME 0x4011
#define JAUS_REPORT_COMPONENT_CONTROL 0x400D
#define JAUS_REPORT_EVENTS 0x41F0
#define JAUS_EVENT 0x41F1
#define JAUS_REPORT_DATA_LINK_STATUS 0x4200
#define JAUS_REPORT_SELECTED_DATA_LINK_STATUS 0x4201
#define JAUS_REPORT_HEARTBEAT_PULSE 0x4202
#define JAUS_REPORT_PLATFORM_SPECIFICATIONS 0x4400
#define JAUS_REPORT_PLATFORM_OPERATIONAL_DATA 0x4401
#define JAUS_REPORT_GLOBAL_POSE 0x4402
#define JAUS_REPORT_LOCAL_POSE 0x4403
#define JAUS_REPORT_VELOCITY_STATE 0x4404
#define JAUS_REPORT_WRENCH_EFFORT 0x4405
#define JAUS_REPORT_DISCRETE_DEVICES 0x4406
#define JAUS_REPORT_GLOBAL_VECTOR 0x4407
#define JAUS_REPORT_LOCAL_VECTOR 0x4408
#define JAUS_REPORT_TRAVEL_SPEED 0x440A
#define JAUS_REPORT_WAYPOINT_COUNT 0x440B
#define JAUS_REPORT_GLOBAL_WAYPOINT 0x440C
#define JAUS_REPORT_LOCAL_WAYPOINT 0x440D
#define JAUS_REPORT_PATH_SEGMENT_COUNT 0x440E
#define JAUS_REPORT_GLOBAL_PATH_SEGMENT 0x440F
#define JAUS_REPORT_LOCAL_PATH_SEGMENT 0x4410
#define JAUS_REPORT_MANIPULATOR_SPECIFICATIONS 0x4600
#define JAUS_REPORT_JOINT_EFFORTS 0x4601
#define JAUS_REPORT_JOINT_POSITIONS 0x4602
#define JAUS_REPORT_JOINT_VELOCITIES 0x4603
#define JAUS_REPORT_TOOL_POINT 0x4604
#define JAUS_REPORT_JOINT_FORCE_TORQUES 0x4605
#define JAUS_REPORT_CAMERA_POSE 0x4800
#define JAUS_REPORT_CAMERA_COUNT 0x4801
#define JAUS_REPORT_RELATIVE_OBJECT_POSITION 0x4802
#define JAUS_REPORT_SELECTED_CAMERA 0x4804
#define JAUS_REPORT_CAMERA_CAPABILITIES 0x4805
#define JAUS_REPORT_CAMERA_FORMAT_OPTIONS 0x4806
#define JAUS_REPORT_IMAGE 0x4807
#define JAUS_REPORT_VKS_OBJECTS_CREATION 0x4A20
#define JAUS_REPORT_VKS_FEATURE_CLASS_METADATA 0x4A21
#define JAUS_REPORT_VKS_BOUNDS 0x4A22
#define JAUS_REPORT_VKS_OBJECTS 0x4A23
#define JAUS_REPORT_VKS_DATA_TRANSFER_TERMINATION 0x4A24
#define JAUS_REPORT_IDENTIFICATION 0x4B00
#define JAUS_REPORT_CONFIGURATION 0x4B01
#define JAUS_REPORT_SUBSYSTEM_LIST 0x4B02
#define JAUS_REPORT_SERVICES 0x4B03
#define JAUS_REPORT_PAYLOAD_INTERFACE 0x4D00
#define JAUS_REPORT_PAYLOAD_DATA_ELEMENT 0x4D01
#define JAUS_REPORT_SPOOLING_PREFERENCE 0x4E00
#define JAUS_REPORT_MISSION_STATUS 0x4E01
// Experimental Messages
#define JAUS_SET_VELOCITY_STATE 0x0404
// Define JausMessage data structure
struct JausMessageStruct
{
// Header Properties
struct
{
// Properties by bit fields
#ifdef JAUS_BIG_ENDIAN
JausUnsignedShort reserved:2;
JausUnsignedShort version:6;
JausUnsignedShort expFlag:1;
JausUnsignedShort scFlag:1;
JausUnsignedShort ackNak:2;
JausUnsignedShort priority:4;
#elif JAUS_LITTLE_ENDIAN
JausUnsignedShort priority:4;
JausUnsignedShort ackNak:2;
JausUnsignedShort scFlag:1;
JausUnsignedShort expFlag:1;
JausUnsignedShort version:6;
JausUnsignedShort reserved:2;
#else
#error "Please define system endianess (see jaus.h)"
#endif
}properties;
JausUnsignedShort commandCode;
JausAddress destination;
JausAddress source;
JausUnsignedInteger dataSize;
JausUnsignedInteger dataFlag;
JausUnsignedShort sequenceNumber;
// Message Data Buffer
JausByte *data;
struct JausMessageStruct *next;
};
typedef struct JausMessageStruct *JausMessage;
JAUS_EXPORT JausMessage jausMessageCreate(void);
JAUS_EXPORT void jausMessageDestroy(JausMessage);
JAUS_EXPORT unsigned int jausMessageSize(JausMessage);
JAUS_EXPORT JausBoolean jausMessageToBuffer(JausMessage message, unsigned char *buffer, unsigned int bufferSizeBytes);
JAUS_EXPORT JausBoolean jausMessageFromBuffer(JausMessage message, unsigned char *buffer, unsigned int bufferSizeBytes);
JAUS_EXPORT char *jausMessageCommandCodeString(JausMessage);
JAUS_EXPORT char *jausCommandCodeString(unsigned short commandCode);
JAUS_EXPORT JausMessage jausMessageClone(JausMessage);
JAUS_EXPORT JausBoolean jausMessageIsRejectableCommand(JausMessage message);
JAUS_EXPORT unsigned short jausMessageGetComplimentaryCommandCode(unsigned short commandCode);
#endif // JAUS_MESSAGE_H