FreeCalypso > hg > fc-usbser-tools
diff duart28/eeprom_wr.c @ 31:530ec3792de8
fc-duart28-conf: implement set command
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 09 Sep 2023 19:40:58 +0000 |
parents | duart28/eeprom_rd.c@8de3891460db |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/duart28/eeprom_wr.c Sat Sep 09 19:40:58 2023 +0000 @@ -0,0 +1,49 @@ +/* + * This module implements the final step of modifying the EEPROM + * for the desired configuration. + */ + +#include <sys/types.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include <usb.h> +#include "../libftmini/eeprom_func.h" + +extern u_short eeprom[64]; + +static void +recompute_checksum() +{ + u_short chksum = 0xAAAA; + unsigned n; + + for (n = 0; n < 63; n++) { + chksum ^= eeprom[n]; + chksum = (chksum << 1) | (chksum >> 15); + } + eeprom[63] = chksum; +} + +void +update_eeprom(usbh, newconf) + usb_dev_handle *usbh; +{ + switch (newconf) { + case 'C': + eeprom[2] = 0x7152; + break; + case 'S': + eeprom[2] = 0x6010; + break; + default: + fprintf(stderr, "BUG: wrong argument to update_eeprom()\n"); + abort(); + } + eeprom[31] = newconf; + recompute_checksum(); + ftmini_write_eeprom_loc(usbh, 2, eeprom[2]); + ftmini_write_eeprom_loc(usbh, 31, eeprom[31]); + ftmini_write_eeprom_loc(usbh, 63, eeprom[63]); +}