Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New referee system #48

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/app/src/debug_task.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ extern Daemon_Instance_t *g_remote_daemon;
#ifdef PRINT_RUNTIME_STATS
char g_debug_buffer[1024*2] = {0};
#endif
//#define DEBUG_ENABLED

const char* top_border = "\r\n\r\n\r\n/***** System Info *****/\r\n";
const char* bottom_border = "/***** End of Info *****/\r\n";
Expand Down
2 changes: 1 addition & 1 deletion src/app/src/robot.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ void Robot_Init()
Remote_Init(&huart3);
CAN_Service_Init();
Referee_System_Init(&huart1);
Jetson_Orin_Init(&huart6);
//Jetson_Orin_Init(&huart6);
ui_init_indicator_0();
ui_init_indicator_1();
// Initialize all tasks
Expand Down
86 changes: 11 additions & 75 deletions src/devices/inc/referee_system.h
Original file line number Diff line number Diff line change
Expand Up @@ -88,20 +88,24 @@
#define V3_HERO_COOLING_INCREMENT 8
#define V3_HERO_LV10_COOLING_MAX 120

#define REFEREE_BUFFER_LEN 787u //Buffer length to receive all data

#define REFEREE_BUFFER_LEN 273u //Buffer length to receive all data
#define REFEREE_FRAME_HEADER_START 0xA5 //Frame header
#define REFEREE_FRAME_HEADER_LEN 5 //Frame header length
#define REFEREE_ID_LEN 2 //ID length
#define REFEREE_FRAME_TAIL_LEN 2 //Frame tail length
#define REFEREE_FRAME_HEADER_LEN 5 //Frame header length
#define REFEREE_ID_LEN 2 //ID length
#define REFEREE_FRAME_TAIL_LEN 2 //Frame tail length


#define REFEREE_OFFSET_SOF 0 //SOF offset
#define REFEREE_OFFSET_DATA_LENGTH 1 //Data length offset
#define REFEREE_OFFSET_SEQ 3 //SEQ offset
#define REFEREE_OFFSET_CRC8 4 //CRC offset

#define REFEREE_GAME_STATUS 0x0001 //Competition status data, transmitted at a fixed frequency of 1 Hz.
#define REFEREE_GAME_RESULT 0x0002 //Competition result data, transmitted upon completion of the competition.
#define REFEREE_ROBOT_HP 0x0003 //Robot health data, transmitted at a fixed frequency of 3 Hz.

#define REFEREE_GAME_STATUS 0x0001 //Competition status data, transmitted at a fixed frequency of 1 Hz.
#define REFEREE_GAME_RESULT 0x0002 //Competition result data, transmitted upon completion of the competition.
#define REFEREE_ROBOT_HP 0x0003 //Robot health data, transmitted at a fixed frequency of 3 Hz.

#define REFEREE_EVENT_DATA 0x0101 //Site event data, transmitted at a fixed frequency of 1 Hz
#define REFEREE_SUPPLY_STATION 0x0102 //Action identifier data of the Official Projectile Supplier, transmitted when the Official Projectile Supplier releases projectiles.
#define REFEREE_REFEREE_WARNING 0x0104 //Referee warning data, transmitted when one's team is issued a penalty/forfeiture and at a fixed frequency of 1 Hz in other cases.
Expand All @@ -115,19 +119,6 @@
#define REFEREE_SHOOTER_STATE 0x0207 //Real-time launching data, transmitted after a projectile is launched.
#define REFEREE_REMAINING_AMMO 0x0208 //Projectile allowance, transmitted at a fixed frequency of 10 Hz.
#define REFEREE_ROBOT_RFID 0x0209 //Robot RFID module status, transmitted at a fixed frequency of 3 Hz.
#define REFEREE_DART_CLIENT 0x020A //Dart player's client command data, transmitted at a fixed frequency of 3 Hz.
#define REFEREE_GROUND_POS 0x020B //Ground Robot position data, transmitted at a fixed frequency of 1 Hz.
#define REFEREE_RADAR_PROGRESS 0x020C //Radar-marked progress data, transmitted at a fixed frequency of 1 Hz.
#define REFEREE_SENTRY_DECISION 0x020D //Decision-making data of Sentry Robot, transmitted at a fixed frequency of 1 Hz.
#define REFEREE_RADAR_DECISION 0x020E //Decision-making data of Radar, transmitted at a fixed frequency of 1 Hz.
#define REFEREE_ROBOT_COMMUNICATE 0x0301 //Robot interaction data, transmitted at a maximum frequency of 10 Hz when triggered by the sender.
#define REFEREE_USER_DEFINED 0x0302 //Data about the interaction between the Custom Controller and robots, transmitted at a maximum frequency of 30 Hz when triggered by the sender.
#define REFEREE_SMALL_MAP_INTERACT 0x0303 //Player client's small map interaction data, transmitted when triggered by the player client.
#define REFEREE_KEYBOARD_REMOTE 0x0304 //Keyboard, mouse, and remote control data, transmitted at a fixed frequency of 30 Hz.
#define REFEREE_SMALL_MAP_RADAR 0x0305 //Radar data received by player clients' Small Maps, transmitted at a maximum frequency of 10 Hz.
#define REFEREE_CUSTOM_CONTROLLER 0x0306 //Data about the interaction between the Custom Controller and player clients, transmitted at a maximum frequency of 30 Hz when triggered by the sender.
#define REFEREE_SENTRY_DATA 0x0307 //Sentry data received by player clients' Small Maps, transmitted at a maximum frequency of 1 Hz.
#define REFEREE_CUSTOM_DATA 0x0308 //Robot data received by player clients' Small Map, transmitted at a maximum frequency of 3 Hz.

