Revision e404e6c0 devices/DiWheelDrive/main.cpp

View differences:

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