summaryrefslogtreecommitdiff
path: root/usb-i2c-sl018
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2013-01-30 02:16:09 +0000
committerChristian Pointner <equinox@spreadspace.org>2013-01-30 02:16:09 +0000
commit73c7cada410244916314d44bfbf3be494a81fa4c (patch)
treebeb0fed46b2a2469b0a274f1b6bf4b6b2d5de186 /usb-i2c-sl018
parentuid_len checks (diff)
slightly better error handling for update keys
git-svn-id: https://svn.spreadspace.org/avr/trunk@102 aa12f405-d877-488e-9caf-2d797e2a1cc7
Diffstat (limited to 'usb-i2c-sl018')
-rw-r--r--usb-i2c-sl018/tuer-rfid.c3
-rw-r--r--usb-i2c-sl018/update-keys.c25
2 files changed, 20 insertions, 8 deletions
diff --git a/usb-i2c-sl018/tuer-rfid.c b/usb-i2c-sl018/tuer-rfid.c
index 2406ec7..a50866e 100644
--- a/usb-i2c-sl018/tuer-rfid.c
+++ b/usb-i2c-sl018/tuer-rfid.c
@@ -259,13 +259,14 @@ void flash_keystore_from_stdio(void)
byte_pos=0;
eeprom_update_block(&keyslot,&keystore[keyslot_pos],sizeof(keyslot));
keyslot_pos++;
- fprintf(stdio,".");
+ fputc('.', stdio);
fflush(stdio);
led_toggle();
}
}
}
fprintf(stdio,"\n");
+ fputc(0, stdio);
led_off();
}
diff --git a/usb-i2c-sl018/update-keys.c b/usb-i2c-sl018/update-keys.c
index b730c6e..d4dfd06 100644
--- a/usb-i2c-sl018/update-keys.c
+++ b/usb-i2c-sl018/update-keys.c
@@ -37,15 +37,17 @@ uint8_t generate_csum(keyslot_t data)
return sum2<<4 | sum1;
}
-void send_key(keyslot_t key, FILE* dev)
+int send_key(keyslot_t key, FILE* dev)
{
fwrite(key, sizeof(keyslot_t), 1, dev);
fflush(dev);
char tmp;
while(fread(&tmp, 1, 1, dev)) {
fwrite(&tmp, 1, 1, stdout);
- if(tmp == '.') break;
+ if(tmp == 0) return 1;
+ if(tmp == '.') return 0;
}
+ return 0;
}
int main(int argc, char* argv[])
@@ -107,7 +109,10 @@ int main(int argc, char* argv[])
key[j] = 0;
}
key[sizeof(keyslot_t)-1] = generate_csum(key);
- send_key(key, dev);
+ if(send_key(key, dev)) {
+ fprintf(stderr, "send_key failed at keyslot %d\n", key_num);
+ return 1;
+ }
key_num++;
if(key_num > EEPROM_SIZE/sizeof(keyslot_t)) {
@@ -115,13 +120,19 @@ int main(int argc, char* argv[])
break;
}
}
- printf("read %d keys from STDIN\n", key_num);
+ printf("\nread %d keys from STDIN - filling rest of keystore with invalid keys\n", key_num);
int i;
for(i=0; i<=sizeof(keyslot_t)-1; ++i) key[i] = 0xFF;
- for(i=key_num; i < EEPROM_SIZE/sizeof(keyslot_t); ++i)
- send_key(key, dev);
- printf("write finished\n");
+ for(i=key_num; i < EEPROM_SIZE/sizeof(keyslot_t); ++i) {
+ if(send_key(key, dev)) {
+ fprintf(stderr, "send_key failed at keyslot %d\n", key_num);
+ return 1;
+ }
+ key_num++;
+ }
+
+ printf("\nwrite of %d keys finished\n", key_num);
return 0;
}