Portál AbcLinuxu, 10. května 2025 00:00
/* This program is distributed under the GPL, version 2 */
#include stdio.h
#include unistd.h
#ifdef __WIN32__
#define sleep(x) Sleep(x)
#endif
#include ftdi.h
int main(int argc, char **argv)
{
struct ftdi_context ftdic;
int f,i;
unsigned char buf[1];
if (ftdi_init(&ftdic) < 0)
{
fprintf(stderr, "ftdi_init failed\n");
return EXIT_FAILURE;
}
f = ftdi_usb_open(&ftdic, 0x0403, 0x6001);
if (f < 0 && f != -5)
{
fprintf(stderr, "unable to open ftdi device: %d (%s)\n", f, ftdi_get_error_string(&ftdic));
exit(-1);
}
printf("ftdi open succeeded: %d\n",f);
printf("enabling bitbang mode\n");
ftdi_set_bitmode(&ftdic, 0xFF, BITMODE_BITBANG);
sleep(3);
buf[0] = 0x0;
printf("turning everything on\n");
f = ftdi_write_data(&ftdic, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(&ftdic));
}
sleep(3);
buf[0] = 0xFF;
printf("turning everything off\n");
f = ftdi_write_data(&ftdic, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(&ftdic));
}
sleep(3);
for (i = 0; i < 32; i++)
{
buf[0] = 0 | (0xFF ^ 1 << (i % 8));
if ( i > 0 && (i % 8) == 0)
{
printf("\n");
}
printf("%02hhx ",buf[0]);
fflush(stdout);
f = ftdi_write_data(&ftdic, buf, 1);
if (f < 0)
{
fprintf(stderr,"write failed for 0x%x, error %d (%s)\n",buf[0],f, ftdi_get_error_string(&ftdic));
}
sleep(1);
}
printf("\n");
printf("disabling bitbang mode\n");
ftdi_disable_bitbang(&ftdic);
ftdi_usb_close(&ftdic);
ftdi_deinit(&ftdic);
}
Při pokusu o kompiulace příkazem:
gcc bitbang.c -o bitbang
dostanu tohle:
hrabosh@GentooOnAthlon ~/Aktualni_vyvojovy_mrdnik/USB $ gcc bitbang.c -o bitbang /tmp/ccIlZQWy.o: In function `main': bitbang.c:(.text+0x15): undefined reference to `ftdi_init' bitbang.c:(.text+0x6b): undefined reference to `ftdi_usb_open' bitbang.c:(.text+0x89): undefined reference to `ftdi_get_error_string' bitbang.c:(.text+0xf5): undefined reference to `ftdi_set_bitmode' bitbang.c:(.text+0x12e): undefined reference to `ftdi_write_data' bitbang.c:(.text+0x145): undefined reference to `ftdi_get_error_string' bitbang.c:(.text+0x1ad): undefined reference to `ftdi_write_data' bitbang.c:(.text+0x1c4): undefined reference to `ftdi_get_error_string' bitbang.c:(.text+0x292): undefined reference to `ftdi_write_data' bitbang.c:(.text+0x2a9): undefined reference to `ftdi_get_error_string' bitbang.c:(.text+0x318): undefined reference to `ftdi_disable_bitbang' bitbang.c:(.text+0x324): undefined reference to `ftdi_usb_close' bitbang.c:(.text+0x330): undefined reference to `ftdi_deinit' collect2: ld returned 1 exit statusNevíte někdo, kde hledat problém? Díky !
-lftdi
(a teda treba kompilátoru povedať, že sa tam používa aj nejaká knižnica). Je ale možné (nechce sa mi to zisťovať), že FTDI knižnica obsahuje konfiguráciu pre pkgconfig a/alebo skript ftdi_config, takže sa to bude dať urobiť aj lepšie.
-lftdi
řekne linkeru s čím vším má program slinkovat, a parametr -L/nejaky/adresar
ještě může upřesnit, kde všude má linker hledat.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.