Rev 7 | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 7 | f9daq | 1 | #include <stdio.h> |
| 2 | #include <string.h> |
||
| 3 | #include <unistd.h> |
||
| 4 | #include "libusmc.h" |
||
| 5 | |||
| 6 | |||
| 7 | #define MENU_EXIT 0 |
||
| 8 | #define MENU_ERROR 1 |
||
| 9 | #define MENU_CONTINUE 2 |
||
| 10 | |||
| 11 | USMC_Devices devices; |
||
| 12 | DWORD cur_dev; |
||
| 13 | |||
| 14 | char str [105] = { 100 }; |
||
| 15 | |||
| 16 | // Function that prints information about connected devices to console |
||
| 17 | void print_devices ( USMC_Devices devices ) |
||
| 18 | { |
||
| 19 | DWORD i; |
||
| 20 | |||
| 21 | for ( i = 0 ; i < devices.NOD ; i++ ) |
||
| 22 | printf ( "Device# %d,\tSerial Number - %.16s,\tVersion - %.4s\n", i + 1, devices.Serial [i], devices.Version [i] ); |
||
| 23 | } |
||
| 24 | |||
| 25 | // Function that prints information about device state to console |
||
| 26 | void print_state ( USMC_State state ) |
||
| 27 | { |
||
| 28 | printf ( "The state is:\n" ); |
||
| 29 | printf ( "- Current Position in microsteps - %d\n", state.CurPos ); |
||
| 30 | printf ( "- Temperature - %.2f\xf8\x43\n", state.Temp ); |
||
| 31 | printf ( "- Step Divisor - %d\n", state.SDivisor ); |
||
| 32 | printf ( "- Loft state - %s\n", state.Loft?"Indefinite" : "Fixed" ); |
||
| 33 | printf ( "- Power - %s\n", state.Power ? ( state.FullPower ? "Full" : "Half" ) : "Off" ); |
||
| 34 | |||
| 35 | if ( state.RUN ) |
||
| 36 | printf ( "- Step Motor is Running in %s Direction %s\n", |
||
| 37 | state.CW_CCW ? "CCW" : "CW", ( ( state.SDivisor == 1 ) && state.FullSpeed ) ? "at Full speed" : "" ); |
||
| 38 | else |
||
| 39 | printf ( "- Step Motor is Not Running\n" ); |
||
| 40 | |||
| 41 | printf ( "- Device %s\n", state.AReset ? "is After Reset" : "Position Already Set" ); |
||
| 42 | printf ( "- Input Synchronization Logical Pin state - %s\n", state.SyncIN ? "TRUE" : "FALSE" ); |
||
| 43 | printf ( "- Output Synchronization Logical Pin state - %s\n", state.SyncOUT ? "TRUE" : "FALSE" ); |
||
| 44 | printf ( "- Rotary Transducer Logical Pin state - %s\n", state.RotTr ? "TRUE" : "FALSE" ); |
||
| 45 | printf ( "- Rotary Transducer Error Flag - %s\n", state.RotTrErr ? "Error" : "Clear" ); |
||
| 46 | printf ( "- Emergency Disable Button - %s\n", state.EmReset ? "Pushed" : "Unpushed" ); |
||
| 47 | printf ( "- Trailer 1 Press state - %s\n", state.Trailer1 ? "Pushed" : "Unpushed" ); |
||
| 48 | printf ( "- Trailer 2 Press state - %s\n", state.Trailer2 ? "Pushed" : "Unpushed" ); |
||
| 49 | |||
| 50 | if ( state.Voltage == 0.0f ) |
||
| 335 | f9daq | 51 | printf ( "- Input Voltage - Low\n" ); |
| 7 | f9daq | 52 | else |
| 53 | printf ( "- Input Voltage - %.1fV\n", state.Voltage ); |
||
| 54 | } |
||
| 55 | |||
| 56 | // Function that scans start parameters |
||
| 57 | void scan_start_params ( int * dest_pos, float * speed, USMC_StartParameters * sp ) |
||
| 58 | { |
||
| 59 | // Defaults |
||
| 60 | *speed = 2000.0f; |
||
| 61 | *dest_pos = 0; |
||
| 62 | sp -> SDivisor = 8; |
||
| 63 | |||
| 64 | printf ( "Destination position:" ); |
||
| 65 | scanf ( "%d", dest_pos ); |
||
| 66 | printf ( "\nSpeed (in tacts):" ); |
||
| 67 | scanf ( "%f", speed ); |
||
| 68 | printf ( "\nSteps Divisor:" ); |
||
| 335 | f9daq | 69 | scanf ( "%c", &( sp -> SDivisor ) ); |
| 7 | f9daq | 70 | getchar (); |
| 71 | } |
||
| 72 | |||
| 73 | // Function that prints information about device start parameters to console |
||
| 74 | void print_start_params ( int dest_pos, float speed, const USMC_StartParameters sp ) |
||
| 75 | { |
||
| 76 | printf ( "Destination position - %d\n", dest_pos ); |
||
| 77 | printf ( "speed - %.2ftacts/s\n", speed ); |
||
| 78 | printf ( "Steps Divisor - %d\n", sp.SDivisor ); |
||
| 79 | |||
| 80 | if ( sp.SDivisor == 1 ) |
||
| 81 | printf ( "Slow start/stop mode - %s\n", sp.SlStart ? "Enabled" : "Disabled" ); |
||
| 82 | else if ( sp.LoftEn ) { |
||
| 83 | printf ( "Automatic backlash operation - Enabled\n" ); |
||
| 84 | printf ( "Automatic backlash operation direction - %s\n", sp.DefDir ? "CCW" : "CW" ); |
||
| 85 | printf ( "Force automatic backlash operation - %s\n", sp.ForceLoft ? "TRUE" : "FALSE" ); |
||
| 86 | } else { |
||
| 87 | printf ( "Automatic backlash operation - Disabled\n" ); |
||
| 88 | } |
||
| 89 | if ( sp.WSyncIN ) |
||
| 90 | printf ( "Controller will wait for input synchronization signal to start\n" ); |
||
| 91 | else |
||
| 92 | printf ( "Input synchronization signal ignored \n" ); |
||
| 93 | |||
| 94 | printf ( "Output synchronization counter will %sbe reset\n", sp.SyncOUTR ? "" : "not " ); |
||
| 95 | } |
||
| 96 | |||
| 97 | // Function that prints information about device parameters to console |
||
| 98 | void print_params ( USMC_Parameters params ) |
||
| 99 | { |
||
| 100 | printf ( "The parameters are:\n" ); |
||
| 101 | printf ( "Full acceleration time - %.0f ms\n", ( double ) params.AccelT ); |
||
| 102 | printf ( "Full deceleration time - %.0f ms\n", ( double ) params.DecelT ); |
||
| 103 | printf ( "Power reduction timeout - %.0f ms\n", ( double ) params.PTimeout ); |
||
| 104 | printf ( "Button speedup timeout 1 - %.0f ms\n", ( double ) params.BTimeout1 ); |
||
| 105 | printf ( "Button speed after timeout 1 - %.2f steps/s\n", ( double ) params.BTO1P ); |
||
| 106 | printf ( "Button speedup timeout 2 - %.0f ms\n", ( double ) params.BTimeout2 ); |
||
| 107 | printf ( "Button speed after timeout 2 - %.2f steps/s\n", ( double ) params.BTO2P ); |
||
| 108 | printf ( "Button speedup timeout 3 - %.0f ms\n", ( double ) params.BTimeout3 ); |
||
| 109 | printf ( "Button speed after timeout 3 - %.2f steps/s\n", ( double ) params.BTO3P ); |
||
| 110 | printf ( "Button speedup timeout 4 - %.0f ms\n", ( double ) params.BTimeout4 ); |
||
| 111 | printf ( "Button speed after timeout 4 - %.2f steps/s\n", ( double ) params.BTO4P ); |
||
| 112 | printf ( "Button reset timeout - %.0f ms\n", (double) params.BTimeoutR ); |
||
| 113 | printf ( "Button reset operation speed - %.2f steps/s\n", ( double ) params.MinP ); |
||
| 114 | printf ( "Backlash operation distance - %d steps\n", ( int ) params.MaxLoft ); |
||
| 115 | printf ( "Revolution distance - %d steps\n", ( int ) params.RTDelta ); |
||
| 116 | printf ( "Minimal revolution distance error - %d steps\n", ( int ) params.RTMinError ); |
||
| 117 | printf ( "Power off temperature - %.2f\xf8\x43\n", ( double ) params.MaxTemp ); |
||
| 118 | printf ( "Duration of the output synchronization pulse - " ); |
||
| 119 | |||
| 120 | if ( params.SynOUTP == 0 ) |
||
| 121 | printf ( "minimal\n"); |
||
| 122 | else |
||
| 123 | printf ( "%.1f * [Tact Period]\n", params.SynOUTP - 0.5 ); |
||
| 124 | |||
| 125 | printf ( "speed of the last phase of the backlash operation - " ); |
||
| 126 | |||
| 127 | if ( params.LoftPeriod == 0.0f ) |
||
| 128 | printf ( "normal\n" ); |
||
| 129 | else |
||
| 130 | printf ( "%.2f steps/s\n", ( double ) params.LoftPeriod ); |
||
| 131 | |||
| 132 | printf ( "<Angular Encoder Step> Equals <Angular Step Motor Step>/<%.2f>\n", params.EncMult ); |
||
| 133 | } |
||
| 134 | |||
| 135 | // Function that prints information about device "mode" parameters to console |
||
| 136 | void print_mode ( USMC_Mode mode ) |
||
| 137 | { |
||
| 138 | printf ( "mode parameters:\n" ); |
||
| 139 | printf ( "Buttons - "); |
||
| 140 | |||
| 141 | if ( mode.PMode ) |
||
| 142 | printf ( "Disabled\n" ); |
||
| 143 | else { |
||
| 144 | printf ( "Enabled\nButton 1 TRUE state - %s\n", mode.Butt1T ? "+3/+5 V" : "0 V(GND)" ); |
||
| 145 | printf ( "Button 2 TRUE state - %s\n", mode.Butt2T ? "+3/+5 V" : "0 V(GND)" ); |
||
| 146 | } |
||
| 147 | |||
| 148 | printf ( "Current reduction regime - %s\n", mode.PReg ? "Used" : "Not Used" ); |
||
| 149 | |||
| 150 | if ( mode.ResetD ) |
||
| 151 | printf ( "Power - %s\n", mode.EMReset ? "Emerjency Off" : "Off" ); |
||
| 152 | else |
||
| 153 | printf ( "Power - On\n" ); |
||
| 154 | |||
| 155 | if ( mode.Tr1En || mode.Tr2En ) |
||
| 156 | printf ( "Trailers are - %s\n", mode.TrSwap ? "Swapped" : "Direct" ); |
||
| 157 | |||
| 158 | printf ( "Trailer 1 - "); |
||
| 159 | |||
| 160 | if ( mode.Tr1En ) |
||
| 161 | printf ( "Enabled\nTrailer 1 TRUE state - %s\n", mode.Tr1T ? "+3/+5 V" : "0 V(GND)" ); |
||
| 162 | else |
||
| 163 | printf ( "Disabled\n" ); |
||
| 164 | |||
| 165 | printf ( "Trailer 2 - " ); |
||
| 166 | |||
| 167 | if ( mode.Tr2En ) |
||
| 168 | printf ( "Enabled\nTrailer 2 TRUE state - %s\n", mode.Tr2T ? "+3/+5 V" : "0 V(GND)" ); |
||
| 169 | else |
||
| 170 | printf ( "Disabled\n" ); |
||
| 171 | |||
| 172 | if ( mode.EncoderEn ) { |
||
| 173 | printf ( "Encoder - Enabled\n" ); |
||
| 174 | printf ( "Encoder Position Counter is %s\n", mode.EncoderInv ? "Inverted" : "Direct" ); |
||
| 175 | printf ( "Rotary Transducer and Input Syncronisation are\n" |
||
| 176 | " Disabled Because of Encoder\n" ); |
||
| 177 | } else { |
||
| 178 | printf ( "Encoder - Disabled\n" ); |
||
| 179 | printf ( "Rotary Transducer - " ); |
||
| 180 | |||
| 181 | if ( mode.RotTeEn ) { |
||
| 182 | printf ( "Enabled\nRotary Transducer TRUE state - %s\n", mode.RotTrT ? "+3/+5 V" : "0 V(GND)" ); |
||
| 183 | printf ( "Rotary Transducer Operation - %s\n", mode.RotTrOp ? "Stop on error" : "Check and ignore error" ); |
||
| 184 | printf ( "Reset Rotary Transducer Check Positions - %s\n", mode.ResetRT ? "Initiated" : "No, why?" ); |
||
| 185 | } else { |
||
| 186 | printf ( "Disabled\n" ); |
||
| 187 | } |
||
| 188 | |||
| 189 | printf ( "Synchronization input mode:\n" ); |
||
| 190 | |||
| 191 | if ( mode.SyncINOp ) |
||
| 192 | printf ( "Step motor will move one time to the destination position\n" ); |
||
| 193 | else |
||
| 194 | printf ( "Step motor will move multiple times by [destination position]\n" ); |
||
| 195 | } |
||
| 196 | |||
| 197 | printf ( "Output Syncronization - " ); |
||
| 198 | |||
| 199 | if ( mode.SyncOUTEn ) { |
||
| 200 | printf ( "Enabled\nReset Output Synchronization Counter - %s\n", mode.SyncOUTR ? "Initiated" : "No, why?" ); |
||
| 201 | printf ( "Number of steps after which synchronization output sygnal occures - %u\n", mode.SyncCount ); |
||
| 202 | } else { |
||
| 203 | printf ( "Disabled\n" ); |
||
| 204 | } |
||
| 205 | |||
| 206 | printf ( "Synchronization Output is " ); |
||
| 207 | |||
| 208 | if ( mode.SyncInvert ) |
||
| 209 | printf ( "INVERTED\n" ); |
||
| 210 | else |
||
| 211 | printf ( "NORMAL\n" ); |
||
| 212 | } |
||
| 213 | |||
| 214 | void print_enc_state ( USMC_EncoderState enc_state, USMC_Parameters up ) |
||
| 215 | { |
||
| 216 | printf ( "The encoder state is:\n" ); |
||
| 217 | printf ( "- Current Position in microsteps - %.2f\n", enc_state.ECurPos/up.EncMult ); |
||
| 218 | printf ( "- Encoder Position in microsteps - %.2f\n\n", enc_state.EncoderPos/up.EncMult ); |
||
| 219 | printf ( "- Current Position in \"Half of Encoder Step\"s - %d\n", enc_state.ECurPos ); |
||
| 220 | printf ( "- Encoder Position in \"Half of Encoder Step\"s - %d\n", enc_state.EncoderPos ); |
||
| 221 | } |
||
| 222 | |||
| 223 | // Function that prints last error information |
||
| 224 | void print_error ( void ) |
||
| 225 | { |
||
| 226 | char er [256]; |
||
| 227 | |||
| 228 | USMC_GetLastErr ( er, 255 ); |
||
| 229 | er [255] = '\0'; |
||
| 230 | printf ( "\n%s", er ); |
||
| 231 | } |
||
| 232 | |||
| 233 | |||
| 234 | USMC_State state; |
||
| 235 | USMC_StartParameters start_params; |
||
| 236 | USMC_Parameters params; |
||
| 237 | USMC_Mode mode; |
||
| 238 | USMC_EncoderState enc_state; |
||
| 239 | |||
| 240 | // Reference to Functions For Every Command (defined at the end of the file) |
||
| 241 | BOOL f1_get_dev_state ( void ); |
||
| 242 | BOOL f2_start ( void ); |
||
| 243 | BOOL f3_stop ( void ); |
||
| 244 | BOOL f4_set_params ( void ); |
||
| 245 | BOOL f5_set_mode ( void ); |
||
| 246 | BOOL f6_set_cur_pos ( void ); |
||
| 247 | BOOL f7_turn_off_and_save_pos ( void ); |
||
| 248 | BOOL fs7_revert_sp_to_0 ( void ); |
||
| 249 | BOOL f8_get_enc_state ( void ); |
||
| 250 | BOOL fp_change_power ( void ); |
||
| 251 | |||
| 252 | BOOL smpower = FALSE; |
||
| 253 | |||
| 254 | int menu ( void ) |
||
| 255 | { |
||
| 256 | BOOL err = FALSE; |
||
| 257 | char menu_sel; |
||
| 258 | |||
| 259 | printf ( "menu :\n" |
||
| 260 | "1 - Get Device state\n" |
||
| 261 | "2 - START\n" |
||
| 262 | "3 - STOP\n" |
||
| 263 | "4 - Set Parameters (can be changed only in c++ code)\n" |
||
| 264 | "5 - Set mode (can be changed only in c++ code)\n" |
||
| 265 | "6 - Set Current Position (can be changed only in c++ code)\n" |
||
| 266 | "7 - Turn Off and Save Current Position to Flash\n" |
||
| 267 | "SHIFT + 7 - Revert Start Position to 0\n" |
||
| 268 | "8 - Get Encoder state\n" |
||
| 269 | "\n" |
||
| 270 | "p - Turn %s Power" |
||
| 271 | "\n" |
||
| 272 | "9 - Select other device\n" |
||
| 273 | "0 - Exit program\n" |
||
| 274 | "Choose:", smpower ? "Off" : "On" ); |
||
| 275 | |||
| 276 | menu_sel = getchar (); |
||
| 277 | |||
| 278 | switch ( menu_sel ) |
||
| 279 | { |
||
| 280 | case '1': |
||
| 281 | err = f1_get_dev_state (); |
||
| 282 | break; |
||
| 283 | case '2': |
||
| 284 | err = f2_start (); |
||
| 285 | break; |
||
| 286 | case '3': |
||
| 287 | err = f3_stop (); |
||
| 288 | break; |
||
| 289 | case '4': |
||
| 290 | err = f4_set_params (); |
||
| 291 | break; |
||
| 292 | case '5': |
||
| 293 | err = f5_set_mode (); |
||
| 294 | break; |
||
| 295 | case '6': |
||
| 296 | err = f6_set_cur_pos (); |
||
| 297 | break; |
||
| 298 | case '7': |
||
| 299 | err = f7_turn_off_and_save_pos (); |
||
| 300 | break; |
||
| 301 | case '&': // 'SHIFT 7' on my keyboard |
||
| 302 | err = fs7_revert_sp_to_0 (); |
||
| 303 | break; |
||
| 304 | case '8': |
||
| 305 | err = f8_get_enc_state (); |
||
| 306 | break; |
||
| 307 | case 'p': |
||
| 308 | case 'P': |
||
| 309 | err = fp_change_power (); |
||
| 310 | break; |
||
| 311 | |||
| 312 | case '9': |
||
| 313 | return MENU_ERROR; |
||
| 314 | case '0': |
||
| 315 | printf ( "\n" ); |
||
| 316 | return MENU_EXIT; |
||
| 317 | default: |
||
| 318 | system ( "clear" ); |
||
| 319 | break; |
||
| 320 | } |
||
| 321 | |||
| 322 | if ( err ) { |
||
| 323 | print_error (); |
||
| 324 | printf ( "\nPerforming Refressh..." ); |
||
| 325 | getchar (); |
||
| 326 | |||
| 327 | if ( USMC_Init ( &devices ) ) { |
||
| 328 | print_error (); |
||
| 329 | return MENU_EXIT; |
||
| 330 | } |
||
| 331 | |||
| 332 | return MENU_ERROR; |
||
| 333 | } |
||
| 334 | |||
| 335 | return MENU_CONTINUE; |
||
| 336 | } |
||
| 337 | |||
| 338 | int select_menu ( void ) |
||
| 339 | { |
||
| 340 | int ret; |
||
| 341 | do { |
||
| 342 | system ( "clear" ); |
||
| 343 | cur_dev = -1; |
||
| 344 | print_devices ( devices ); |
||
| 345 | printf ( "\n\t0\tExit\n" ); |
||
| 346 | for ( ret=0;ret<devices.NOD;ret++) printf ( "\t%d\tDevice # %d\n",ret+1,ret+1 ); |
||
| 347 | printf ( "\tx\tReInitialize\n" ); |
||
| 348 | printf ( "\txx\tClose Driver Window and Exit Program\n" ); |
||
| 349 | |||
| 350 | printf ( "Select:" ); |
||
| 351 | scanf ( "%s", str ); |
||
| 352 | getchar (); |
||
| 353 | |||
| 354 | if ( strcmp ( str, "x" ) == 0 ) |
||
| 355 | { |
||
| 356 | //// Perform "Refresh" of Driver |
||
| 357 | if ( USMC_Init ( &devices ) ) |
||
| 358 | { |
||
| 359 | print_error (); |
||
| 360 | return MENU_EXIT; |
||
| 361 | } |
||
| 362 | |||
| 363 | continue; |
||
| 364 | } else if ( strcmp ( str, "xx" ) == 0 ) { |
||
| 365 | //// Close the MicroSMC.exe process |
||
| 366 | if ( USMC_Close () ) |
||
| 367 | { |
||
| 368 | print_error (); |
||
| 369 | return MENU_EXIT; |
||
| 370 | } |
||
| 371 | |||
| 372 | return MENU_EXIT; |
||
| 373 | } |
||
| 374 | |||
| 375 | sscanf ( str, "%u", &cur_dev ); |
||
| 376 | |||
| 377 | if ( cur_dev == 0 ) |
||
| 378 | return MENU_EXIT; |
||
| 379 | } while ( cur_dev > devices.NOD ); |
||
| 380 | |||
| 381 | system ( "clear" ); |
||
| 382 | |||
| 383 | cur_dev--; // Decrement cur_dev by 1 ( we have zero-based device list, |
||
| 384 | // but 1-based is user-friendly ) |
||
| 385 | |||
| 386 | do { |
||
| 387 | ret = menu (); |
||
| 388 | } while ( ret == MENU_CONTINUE ); |
||
| 389 | |||
| 390 | return ret; |
||
| 391 | } |
||
| 392 | |||
| 393 | int exit_program ( void ) |
||
| 394 | { |
||
| 395 | printf ( "\nPress any key to exit" ); |
||
| 396 | getchar (); |
||
| 397 | |||
| 398 | return MENU_EXIT; |
||
| 399 | } |
||
| 400 | |||
| 401 | int main ( int argc, const char ** argv ) |
||
| 402 | { |
||
| 403 | int res; |
||
| 404 | |||
| 405 | // change terminal mode to non-buffering |
||
| 406 | system ( "stty -icanon min 1" ); |
||
| 407 | setbuf ( stdin, NULL ); |
||
| 408 | system ( "clear" ); |
||
| 409 | |||
| 410 | if ( USMC_Init ( &devices ) ) |
||
| 411 | { |
||
| 412 | print_error (); |
||
| 413 | |||
| 414 | return exit_program (); |
||
| 415 | } |
||
| 416 | |||
| 417 | while ( select_menu () ); |
||
| 418 | |||
| 419 | res = exit_program (); |
||
| 420 | //restore terminal mode |
||
| 421 | system ( "stty -icanon" ); |
||
| 422 | |||
| 423 | return res; |
||
| 424 | } |
||
| 425 | |||
| 426 | |||
| 427 | |||
| 428 | BOOL f1_get_dev_state ( void ) |
||
| 429 | { |
||
| 430 | if ( USMC_GetState ( cur_dev, &state ) ) |
||
| 431 | return TRUE; |
||
| 432 | |||
| 433 | system ( "clear" ); |
||
| 434 | print_state ( state ); |
||
| 335 | f9daq | 435 | printf ( "\nPress any key to continue" ); |
| 436 | getchar (); |
||
| 7 | f9daq | 437 | system ( "clear" ); |
| 438 | |||
| 439 | return FALSE; |
||
| 440 | } |
||
| 441 | |||
| 442 | BOOL f2_start ( void ) |
||
| 443 | { |
||
| 444 | float speed = 2000.0f; |
||
| 445 | int dest_pos = 0; |
||
| 446 | |||
| 447 | if ( USMC_GetStartParameters ( cur_dev, &start_params ) ) |
||
| 448 | return TRUE; |
||
| 449 | |||
| 450 | system ( "clear" ); |
||
| 451 | scan_start_params ( &dest_pos, &speed, &start_params ); |
||
| 452 | start_params.SlStart = TRUE; |
||
| 453 | |||
| 454 | if ( USMC_Start ( cur_dev, dest_pos, &speed, &start_params ) ) |
||
| 455 | return TRUE; |
||
| 456 | |||
| 457 | system ( "clear" ); |
||
| 458 | print_start_params ( dest_pos, speed, start_params ); |
||
| 459 | printf ( "\n" ); |
||
| 460 | return FALSE; |
||
| 461 | } |
||
| 462 | |||
| 463 | BOOL f3_stop ( void ) |
||
| 464 | { |
||
| 465 | if ( USMC_Stop ( cur_dev ) ) |
||
| 466 | return TRUE; |
||
| 467 | |||
| 468 | system ( "clear" ); |
||
| 469 | printf ( "Motor stopped\n\n" ); |
||
| 470 | |||
| 471 | return FALSE; |
||
| 472 | } |
||
| 473 | |||
| 474 | BOOL f4_set_params ( void ) |
||
| 475 | { |
||
| 476 | if ( USMC_GetParameters ( cur_dev, ¶ms ) ) |
||
| 477 | return TRUE; |
||
| 478 | |||
| 479 | // Set anything you want here |
||
| 480 | params.MaxTemp = 70.0f; |
||
| 481 | params.AccelT = 200.0f; |
||
| 482 | params.DecelT = 200.0f; |
||
| 483 | params.BTimeout1 = 5000.0f; |
||
| 484 | params.BTimeout2 = 5000.0f; |
||
| 485 | params.BTimeout3 = 5000.0f; |
||
| 486 | params.BTimeout4 = 5000.0f; |
||
| 487 | params.BTO1P = 625.0f; |
||
| 488 | params.BTO2P = 16.0f; |
||
| 489 | params.BTO3P = 625.0f; |
||
| 490 | params.BTO4P = 16.0f;//500.0f; |
||
| 491 | params.MinP = 500.0f; |
||
| 492 | params.BTimeoutR = 500.0f; |
||
| 493 | params.LoftPeriod = 500.0f; |
||
| 494 | params.RTDelta = 200; |
||
| 495 | params.RTMinError = 15; |
||
| 496 | params.EncMult = 2.5f; |
||
| 497 | params.MaxLoft = 32; |
||
| 498 | params.PTimeout = 100.0f; |
||
| 499 | params.SynOUTP = 1; |
||
| 500 | // |
||
| 501 | |||
| 502 | if ( USMC_SetParameters ( cur_dev, ¶ms ) ) |
||
| 503 | return TRUE; |
||
| 504 | |||
| 505 | if ( USMC_SaveParametersToFlash ( cur_dev ) ) |
||
| 506 | return TRUE; |
||
| 507 | |||
| 508 | system ( "clear" ); |
||
| 509 | print_params ( params ); |
||
| 510 | printf ( "\nThese Parameters are Saved to Flash" ); |
||
| 511 | printf ( "\nPress any key to continue" ); |
||
| 512 | getchar (); |
||
| 513 | system ( "clear" ); |
||
| 514 | |||
| 515 | return FALSE; |
||
| 516 | } |
||
| 517 | |||
| 518 | BOOL f5_set_mode ( void ) |
||
| 519 | { |
||
| 520 | if ( USMC_GetMode ( cur_dev, &mode ) ) |
||
| 521 | return TRUE; |
||
| 522 | |||
| 523 | // Set anything you want here |
||
| 524 | mode.SyncInvert = !mode.SyncInvert; |
||
| 525 | mode.EncoderEn = TRUE; |
||
| 526 | mode.RotTrOp = FALSE; |
||
| 527 | mode.ResetRT = TRUE; |
||
| 528 | mode.ResBEnc = TRUE; |
||
| 529 | // Set anything you want here |
||
| 530 | |||
| 531 | if ( USMC_SetMode ( cur_dev, &mode ) ) |
||
| 532 | return TRUE; |
||
| 533 | |||
| 534 | |||
| 535 | system ( "clear" ); |
||
| 536 | print_mode ( mode ); |
||
| 537 | printf ( "\nPress any key to continue" ); |
||
| 538 | getchar (); |
||
| 539 | system ( "clear" ); |
||
| 540 | |||
| 541 | return FALSE; |
||
| 542 | } |
||
| 543 | |||
| 544 | BOOL f6_set_cur_pos ( void ) |
||
| 545 | { |
||
| 546 | int newCurPos = 1000; |
||
| 547 | |||
| 548 | if ( USMC_SetCurrentPosition ( cur_dev, newCurPos ) ) |
||
| 549 | return TRUE; |
||
| 550 | |||
| 551 | system ( "clear" ); |
||
| 552 | printf ( "\nSetCurrentPosition executed with argument %d", newCurPos ); |
||
| 553 | printf ( "\nPress any key to continue" ); |
||
| 554 | getchar (); |
||
| 555 | system ( "clear" ); |
||
| 556 | |||
| 557 | return FALSE; |
||
| 558 | } |
||
| 559 | |||
| 560 | BOOL f7_turn_off_and_save_pos ( void ) |
||
| 561 | { |
||
| 562 | // Initialize structures (in case this function runs first) |
||
| 563 | if ( USMC_GetParameters ( cur_dev, ¶ms ) ) |
||
| 564 | return TRUE; |
||
| 565 | if ( USMC_GetMode ( cur_dev, &mode ) ) |
||
| 566 | return TRUE; |
||
| 567 | |||
| 568 | // Go to Full Step (automaticaly), then Turn Off |
||
| 569 | mode.ResetD = TRUE; |
||
| 570 | |||
| 571 | if ( USMC_SetMode ( cur_dev, &mode ) ) |
||
| 572 | return TRUE; |
||
| 573 | |||
| 574 | // Wait until Previous Comand is Done |
||
| 575 | do { |
||
| 576 | usleep ( 50 ); |
||
| 577 | |||
| 578 | if ( USMC_GetState ( cur_dev, &state ) ) |
||
| 579 | return TRUE; |
||
| 580 | } while ( state.Power == TRUE ); |
||
| 581 | |||
| 582 | // Remember CurPos in Parameters Only While state.Power - FALSE |
||
| 583 | params.StartPos = state.CurPos; |
||
| 584 | |||
| 585 | if ( USMC_SetParameters ( cur_dev, ¶ms ) ) |
||
| 586 | return TRUE; |
||
| 587 | |||
| 588 | // Then of Course You Need to SaveToFlash |
||
| 589 | if ( USMC_SaveParametersToFlash ( cur_dev ) ) |
||
| 590 | return TRUE; |
||
| 591 | |||
| 592 | // Now You Can Unplug ME |
||
| 593 | system ( "clear" ); |
||
| 594 | printf ( "\nThe Position \"%d\" is Saved to Flash\n", params.StartPos ); |
||
| 595 | printf ( "\nWhen Controller is Powered Up Next Time\n" ); |
||
| 596 | printf ( "\nIt Will Start From This Position\n" ); |
||
| 597 | printf ( "\nPress any key to exit" ); |
||
| 598 | getchar (); |
||
| 599 | system ( "clear" ); |
||
| 600 | |||
| 601 | return FALSE; |
||
| 602 | } |
||
| 603 | |||
| 604 | BOOL fs7_revert_sp_to_0 ( void ) |
||
| 605 | { |
||
| 606 | // Initialize structures (in case this function runs first) |
||
| 607 | if ( USMC_GetParameters ( cur_dev, ¶ms ) ) |
||
| 608 | return TRUE; |
||
| 609 | |||
| 610 | params.StartPos = 0; |
||
| 611 | |||
| 612 | if ( USMC_SetParameters ( cur_dev, ¶ms ) ) |
||
| 613 | return TRUE; |
||
| 614 | |||
| 615 | // Then of Course You Need to SaveToFlash |
||
| 616 | if ( USMC_SaveParametersToFlash ( cur_dev ) ) |
||
| 617 | return TRUE; |
||
| 618 | |||
| 619 | system ( "clear" ); |
||
| 620 | printf ( "\nStart Position is Reset to 0\n" ); |
||
| 621 | printf ( "\nPress any key to continue" ); |
||
| 622 | getchar (); |
||
| 623 | |||
| 624 | return FALSE; |
||
| 625 | } |
||
| 626 | |||
| 627 | BOOL f8_get_enc_state ( void ) |
||
| 628 | { |
||
| 629 | if ( USMC_GetEncoderState ( cur_dev, &enc_state ) ) |
||
| 630 | return TRUE; |
||
| 631 | if ( USMC_GetParameters ( cur_dev, ¶ms ) ) |
||
| 632 | return TRUE; |
||
| 633 | |||
| 634 | system ( "clear" ); |
||
| 635 | print_enc_state ( enc_state, params ); |
||
| 335 | f9daq | 636 | printf ( "\nPress any key to continue" ); |
| 637 | getchar (); |
||
| 7 | f9daq | 638 | system ( "clear" ); |
| 639 | |||
| 640 | return FALSE; |
||
| 641 | } |
||
| 642 | |||
| 643 | BOOL fp_change_power ( void ) |
||
| 644 | { |
||
| 645 | if ( USMC_GetMode ( cur_dev, &mode ) ) |
||
| 646 | return TRUE; |
||
| 647 | |||
| 648 | smpower = !smpower; |
||
| 649 | mode.ResetD = !smpower; |
||
| 650 | |||
| 651 | if ( USMC_SetMode ( cur_dev, &mode ) ) |
||
| 652 | return TRUE; |
||
| 653 | |||
| 654 | system ( "clear" ); |
||
| 655 | printf ( "Now, Power is %s\n", mode.ResetD ? "Off" : "On" ); |
||
| 656 | |||
| 657 | return FALSE; |
||
| 658 | } |