add -n parameter to stmloader to prevent sending reboot sequence in case STM32 was already in bootloader mode (by fiendie)

git-svn-id: https://afrodevices.googlecode.com/svn/trunk/baseflight@266 7c89a4a9-59b9-e629-4cfe-3a2d53b20e61
This commit is contained in:
timecop@gmail.com 2013-02-15 09:53:24 +00:00
parent 4c0fe94072
commit f5616f1437
4 changed files with 26 additions and 18 deletions

View File

@ -11,4 +11,4 @@ all:
-Wall -Wall
clean: clean:
rm -f stmloader rm -f stmloader; rm -rf stmloader.dSYM

View File

@ -35,10 +35,11 @@ serialStruct_t *s;
char port[256]; char port[256];
unsigned int baud; unsigned int baud;
unsigned char overrideParity; unsigned char overrideParity;
unsigned char noSendR;
char firmFile[256]; char firmFile[256];
void loaderUsage(void) { void loaderUsage(void) {
fprintf(stderr, "usage: loader <-h> <-p device_file> <-b baud_rate> <-f firmware_file> <-o>\n"); fprintf(stderr, "usage: loader <-h> <-p device_file> <-b baud_rate> <-f firmware_file> <-o> <-n>\n");
} }
unsigned int loaderOptions(int argc, char **argv) { unsigned int loaderOptions(int argc, char **argv) {
@ -47,16 +48,18 @@ unsigned int loaderOptions(int argc, char **argv) {
strncpy(port, DEFAULT_PORT, sizeof(port)); strncpy(port, DEFAULT_PORT, sizeof(port));
baud = DEFAULT_BAUD; baud = DEFAULT_BAUD;
overrideParity = 0; overrideParity = 0;
noSendR = 0;
strncpy(firmFile, FIRMWARE_FILENAME, sizeof(firmFile)); strncpy(firmFile, FIRMWARE_FILENAME, sizeof(firmFile));
/* options descriptor */ /* options descriptor */
static struct option longopts[] = { static struct option longopts[] = {
{ "help", required_argument, NULL, 'h' }, { "help", required_argument, NULL, 'h' },
{ "port", required_argument, NULL, 'p' }, { "port", required_argument, NULL, 'p' },
{ "baud", required_argument, NULL, 's' }, { "baud", required_argument, NULL, 's' },
{ "firm_file", required_argument, NULL, 'f' }, { "firm_file", required_argument, NULL, 'f' },
{ "overide_party",no_argument, NULL, 'o' }, { "override_parity", no_argument, NULL, 'o' },
{ NULL, 0, NULL, 0 } { "no_send_r", no_argument, NULL, 'n' },
{ NULL, 0, NULL, 0 }
}; };
while ((ch = getopt_long(argc, argv, "hp:b:f:o", longopts, NULL)) != -1) while ((ch = getopt_long(argc, argv, "hp:b:f:o", longopts, NULL)) != -1)
@ -77,6 +80,9 @@ unsigned int loaderOptions(int argc, char **argv) {
case 'o': case 'o':
overrideParity = 1; overrideParity = 1;
break; break;
case 'n':
noSendR = 1;
break;
default: default:
loaderUsage(); loaderUsage();
return 0; return 0;
@ -109,7 +115,7 @@ int main(int argc, char **argv) {
} }
else { else {
printf("Upgrading STM on port %s from %s...\n", port, firmFile); printf("Upgrading STM on port %s from %s...\n", port, firmFile);
stmLoader(s, fw, overrideParity); stmLoader(s, fw, overrideParity, noSendR);
} }
return 0; return 0;

View File

@ -175,7 +175,7 @@ char *stmHexLoader(serialStruct_t *s, FILE *fp) {
return 0; return 0;
} }
void stmLoader(serialStruct_t *s, FILE *fp, unsigned char overrideParity) { void stmLoader(serialStruct_t *s, FILE *fp, unsigned char overrideParity, unsigned char noSendR) {
char c; char c;
unsigned char b1, b2, b3; unsigned char b1, b2, b3;
unsigned char i, n; unsigned char i, n;
@ -185,13 +185,15 @@ void stmLoader(serialStruct_t *s, FILE *fp, unsigned char overrideParity) {
if (!overrideParity) if (!overrideParity)
serialEvenParity(s); serialEvenParity(s);
top: if(!noSendR) {
printf("Sending R to place Baseflight in bootloader, press a key to continue"); top:
serialFlush(s); printf("Sending R to place Baseflight in bootloader, press a key to continue");
c = 'R'; serialFlush(s);
serialWrite(s, &c, 1); c = 'R';
getchar(); serialWrite(s, &c, 1);
printf("\n"); getchar();
printf("\n");
}
serialFlush(s); serialFlush(s);

View File

@ -22,6 +22,6 @@
#include <stdio.h> #include <stdio.h>
#include "serial.h" #include "serial.h"
extern void stmLoader(serialStruct_t *s, FILE *fp, unsigned char overrideParity); extern void stmLoader(serialStruct_t *s, FILE *fp, unsigned char overrideParity, unsigned char noSendR);
#endif #endif