mirror of
https://github.com/DigitalDevices/dddvb.git
synced 2023-10-10 13:37:43 +02:00
add license support
This commit is contained in:
parent
19fd6f1b26
commit
cdaf838cb1
@ -192,10 +192,17 @@ int FlashDetect(int dev)
|
|||||||
printf("Flash: SPANSION S25FL116K 16 MBit\n");
|
printf("Flash: SPANSION S25FL116K 16 MBit\n");
|
||||||
break;
|
break;
|
||||||
case SPANSION_S25FL132K :
|
case SPANSION_S25FL132K :
|
||||||
|
<<<<<<< 472e247726096a6d88583bfaac91ce1f10f91c82
|
||||||
printf("Flash: SPANSION S25FL132K 32 MBit\n");
|
printf("Flash: SPANSION S25FL132K 32 MBit\n");
|
||||||
break;
|
break;
|
||||||
case SPANSION_S25FL164K :
|
case SPANSION_S25FL164K :
|
||||||
printf("Flash: SPANSION S25FL164K 64 MBit\n");
|
printf("Flash: SPANSION S25FL164K 64 MBit\n");
|
||||||
|
=======
|
||||||
|
printf("Flash: SPANSION S25FL116K 32 MBit\n");
|
||||||
|
break;
|
||||||
|
case SPANSION_S25FL164K :
|
||||||
|
printf("Flash: SPANSION S25FL116K 64 MBit\n");
|
||||||
|
>>>>>>> add license support
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
@ -1436,6 +1443,222 @@ int XO2Prog(int dev, int argc, char* argv[], uint32_t Flags)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------------------------------------
|
||||||
|
// -----------------------------------------------------------------------------------------------------------
|
||||||
|
// -----------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define LICENSE_CONTROL 0x1C
|
||||||
|
|
||||||
|
|
||||||
|
void GetId(int dev, uint8_t Id[])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < 4; i += 1) {
|
||||||
|
uint32_t tmp;
|
||||||
|
|
||||||
|
writereg(dev,LICENSE_CONTROL,0x00100000 + (i << 16));
|
||||||
|
readreg(dev,LICENSE_CONTROL,&tmp);
|
||||||
|
Id[i*2] = ((tmp >> 24) & 0xFF);
|
||||||
|
Id[i*2+1] = ((tmp >> 16) & 0xFF);
|
||||||
|
}
|
||||||
|
writereg(dev,LICENSE_CONTROL,0x00000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetLK(int dev, uint8_t LK[])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 12; i += 1) {
|
||||||
|
uint32_t tmp;
|
||||||
|
writereg(dev, LICENSE_CONTROL,0x00140000 + (i << 16));
|
||||||
|
readreg(dev,LICENSE_CONTROL,&tmp);
|
||||||
|
LK[i*2] = ((tmp >> 24) & 0xFF);
|
||||||
|
LK[i*2+1] = ((tmp >> 16) & 0xFF);
|
||||||
|
}
|
||||||
|
writereg(dev, LICENSE_CONTROL, 0x00000000);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *GetSerNbr(int dev)
|
||||||
|
{
|
||||||
|
char* SerNbr;
|
||||||
|
uint8_t Buffer[17];
|
||||||
|
uint32_t BytesReturned = 0;
|
||||||
|
uint32_t Start = 0x10;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
memset(Buffer,0,sizeof(Buffer));
|
||||||
|
if (flashread(dev, Buffer, Start, sizeof(Buffer) - 1))
|
||||||
|
{
|
||||||
|
printf("Ioctl returns error\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if( Buffer[0] == 0xFF )
|
||||||
|
Buffer[0] = 0x00;
|
||||||
|
|
||||||
|
SerNbr = malloc(17);
|
||||||
|
memset(SerNbr, 0, sizeof(char) * 17);
|
||||||
|
for(i = 0; i < 17; i += 1) {
|
||||||
|
SerNbr[i] = (char) Buffer[i];
|
||||||
|
if( SerNbr[i] == 0 )
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SerNbr;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetHex(char* s, uint32_t nBytes, uint8_t* Buffer)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
if( strlen(s) < (nBytes * 2) ) return -1;
|
||||||
|
for (i = 0; i < nBytes; i += 1) {
|
||||||
|
char d0, d1;
|
||||||
|
d0 = s[i*2];
|
||||||
|
if( !isxdigit(d0) ) return -1;
|
||||||
|
d1 = s[i*2+1];
|
||||||
|
if( !isxdigit(d1) ) return -1;
|
||||||
|
|
||||||
|
Buffer[i] =(uint8_t) ((d0 > '9' ? d0 - 'A' + 10 : d0 - '0') << 4) | ((d1 > '9' ? d1 - 'A' + 10 : d1 - '0'));
|
||||||
|
}
|
||||||
|
return (nBytes * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int lic_export(int dev, int argc, char* argv[], uint32_t Flags)
|
||||||
|
{
|
||||||
|
uint32_t HWVersion;
|
||||||
|
uint32_t DeviceID;
|
||||||
|
uint8_t Id[8];
|
||||||
|
uint8_t LK[24];
|
||||||
|
char *SerNbr;
|
||||||
|
FILE* fout = stdout;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
GetId(dev,Id);
|
||||||
|
GetLK(dev,LK);
|
||||||
|
SerNbr = GetSerNbr(dev);
|
||||||
|
if( SerNbr == NULL )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
readreg(dev,0x00,&HWVersion);
|
||||||
|
readreg(dev,0x08,&DeviceID);
|
||||||
|
|
||||||
|
if( argc > 0 ) {
|
||||||
|
size_t n = strlen(argv[0]) + 8 + 16;
|
||||||
|
char *fname = malloc(n);
|
||||||
|
|
||||||
|
snprintf(fname, n-1, "%s_%s.lic",argv[0],SerNbr);
|
||||||
|
fout = fopen(fname,"w");
|
||||||
|
if( fout == NULL ) {
|
||||||
|
printf("Can't create outputfile\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(fout,"VEN:%04X\n",DeviceID & 0xFFFF);
|
||||||
|
fprintf(fout,"DEV:%04X\n",(DeviceID >> 16) & 0xFFFF);
|
||||||
|
fprintf(fout,"VER:%08X\n",HWVersion);
|
||||||
|
fprintf(fout,"SERNBR:%s\n",SerNbr);
|
||||||
|
fprintf(fout,"ID:");
|
||||||
|
for (i = 0; i < 8; i += 1)
|
||||||
|
fprintf(fout,"%02X",Id[i]);
|
||||||
|
fprintf(fout,"\n");
|
||||||
|
fprintf(fout,"LK:");
|
||||||
|
for (i = 0; i < 24; i += 1)
|
||||||
|
fprintf(fout,"%02X",LK[i]);
|
||||||
|
fprintf(fout,"\n");
|
||||||
|
if( argc > 0 ) fclose(fout);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lic_import(int dev, int argc, char* argv[], uint32_t Flags)
|
||||||
|
{
|
||||||
|
uint8_t LicId[8];
|
||||||
|
uint8_t CardId[8];
|
||||||
|
char *SerNbr;
|
||||||
|
uint8_t *Buffer;
|
||||||
|
FILE* fin;
|
||||||
|
int Flash;
|
||||||
|
uint32_t FlashSize = 0;
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
if( argc < 1 ) return -1;
|
||||||
|
|
||||||
|
GetId(dev, CardId);
|
||||||
|
|
||||||
|
|
||||||
|
SerNbr = GetSerNbr(dev);
|
||||||
|
if( SerNbr == NULL )
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
Buffer = malloc(4096);
|
||||||
|
memset(Buffer, 0xFF, 4096);
|
||||||
|
|
||||||
|
fin = fopen(argv[0], "r");
|
||||||
|
if( fin == NULL )
|
||||||
|
{
|
||||||
|
printf("License file not found\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
memset(LicId,0,8);
|
||||||
|
while(1) {
|
||||||
|
char s[128];
|
||||||
|
if( fgets(s,sizeof(s)-1,fin) == NULL ) break;
|
||||||
|
fputs(s,stdout);
|
||||||
|
if (strncmp(s,"ID:",3) == 0 )
|
||||||
|
{
|
||||||
|
if( GetHex(&s[3],8,LicId) < 0 ) return -1;
|
||||||
|
}
|
||||||
|
if (strncmp(s,"LK:",3) == 0 )
|
||||||
|
{
|
||||||
|
if( GetHex(&s[3],24,Buffer) < 0 ) return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(fin);
|
||||||
|
|
||||||
|
if( memcmp(CardId,LicId,8) != 0 )
|
||||||
|
{
|
||||||
|
printf("Invalid ID\n");
|
||||||
|
free(Buffer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Dump(Buffer,0,24);
|
||||||
|
Flash = FlashDetect(dev);
|
||||||
|
|
||||||
|
switch(Flash) {
|
||||||
|
case SSTI_SST25VF064C: err = FlashWritePageMode(dev,0x7FE000,Buffer,4096,0x3C); break;
|
||||||
|
case SPANSION_S25FL116K: err = FlashWritePageMode(dev,0x1FE000,Buffer,4096,0x1C); break;
|
||||||
|
case SPANSION_S25FL132K: err = FlashWritePageMode(dev,0x3FE000,Buffer,4096,0x1C); break;
|
||||||
|
case SPANSION_S25FL164K: err = FlashWritePageMode(dev,0x7FE000,Buffer,4096,0x1C); break;
|
||||||
|
default:
|
||||||
|
printf("Unsupported Flash\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
free(Buffer);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lic_erase(int dev, int argc, char* argv[], uint32_t Flags)
|
||||||
|
{
|
||||||
|
uint8_t* Buffer = malloc(4096);
|
||||||
|
int Flash = FlashDetect(dev);
|
||||||
|
uint32_t FlashSize = 0;
|
||||||
|
int err = -1;
|
||||||
|
|
||||||
|
memset(Buffer, 0xFF, 4096);
|
||||||
|
switch(Flash)
|
||||||
|
{
|
||||||
|
case SSTI_SST25VF064C: err = FlashWritePageMode(dev,0x7FE000,Buffer,4096,0x3C); break;
|
||||||
|
case SPANSION_S25FL116K: err = FlashWritePageMode(dev,0x1FE000,Buffer,4096,0x1C); break;
|
||||||
|
case SPANSION_S25FL132K: err = FlashWritePageMode(dev,0x3FE000,Buffer,4096,0x1C); break;
|
||||||
|
case SPANSION_S25FL164K: err = FlashWritePageMode(dev,0x7FE000,Buffer,4096,0x1C); break;
|
||||||
|
default:
|
||||||
|
printf("Unsupported Flash\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
free(Buffer);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct SCommand CommandTable[] =
|
struct SCommand CommandTable[] =
|
||||||
{
|
{
|
||||||
@ -1456,6 +1679,10 @@ struct SCommand CommandTable[] =
|
|||||||
|
|
||||||
{ "mdio", mdio, 1, "mdio : mdio <adr> <reg> [<value>]" },
|
{ "mdio", mdio, 1, "mdio : mdio <adr> <reg> [<value>]" },
|
||||||
{ "xo2prog", XO2Prog, 1, "DuoFlex Programming : xo2prog <FileName> [<BusNumber>]" },
|
{ "xo2prog", XO2Prog, 1, "DuoFlex Programming : xo2prog <FileName> [<BusNumber>]" },
|
||||||
|
|
||||||
|
{ "licimport", lic_import, 1, "License Import : licimport" },
|
||||||
|
{ "licexport", lic_export, 1, "License Export : licexport" },
|
||||||
|
{ "licerase", lic_erase, 1, "License Erase : licerase" },
|
||||||
{ NULL,NULL,0 }
|
{ NULL,NULL,0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user