genloc_kk.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #include <stdint.h>
  6. #include <syslog.h>
  7. #include <stdarg.h>
  8. #include "../../status.h"
  9. #include "../../feeder.h"
  10. void (*feederLog) (int priority, const char *fmt, ...);
  11. int
  12. setLog (void *func)
  13. {
  14. feederLog = func;
  15. return 0;
  16. }
  17. int
  18. init (void *param)
  19. {
  20. param = param;
  21. return 0;
  22. }
  23. static uint16_t packet;
  24. unsigned int
  25. process(void *lib_data, int socket, unsigned char *data,
  26. unsigned int length, unsigned long long int *id, time_t * tm,
  27. double *result_array, uint64_t * sensors, unsigned int *type)
  28. {
  29. unsigned int ret = 0;
  30. char cmd[16];
  31. uint64_t lid;
  32. char *tok_next;
  33. int i;
  34. char *tokens[20];
  35. double lat, lon, alt;
  36. time_t ts;
  37. if ((data == NULL) || (length == 0))
  38. return 0;
  39. feederLog (LOG_DEBUG, "genloc_kk: data %s\n", data);
  40. memcpy (cmd, data, 4);
  41. cmd[4] = 0;
  42. tok_next = (char *) data + 5;
  43. i = 0;
  44. while (tokens[i++] = strsep (&tok_next, ","), tok_next != NULL);
  45. //sscanf((char *)data, "%s '%lld',%ld", cmd, &lid, &packet);
  46. lid = atoll (tokens[0] + 1);
  47. packet = atol (tokens[1]);
  48. ts = atol(tokens[2]);
  49. feederLog (LOG_DEBUG,
  50. "genloc_kk: data from %lld, cmd %s, packet number %ld\n",
  51. (unsigned long long int) lid, cmd, (unsigned long int) packet);
  52. if (lid != 0)
  53. {
  54. if (strcmp (cmd, "FT2P") == 0)
  55. {
  56. if (atoi(tokens[3]) > 0) /* validity flag */
  57. {
  58. lat = atof (tokens[4]);
  59. lon = atof (tokens[5]);
  60. alt = atof (tokens[6]);
  61. feederLog (LOG_DEBUG, "genloc_kk: lat %f, lon %f, alt %f\n", lat,
  62. lon, alt);
  63. result_array[0] = lat;
  64. result_array[1] = lon;
  65. result_array[2] = alt;
  66. sensors[0] = sensors[1] = sensors[2] = 0x10;
  67. *type = VALUES_TYPE_POS;
  68. *id = lid;
  69. *tm = ts;
  70. ret = 3;
  71. }
  72. else
  73. {
  74. feederLog (LOG_WARNING, "genloc_kk: Invalid position\n");
  75. }
  76. }
  77. }
  78. else
  79. {
  80. feederLog (LOG_WARNING, "genloc_kk: Bad unit id\n");
  81. }
  82. return ret;
  83. }
  84. int reply(void *lib_data, int socket, unsigned char *data)
  85. {
  86. sprintf ((char *) data, "OK,%ld", (unsigned long int) packet);
  87. feederLog (LOG_DEBUG, "genloc_kk: replying %s\n", data);
  88. return strlen ((char *) data);
  89. }
  90. int close(void *lib_data, int socket)
  91. {
  92. feederLog (LOG_DEBUG, "genloc_kk: socket closed\n");
  93. return 0;
  94. }