/*Calculation: REFEREE_FRAME_HEADER_LEN(5-byte) + REFEREE_ID_LEN(2-byte) + DATA(n-byte) + REFEREE_FRAME_TAIL_LEN(2-byte,CRC16)*/
#define REFEREE_GAME_STATUS_LEN 20
Expand All @@ -146,19 +137,6 @@
#define REFEREE_SHOOTER_STATE_LEN 16
#define REFEREE_REMAINING_AMMO_LEN 15
#define REFEREE_ROBOT_RFID_LEN 13
#define REFEREE_DART_CLIENT_LEN 15
#define REFEREE_GROUND_POS_LEN 49
#define REFEREE_RADAR_PROGRESS_LEN 15
#define REFEREE_SENTRY_DECISION_LEN 13
#define REFEREE_RADAR_DECISION_LEN 10
//#define REFEREE_ROBOT_COMMUNICATE_LEN 137
#define REFEREE_USER_DEFINED_LEN 39
//#define REFEREE_SMALL_MAP_INTERACT_LEN 24
//#define REFEREE_KEYBOARD_REMOTE_LEN 21
//#define REFEREE_SMALL_MAP_RADAR_LEN 19
//#define REFEREE_CUSTOM_CONTROLLER_LEN 17
//#define REFEREE_SENTRY_DATA_LEN 112
//#define REFEREE_CUSTOM_DATA_LEN 43

typedef struct
{
Expand Down Expand Up @@ -320,48 +298,6 @@ typedef struct
uint32_t State;
}RFID;

struct __attribute__ ((__packed__))
{
uint8_t Dart_Launch_Opening_Status;
uint8_t Reserved;
uint16_t Target_Change_Time;
uint16_t Latest_Launch_Cmd_Time;
}Dart_Client;

struct __attribute__ ((__packed__))
{
float hero_x;
float hero_y;
float engineer_x;
float engineer_y;
float standard_3_x;
float standard_3_y;
float standard_4_x;
float standard_4_y;
float standard_5_x;
float standard_5_y;
}Ground_Pos;

struct __attribute__ ((__packed__))
{
uint8_t Mark_Hero_Progress;
uint8_t Mark_Engineer_Progress;
uint8_t Mark_Standard_3_Progress;
uint8_t Mark_Standard_4_Progress;
uint8_t Mark_Standard_5_Progress;
uint8_t Mark_Sentry_Progress;
}Radar_Progress;

struct __attribute__ ((__packed__))
{
uint32_t Sentry_Info;
}Sentry_Decision;

struct __attribute__ ((__packed__))
{
uint8_t Radar_Info;
}Radar_Decision;

