Skip to content

Commit 1171726

Browse files
Merge pull request #168 from PolySync/maint/reorganize-software-stack
Reorganize software stack
2 parents 13b1af5 + 8c993d7 commit 1171726

360 files changed

Lines changed: 6756 additions & 10869 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Jenkinsfile

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,16 @@ node('arduino') {
1111
}
1212
stage('Build') {
1313
parallel 'kia soul firmware': {
14-
sh 'cd platforms && mkdir build && cd build && cmake .. -DBUILD_KIA_SOUL=ON -DCMAKE_BUILD_TYPE=Release && make'
15-
}, 'joystick commander': {
16-
sh 'cd utils/joystick_commander && mkdir build && cd build && cmake .. && make'
17-
}, 'diagnostics tool': {
18-
sh 'cd utils/diagnostics_tool && mkdir build && cd build && cmake .. && make'
14+
sh 'cd firmware && mkdir build && cd build && cmake .. -DKIA_SOUL=ON -DCMAKE_BUILD_TYPE=Release && make'
1915
}
2016
echo 'Build Complete!'
2117
}
2218
stage('Test') {
2319
parallel 'unit tests': {
24-
sh 'cd platforms && mkdir build_unit_tests && cd build_unit_tests && cmake .. -DTESTS=ON -DCMAKE_BUILD_TYPE=Release && make run-unit-tests'
20+
sh 'cd firmware && mkdir build_unit_tests && cd build_unit_tests && cmake .. -DKIA_SOUL=ON -DTESTS=ON -DCMAKE_BUILD_TYPE=Release && make run-unit-tests'
2521
echo 'Unit Tests Complete!'
2622
}, 'property-based tests': {
27-
sh 'cd platforms && mkdir build_property_tests && cd build_property_tests && cmake .. -DTESTS=ON -DCMAKE_BUILD_TYPE=Release && make run-property-tests'
23+
sh 'cd firmware && mkdir build_property_tests && cd build_property_tests && cmake .. -DKIA_SOUL=ON -DTESTS=ON -DCMAKE_BUILD_TYPE=Release && make run-property-tests'
2824
echo 'Property-Based Tests Complete!'
2925
}, 'acceptance tests': {
3026
echo 'Acceptance Tests Complete!'

README.md

Lines changed: 116 additions & 136 deletions
Large diffs are not rendered by default.
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/**
2+
* @file brake_can_protocol.h
3+
* @brief Brake CAN Protocol.
4+
*
5+
*/
6+
7+
8+
#ifndef _OSCC_BRAKE_CAN_PROTOCOL_H_
9+
#define _OSCC_BRAKE_CAN_PROTOCOL_H_
10+
11+
12+
#include <stdint.h>
13+
#include "magic.h"
14+
15+
16+
/*
17+
* @brief Brake command message (CAN frame) ID.
18+
*
19+
*/
20+
#define OSCC_BRAKE_COMMAND_CAN_ID (0x60)
21+
22+
/*
23+
* @brief Brake report message (CAN frame) ID.
24+
*
25+
*/
26+
#define OSCC_BRAKE_REPORT_CAN_ID (0x61)
27+
28+
/*
29+
* @brief Brake report message (CAN frame) length.
30+
*
31+
*/
32+
#define OSCC_BRAKE_REPORT_CAN_DLC (8)
33+
34+
/*
35+
* @brief Brake report message publishing frequency. [Hz]
36+
*
37+
*/
38+
#define OSCC_BRAKE_REPORT_PUBLISH_FREQ_IN_HZ (50)
39+
40+
/*
41+
* @brief Brake DTC bitfield position indicating an invalid sensor value.
42+
*
43+
*/
44+
#define OSCC_BRAKE_DTC_INVALID_SENSOR_VAL (0x0)
45+
46+
47+
#pragma pack(push)
48+
#pragma pack(1)
49+
50+
/**
51+
* @brief Brake command message data.
52+
*
53+
* CAN frame ID: \ref OSCC_BRAKE_COMMAND_CAN_ID
54+
*
55+
*/
56+
typedef struct
57+
{
58+
uint8_t magic[2]; /* Magic number identifying CAN frame as from OSCC.
59+
Byte 0 should be \ref OSCC_MAGIC_BYTE_0.
60+
Byte 1 should be \ref OSCC_MAGIC_BYTE_1. */
61+
62+
uint16_t pedal_command; /*!< Pedal command. [65535 == 100%] */
63+
64+
uint8_t enable; /*!< Command to enable or disable steering control.
65+
* Zero value means disable.
66+
* Non-zero value means enable. */
67+
68+
uint8_t reserved[3]; /*!< Reserved. */
69+
} oscc_brake_command_s;
70+
71+
72+
/**
73+
* @brief Brake report message data.
74+
*
75+
* CAN frame ID: \ref OSCC_BRAKE_REPORT_CAN_ID
76+
*
77+
*/
78+
typedef struct
79+
{
80+
uint8_t magic[2]; /* Magic number identifying CAN frame as from OSCC.
81+
Byte 0 should be \ref OSCC_MAGIC_BYTE_0.
82+
Byte 1 should be \ref OSCC_MAGIC_BYTE_1. */
83+
84+
uint8_t enabled; /*!< Braking controls enabled state.
85+
* Zero value means disabled (commands are ignored).
86+
* Non-zero value means enabled (no timeouts or overrides have occured). */
87+
88+
uint8_t operator_override; /*!< Driver override state.
89+
* Zero value means there has been no operator override.
90+
* Non-zero value means an operator has physically overridden
91+
* the system. */
92+
93+
uint8_t dtcs; /* Bitfield of DTCs present in the module. */
94+
95+
uint8_t reserved[3]; /*!< Reserved. */
96+
} oscc_brake_report_s;
97+
98+
#pragma pack(pop)
99+
100+
#endif /* _OSCC_BRAKE_CAN_PROTOCOL_H_ */
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* @file fault_can_protocol.h
3+
* @brief Fault CAN Protocol.
4+
*
5+
*/
6+
7+
8+
#ifndef _OSCC_FAULT_CAN_PROTOCOL_H_
9+
#define _OSCC_FAULT_CAN_PROTOCOL_H_
10+
11+
12+
#include <stdint.h>
13+
#include "magic.h"
14+
15+
/*
16+
* @brief Fault report message (CAN frame) ID.
17+
*
18+
*/
19+
#define OSCC_FAULT_REPORT_CAN_ID (0x99)
20+
21+
/*
22+
* @brief Fault report message (CAN frame) length.
23+
*
24+
*/
25+
#define OSCC_FAULT_REPORT_CAN_DLC (8)
26+
27+
28+
typedef enum
29+
{
30+
FAULT_ORIGIN_BRAKE,
31+
FAULT_ORIGIN_STEERING,
32+
FAULT_ORIGIN_THROTTLE
33+
} fault_origin_id_t;
34+
35+
36+
#pragma pack(push)
37+
#pragma pack(1)
38+
39+
/**
40+
* @brief Fault report message data.
41+
*
42+
* Message size (CAN frame DLC): \ref OSCC_FAULT_REPORT_CAN_DLC
43+
*
44+
*/
45+
typedef struct
46+
{
47+
uint8_t magic[2]; /* Magic number identifying CAN frame as from OSCC.
48+
Byte 0 should be \ref OSCC_MAGIC_BYTE_0.
49+
Byte 1 should be \ref OSCC_MAGIC_BYTE_1. */
50+
51+
uint32_t fault_origin_id; /* ID of the module that is sending out the fault. */
52+
53+
uint8_t reserved[2]; /* Reserved */
54+
} oscc_fault_report_s;
55+
56+
#pragma pack(pop)
57+
58+
59+
#endif /* _OSCC_FAULT_CAN_PROTOCOL_H_ */

api/include/can_protocols/magic.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* @file magic.h
3+
* @brief Definitions of the magic bytes identifying messages as from OSCC.
4+
*
5+
*/
6+
7+
8+
#ifndef _OSCC_MAGIC_H_
9+
#define _OSCC_MAGIC_H_
10+
11+
12+
/*
13+
* @brief First magic byte used in commands and reports to distinguish CAN
14+
* frame as coming from OSCC (and not OBD).
15+
*
16+
*/
17+
#define OSCC_MAGIC_BYTE_0 ( 0x05 )
18+
19+
/*
20+
* @brief Second magic byte used in commands and reports to distinguish CAN
21+
* frame as coming from OSCC (and not OBD).
22+
*
23+
*/
24+
#define OSCC_MAGIC_BYTE_1 ( 0xCC )
25+
26+
27+
#endif /* _OSCC_MAGIC_H_ */
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
/**
2+
* @file steering_can_protocol.h
3+
* @brief Steering CAN Protocol.
4+
*
5+
*/
6+
7+
8+
#ifndef _OSCC_STEERING_CAN_PROTOCOL_H_
9+
#define _OSCC_STEERING_CAN_PROTOCOL_H_
10+
11+
12+
#include <stdint.h>
13+
#include "magic.h"
14+
15+
16+
/*
17+
* @brief Steering command message (CAN frame) ID.
18+
*
19+
*/
20+
#define OSCC_STEERING_COMMAND_CAN_ID (0x64)
21+
22+
/*
23+
* @brief Steering report message (CAN frame) ID.
24+
*
25+
*/
26+
#define OSCC_STEERING_REPORT_CAN_ID (0x65)
27+
28+
/*
29+
* @brief Steering report message (CAN frame) length.
30+
*
31+
*/
32+
#define OSCC_STEERING_REPORT_CAN_DLC (8)
33+
34+
/*
35+
* @brief Steering report message publishing frequency. [Hz]
36+
*
37+
*/
38+
#define OSCC_REPORT_STEERING_PUBLISH_FREQ_IN_HZ (50)
39+
40+
/*
41+
* @brief Steering DTC bitfield position indicating an invalid sensor value.
42+
*
43+
*/
44+
#define OSCC_STEERING_DTC_INVALID_SENSOR_VAL (0x0)
45+
46+
47+
#pragma pack(push)
48+
#pragma pack(1)
49+
50+
/**
51+
* @brief Steering command message data.
52+
*
53+
* CAN frame ID: \ref OSCC_STEERING_COMMAND_CAN_ID
54+
*
55+
*/
56+
typedef struct
57+
{
58+
uint8_t magic[2]; /* Magic number identifying CAN frame as from OSCC.
59+
Byte 0 should be \ref OSCC_MAGIC_BYTE_0.
60+
Byte 1 should be \ref OSCC_MAGIC_BYTE_1. */
61+
62+
uint16_t spoof_value_low; /*!< Value to be sent on the low spoof signal. */
63+
64+
uint16_t spoof_value_high; /*!< Value to be sent on the high spoof signal. */
65+
66+
uint8_t enable; /*!< Command to enable or disable steering control.
67+
* Zero value means disable.
68+
* Non-zero value means enable. */
69+
70+
uint8_t reserved; /*!< Reserved. */
71+
} oscc_steering_command_s;
72+
73+
74+
/**
75+
* @brief Steering report message data.
76+
*
77+
* CAN frame ID: \ref OSCC_STEERING_REPORT_CAN_ID
78+
*
79+
*/
80+
typedef struct
81+
{
82+
uint8_t magic[2]; /* Magic number identifying CAN frame as from OSCC.
83+
Byte 0 should be \ref OSCC_MAGIC_BYTE_0.
84+
Byte 1 should be \ref OSCC_MAGIC_BYTE_1. */
85+
86+
uint8_t enabled; /*!< Steering controls enabled state.
87+
* Zero value means disabled (commands are ignored).
88+
* Non-zero value means enabled (no timeouts or overrides have occured). */
89+
90+
uint8_t operator_override; /*!< Driver override state.
91+
* Zero value means there has been no operator override.
92+
* Non-zero value means an operator has physically overridden
93+
* the system. */
94+
95+
uint8_t dtcs; /* Bitfield of DTCs present in the module. */
96+
97+
uint8_t reserved[3]; /*!< Reserved. */
98+
} oscc_steering_report_s;
99+
100+
#pragma pack(pop)
101+
102+
103+
#endif /* _OSCC_STEERING_CAN_PROTOCOL_H_ */

0 commit comments

Comments
 (0)