/************************************************************************** Copyright (c) 2012 Timothy Pearson This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Description: Dumps the specified device in a xilinx bit file to stdout ***************************************************************************/ #include #include #include #include #include "bitfile.h" #define BSIZE 1048576 /* 1k */ void convertToUpperCase(char *str) { while(*str != '\0') { *str = toupper((unsigned char)*str); str++; } } void findAndRemoveEndString(char *str, char* text) { char *location = strstr(str, text); int len = strlen(str); int sublen = strlen(text); if (location && (location == (str+(len-sublen)))) { *location = 0; } } void stripPackageSuffix(char *str) { findAndRemoveEndString(str, "FG256"); findAndRemoveEndString(str, "CSG324"); } /* read a bit file from stdin */ int main(int argc, char *argv[]) { struct bithead bh; FILE *bitfile; if (argc < 1) { fprintf(stderr,"Insufficient args %s filename.bit\n",argv[0]); return 1; } if ((bitfile=fopen(argv[1],"rb"))==NULL) { perror("BITFILE"); return 2; } initbh(&bh); if (readhead(&bh, bitfile)) { fprintf(stderr,"Invalid bit file header\n"); return 3; } convertToUpperCase(bh.part); stripPackageSuffix(bh.part); printf("XC%s\n", bh.part); fclose(bitfile); freebh(&bh); return 0; }