void GetIDEPhysicalSerialNumber()
{
int ret;
int fd;
struct hd_driveid hdinfo;
fd = open("/dev/hda", O_NONBLOCK);
if (-1 == fd)
exit(-1);
ret = ioctl(fd, HDIO_GET_IDENTITY, (unsigned char*)&hdinfo);
if (-1 == ret)
exit(-1);
printf("IDE SN: %s\n", hdinfo.serial_no);
close(fd);
}
//-------------------------------------------------------------------
/* get serial number */
int gethddsn(char *ide)
{
unsigned int ide_info[257];
unsigned int info_off;
unsigned long loop2=0;
int loop, loop1=0;
if (ioperm(0x1f6, 1, 1)) {
perror("ioperm"); exit(-1);
}
outb(0xa0, 0x1f6);
if (ioperm(0x1f7, 1, 1)) {
perror("ioperm"); exit(-1);
}
outb(0xec, 0x1f7);
do {
if (ioperm(0x1f7, 1, 1)) {
perror("ioperm"); exit(-1);
}
} while (inb(0x1f7) != 0x58 && loop2++ < 0xffff);
for (info_off=0; info_off != 256; info_off++) {
if (ioperm(0x1f0, 2, 1)) {
perror("ioperm"); exit(-1);
}
ide_info[info_off] = inw(0x1f0);
}
for (loop=10, loop1=0; loop<=19; loop++)
{
ide[loop1++] = (char)(ide_info[loop] / 256);
ide[loop1++] = (char)(ide_info[loop] % 256);
}
ide[loop1] = 0;
if (loop1 > 40) printf("*error*\n");
return 0;
}
//---------------------------------------------------------------------
char *itostr ( int val, char *buf, int radix )
{
char *p = buf , *first, temp;
int digital;
if (val < 0)
{
*p++ = '-';
val = -val;
}
first = p;
do
{
digital = val%radix;
val /= radix;
if (digital > 9)
*p++ = (char)(digital - 10 + 'A');
else
*p++ = (char)(digital + '0');
}
while(val > 0);
*p-- = '\0';