PushToGo on STM32F429-Disco Board
Dependencies: BSP_DISCO_F429ZI LCD_DISCO_F429ZI pushtogo usb
telescope_hardware.cpp@7:bfd32470c0bc, 2018-09-23 (annotated)
- Committer:
- caoyu@caoyuan9642-desktop.MIT.EDU
- Date:
- Sun Sep 23 02:30:32 2018 -0400
- Revision:
- 7:bfd32470c0bc
- Parent:
- 4:42a64e84f75a
Implemented HR clock.
BUG: Nudge below x1 speed has trouble switching direction
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
caoyuan9642 | 1:64c1fd738059 | 1 | /** |
caoyuan9642 | 1:64c1fd738059 | 2 | * Harware setup is implemented in this file |
caoyuan9642 | 1:64c1fd738059 | 3 | */ |
caoyuan9642 | 1:64c1fd738059 | 4 | |
caoyuan9642 | 1:64c1fd738059 | 5 | #include "telescope_hardware.h" |
caoyuan9642 | 1:64c1fd738059 | 6 | #include "AMIS30543StepperDriver.h" |
caoyuan9642 | 1:64c1fd738059 | 7 | #include "AdaptiveAxis.h" |
caoyuan9642 | 1:64c1fd738059 | 8 | #include "EquatorialMount.h" |
caoyu@caoyuan9642-desktop.MIT.EDU | 7:bfd32470c0bc | 9 | #include "RTCClockHR.h" |
caoyuan9642 | 1:64c1fd738059 | 10 | #include "SDBlockDevice.h" |
caoyuan9642 | 1:64c1fd738059 | 11 | #include "FATFileSystem.h" |
caoyuan9642 | 1:64c1fd738059 | 12 | #include "TelescopeConfiguration.h" |
caoyuan9642 | 1:64c1fd738059 | 13 | #include "EqMountServer.h" |
caoyuan9642 | 1:64c1fd738059 | 14 | #include "MCULoadMeasurement.h" |
caoyuan9642 | 1:64c1fd738059 | 15 | #include "USBSerial.h" |
caoyuan9642 | 1:64c1fd738059 | 16 | |
caoyuan9642 | 1:64c1fd738059 | 17 | /** |
caoyuan9642 | 1:64c1fd738059 | 18 | * Right-Ascenstion Axis |
caoyuan9642 | 1:64c1fd738059 | 19 | */ |
caoyuan9642 | 1:64c1fd738059 | 20 | SPI ra_spi(PC_12, PC_11, PB_3_ALT0); |
caoyuan9642 | 1:64c1fd738059 | 21 | AMIS30543StepperDriver *ra_stepper; |
caoyuan9642 | 1:64c1fd738059 | 22 | |
caoyuan9642 | 1:64c1fd738059 | 23 | /** |
caoyuan9642 | 1:64c1fd738059 | 24 | * Declination Axis |
caoyuan9642 | 1:64c1fd738059 | 25 | */ |
caoyuan9642 | 1:64c1fd738059 | 26 | SPI dec_spi(PE_6, PE_5, PE_2); |
caoyuan9642 | 1:64c1fd738059 | 27 | AMIS30543StepperDriver *dec_stepper; |
caoyuan9642 | 1:64c1fd738059 | 28 | |
caoyuan9642 | 1:64c1fd738059 | 29 | /** |
caoyu@caoyuan9642-desktop.MIT.EDU | 4:42a64e84f75a | 30 | * Clock & Location object |
caoyuan9642 | 1:64c1fd738059 | 31 | */ |
caoyu@caoyuan9642-desktop.MIT.EDU | 7:bfd32470c0bc | 32 | RTCClockHR clk; |
caoyu@caoyuan9642-desktop.MIT.EDU | 4:42a64e84f75a | 33 | LocationProvider location; |
caoyu@caoyuan9642-desktop.MIT.EDU | 4:42a64e84f75a | 34 | |
caoyu@caoyuan9642-desktop.MIT.EDU | 4:42a64e84f75a | 35 | |
caoyuan9642 | 1:64c1fd738059 | 36 | |
caoyuan9642 | 1:64c1fd738059 | 37 | /** |
caoyuan9642 | 1:64c1fd738059 | 38 | * SD card reader hardware configuration |
caoyuan9642 | 1:64c1fd738059 | 39 | */ |
caoyuan9642 | 1:64c1fd738059 | 40 | SDBlockDevice sd(PA_7, PB_4, PA_5, PC_13); |
caoyuan9642 | 1:64c1fd738059 | 41 | FATFileSystem fs("sdcard"); |
caoyuan9642 | 1:64c1fd738059 | 42 | |
caoyuan9642 | 1:64c1fd738059 | 43 | const char *config_file_path = "/sdcard/telescope.cfg"; |
caoyuan9642 | 1:64c1fd738059 | 44 | const char *config_saved_file_path = "/sdcard/telescope_saved.cfg"; |
caoyuan9642 | 1:64c1fd738059 | 45 | AdaptiveAxis *ra_axis = NULL; |
caoyuan9642 | 1:64c1fd738059 | 46 | AdaptiveAxis *dec_axis = NULL; |
caoyuan9642 | 1:64c1fd738059 | 47 | EquatorialMount *eq_mount = NULL; |
caoyuan9642 | 1:64c1fd738059 | 48 | |
caoyuan9642 | 1:64c1fd738059 | 49 | static void add_sys_commands(); |
caoyuan9642 | 1:64c1fd738059 | 50 | |
caoyuan9642 | 1:64c1fd738059 | 51 | EquatorialMount &telescopeHardwareInit() |
caoyuan9642 | 1:64c1fd738059 | 52 | { |
caoyuan9642 | 1:64c1fd738059 | 53 | // Read configuration |
caoyuan9642 | 1:64c1fd738059 | 54 | printf("Mounting SD card...\n"); |
caoyuan9642 | 1:64c1fd738059 | 55 | if (fs.mount(&sd) != 0) |
caoyuan9642 | 1:64c1fd738059 | 56 | { |
caoyuan9642 | 1:64c1fd738059 | 57 | debug( |
caoyuan9642 | 1:64c1fd738059 | 58 | "Error: failed to mount SD card. Falling back to default configuration.\n"); |
caoyuan9642 | 1:64c1fd738059 | 59 | } |
caoyuan9642 | 1:64c1fd738059 | 60 | else |
caoyuan9642 | 1:64c1fd738059 | 61 | { |
caoyuan9642 | 1:64c1fd738059 | 62 | // First check saved file |
caoyuan9642 | 1:64c1fd738059 | 63 | const char *file = config_saved_file_path; |
caoyuan9642 | 1:64c1fd738059 | 64 | FILE *fp = fopen(file, "r"); |
caoyuan9642 | 1:64c1fd738059 | 65 | if (fp == NULL) |
caoyuan9642 | 1:64c1fd738059 | 66 | { |
caoyuan9642 | 1:64c1fd738059 | 67 | // Then check original file |
caoyuan9642 | 1:64c1fd738059 | 68 | file = config_file_path; |
caoyuan9642 | 1:64c1fd738059 | 69 | fp = fopen(file, "r"); |
caoyuan9642 | 1:64c1fd738059 | 70 | if (fp == NULL) |
caoyuan9642 | 1:64c1fd738059 | 71 | { |
caoyuan9642 | 1:64c1fd738059 | 72 | debug("Error: config file not found.\n", config_file_path); |
caoyuan9642 | 1:64c1fd738059 | 73 | } |
caoyuan9642 | 1:64c1fd738059 | 74 | } |
caoyuan9642 | 1:64c1fd738059 | 75 | |
caoyuan9642 | 1:64c1fd738059 | 76 | if (fp) |
caoyuan9642 | 1:64c1fd738059 | 77 | { |
caoyuan9642 | 1:64c1fd738059 | 78 | printf("Reading configuration file %s\n", file); |
caoyuan9642 | 1:64c1fd738059 | 79 | TelescopeConfiguration::readFromFile(fp); |
caoyuan9642 | 1:64c1fd738059 | 80 | fclose(fp); |
caoyuan9642 | 1:64c1fd738059 | 81 | } |
caoyuan9642 | 1:64c1fd738059 | 82 | } |
caoyuan9642 | 1:64c1fd738059 | 83 | |
caoyuan9642 | 1:64c1fd738059 | 84 | // Object re-initialization |
caoyuan9642 | 1:64c1fd738059 | 85 | if (ra_axis != NULL) |
caoyuan9642 | 1:64c1fd738059 | 86 | { |
caoyuan9642 | 1:64c1fd738059 | 87 | delete ra_axis; |
caoyuan9642 | 1:64c1fd738059 | 88 | } |
caoyuan9642 | 1:64c1fd738059 | 89 | if (dec_axis != NULL) |
caoyuan9642 | 1:64c1fd738059 | 90 | { |
caoyuan9642 | 1:64c1fd738059 | 91 | delete dec_axis; |
caoyuan9642 | 1:64c1fd738059 | 92 | } |
caoyuan9642 | 1:64c1fd738059 | 93 | if (eq_mount != NULL) |
caoyuan9642 | 1:64c1fd738059 | 94 | { |
caoyuan9642 | 1:64c1fd738059 | 95 | delete eq_mount; |
caoyuan9642 | 1:64c1fd738059 | 96 | } |
caoyuan9642 | 1:64c1fd738059 | 97 | if (ra_stepper != NULL) |
caoyuan9642 | 1:64c1fd738059 | 98 | { |
caoyuan9642 | 1:64c1fd738059 | 99 | delete ra_stepper; |
caoyuan9642 | 1:64c1fd738059 | 100 | } |
caoyuan9642 | 1:64c1fd738059 | 101 | if (dec_stepper != NULL) |
caoyuan9642 | 1:64c1fd738059 | 102 | { |
caoyuan9642 | 1:64c1fd738059 | 103 | delete dec_stepper; |
caoyuan9642 | 1:64c1fd738059 | 104 | } |
caoyuan9642 | 1:64c1fd738059 | 105 | |
caoyuan9642 | 1:64c1fd738059 | 106 | double stepsPerDeg = TelescopeConfiguration::getDouble("motor_steps") |
caoyuan9642 | 1:64c1fd738059 | 107 | * TelescopeConfiguration::getDouble("gear_reduction") |
caoyuan9642 | 1:64c1fd738059 | 108 | * TelescopeConfiguration::getDouble("worm_teeth") / 360.0; |
caoyuan9642 | 1:64c1fd738059 | 109 | |
caoyuan9642 | 1:64c1fd738059 | 110 | ra_stepper = new AMIS30543StepperDriver(&ra_spi, PE_3, PB_7, NC, NC, |
caoyuan9642 | 1:64c1fd738059 | 111 | TelescopeConfiguration::getBool("ra_invert")); |
caoyuan9642 | 1:64c1fd738059 | 112 | dec_stepper = new AMIS30543StepperDriver(&dec_spi, PE_4, PC_8, NC, NC, |
caoyuan9642 | 1:64c1fd738059 | 113 | TelescopeConfiguration::getBool("dec_invert")); |
caoyuan9642 | 1:64c1fd738059 | 114 | ra_axis = new AdaptiveAxis(stepsPerDeg, ra_stepper, "RA_Axis"); |
caoyuan9642 | 1:64c1fd738059 | 115 | dec_axis = new AdaptiveAxis(stepsPerDeg, dec_stepper, "DEC_Axis"); |
caoyu@caoyuan9642-desktop.MIT.EDU | 4:42a64e84f75a | 116 | eq_mount = new EquatorialMount(*ra_axis, *dec_axis, clk, location); |
caoyuan9642 | 1:64c1fd738059 | 117 | |
caoyuan9642 | 1:64c1fd738059 | 118 | printf("Telescope initialized\n"); |
caoyuan9642 | 1:64c1fd738059 | 119 | |
caoyuan9642 | 1:64c1fd738059 | 120 | return (*eq_mount); // Return reference to eq_mount |
caoyuan9642 | 1:64c1fd738059 | 121 | } |
caoyuan9642 | 1:64c1fd738059 | 122 | |
caoyuan9642 | 1:64c1fd738059 | 123 | /* Serial connection */ |
caoyuan9642 | 1:64c1fd738059 | 124 | UARTSerial *console; |
caoyuan9642 | 1:64c1fd738059 | 125 | EqMountServer *server_serial; |
caoyuan9642 | 1:64c1fd738059 | 126 | |
caoyuan9642 | 1:64c1fd738059 | 127 | /* USB connection */ |
caoyuan9642 | 1:64c1fd738059 | 128 | EqMountServer *server_usb; |
caoyuan9642 | 1:64c1fd738059 | 129 | |
caoyuan9642 | 1:64c1fd738059 | 130 | bool serverInitialized = false; |
caoyuan9642 | 1:64c1fd738059 | 131 | |
caoyuan9642 | 1:64c1fd738059 | 132 | osStatus telescopeServerInit() |
caoyuan9642 | 1:64c1fd738059 | 133 | { |
caoyuan9642 | 1:64c1fd738059 | 134 | if (eq_mount == NULL) |
caoyuan9642 | 1:64c1fd738059 | 135 | return osErrorResource; |
caoyuan9642 | 1:64c1fd738059 | 136 | if (!serverInitialized) |
caoyuan9642 | 1:64c1fd738059 | 137 | { |
caoyuan9642 | 1:64c1fd738059 | 138 | // Only run once |
caoyuan9642 | 1:64c1fd738059 | 139 | serverInitialized = true; |
caoyuan9642 | 1:64c1fd738059 | 140 | add_sys_commands(); |
caoyuan9642 | 1:64c1fd738059 | 141 | } |
caoyuan9642 | 1:64c1fd738059 | 142 | |
caoyuan9642 | 1:64c1fd738059 | 143 | if (!console) |
caoyuan9642 | 1:64c1fd738059 | 144 | { |
caoyuan9642 | 1:64c1fd738059 | 145 | console = new UARTSerial(USBTX, USBRX, |
caoyuan9642 | 1:64c1fd738059 | 146 | TelescopeConfiguration::getInt("serial_baud")); |
caoyuan9642 | 1:64c1fd738059 | 147 | server_serial = new EqMountServer(*console, false); |
caoyuan9642 | 1:64c1fd738059 | 148 | } |
caoyuan9642 | 1:64c1fd738059 | 149 | server_serial->bind(*eq_mount); |
caoyuan9642 | 1:64c1fd738059 | 150 | |
caoyuan9642 | 1:64c1fd738059 | 151 | if (!server_usb) |
caoyuan9642 | 1:64c1fd738059 | 152 | { |
caoyuan9642 | 1:64c1fd738059 | 153 | server_usb = new EqMountServer(USBSerial::getInstance(), false); |
caoyuan9642 | 1:64c1fd738059 | 154 | } |
caoyuan9642 | 1:64c1fd738059 | 155 | server_usb->bind(*eq_mount); |
caoyuan9642 | 1:64c1fd738059 | 156 | |
caoyuan9642 | 1:64c1fd738059 | 157 | return osOK; |
caoyuan9642 | 1:64c1fd738059 | 158 | } |
caoyuan9642 | 1:64c1fd738059 | 159 | |
caoyuan9642 | 1:64c1fd738059 | 160 | static int eqmount_sys(EqMountServer *server, const char *cmd, int argn, |
caoyuan9642 | 1:64c1fd738059 | 161 | char *argv[]) |
caoyuan9642 | 1:64c1fd738059 | 162 | { |
caoyuan9642 | 1:64c1fd738059 | 163 | const int THD_MAX = 32; |
caoyuan9642 | 1:64c1fd738059 | 164 | osThreadId thdlist[THD_MAX]; |
caoyuan9642 | 1:64c1fd738059 | 165 | int nt = osThreadEnumerate(thdlist, THD_MAX); |
caoyuan9642 | 1:64c1fd738059 | 166 | |
caoyuan9642 | 1:64c1fd738059 | 167 | stprintf(server->getStream(), "Thread list: \r\n"); |
caoyuan9642 | 1:64c1fd738059 | 168 | for (int i = 0; i < nt; i++) |
caoyuan9642 | 1:64c1fd738059 | 169 | { |
caoyuan9642 | 1:64c1fd738059 | 170 | osThreadState_t state = osThreadGetState(thdlist[i]); |
caoyuan9642 | 1:64c1fd738059 | 171 | const char *s = ""; |
caoyuan9642 | 1:64c1fd738059 | 172 | const char *n; |
caoyuan9642 | 1:64c1fd738059 | 173 | osPriority_t prio = osThreadGetPriority(thdlist[i]); |
caoyuan9642 | 1:64c1fd738059 | 174 | |
caoyuan9642 | 1:64c1fd738059 | 175 | if (prio == osPriorityIdle) |
caoyuan9642 | 1:64c1fd738059 | 176 | { |
caoyuan9642 | 1:64c1fd738059 | 177 | n = "Idle thread"; |
caoyuan9642 | 1:64c1fd738059 | 178 | } |
caoyuan9642 | 1:64c1fd738059 | 179 | else |
caoyuan9642 | 1:64c1fd738059 | 180 | { |
caoyuan9642 | 1:64c1fd738059 | 181 | n = osThreadGetName(thdlist[i]); |
caoyuan9642 | 1:64c1fd738059 | 182 | if (n == NULL) |
caoyuan9642 | 1:64c1fd738059 | 183 | n = "System thread"; |
caoyuan9642 | 1:64c1fd738059 | 184 | } |
caoyuan9642 | 1:64c1fd738059 | 185 | |
caoyuan9642 | 1:64c1fd738059 | 186 | switch (state) |
caoyuan9642 | 1:64c1fd738059 | 187 | { |
caoyuan9642 | 1:64c1fd738059 | 188 | case osThreadInactive: |
caoyuan9642 | 1:64c1fd738059 | 189 | s = "Inactive"; |
caoyuan9642 | 1:64c1fd738059 | 190 | break; |
caoyuan9642 | 1:64c1fd738059 | 191 | case osThreadReady: |
caoyuan9642 | 1:64c1fd738059 | 192 | s = "Ready"; |
caoyuan9642 | 1:64c1fd738059 | 193 | break; |
caoyuan9642 | 1:64c1fd738059 | 194 | case osThreadRunning: |
caoyuan9642 | 1:64c1fd738059 | 195 | s = "Running"; |
caoyuan9642 | 1:64c1fd738059 | 196 | break; |
caoyuan9642 | 1:64c1fd738059 | 197 | case osThreadBlocked: |
caoyuan9642 | 1:64c1fd738059 | 198 | s = "Blocked"; |
caoyuan9642 | 1:64c1fd738059 | 199 | break; |
caoyuan9642 | 1:64c1fd738059 | 200 | case osThreadTerminated: |
caoyuan9642 | 1:64c1fd738059 | 201 | s = "Terminated"; |
caoyuan9642 | 1:64c1fd738059 | 202 | break; |
caoyuan9642 | 1:64c1fd738059 | 203 | case osThreadError: |
caoyuan9642 | 1:64c1fd738059 | 204 | s = "Error"; |
caoyuan9642 | 1:64c1fd738059 | 205 | break; |
caoyuan9642 | 1:64c1fd738059 | 206 | default: |
caoyuan9642 | 1:64c1fd738059 | 207 | s = "Unknown"; |
caoyuan9642 | 1:64c1fd738059 | 208 | break; |
caoyuan9642 | 1:64c1fd738059 | 209 | } |
caoyuan9642 | 1:64c1fd738059 | 210 | stprintf(server->getStream(), " - %10s 0x%08x %3d %s \r\n", s, |
caoyuan9642 | 1:64c1fd738059 | 211 | (uint32_t) thdlist[i], (int) prio, n); |
caoyuan9642 | 1:64c1fd738059 | 212 | } |
caoyuan9642 | 1:64c1fd738059 | 213 | |
caoyuan9642 | 1:64c1fd738059 | 214 | stprintf(server->getStream(), "\r\nRecent CPU usage: %.1f%%\r\n", |
caoyuan9642 | 1:64c1fd738059 | 215 | MCULoadMeasurement::getInstance().getCPUUsage() * 100); |
caoyuan9642 | 1:64c1fd738059 | 216 | return 0; |
caoyuan9642 | 1:64c1fd738059 | 217 | } |
caoyuan9642 | 1:64c1fd738059 | 218 | |
caoyuan9642 | 1:64c1fd738059 | 219 | static int eqmount_systime(EqMountServer *server, const char *cmd, int argn, |
caoyuan9642 | 1:64c1fd738059 | 220 | char *argv[]) |
caoyuan9642 | 1:64c1fd738059 | 221 | { |
caoyuan9642 | 1:64c1fd738059 | 222 | char buf[32]; |
caoyuan9642 | 1:64c1fd738059 | 223 | time_t t = time(NULL); |
caoyuan9642 | 1:64c1fd738059 | 224 | |
caoyuan9642 | 1:64c1fd738059 | 225 | core_util_critical_section_enter(); |
caoyuan9642 | 1:64c1fd738059 | 226 | char *ibuf = ctime(&t); |
caoyuan9642 | 1:64c1fd738059 | 227 | strncpy(buf, ibuf, sizeof(buf)); |
caoyuan9642 | 1:64c1fd738059 | 228 | core_util_critical_section_exit(); |
caoyuan9642 | 1:64c1fd738059 | 229 | |
caoyuan9642 | 1:64c1fd738059 | 230 | stprintf(server->getStream(), "Current UTC time: %s\r\n", buf); |
caoyuan9642 | 1:64c1fd738059 | 231 | |
caoyuan9642 | 1:64c1fd738059 | 232 | return 0; |
caoyuan9642 | 1:64c1fd738059 | 233 | } |
caoyuan9642 | 1:64c1fd738059 | 234 | |
caoyuan9642 | 1:64c1fd738059 | 235 | static int eqmount_reboot(EqMountServer *server, const char *cmd, int argn, |
caoyuan9642 | 1:64c1fd738059 | 236 | char *argv[]) |
caoyuan9642 | 1:64c1fd738059 | 237 | { |
caoyuan9642 | 1:64c1fd738059 | 238 | NVIC_SystemReset(); |
caoyuan9642 | 1:64c1fd738059 | 239 | return 0; |
caoyuan9642 | 1:64c1fd738059 | 240 | } |
caoyuan9642 | 1:64c1fd738059 | 241 | |
caoyuan9642 | 1:64c1fd738059 | 242 | static int eqmount_save(EqMountServer *server, const char *cmd, int argn, |
caoyuan9642 | 1:64c1fd738059 | 243 | char *argv[]) |
caoyuan9642 | 1:64c1fd738059 | 244 | { |
caoyuan9642 | 1:64c1fd738059 | 245 | if (argn == 0) |
caoyuan9642 | 1:64c1fd738059 | 246 | { |
caoyuan9642 | 1:64c1fd738059 | 247 | FILE *fp = fopen(config_saved_file_path, "w"); |
caoyuan9642 | 1:64c1fd738059 | 248 | if (fp) |
caoyuan9642 | 1:64c1fd738059 | 249 | { |
caoyuan9642 | 1:64c1fd738059 | 250 | TelescopeConfiguration::writeToFile(fp); |
caoyuan9642 | 1:64c1fd738059 | 251 | fclose(fp); |
caoyuan9642 | 1:64c1fd738059 | 252 | } |
caoyuan9642 | 1:64c1fd738059 | 253 | else |
caoyuan9642 | 1:64c1fd738059 | 254 | { |
caoyuan9642 | 1:64c1fd738059 | 255 | debug("Failed to write to file %s\n", config_saved_file_path); |
caoyuan9642 | 1:64c1fd738059 | 256 | return -1; |
caoyuan9642 | 1:64c1fd738059 | 257 | } |
caoyuan9642 | 1:64c1fd738059 | 258 | } |
caoyuan9642 | 1:64c1fd738059 | 259 | else if (argn == 1 && strcmp(argv[0], "delete") == 0) |
caoyuan9642 | 1:64c1fd738059 | 260 | { |
caoyuan9642 | 1:64c1fd738059 | 261 | // Delete save file |
caoyuan9642 | 1:64c1fd738059 | 262 | if (remove(config_saved_file_path) != 0) |
caoyuan9642 | 1:64c1fd738059 | 263 | { |
caoyuan9642 | 1:64c1fd738059 | 264 | debug("Failed to delete file %s\n", config_saved_file_path); |
caoyuan9642 | 1:64c1fd738059 | 265 | return -1; |
caoyuan9642 | 1:64c1fd738059 | 266 | } |
caoyuan9642 | 1:64c1fd738059 | 267 | } |
caoyuan9642 | 1:64c1fd738059 | 268 | return 0; |
caoyuan9642 | 1:64c1fd738059 | 269 | } |
caoyuan9642 | 1:64c1fd738059 | 270 | |
caoyuan9642 | 1:64c1fd738059 | 271 | static void add_sys_commands() |
caoyuan9642 | 1:64c1fd738059 | 272 | { |
caoyuan9642 | 1:64c1fd738059 | 273 | EqMountServer::addCommand( |
caoyuan9642 | 1:64c1fd738059 | 274 | ServerCommand("sys", "Print system information", eqmount_sys)); |
caoyuan9642 | 1:64c1fd738059 | 275 | EqMountServer::addCommand( |
caoyuan9642 | 1:64c1fd738059 | 276 | ServerCommand("systime", "Print system time", eqmount_systime)); |
caoyuan9642 | 1:64c1fd738059 | 277 | EqMountServer::addCommand( |
caoyuan9642 | 1:64c1fd738059 | 278 | ServerCommand("reboot", "Reboot the system", eqmount_reboot)); |
caoyuan9642 | 1:64c1fd738059 | 279 | EqMountServer::addCommand( |
caoyuan9642 | 1:64c1fd738059 | 280 | ServerCommand("save", "Save configuration file", eqmount_save)); |
caoyuan9642 | 1:64c1fd738059 | 281 | } |
caoyuan9642 | 1:64c1fd738059 | 282 |