uint16_t Info_Update_Frame;
uint8_t Offline_Flag;
} Referee_System_t;
Expand Down
2 changes: 1 addition & 1 deletion src/devices/src/jetson_orin.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,5 +104,5 @@ void Jetson_Orin_Send_Data(void)
g_orin_data.tx_buffer[1] = g_orin_data.sending.enemy_color_flag << 1 | g_orin_data.sending.game_start_flag;
memcpy(&g_orin_data.tx_buffer[2],&g_orin_data.sending.float_byte.data_bytes[0], 32*sizeof(uint8_t));

UART_Transmit(g_orin_uart_instance_ptr, g_orin_data.tx_buffer, sizeof(g_orin_data.tx_buffer), UART_DMA);
//UART_Transmit(g_orin_uart_instance_ptr, g_orin_data.tx_buffer, sizeof(g_orin_data.tx_buffer), UART_DMA);
}
4 changes: 3 additions & 1 deletion src/ui/inc/ui_interface.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@
#include <stdio.h>
#include "ui_types.h"
#include "bsp_crc.h"
#include "usart.h"
#include "bsp_serial.h"

extern int ui_self_id;

void print_message(const uint8_t* message, int length);

#define SEND_MESSAGE(message, length) print_message(message, length)
#define SEND_MESSAGE(message, length) HAL_UART_Transmit(&huart1,message,length,500) //print_message(message, length)

void ui_proc_1_frame(ui_1_frame_t *msg);
void ui_proc_2_frame(ui_2_frame_t *msg);
Expand Down
85 changes: 83 additions & 2 deletions src/ui/src/ui_interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,96 @@
#include <string.h>

uint8_t seq = 0;
int ui_self_id = 1;
int ui_self_id = 105;

void print_message(const uint8_t *message, const int length) {
for (int i = 0; i < length; i++) {
printf("%02x ", message[i]);
DEBUG_PRINTF(&huart6, "%02x", message[i]);
}
printf("\n\n");
}


const unsigned char CRC8_TAB1[256] = {
0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83, 0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,
0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e, 0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc, 0x23,
0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0, 0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62, 0xbe, 0xe0,
0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d, 0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff, 0x46, 0x18, 0xfa,
0xa4, 0x27, 0x79, 0x9b, 0xc5, 0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07, 0xdb, 0x85, 0x67,
0x39, 0xba, 0xe4, 0x06, 0x58, 0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a, 0x65, 0x3b, 0xd9, 0x87,
0x04, 0x5a, 0xb8, 0xe6, 0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24, 0xf8, 0xa6, 0x44, 0x1a, 0x99,
0xc7, 0x25, 0x7b, 0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,
0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f, 0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd, 0x11,
0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92, 0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50, 0xaf, 0xf1,
0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c, 0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee, 0x32, 0x6c, 0x8e,
0xd0, 0x53, 0x0d, 0xef, 0xb1, 0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73, 0xca, 0x94, 0x76, 0x28,
0xab, 0xf5, 0x17, 0x49, 0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b, 0x57, 0x09, 0xeb, 0xb5,
0x36, 0x68, 0x8a, 0xd4, 0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16, 0xe9, 0xb7, 0x55, 0x0b, 0x88,
0xd6, 0x34, 0x6a, 0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,
0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7, 0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35,
};

unsigned char calc_crc8(unsigned char *pchMessage, unsigned int dwLength) {
unsigned char ucCRC8 = 0xff;
unsigned char ucIndex;
while (dwLength--) {
ucIndex = ucCRC8 ^ (*pchMessage++);
ucCRC8 = CRC8_TAB1[ucIndex];
}
return (ucCRC8);
}

const uint16_t wCRC_Table1[256] = {
0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
};

uint16_t calc_crc16(uint8_t *pchMessage, uint32_t dwLength)
{
uint16_t wCRC = 0xffff;
uint8_t chData;
if (pchMessage == NULL)
{
return 0xFFFF;
}
while(dwLength--)
{
chData = *pchMessage++;
(wCRC) = ((uint16_t)(wCRC) >> 8) ^ wCRC_Table1[((uint16_t)(wCRC) ^ (uint16_t)(chData)) & 0x00ff];
}
return wCRC;
}

#define DEFINE_FRAME_PROC(num, id) \
void ui_proc_ ## num##_frame(ui_ ## num##_frame_t *msg) { \
msg->header.SOF = 0xA5; \
Expand Down
Loading