int main(int argc, char* argv[]) { std::cout << "Enter main." << std::endl; std::string InputFile, OutputFile; double ScannerLocX, ScannerLocY, ScannerLocZ; double ForwardX, ForwardY, ForwardZ; unsigned int NumPoints; double ThetaMin, ThetaMax, PhiMin, PhiMax, minmax; std::cout << "Options:" << std::endl; po::options_description desc("Allowed options"); desc.add_options() ("help", "Help message.") ("input", po::value<std::string>(&InputFile), "Set input file") ("output", po::value<std::string>(&OutputFile), "Set output file") ("ScannerLocX", po::value<double>(&ScannerLocX)->default_value(0.0), "Set scanner location (x)") ("ScannerLocY", po::value<double>(&ScannerLocY)->default_value(0.0), "Set scanner location (y)") ("ScannerLocZ", po::value<double>(&ScannerLocZ)->default_value(0.0), "Set scanner location (z)") ("ForwardX", po::value<double>(&ForwardX)->default_value(0.0), "Set forward (x)") ("ForwardY", po::value<double>(&ForwardY)->default_value(0.0), "Set forward (y)") ("ForwardZ", po::value<double>(&ForwardZ)->default_value(0.0), "Set forward (z)") ("NumPoints", po::value<unsigned int>(&NumPoints)->default_value(100), "Set number of points (one side of the grid, assuming a square grid)") ("PhiMin", po::value<double>(&PhiMin)->default_value(-10.0), "Set min phi angle") ("PhiMax", po::value<double>(&PhiMax)->default_value(10.0), "Set max phi angle") ("ThetaMin", po::value<double>(&ThetaMin)->default_value(-10.0), "Set min theta angle") ("ThetaMax", po::value<double>(&ThetaMax)->default_value(10.0), "Set max theta angle") ("minmax", po::value<double>(&minmax), "Set max theta angle") ; po::variables_map vm; po::store(po::parse_command_line(argc, argv, desc), vm); po::notify(vm); //assign the variables (if they were specified) if(vm.count("help")) { std::cout << desc << std::endl; return 1; } CheckRequiredArgs(vm); std::cout << std::endl << std::endl; if(!vm.count("minmax")) { //convert degrees to radians PhiMin = deg2rad(PhiMin); PhiMax = deg2rad(PhiMax); ThetaMin = deg2rad(ThetaMin); ThetaMax = deg2rad(ThetaMax); } else { PhiMin = deg2rad(-minmax); PhiMax = deg2rad(minmax); ThetaMin = deg2rad(-minmax); ThetaMax = deg2rad(minmax); } ///////////////////////////////////////////////////// //setup model ModelFile Scene; Scene.Read(InputFile); Scene.Init(); //setup scanner LidarScanner Scanner(true); //use octree Scene.BuildOctree(); vgl_point_3d<double> Pos(ScannerLocX, ScannerLocY, ScannerLocZ); vgl_vector_3d<double> Dir(ForwardX, ForwardY, ForwardZ); Scanner.Orient(Pos, Dir); Scanner.ScanParams.setNumPhiPoints(NumPoints); Scanner.ScanParams.setNumThetaPoints(NumPoints); Scanner.ScanParams.setPhiMin(PhiMin); Scanner.ScanParams.setPhiMax(PhiMax); Scanner.ScanParams.setThetaMin(ThetaMin); Scanner.ScanParams.setThetaMax(ThetaMax); //scan PerformScan(Scene, Scanner, OutputFile); return 0; }
// ------------------------------------------------------------------------------------------------- static bool ProcessCommand ( const char* textPtr, ///< [IN] Check this text to see if it's a valid command. const char* requesterPtr ///< [IN] If not NULL, then any response text is SMSed to this target. ) { char buffer[10240]; // Start looking for a match... if (strcmp(textPtr, "Crash") == 0) { // As the name implies, we are going to be crashing the application. So simply append to // the output log and crash the app. This is done to allow demonstration of the supervisor // policies. int x = 10; int y = 0; LE_ERROR("Something wicked this way comes..."); LE_ERROR("Data result: %d", x / y); } else if (strcmp(textPtr, "Status") == 0) { // The status command allows the caller to query the current state of the modem. A friendly // version of this status is constructed and returned to the caller. le_onoff_t radioStatus; const char * radioStatusPtr; le_mrc_NetRegState_t netRegState; uint32_t signalQuality; if(le_mrc_GetRadioPower(&radioStatus) != LE_OK) { radioStatusPtr = "in an unknown state"; } else { radioStatusPtr = (radioStatus == LE_OFF) ? "off" : "on"; } if(le_mrc_GetNetRegState(&netRegState) != LE_OK) { netRegState = LE_MRC_REG_UNKNOWN; } if(le_mrc_GetSignalQual(&signalQuality) != LE_OK) { signalQuality = 0; } sprintf(buffer, "The radio is %s and is %s. The signal strength is %s.", radioStatusPtr, GetNetStateString(netRegState), GetSignalString(signalQuality)); } else if (strcmp(textPtr, "Sim") == 0) { // Like the status command, this command queries the underling hardware for information. // This information is turned into a string that can then be returned to the caller. le_sim_Id_t simId; le_sim_States_t simState; char iccid[100]; char imsi[100]; int pos = 0; simId = le_sim_GetSelectedCard(); simState = le_sim_GetState(simId); pos += snprintf(buffer + pos, sizeof(buffer) - pos, "SIM %u is %s.", simId, GetSimStateString(simState)); if(le_sim_GetICCID(simId, iccid, sizeof(iccid)) == LE_OK) { pos += snprintf(buffer + pos, sizeof(buffer) - pos, " ICCID=%s", iccid); } if(le_sim_GetIMSI(simId, imsi, sizeof(imsi)) == LE_OK) { pos += snprintf(buffer + pos, sizeof(buffer) - pos, " IMSI=%s", imsi); } } else if (strcmp(textPtr, "Online") == 0) { le_utf8_Copy(buffer, "Requesting data connection.", sizeof(buffer), NULL); GoOnline(); } else if (strcmp(textPtr, "Offline") == 0) { le_utf8_Copy(buffer, "Releasing data connection.", sizeof(buffer), NULL); GoOffline(buffer); } else if (strcmp(textPtr, "TestDataConnectionV4") == 0) { TestDataConnectionV4(buffer); } else if (strcmp(textPtr, "TestDataConnectionV6") == 0) { TestDataConnectionV6(buffer); } else if (strcmp(textPtr, "Netinfo") == 0) { Netinfo(buffer); } else if (strcmp(textPtr, "DataInfo") == 0) { Datainfo(buffer); } else if (strcmp(textPtr, "DataReset") == 0) { DataReset(buffer); } else if (strcmp(textPtr, "Scan") == 0) { PerformScan(buffer, sizeof(buffer), requesterPtr); } else { return false; } // Check to see if any processing has occurred. If so, check to see if the request came from a // local or remote requester. // If the requester was local, (requesterPtr == NULL) then simply log our response to the SMS log. // Otherwise, attempt to SMS the response string to the original caller. if (requesterPtr != NULL) { SendMessage(requesterPtr, buffer); } else if (OutputFilePtr != NULL) { fprintf(OutputFilePtr, "## %s ##\n", buffer); fflush(OutputFilePtr); } // Let the calling function know if we did any processing or not. return true; }