libztex.h 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /**
  2. * libztex.h - headers for Ztex 1.15x fpga board support library
  3. *
  4. * Copyright 2012 nelisky
  5. * Copyright 2012 Luke Dashjr
  6. *
  7. * This work is based upon the Java SDK provided by ztex which is
  8. * Copyright (C) 2009-2011 ZTEX GmbH.
  9. * http://www.ztex.de
  10. *
  11. * This program is free software; you can redistribute it and/or modify
  12. * it under the terms of the GNU General Public License version 2 as
  13. * published by the Free Software Foundation.
  14. *
  15. * This program is distributed in the hope that it will be useful, but
  16. * WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  18. * General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU General Public License
  21. * along with this program; if not, see http://www.gnu.org/licenses/.
  22. **/
  23. #ifndef __LIBZTEX_H__
  24. #define __LIBZTEX_H__
  25. #include <libusb.h>
  26. #include "dynclock.h"
  27. #define LIBZTEX_MAX_DESCRIPTORS 512
  28. #define LIBZTEX_SNSTRING_LEN 10
  29. #define LIBZTEX_IDVENDOR 0x221A
  30. #define LIBZTEX_IDPRODUCT 0x0100
  31. struct libztex_fpgastate {
  32. bool fpgaConfigured;
  33. unsigned char fpgaChecksum;
  34. uint16_t fpgaBytes;
  35. unsigned char fpgaInitB;
  36. unsigned char fpgaFlashResult;
  37. bool fpgaFlashBitSwap;
  38. };
  39. struct libztex_device {
  40. pthread_mutex_t mutex;
  41. struct libztex_device *root;
  42. struct libusb_device_descriptor descriptor;
  43. libusb_device_handle *hndl;
  44. unsigned char usbbus;
  45. unsigned char usbaddress;
  46. unsigned char snString[LIBZTEX_SNSTRING_LEN+1];
  47. unsigned char productId[4];
  48. unsigned char fwVersion;
  49. unsigned char interfaceVersion;
  50. unsigned char interfaceCapabilities[6];
  51. unsigned char moduleReserved[12];
  52. uint8_t numNonces;
  53. uint16_t offsNonces;
  54. double freqM1;
  55. char* bitFileName;
  56. bool suspendSupported;
  57. double hashesPerClock;
  58. uint8_t extraSolutions;
  59. struct dclk_data dclk;
  60. int16_t numberOfFpgas;
  61. int selectedFpga;
  62. bool parallelConfigSupport;
  63. char repr[20];
  64. };
  65. struct libztex_dev_list {
  66. struct libztex_device *dev;
  67. struct libztex_dev_list *next;
  68. };
  69. struct libztex_hash_data {
  70. uint32_t goldenNonce[2];
  71. uint32_t nonce;
  72. uint32_t hash7;
  73. };
  74. extern int libztex_scanDevices (struct libztex_dev_list ***devs);
  75. extern void libztex_freeDevList (struct libztex_dev_list **devs);
  76. extern int libztex_prepare_device (struct libusb_device *dev, struct libztex_device** ztex);
  77. extern void libztex_destroy_device (struct libztex_device* ztex);
  78. extern int libztex_configureFpga (struct libztex_device *dev, const char *repr);
  79. extern int libztex_setFreq (struct libztex_device *ztex, uint16_t freq, const char *repr);
  80. extern int libztex_sendHashData (struct libztex_device *ztex, unsigned char *sendbuf);
  81. extern int libztex_readHashData (struct libztex_device *ztex, struct libztex_hash_data nonces[]);
  82. extern int libztex_resetFpga (struct libztex_device *ztex);
  83. extern int libztex_selectFpga(struct libztex_device *ztex, int16_t fpgaNum);
  84. extern int libztex_numberOfFpgas(struct libztex_device *ztex);
  85. #endif /* __LIBZTEX_H__ */