Revision e404e6c0 devices/DiWheelDrive/main.cpp
devices/DiWheelDrive/main.cpp | ||
---|---|---|
914 | 914 |
// Print out the error info collected. Clear buffer after calling |
915 | 915 |
chprintf(chp, "Error Info\n"); |
916 | 916 |
chprintf(chp, "\n"); |
917 |
int IDLE = 0; |
|
918 |
int FOLLOW_LINE = 1; |
|
919 |
int DETECT_STATION = 2; |
|
920 |
int REVERSE = 3; |
|
921 |
int PUSH_BACK = 4; |
|
922 |
int CHECK_POSITIONING = 5; |
|
923 |
int CHECK_VOLTAGE = 6; |
|
924 |
int CHARGING = 7; |
|
925 |
int RELEASE = 8; |
|
926 |
int RELEASE_TO_CORRECT = 9; |
|
927 |
int CORRECT_POSITIONING = 10; |
|
928 |
int TURN = 12; |
|
929 |
int INACTIVE = 13; |
|
930 |
int CALIBRATION = 14; |
|
931 |
int CALIBRATION_CHECK = 15; |
|
932 |
int DEVIATION_CORRECTION = 16; |
|
933 |
int DOCKING_ERROR = 16+1; |
|
934 |
int REVERSE_TIMEOUT_ERROR = 16+2; |
|
935 |
int CALIBRATION_ERROR = 16+3; |
|
936 |
int WHITE_DETECTION_ERROR = 16+4; |
|
937 |
int PROXY_DETECTION_ERROR = 16+5; |
|
938 |
int NO_CHARGING_POWER_ERROR = 16+6; |
|
939 |
int UNKNOWN_STATE_ERROR = 16+7; |
|
940 |
|
|
941 |
chprintf(chp, "IDLE: %d\n", global.stateTracker[IDLE]); |
|
942 |
chprintf(chp, "FOLLOW_LINE: %d\n", global.stateTracker[FOLLOW_LINE]); |
|
943 |
chprintf(chp, "DETECT_STATION: %d\n", global.stateTracker[DETECT_STATION]); |
|
944 |
chprintf(chp, "REVERSE: %d\n", global.stateTracker[REVERSE]); |
|
945 |
chprintf(chp, "PUSH_BACK: %d\n", global.stateTracker[PUSH_BACK]); |
|
946 |
chprintf(chp, "CHECK_POSITIONING: %d\n", global.stateTracker[CHECK_POSITIONING]); |
|
947 |
chprintf(chp, "CHECK_VOLTAGE: %d\n", global.stateTracker[CHECK_VOLTAGE]); |
|
948 |
chprintf(chp, "CHARGING: %d\n", global.stateTracker[CHARGING]); |
|
949 |
chprintf(chp, "RELEASE: %d\n", global.stateTracker[RELEASE]); |
|
950 |
chprintf(chp, "RELEASE_TO_CORRECT: %d\n", global.stateTracker[RELEASE_TO_CORRECT]); |
|
951 |
chprintf(chp, "CORRECT_POSITIONING: %d\n", global.stateTracker[CORRECT_POSITIONING]); |
|
952 |
chprintf(chp, "TURN: %d\n", global.stateTracker[TURN]); |
|
953 |
chprintf(chp, "INACTIVE: %d\n", global.stateTracker[INACTIVE]); |
|
954 |
chprintf(chp, "CALIBRATION: %d\n", global.stateTracker[CALIBRATION]); |
|
955 |
chprintf(chp, "CALIBRATION_CHECK: %d\n", global.stateTracker[CALIBRATION_CHECK]); |
|
956 |
chprintf(chp, "DEVIATION_CORRECTION: %d\n", global.stateTracker[DEVIATION_CORRECTION]); |
|
957 |
chprintf(chp, "DOCKING_ERROR: %d\n", global.stateTracker[DOCKING_ERROR]); |
|
958 |
chprintf(chp, "REVERSE_TIMEOUT_ERROR: %d\n", global.stateTracker[REVERSE_TIMEOUT_ERROR]); |
|
959 |
chprintf(chp, "CALIBRATION_ERROR: %d\n", global.stateTracker[CALIBRATION_ERROR]); |
|
960 |
chprintf(chp, "WHITE_DETECTION_ERROR: %d\n", global.stateTracker[WHITE_DETECTION_ERROR]); |
|
961 |
chprintf(chp, "PROXY_DETECTION_ERROR: %d\n", global.stateTracker[PROXY_DETECTION_ERROR]); |
|
962 |
chprintf(chp, "NO_CHARGING_POWER_ERROR: %d\n", global.stateTracker[NO_CHARGING_POWER_ERROR]); |
|
963 |
chprintf(chp, "UNKNOWN_STATE_ERROR: %d\n", global.stateTracker[UNKNOWN_STATE_ERROR]); |
|
964 |
|
|
965 |
for (int i=0; i<24;i++){ |
|
966 |
global.stateTracker[i] = 0; |
|
967 |
} |
|
917 |
// uint8_t IDLE = 0; |
|
918 |
// uint8_t FOLLOW_LINE = 1; |
|
919 |
// uint8_t DETECT_STATION = 2; |
|
920 |
// uint8_t REVERSE = 3; |
|
921 |
// uint8_t PUSH_BACK = 4; |
|
922 |
// uint8_t CHECK_POSITIONING = 5; |
|
923 |
// uint8_t CHECK_VOLTAGE = 6; |
|
924 |
// uint8_t CHARGING = 7; |
|
925 |
// uint8_t RELEASE = 8; |
|
926 |
// uint8_t RELEASE_TO_CORRECT = 9; |
|
927 |
// uint8_t CORRECT_POSITIONING = 10; |
|
928 |
// uint8_t TURN = 12; |
|
929 |
// uint8_t INACTIVE = 13; |
|
930 |
// uint8_t CALIBRATION = 14; |
|
931 |
// uint8_t CALIBRATION_CHECK = 15; |
|
932 |
// uint8_t DEVIATION_CORRECTION = 16; |
|
933 |
// uint8_t DOCKING_ERROR = 16+1; |
|
934 |
// uint8_t REVERSE_TIMEOUT_ERROR = 16+2; |
|
935 |
// uint8_t CALIBRATION_ERROR = 16+3; |
|
936 |
// uint8_t WHITE_DETECTION_ERROR = 16+4; |
|
937 |
// uint8_t PROXY_DETECTION_ERROR = 16+5; |
|
938 |
// uint8_t NO_CHARGING_POWER_ERROR = 16+6; |
|
939 |
// uint8_t UNKNOWN_STATE_ERROR = 16+7; |
|
940 |
|
|
941 |
// chprintf(chp, "IDLE: %d\n", global.stateTracker[IDLE]); |
|
942 |
// chprintf(chp, "FOLLOW_LINE: %d\n", global.stateTracker[FOLLOW_LINE]); |
|
943 |
// chprintf(chp, "DETECT_STATION: %d\n", global.stateTracker[DETECT_STATION]); |
|
944 |
// chprintf(chp, "REVERSE: %d\n", global.stateTracker[REVERSE]); |
|
945 |
// chprintf(chp, "PUSH_BACK: %d\n", global.stateTracker[PUSH_BACK]); |
|
946 |
// chprintf(chp, "CHECK_POSITIONING: %d\n", global.stateTracker[CHECK_POSITIONING]); |
|
947 |
// chprintf(chp, "CHECK_VOLTAGE: %d\n", global.stateTracker[CHECK_VOLTAGE]); |
|
948 |
// chprintf(chp, "CHARGING: %d\n", global.stateTracker[CHARGING]); |
|
949 |
// chprintf(chp, "RELEASE: %d\n", global.stateTracker[RELEASE]); |
|
950 |
// chprintf(chp, "RELEASE_TO_CORRECT: %d\n", global.stateTracker[RELEASE_TO_CORRECT]); |
|
951 |
// chprintf(chp, "CORRECT_POSITIONING: %d\n", global.stateTracker[CORRECT_POSITIONING]); |
|
952 |
// chprintf(chp, "TURN: %d\n", global.stateTracker[TURN]); |
|
953 |
// chprintf(chp, "INACTIVE: %d\n", global.stateTracker[INACTIVE]); |
|
954 |
// chprintf(chp, "CALIBRATION: %d\n", global.stateTracker[CALIBRATION]); |
|
955 |
// chprintf(chp, "CALIBRATION_CHECK: %d\n", global.stateTracker[CALIBRATION_CHECK]); |
|
956 |
// chprintf(chp, "DEVIATION_CORRECTION: %d\n", global.stateTracker[DEVIATION_CORRECTION]); |
|
957 |
// chprintf(chp, "DOCKING_ERROR: %d\n", global.stateTracker[DOCKING_ERROR]); |
|
958 |
// chprintf(chp, "REVERSE_TIMEOUT_ERROR: %d\n", global.stateTracker[REVERSE_TIMEOUT_ERROR]); |
|
959 |
// chprintf(chp, "CALIBRATION_ERROR: %d\n", global.stateTracker[CALIBRATION_ERROR]); |
|
960 |
// chprintf(chp, "WHITE_DETECTION_ERROR: %d\n", global.stateTracker[WHITE_DETECTION_ERROR]); |
|
961 |
// chprintf(chp, "PROXY_DETECTION_ERROR: %d\n", global.stateTracker[PROXY_DETECTION_ERROR]); |
|
962 |
// chprintf(chp, "NO_CHARGING_POWER_ERROR: %d\n", global.stateTracker[NO_CHARGING_POWER_ERROR]); |
|
963 |
// chprintf(chp, "UNKNOWN_STATE_ERROR: %d\n", global.stateTracker[UNKNOWN_STATE_ERROR]); |
|
964 |
|
|
965 |
// for (int i=0; i<24;i++){ |
|
966 |
// global.stateTracker[i] = 0; |
|
967 |
|
|
968 |
// } |
|
968 | 969 |
} |
969 | 970 |
|
970 |
inline void setAttributes(uint8_t (&map)[MAX_NODES][NODE_ATTRIBUTES], uint8_t id, |
|
971 |
uint8_t l, uint8_t r, uint8_t att) { |
|
972 |
map[id][0] = l; |
|
973 |
map[id][1] = r; |
|
974 |
map[id][2] = att; |
|
975 |
} |
|
976 |
|
|
977 |
#define TEST_CASES 10 |
|
978 |
void shellRequestTestSuite(BaseSequentialStream *chp, int argc, char *argv[]){ |
|
979 |
uint8_t testmap[MAX_NODES][NODE_ATTRIBUTES] = {0}; |
|
980 |
bool testres[TEST_CASES]; |
|
981 |
setAttributes(testmap, 0, 1, 2, 1); |
|
982 |
setAttributes(testmap, 1, 2, 2, 0); |
|
983 |
setAttributes(testmap, 2, 1, 0, 0); |
|
984 |
setAttributes(testmap, 3, 0, 0, 0xff); |
|
985 |
AmiroMap map = AmiroMap(&global); |
|
986 |
|
|
987 |
// -------------------------------------------------- |
|
988 |
|
|
989 |
int tcase = 0; |
|
990 |
map.initialize(testmap); |
|
991 |
testres[tcase] = map.get_valid(); |
|
992 |
uint8_t ini = map.initialize(testmap); |
|
993 |
chprintf(chp, "Initialized returned: %d \n", ini); |
|
994 |
BaseThread::sleep(CAN::UPDATE_PERIOD); |
|
995 |
|
|
996 |
tcase++; // 1 |
|
997 |
setAttributes(testmap, 0, 1, 2, 0xff); |
|
998 |
ini = map.initialize(testmap); |
|
999 |
chprintf(chp, "Initialized returned: %d \n", ini); |
|
1000 |
testres[tcase] = !map.get_valid(); |
|
1001 |
BaseThread::sleep(CAN::UPDATE_PERIOD); |
|
1002 |
|
|
1003 |
tcase++; // 2 |
|
1004 |
setAttributes(testmap, 0, 1, 2, 0); |
|
1005 |
setAttributes(testmap, 2, 1, 0, 1); |
|
1006 |
map.initialize(testmap); |
|
1007 |
testres[tcase] = map.get_current() == 2; |
|
1008 |
BaseThread::sleep(CAN::UPDATE_PERIOD); |
|
1009 |
|
|
1010 |
tcase++; // 3 |
|
1011 |
setAttributes(testmap, 3, 0, 0, 0); |
|
1012 |
setAttributes(testmap, 4, 0, 0, 0xff); |
|
1013 |
map.initialize(testmap); |
|
1014 |
testres[tcase] = !map.get_valid(); |
|
1015 |
|
|
1016 |
BaseThread::sleep(CAN::UPDATE_PERIOD); |
|
1017 |
// -------------------------------------------------- |
|
1018 |
|
|
1019 |
int failed = 0; |
|
1020 |
int passed = 0; |
|
1021 |
for (int i=0; i<=tcase; i++) { |
|
1022 |
if (testres[i]){ |
|
1023 |
passed++; |
|
1024 |
chprintf(chp, "Test %d Passed!\n", i); |
|
1025 |
}else{ |
|
1026 |
failed++; |
|
1027 |
chprintf(chp, "Test %d Failed\n", i); |
|
1028 |
} |
|
1029 |
BaseThread::sleep(CAN::UPDATE_PERIOD); |
|
1030 |
} |
|
1031 |
chprintf(chp, "Total: %d, Passed: %d, Failed: %d\n", tcase + 1, passed, failed); |
|
1032 |
} |
|
1033 | 971 |
|
1034 | 972 |
void shellRequestMapTest(BaseSequentialStream *chp, int argc, char *argv[]) { |
1035 | 973 |
|
1036 | 974 |
// TODO: |
1037 | 975 |
// For now see everything fixed. Create array with pointer to all node structs. Determine |
1038 | 976 |
|
1039 |
// chprintf(chp, " +-------------------+\n"); |
|
1040 |
// chprintf(chp, " | |\n"); |
|
1041 |
// chprintf(chp, " | |\n"); |
|
1042 |
// chprintf(chp, "+-v--+ |\n"); |
|
1043 |
// chprintf(chp, "| 0 | +-++\n"); |
|
1044 |
// chprintf(chp, "+-+--+ +--------+2 | <-------+\n"); |
|
1045 |
// chprintf(chp, " | | +--+ |\n"); |
|
1046 |
// chprintf(chp, " | | ^ |\n"); |
|
1047 |
// chprintf(chp, " | | | |\n"); |
|
1048 |
// chprintf(chp, " | v | |\n"); |
|
1049 |
// chprintf(chp, " | +-+-+------+ |\n"); |
|
1050 |
// chprintf(chp, " +------> 1 | |\n"); |
|
1051 |
// chprintf(chp, " +---+-------------------+\n"); |
|
1052 |
|
|
1053 |
uint8_t testmap[MAX_NODES][NODE_ATTRIBUTES] = {0}; |
|
1054 |
setAttributes(testmap, 0, 1, 2, 1); |
|
1055 |
setAttributes(testmap, 1, 2, 2, 0); |
|
1056 |
setAttributes(testmap, 2, 1, 0, 0); |
|
1057 |
setAttributes(testmap, 3, 0, 0, 0xff); |
|
1058 |
AmiroMap map = AmiroMap(&global); |
|
1059 |
map.initialize(testmap); |
|
1060 |
} |
|
977 |
chprintf(chp, " +-------------------+\n"); |
|
978 |
chprintf(chp, " | |\n"); |
|
979 |
chprintf(chp, " | |\n"); |
|
980 |
chprintf(chp, "+-v--+ |\n"); |
|
981 |
chprintf(chp, "| 0 | +-++\n"); |
|
982 |
chprintf(chp, "+-+--+ +--------+2 | <-------+\n"); |
|
983 |
chprintf(chp, " | | +--+ |\n"); |
|
984 |
chprintf(chp, " | | ^ |\n"); |
|
985 |
chprintf(chp, " | | | |\n"); |
|
986 |
chprintf(chp, " | v | |\n"); |
|
987 |
chprintf(chp, " | +-+-+------+ |\n"); |
|
988 |
chprintf(chp, " +------> 1 | |\n"); |
|
989 |
chprintf(chp, " +---+-------------------+\n"); |
|
990 |
// BaseThread::sleep(MS2ST(250)); |
|
991 |
global.lfStrategy = msg_content::MSG_TEST_MAP_STATE; |
|
992 |
global.msgReceived = true; |
|
993 |
|
|
994 |
} |
|
1061 | 995 |
|
1062 | 996 |
static const ShellCommand commands[] = { |
1063 | 997 |
{"shutdown", shellRequestShutdown}, |
... | ... | |
1093 | 1027 |
{"printLocation", shellRequestPrintCoordinate}, |
1094 | 1028 |
{"checkPowerPins", shellRequestCheckPower}, |
1095 | 1029 |
{"stateInfos", shellRequestErrorInfo}, |
1096 |
{"testMap", shellRequestMapTest}, |
|
1097 |
{"test", shellRequestTestSuite }, |
|
1030 |
{"test", shellRequestMapTest}, |
|
1098 | 1031 |
{NULL, NULL}}; |
1099 | 1032 |
|
1100 | 1033 |
static const ShellConfig shell_cfg1 = { |
Also available in: Unified diff