evrcpacket.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef _EVRC_PACKET_H_
  2. #define _EVRC_PACKET_H_
  3. //#ifdef _MSC_VER
  4. #include <stddef.h>
  5. #if defined _WIN32
  6. #include "stdint_win32.h"
  7. #else
  8. #include <stdint.h>
  9. #endif
  10. //#else
  11. //#include "ptt-config.h"
  12. //#endif
  13. #ifdef __cplusplus
  14. extern "C" {
  15. #endif
  16. typedef enum {
  17. EVRC8K_RATE_EIGHT = 0,
  18. EVRC8K_RATE_CUSTOM = 1,
  19. EVRC8K_RATE_HALF = 2,
  20. EVRC8K_RATE_FULL = 3
  21. } EVRC8K_RATE;
  22. #define CUSTOM_KEY_SILENCE 1
  23. #define EVRC8K_EIGHT_SIZE 2
  24. #define EVRC8K_CUSTOM_SIZE 4
  25. #define EVRC8K_HALF_SIZE 10
  26. #define EVRC8K_FULL_SIZE 22
  27. #define EVRC8K_MAX_FRAME_SIZE 22
  28. typedef struct _Evrc8KFrame {
  29. uint8_t rate;
  30. uint8_t bits[EVRC8K_MAX_FRAME_SIZE];
  31. } Evrc8KFrame;
  32. #define EVRC8K_MAX_PACKET_FRAMES 0xFF
  33. size_t evrc8k_frame_rate_bytes(uint8_t rate);
  34. size_t evrc8k_packet_packet(uint8_t* packet,const Evrc8KFrame* frames,size_t frame_count);
  35. size_t evrc8k_packet_unpacket(Evrc8KFrame* frames,size_t max_frame_count,const uint8_t* packet,size_t packet_size);
  36. size_t evrc8k_frames_of_packet(const uint8_t* packet,size_t size);
  37. typedef struct {
  38. size_t packet_size;
  39. size_t frame_count;
  40. const uint8_t* packet;
  41. const uint8_t* hptr;
  42. const uint8_t* dptr;
  43. size_t pos;
  44. uint8_t rate;
  45. size_t frame_size;
  46. const uint8_t* frame;
  47. } Evrc8KPacketParser;
  48. int evrc8k_packet_init_parser(const uint8_t* packet,size_t packet_size,Evrc8KPacketParser* parser);
  49. int evrc8k_packet_next_frame(Evrc8KPacketParser* parser);
  50. typedef struct {
  51. size_t buffer_size;
  52. size_t frame_count;
  53. uint8_t* buffer;
  54. uint8_t* hptr;
  55. uint8_t* dptr;
  56. size_t packet_size;
  57. size_t pos;
  58. } Evrc8KPacketAppender;
  59. int evrc8k_packet_init_appender(uint8_t* buffer,size_t buffer_size,size_t frame_count,Evrc8KPacketAppender* appender);
  60. int evrc8k_packet_append_frame(Evrc8KPacketAppender* appender,const Evrc8KFrame* frame);
  61. int evrc8k_packet_append_frame_raw(Evrc8KPacketAppender* appender,uint8_t rate,const uint8_t* frame);
  62. #ifdef __cplusplus
  63. }
  64. #endif
  65. #endif