Skip to content

Commit 4c2dce0

Browse files
committed
add -target auto command
1 parent e280b41 commit 4c2dce0

File tree

9 files changed

+117
-47
lines changed

9 files changed

+117
-47
lines changed

command/kCommand.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ static int menuSelect( uint32_t maxlens )
214214
return value;
215215
}
216216

217-
static uint32_t updateUartSetting( int port, int baudrate )
217+
uint32_t updateUartSetting( int port, int baudrate )
218218
{
219219
if (port != -1)
220220
{

command/kCommand.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ uint32_t kCommand_Help( void );
6969
uint32_t kCommand_GetVersion( const char *version );
7070
uint32_t kCommand_GetSettingInformation( void );
7171

72+
uint32_t updateUartSetting( int port, int baudrate );
73+
7274
uint32_t kCommand_UartConfigureAutomatic( void );
7375
uint32_t kCommand_UartComportConfigure( const char *portString, const char *baudrateString );
7476
uint32_t kCommand_UartBaudrateConfigure( const char *baudrateString );

command/kCommandHelp.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ void kCommand_HelpKSerial( void )
6464
void kCommand_HelpTarget( void )
6565
{
6666
klogd(" -TATGET ... check device\n");
67+
klogd(" -TATGET AUTO ... set baudrate automatic\n");
6768
klogd(" -TATGET BAUD [BAUD] ... set target baudrate\n");
6869
klogd(" -TATGET RATE [RATE] ... set target update rate\n");
6970
klogd(" -TATGET MODE [MODE] ... set target mode\n");

command/kCommandTarget.c

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ uint32_t kCommand_Target( const char *commandString, const char *inputString )
5656
kCommand_HelpTarget();
5757
return KS_OK;
5858
}
59+
// >> ks -taget auto
60+
if ((strcmp("a", cmd) == 0) || (strcmp("auto", cmd) == 0))
61+
{
62+
return kCommandTarget_AutoBaudrate();
63+
}
5964
// >> ks -taget baud [baud]
6065
if (strcmp("baud", cmd) == 0)
6166
{
@@ -85,7 +90,6 @@ uint32_t kCommand_Target( const char *commandString, const char *inputString )
8590
uint32_t kCommandTarget_CheckDevice( void )
8691
{
8792
uint32_t id = 0;
88-
8993
if (kSerial_DeviceCheck(&id) != KS_OK)
9094
{
9195
klogd(" >> Device Not Found\n");
@@ -95,16 +99,47 @@ uint32_t kCommandTarget_CheckDevice( void )
9599
return KS_OK;
96100
}
97101

102+
uint32_t kCommandTarget_AutoBaudrate( void )
103+
{
104+
const int searchOrder[BAUDRATE_LIST_MAX_LENS] =
105+
{
106+
3, 4, 5, 6, 7, 8, 0, 1, 2
107+
};
108+
for (uint32_t i = 0; i < BAUDRATE_LIST_MAX_LENS; i++)
109+
{
110+
uint32_t id = 0;
111+
resetSerialBaudrate(baudratelist[searchOrder[i]]);
112+
if (kSerial_DeviceCheck(&id) == KS_OK)
113+
{
114+
klogd(" search baudrate = %d bps\n", s.cfg.baudrate);
115+
updateUartSetting(-1, -1);
116+
return KS_OK;
117+
}
118+
}
119+
120+
return KS_ERROR;
121+
}
122+
98123
uint32_t kCommandTarget_SetBaudrate( uint32_t baudrate )
99124
{
100125
if (baudrate < 0)
101126
{
102127
klogd(" >> set target baudrate error (%d)\n", baudrate);
103128
return KS_ERROR;
104129
}
105-
klogd(" >> set target baudrate %d bps\n", baudrate);
130+
klogd(" >> set target baudrate %d bps ... ", baudrate);
106131
uint8_t param[2] = {KSCMD_R0_DEVICE_BAUDRATE, 4};
107132
kSerial_SendPacket(param, &baudrate, param[1], KS_R0);
133+
134+
uint32_t id = 0;
135+
resetSerialBaudrate(baudrate);
136+
if (kSerial_DeviceCheck(&id) != KS_OK)
137+
{
138+
klogd("ERROR\n");
139+
return KS_ERROR;
140+
}
141+
klogd("OK\n");
142+
updateUartSetting(-1, -1);
108143
return KS_OK;
109144
}
110145

command/kCommandTarget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ extern "C" {
3333
uint32_t kCommand_Target( const char *commandString, const char *valueString );
3434

3535
uint32_t kCommandTarget_CheckDevice( void );
36+
uint32_t kCommandTarget_AutoBaudrate( void );
3637
uint32_t kCommandTarget_SetBaudrate( uint32_t baudrate );
3738
uint32_t kCommandTarget_SetUpdateRate( uint32_t rate );
3839
uint32_t kCommandTarget_SetMode( uint32_t mode );

main.c

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -49,44 +49,6 @@ kfile_setting_t setting =
4949
/* Prototypes ------------------------------------------------------------------------------*/
5050
/* Functions -------------------------------------------------------------------------------*/
5151

52-
uint32_t openSerialPort( void )
53-
{
54-
if (s.isConnected == KS_TRUE)
55-
{
56-
return KS_BUSY;
57-
}
58-
// check comport
59-
if (cplist.num == 0)
60-
{
61-
klogd(" not available port\n");
62-
return KS_ERROR;
63-
}
64-
// open serial port
65-
if (Serial_OpenComport(&s) != KS_OK)
66-
{
67-
klogd("\n open serial error (COM%d)\n", s.port);
68-
return KS_ERROR;
69-
}
70-
71-
return KS_OK;
72-
}
73-
74-
void closeSerialPort( void )
75-
{
76-
Serial_CloseComport(&s);
77-
Serial_FreeComportList(&cplist);
78-
}
79-
80-
uint32_t scanSerialPort( void )
81-
{
82-
if (Serial_GetComportList(&cplist) != KS_OK)
83-
{
84-
klogd("\n scan comport error\n");
85-
return KS_ERROR;
86-
}
87-
return KS_OK;
88-
}
89-
9052
uint32_t loadSettingFile( void )
9153
{
9254
if (kFile_GetSetting(&setting) != KS_OK)
@@ -185,6 +147,14 @@ int main( int argc, char **argv )
185147
{
186148
return KS_ERROR;
187149
}
150+
// close serial port
151+
Serial_CloseComport(&s);
152+
// open serial port
153+
if (Serial_OpenComport(&s) != KS_OK)
154+
{
155+
klogd("\n open serial error (COM%d)\n", s.port);
156+
return KS_ERROR;
157+
}
188158

189159
// command (with serial)
190160
switch (command)
@@ -260,6 +230,7 @@ int main( int argc, char **argv )
260230

261231
// close serial port
262232
closeSerialPort();
233+
releaseSerialPortList();
263234

264235
return KS_OK;
265236
}

out/ks.exe

11.2 KB
Binary file not shown.

source/serial.c

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,55 @@ static int set_dcb_config( const serial_t *serial, serial_config_t *config, DCB
7070

7171
/* Functions -------------------------------------------------------------------------------*/
7272

73+
uint32_t openSerialPort( void )
74+
{
75+
if (s.isConnected == KS_OPEN)
76+
{
77+
return KS_BUSY;
78+
}
79+
// check comport
80+
if (cplist.num == 0)
81+
{
82+
klogd(" not available port\n");
83+
return KS_ERROR;
84+
}
85+
// open serial port
86+
if (Serial_OpenComport(&s) != KS_OK)
87+
{
88+
klogd("\n open serial error (COM%d)\n", s.port);
89+
return KS_ERROR;
90+
}
91+
92+
return KS_OK;
93+
}
94+
95+
void closeSerialPort( void )
96+
{
97+
Serial_CloseComport(&s);
98+
}
99+
100+
uint32_t scanSerialPort( void )
101+
{
102+
if (Serial_GetComportList(&cplist) != KS_OK)
103+
{
104+
klogd("\n scan comport error\n");
105+
return KS_ERROR;
106+
}
107+
return KS_OK;
108+
}
109+
110+
void releaseSerialPortList( void )
111+
{
112+
Serial_FreeComportList(&cplist);
113+
}
114+
115+
void resetSerialBaudrate( int baudrate )
116+
{
117+
Serial_CloseComport(&s);
118+
s.cfg.baudrate = baudrate;
119+
openSerialPort();
120+
}
121+
73122
void Serial_Delay( uint32_t ms )
74123
{
75124
Sleep(ms);
@@ -82,7 +131,7 @@ int Serial_OpenComport( serial_t *serial )
82131
DWORD desiredAccess;
83132
char portName[SERIAL_STRING_BUFFER_SIZE];
84133

85-
if (serial->isConnected == KS_TRUE)
134+
if (serial->isConnected == KS_OPEN)
86135
{
87136
return KS_ERROR;
88137
}
@@ -151,15 +200,20 @@ int Serial_OpenComport( serial_t *serial )
151200
dcbSettings.fNull = FALSE;
152201
dcbSettings.fAbortOnError = FALSE;
153202
set_dcb_config(serial, &serial->cfg, &dcbSettings);
154-
serial->isConnected = KS_TRUE;
203+
serial->isConnected = KS_OPEN;
155204

156205
return KS_OK;
157206
}
158207

159-
void Serial_CloseComport( serial_t *serial )
208+
int Serial_CloseComport( serial_t *serial )
160209
{
161-
CloseHandle(serial->handle);
162-
serial->isConnected = KS_FALSE;
210+
if (serial->isConnected != KS_CLOSE)
211+
{
212+
CloseHandle(serial->handle);
213+
serial->isConnected = KS_CLOSE;
214+
return KS_OK;
215+
}
216+
return KS_ERROR;
163217
}
164218

165219
void Serial_SetBaudrate( serial_t *serial, int baudrate )

source/serial.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,16 @@ extern serial_t s;
169169

170170
/* Functions -------------------------------------------------------------------------------*/
171171

172+
uint32_t openSerialPort( void );
173+
void closeSerialPort( void );
174+
uint32_t scanSerialPort( void );
175+
void releaseSerialPortList( void );
176+
void resetSerialBaudrate( int baudrate );
177+
172178
void Serial_Delay( uint32_t ms );
173179

174180
int Serial_OpenComport( serial_t *serial );
175-
void Serial_CloseComport( serial_t *serial );
181+
int Serial_CloseComport( serial_t *serial );
176182
void Serial_SetBaudrate( serial_t *serial, int baudrate );
177183
int Serial_GetComportList( comport_list_t *list );
178184
void Serial_FreeComportList( comport_list_t *list );

0 commit comments

Comments
 (0)