summaryrefslogtreecommitdiff
path: root/gpsflash.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2005-07-28 15:26:08 +0000
committerEric S. Raymond <esr@thyrsus.com>2005-07-28 15:26:08 +0000
commit496ced5b11d42f9f9a27d99b9965197c13b8965b (patch)
treee0e07f3d6e74caaa97336bd61f39509f1b4f4e93 /gpsflash.c
parentf555c9ecc5d8a2b3ac93db5614f8b5839b929ac7 (diff)
downloadgpsd-496ced5b11d42f9f9a27d99b9965197c13b8965b.tar.gz
Added -n option and probe method to gpsflash.
Diffstat (limited to 'gpsflash.c')
-rw-r--r--gpsflash.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/gpsflash.c b/gpsflash.c
index 55f6fde0..f0675a2c 100644
--- a/gpsflash.c
+++ b/gpsflash.c
@@ -262,7 +262,7 @@ main(int argc, char **argv){
int ch;
int lfd, ffd, pfd;
size_t ls, fs;
- bool fflag = false, lflag = false, pflag = false;
+ bool fflag = false, lflag = false, pflag = false, nflag = false;
struct stat sb;
struct flashloader_t *gpstype = &sirf_type;
char *fname = NULL;
@@ -277,7 +277,7 @@ main(int argc, char **argv){
progname = argv[0];
- while ((ch = getopt(argc, argv, "f:l:p:")) != -1)
+ while ((ch = getopt(argc, argv, "f:l:np:")) != -1)
switch (ch) {
case 'f':
fname = optarg;
@@ -287,6 +287,9 @@ main(int argc, char **argv){
lname = optarg;
lflag = true;
break;
+ case 'n':
+ nflag = true;
+ break;
case 'p':
port = optarg;
pflag = true;
@@ -301,8 +304,8 @@ main(int argc, char **argv){
argv += optind;
/* nasty little trick to hopefully make people read the manual */
- if ( ((warning = getenv("I_READ_THE_WARNING")) == NULL) ||
- (strcmp(warning, "why oh why didn't i take the blue pill") == 0 )){
+ if (!nflag && (((warning = getenv("I_READ_THE_WARNING")) == NULL) ||
+ (strcmp(warning, "why oh why didn't i take the blue pill") == 0 ))){
printf("\nThis program rewrites your receiver's flash ROM.\n");
printf("If done improperly this will permanently ruin your\n");
printf("receiver. We insist you read the gpsflash manpage\n");
@@ -381,6 +384,7 @@ main(int argc, char **argv){
return 1;
}
+ /* get the firmware */
if (read(ffd, firmware, fs) != (ssize_t)fs) {
(void)free(loader);
(void)free(firmware);
@@ -427,7 +431,23 @@ main(int argc, char **argv){
return 1;
}
- gpsd_report(1, "port set up, blocking signals now...\n");
+ gpsd_report(1, "port set up...\n");
+
+ if(gpstype->version_check(pfd) == -1) {
+ (void)free(loader);
+ (void)free(firmware);
+ gpsd_report(0, "version_check()\n");
+ return 1;
+ }
+
+ gpsd_report(1, "version checked...\n");
+
+ if (nflag) {
+ gpsd_report(1, "probe finished.\n");
+ exit(0);
+ }
+
+ gpsd_report(1, "blocking signals...\n");
/* once we get here, we are uninterruptable. handle signals */
(void)sigemptyset(&sigset);