RedFly.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #ifndef REDFLY_h
  2. #define REDFLY_h
  3. #include <inttypes.h>
  4. #if (defined(__AVR__) || defined(ARDUINO_ARCH_AVR))
  5. # include <avr/pgmspace.h>
  6. #endif
  7. //default baud rate
  8. #define REDFLY_BAUDRATE (9600)
  9. //Tx power (init cmd)
  10. #define LOW_POWER (0)
  11. #define MED_POWER (1)
  12. #define HIGH_POWER (2)
  13. #define LOW_POWER_1M (3)
  14. #define MED_POWER_1M (4)
  15. #define HIGH_POWER_1M (5)
  16. #define LOW_POWER_2M (6)
  17. #define MED_POWER_2M (7)
  18. #define HIGH_POWER_2M (8)
  19. #define LOW_POWER_11M (9)
  20. #define MED_POWER_11M (10)
  21. #define HIGH_POWER_11M (11)
  22. #define LOW_POWER_12M (12)
  23. #define MED_POWER_12M (13)
  24. #define HIGH_POWER_12M (14)
  25. #define LOW_POWER_24M (15)
  26. #define MED_POWER_24M (16)
  27. #define HIGH_POWER_24M (17)
  28. #define LOW_POWER_54M (18)
  29. #define MED_POWER_54M (19)
  30. #define HIGH_POWER_54M (20)
  31. //net type (join cmd)
  32. #define INFRASTRUCTURE (0)
  33. #define IBSS_JOINER (1)
  34. #define IBSS_CREATOR (2)
  35. //protocol (socket cmds)
  36. #define PROTO_TCP (0)
  37. #define PROTO_UDP (1)
  38. #define PROTO_MCAST (2)
  39. //max. sockets (WiFi module supports up to 8 sockets and FW 4.7.1 only 7 sockets)
  40. #define MAX_SOCKETS (7)
  41. #define INVALID_SOCKET (0xFF)
  42. //socket states
  43. #define SOCKET_TCP PROTO_TCP
  44. #define SOCKET_UDP PROTO_UDP
  45. #define SOCKET_MCAST PROTO_MCAST
  46. #define SOCKET_CLOSED (0xFF)
  47. #ifndef SWAP16
  48. #define SWAP16(x) ((((x)&0x00FF)<<8)| \
  49. (((x)&0xFF00)>>8))
  50. #endif
  51. #ifndef SWAP32
  52. #define SWAP32(x) ((((x)&0xFF000000UL)>>24)| \
  53. (((x)&0x00FF0000UL)>> 8)| \
  54. (((x)&0x0000FF00UL)<< 8)| \
  55. (((x)&0x000000FFUL)<<24))
  56. #endif
  57. typedef struct
  58. {
  59. uint8_t handle;
  60. uint8_t state;
  61. } SOCKET_STATE;
  62. extern class REDFLY RedFly;
  63. class REDFLY
  64. {
  65. public:
  66. REDFLY(void);
  67. ~REDFLY(void);
  68. uint8_t init(uint32_t br, uint8_t pwr); //br=baudrate, pwr=tx_power
  69. uint8_t init(uint8_t pwr); //pwr=tx_power
  70. uint8_t init(void);
  71. void enable(void);
  72. void disable(void);
  73. uint8_t getversion(char *ver);
  74. uint8_t getmac(uint8_t *mac);
  75. uint8_t getlocalip(uint8_t *ip);
  76. uint8_t getip(char *host, uint8_t *ip);
  77. uint32_t gettime(uint8_t *server, uint16_t port);
  78. uint32_t gettime(uint8_t *server);
  79. uint8_t getrssi(void);
  80. uint8_t getbssid(char *ssid, uint8_t *mac);
  81. uint8_t gettype(char *ssid, uint8_t *type);
  82. uint8_t scan(void);
  83. uint8_t scan(uint8_t chn, char *ssid, uint8_t *mode, uint8_t *rssi); //returns: ssid, mode, rssi
  84. uint8_t scan(char *ssid, uint8_t *mode, uint8_t *rssi); //returns: ssid, mode, rssi
  85. uint8_t scan(char *ssid); //returns: ssid
  86. uint8_t nextscan(char *ssid, uint8_t *mode, uint8_t *rssi); //returns: ssid, mode, rssi
  87. uint8_t nextscan(char *ssid); //returns: ssid
  88. uint8_t join(char *ssid, char *key, uint8_t net, uint8_t chn, uint8_t authmode); //INFRASTRUCTURE or IBSS_JOINER or IBSS_CREATOR
  89. uint8_t join(char *ssid, char *key, uint8_t net, uint8_t chn); //IBSS_CREATOR
  90. uint8_t join(char *ssid, uint8_t net, uint8_t chn); //IBSS_CREATOR
  91. uint8_t join(char *ssid, char *key, uint8_t net); //INFRASTRUCTURE or IBSS_JOINER
  92. uint8_t join(char *ssid, uint8_t net); //INFRASTRUCTURE or IBSS_JOINER
  93. uint8_t join(char *ssid, char *key); //INFRASTRUCTURE
  94. uint8_t join(char *ssid); //INFRASTRUCTURE
  95. uint8_t disconnect(void); //disassociate
  96. uint8_t begin(uint8_t dhcp, uint8_t *ip, uint8_t *dns, uint8_t *gateway, uint8_t *netmask);
  97. uint8_t begin(uint8_t *ip, uint8_t *dns, uint8_t *gateway, uint8_t *netmask); //dhcp off
  98. uint8_t begin(uint8_t *ip, uint8_t *dns, uint8_t *gateway); //dhcp off
  99. uint8_t begin(uint8_t *ip, uint8_t *dns); //dhcp off
  100. uint8_t begin(uint8_t *ip); //dhcp off
  101. uint8_t begin(uint8_t dhcp); //dhcp or autoip
  102. uint8_t begin(void); //dhcp on
  103. uint8_t socketConnect(uint8_t proto, uint8_t *ip, uint16_t port, uint16_t lport); //ret 0xFF=error
  104. uint8_t socketConnect(uint8_t proto, uint8_t *ip, uint16_t port); //ret 0xFF=error (lport=1024...2048)
  105. uint8_t socketListen(uint8_t proto, uint16_t lport); //ret 0xFF=error
  106. uint8_t socketClose(uint8_t socket);
  107. uint8_t socketClosed(uint8_t socket); //0!=closed
  108. uint8_t socketStatus(uint8_t socket); //ret 0xFF=error
  109. uint8_t socketState(uint8_t socket); //ret 0xFF=closed
  110. uint8_t socketSend(uint8_t socket, uint8_t *stream, uint16_t size, uint8_t *ip, uint16_t port); //ip+port only for UDP
  111. uint8_t socketSend(uint8_t socket, char *stream, uint8_t *ip, uint16_t port); //ip+port only for UDP
  112. uint8_t socketSendPGM(uint8_t socket, PGM_P stream, uint8_t *ip, uint16_t port); //ip+port only for UDP
  113. uint8_t socketSend(uint8_t socket, uint8_t *stream, uint16_t size); //TCP
  114. uint8_t socketSend(uint8_t socket, char *stream); //TCP
  115. uint8_t socketSendPGM(uint8_t socket, PGM_P stream); //TCP
  116. uint8_t socketSend(uint8_t socket, int value); //TCP
  117. uint16_t socketRead(uint8_t *socket, uint16_t *len, uint8_t *ip, uint16_t *port, uint8_t *dst, uint16_t dst_size); //ret 0xFFFF=closed
  118. uint16_t socketRead(uint8_t *socket, uint16_t *len, uint8_t *dst, uint16_t dst_size);
  119. void socketReset(void);
  120. private:
  121. uint8_t tx_power, read_state;
  122. uint8_t buffer[48]; //min. 48 (receive and data buffer)
  123. uint32_t baudrate;
  124. uint8_t ipaddr[4];
  125. SOCKET_STATE socket_state[MAX_SOCKETS];
  126. uint8_t cmd(uint8_t *dst, uint8_t dst_size, PGM_P p1, char *v1, PGM_P p2, uint8_t *v2, uint16_t v2_size);
  127. uint8_t cmd(uint8_t *dst, uint8_t dst_size, PGM_P p1, int16_t v1);
  128. uint8_t cmd(uint8_t *dst, uint8_t dst_size, PGM_P p1, uint8_t *v2, uint16_t v2_size);
  129. uint8_t cmd(uint8_t *dst, uint8_t dst_size, PGM_P p1, char *v1);
  130. uint8_t cmd(uint8_t *dst, uint8_t dst_size, PGM_P p1);
  131. uint8_t cmd(PGM_P p1, char *v1, PGM_P p2);
  132. uint8_t cmd(PGM_P p1, char *v1, uint8_t *v2, uint16_t v2_size);
  133. uint8_t cmd(PGM_P p1, char *v1);
  134. uint8_t cmd(PGM_P p1, int16_t v1);
  135. uint8_t cmd(PGM_P p1);
  136. void flush(void);
  137. void flush_nowait(void);
  138. int available(void);
  139. uint8_t readwait(void);
  140. uint8_t read(void);
  141. void write(uint8_t c);
  142. void setbaudrate(uint32_t br);
  143. char* iptoa(uint8_t *ip, char *s);
  144. char* uitoa(uint16_t val, char *s);
  145. void delay_10ms(uint8_t ms);
  146. };
  147. #endif //REDFLY_h