ubx.c 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756
  1. /*
  2. * ubxproto
  3. * Copyright (c) 2014, Alexey Edelev aka semlanik, All rights reserved.
  4. *
  5. * This library is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU Lesser General Public
  7. * License as published by the Free Software Foundation; either
  8. * version 3.0 of the License, or (at your option) any later version.
  9. *
  10. * This library is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  13. * Lesser General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU Lesser General Public
  16. * License along with this library.
  17. *
  18. * Additionally to GNU Lesser General Public License you MUST NOT
  19. * static link this library and MUST add link to author
  20. * and source of this library in your application.
  21. *
  22. * Actual LGPL text https://www.gnu.org/licenses/lgpl.html
  23. *
  24. * File: ubx.c
  25. */
  26. #include "ubxmessage.h"
  27. #include "ubx.h"
  28. #include "malloc.h"
  29. #include "memory.h"
  30. void fletcherChecksum(unsigned char* buffer, int size, unsigned char* checkSumA, unsigned char* checkSumB)
  31. {
  32. int i = 0;
  33. *checkSumA = 0;
  34. *checkSumB = 0;
  35. for(; i < size; i++)
  36. {
  37. *checkSumA += buffer[i];
  38. *checkSumB += *checkSumA;
  39. }
  40. }
  41. void completeMsg(struct UBXMsgBuffer* buffer, int payloadSize)
  42. {
  43. unsigned char* checkSumA = (unsigned char*)(buffer->data + UBX_HEADER_SIZE + payloadSize);
  44. unsigned char* checkSumB = (unsigned char*)(buffer->data + UBX_HEADER_SIZE + payloadSize + 1);
  45. fletcherChecksum((unsigned char*)(buffer->data + sizeof(UBX_PREAMBLE)), payloadSize + 4, checkSumA, checkSumB);
  46. }
  47. void initMsg(struct UBXMsg* msg, int payloadSize, enum UBXMessageClass msgClass, enum UBXMessageId msgId)
  48. {
  49. msg->preamble = htobe16(UBX_PREAMBLE);
  50. msg->hdr.msgClass = msgClass;
  51. msg->hdr.msgId = msgId;
  52. msg->hdr.length = payloadSize;
  53. }
  54. struct UBXMsgBuffer createBuffer(int payloadSize)
  55. {
  56. struct UBXMsgBuffer buffer = {0, 0};
  57. buffer.size = UBX_HEADER_SIZE + payloadSize + UBX_CHECKSUM_SIZE;
  58. buffer.data = malloc(buffer.size);
  59. memset(buffer.data, 0, buffer.size);
  60. return buffer;
  61. }
  62. struct UBXMsgBuffer getAID_ALPSRV(struct UBXMsg* clientMgs, const struct UBXAlpFileInfo *fileInfo)
  63. {
  64. int requestedAlpSize = (clientMgs->payload.AID_ALPSRV.size << 1);
  65. if(fileInfo->dataSize < (clientMgs->payload.AID_ALPSRV.offset + requestedAlpSize))
  66. {
  67. requestedAlpSize = fileInfo->dataSize - clientMgs->payload.AID_ALPSRV.offset - 1;
  68. }
  69. int alpMsgSize = sizeof(struct UBXAID_ALPSRV);
  70. int payloadSize = alpMsgSize + requestedAlpSize;
  71. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  72. struct UBXMsg* msg = (struct UBXMsg*) buffer.data;
  73. if(requestedAlpSize < 0)
  74. {
  75. return buffer;
  76. }
  77. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALPSRV);
  78. msg->payload.AID_ALPSRV.idSize = clientMgs->payload.AID_ALPSRV.idSize;
  79. msg->payload.AID_ALPSRV.type = clientMgs->payload.AID_ALPSRV.type;
  80. msg->payload.AID_ALPSRV.offset = clientMgs->payload.AID_ALPSRV.offset;
  81. msg->payload.AID_ALPSRV.size = clientMgs->payload.AID_ALPSRV.size;
  82. msg->payload.AID_ALPSRV.fileId = fileInfo->fileId;
  83. msg->payload.AID_ALPSRV.dataSize = requestedAlpSize;
  84. msg->payload.AID_ALPSRV.id1 = clientMgs->payload.AID_ALPSRV.id1;
  85. msg->payload.AID_ALPSRV.id2 = clientMgs->payload.AID_ALPSRV.id2;
  86. msg->payload.AID_ALPSRV.id3 = clientMgs->payload.AID_ALPSRV.id3;
  87. memcpy(buffer.data + UBX_HEADER_SIZE + alpMsgSize, fileInfo->alpData + msg->payload.AID_ALPSRV.offset, requestedAlpSize);
  88. completeMsg(&buffer, payloadSize);
  89. return buffer;
  90. }
  91. struct UBXMsgBuffer getCFG_MSG_POLL(enum UBXMessageClass msgClass, enum UBXMessageId msgId)
  92. {
  93. int payloadSize = sizeof(struct UBXCFG_MSG_POLL);
  94. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  95. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  96. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_MSG);
  97. msg->payload.CFG_MSG_POLL.msgClass = msgClass;
  98. msg->payload.CFG_MSG_POLL.msgId = msgId;
  99. completeMsg(&buffer, payloadSize);
  100. return buffer;
  101. }
  102. struct UBXMsgBuffer getCFG_MSG_RATE(enum UBXMessageClass msgClass, enum UBXMessageId msgId, u_int8_t rate)
  103. {
  104. int payloadSize = sizeof(struct UBXCFG_MSG_RATE);
  105. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  106. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  107. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_MSG);
  108. msg->payload.CFG_MSG_RATE.msgClass = msgClass;
  109. msg->payload.CFG_MSG_RATE.msgId = msgId;
  110. msg->payload.CFG_MSG_RATE.rate = rate;
  111. completeMsg(&buffer, payloadSize);
  112. return buffer;
  113. }
  114. struct UBXMsgBuffer getCFG_MSG_RATES(enum UBXMessageClass msgClass, enum UBXMessageId msgId, u_int8_t rate[6])
  115. {
  116. int payloadSize = sizeof(struct UBXCFG_MSG_RATES);
  117. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  118. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  119. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_MSG);
  120. msg->payload.CFG_MSG_RATES.msgClass = msgClass;
  121. msg->payload.CFG_MSG_RATES.msgId = msgId;
  122. memcpy(msg->payload.CFG_MSG_RATES.rate, rate, 6*sizeof(u_int8_t));
  123. completeMsg(&buffer, payloadSize);
  124. return buffer;
  125. }
  126. struct UBXMsgBuffer getCFG_RST(enum UBXResetMode mode, u_int16_t mask)
  127. {
  128. int payloadSize = sizeof(struct UBXCFG_RST);
  129. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  130. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  131. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_RST);
  132. msg->payload.CFG_RST.resetMode = mode;
  133. msg->payload.CFG_RST.navBBRMask = mask;
  134. completeMsg(&buffer, payloadSize);
  135. return buffer;
  136. }
  137. struct UBXMsgBuffer getCFG_TP5_POLL_OPT(enum UBXCFGTimepulses tpIdx)
  138. {
  139. int payloadSize = sizeof(struct UBXCFG_TP5_POLL_OPT);
  140. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  141. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  142. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_TP5);
  143. msg->payload.CFG_TP5_POLL_OPT.tpIdx = tpIdx;
  144. completeMsg(&buffer, payloadSize);
  145. return buffer;
  146. }
  147. struct UBXMsgBuffer getCFG_TP5(enum UBXCFGTimepulses tpIdx,
  148. int16_t antCableDelay,
  149. int16_t rfGroupDelay,
  150. u_int32_t freqPeriod,
  151. u_int32_t freqPeriodLock,
  152. u_int32_t pulseLenRatio,
  153. u_int32_t pulseLenRatioLock,
  154. int32_t userConfigDelay,
  155. int32_t flags)
  156. {
  157. int payloadSize = sizeof(struct UBXCFG_TP5);
  158. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  159. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  160. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_TP5);
  161. msg->payload.CFG_TP5.tpIdx = tpIdx;
  162. msg->payload.CFG_TP5.antCableDelay = antCableDelay;
  163. msg->payload.CFG_TP5.rfGroupDelay = rfGroupDelay;
  164. msg->payload.CFG_TP5.freqPeriod = freqPeriod;
  165. msg->payload.CFG_TP5.freqPeriodLock = freqPeriodLock;
  166. msg->payload.CFG_TP5.pulseLenRatio = pulseLenRatio;
  167. msg->payload.CFG_TP5.pulseLenRatioLock = pulseLenRatioLock;
  168. msg->payload.CFG_TP5.userConfigDelay = userConfigDelay;
  169. msg->payload.CFG_TP5.flags = flags;
  170. completeMsg(&buffer, payloadSize);
  171. return buffer;
  172. }
  173. struct UBXMsgBuffer getAID_ALM_POLL()
  174. {
  175. int payloadSize = sizeof(struct UBXAID_ALM_POLL);
  176. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  177. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  178. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALP);
  179. completeMsg(&buffer, payloadSize);
  180. return buffer;
  181. }
  182. struct UBXMsgBuffer getAID_ALM_POLL_OPT(UBXU1_t svid)
  183. {
  184. int payloadSize = sizeof(struct UBXAID_ALM_POLL_OPT);
  185. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  186. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  187. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALP);
  188. msg->payload.AID_ALM_POLL_OPT.svid = svid;
  189. completeMsg(&buffer, payloadSize);
  190. return buffer;
  191. }
  192. struct UBXMsgBuffer getAID_ALM(UBXU4_t svid, UBXU4_t week)
  193. {
  194. int payloadSize = sizeof(struct UBXAID_ALM);
  195. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  196. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  197. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALM);
  198. msg->payload.AID_ALM.svid = svid;
  199. msg->payload.AID_ALM.week = week;
  200. completeMsg(&buffer, payloadSize);
  201. return buffer;
  202. }
  203. struct UBXMsgBuffer getAID_ALM_OPT(UBXU4_t svid, UBXU4_t week, UBXU4_t dwrd[8])
  204. {
  205. int payloadSize = sizeof(struct UBXAID_ALM_OPT);
  206. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  207. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  208. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALM);
  209. msg->payload.AID_ALM_OPT.svid = svid;
  210. msg->payload.AID_ALM_OPT.week = week;
  211. memcpy(msg->payload.AID_ALM_OPT.dwrd, dwrd, 8*sizeof(UBXU4_t));
  212. completeMsg(&buffer, payloadSize);
  213. return buffer;
  214. }
  215. struct UBXMsgBuffer getAID_ALP_POLL(UBXU4_t predTow,
  216. UBXU4_t predDur,
  217. UBXI4_t age,
  218. UBXU2_t predWno,
  219. UBXU2_t almWno,
  220. UBXU1_t svs)
  221. {
  222. int payloadSize = sizeof(struct UBXAID_ALP_POLL);
  223. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  224. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  225. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALP);
  226. msg->payload.AID_ALP_POLL.predTow = predTow;
  227. msg->payload.AID_ALP_POLL.predDur = predDur;
  228. msg->payload.AID_ALP_POLL.age = age;
  229. msg->payload.AID_ALP_POLL.predWno = predWno;
  230. msg->payload.AID_ALP_POLL.almWno = almWno;
  231. msg->payload.AID_ALP_POLL.svs = svs;
  232. completeMsg(&buffer, payloadSize);
  233. return buffer;
  234. }
  235. struct UBXMsgBuffer getAID_ALP_END()
  236. {
  237. int payloadSize = sizeof(struct UBXAID_ALP_END);
  238. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  239. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  240. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALP);
  241. msg->payload.AID_ALP_END.dummy = 0xAA;
  242. completeMsg(&buffer, payloadSize);
  243. return buffer;
  244. }
  245. struct UBXMsgBuffer getAID_ALP(UBXU2_t* chunk, int chunkSize)
  246. {
  247. int payloadSize = sizeof(struct UBXAID_ALP) + chunkSize;
  248. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  249. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  250. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_ALP);
  251. memcpy(&(msg->payload) + sizeof(struct UBXAID_ALP), chunk, chunkSize);
  252. completeMsg(&buffer, payloadSize);
  253. return buffer;
  254. }
  255. struct UBXMsgBuffer getAID_AOP_POLL()
  256. {
  257. int payloadSize = sizeof(struct UBXAID_AOP_POLL);
  258. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  259. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  260. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_AOP);
  261. completeMsg(&buffer, payloadSize);
  262. return buffer;
  263. }
  264. struct UBXMsgBuffer getAID_AOP_POLL_OPT(UBXU1_t svid)
  265. {
  266. int payloadSize = sizeof(struct UBXAID_AOP_POLL_OPT);
  267. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  268. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  269. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_AOP);
  270. msg->payload.AID_AOP_POLL_OPT.svid = svid;
  271. completeMsg(&buffer, payloadSize);
  272. return buffer;
  273. }
  274. struct UBXMsgBuffer getAID_AOP(UBXU1_t svid, UBXU1_t data[59])
  275. {
  276. int payloadSize = sizeof(struct UBXAID_AOP);
  277. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  278. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  279. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_AOP);
  280. msg->payload.AID_AOP.svid = svid;
  281. memcpy(msg->payload.AID_AOP.data, data, 59*sizeof(UBXU1_t));
  282. completeMsg(&buffer, payloadSize);
  283. return buffer;
  284. }
  285. struct UBXMsgBuffer getAID_AOP_OPT(UBXU1_t svid, UBXU1_t data[59], UBXU1_t optional0[48], UBXU1_t optional1[48], UBXU1_t optional2[48])
  286. {
  287. int payloadSize = sizeof(struct UBXAID_AOP_OPT);
  288. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  289. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  290. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_AOP);
  291. msg->payload.AID_AOP_OPT.svid = svid;
  292. memcpy(msg->payload.AID_AOP_OPT.data, data, 59*sizeof(UBXU1_t));
  293. memcpy(msg->payload.AID_AOP_OPT.optional0, optional0, 48*sizeof(UBXU1_t));
  294. memcpy(msg->payload.AID_AOP_OPT.optional1, optional1, 48*sizeof(UBXU1_t));
  295. memcpy(msg->payload.AID_AOP_OPT.optional2, optional2, 48*sizeof(UBXU1_t));
  296. completeMsg(&buffer, payloadSize);
  297. return buffer;
  298. }
  299. struct UBXMsgBuffer getAID_DATA_POLL()
  300. {
  301. int payloadSize = sizeof(struct UBXAID_DATA_POLL);
  302. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  303. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  304. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_DATA);
  305. completeMsg(&buffer, payloadSize);
  306. return buffer;
  307. }
  308. struct UBXMsgBuffer getAID_EPH_POLL()
  309. {
  310. int payloadSize = sizeof(struct UBXAID_EPH_POLL);
  311. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  312. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  313. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_EPH);
  314. completeMsg(&buffer, payloadSize);
  315. return buffer;
  316. }
  317. struct UBXMsgBuffer getAID_EPH_POLL_OPT(UBXU1_t svid)
  318. {
  319. int payloadSize = sizeof(struct UBXAID_EPH_POLL_OPT);
  320. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  321. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  322. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_EPH);
  323. msg->payload.AID_EPH_POLL_OPT.svid = svid;
  324. completeMsg(&buffer, payloadSize);
  325. return buffer;
  326. }
  327. struct UBXMsgBuffer getAID_EPH(UBXU4_t svid, UBXU4_t how)
  328. {
  329. int payloadSize = sizeof(struct UBXAID_EPH);
  330. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  331. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  332. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_EPH);
  333. msg->payload.AID_EPH.svid = svid;
  334. msg->payload.AID_EPH.how = how;
  335. completeMsg(&buffer, payloadSize);
  336. return buffer;
  337. }
  338. struct UBXMsgBuffer getAID_EPH_OPT(UBXU4_t svid, UBXU4_t how, UBXU4_t sf1d[8], UBXU4_t sf2d[8], UBXU4_t sf3d[8])
  339. {
  340. int payloadSize = sizeof(struct UBXAID_EPH_OPT);
  341. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  342. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  343. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_EPH);
  344. msg->payload.AID_EPH_OPT.svid = svid;
  345. msg->payload.AID_EPH_OPT.how = how;
  346. memcpy(msg->payload.AID_EPH_OPT.sf1d, sf1d, 8*sizeof(UBXU4_t));
  347. memcpy(msg->payload.AID_EPH_OPT.sf2d, sf2d, 8*sizeof(UBXU4_t));
  348. memcpy(msg->payload.AID_EPH_OPT.sf3d, sf3d, 8*sizeof(UBXU4_t));
  349. completeMsg(&buffer, payloadSize);
  350. return buffer;
  351. }
  352. struct UBXMsgBuffer getAID_HUI_POLL()
  353. {
  354. int payloadSize = sizeof(struct UBXAID_HUI_POLL);
  355. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  356. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  357. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_HUI);
  358. completeMsg(&buffer, payloadSize);
  359. return buffer;
  360. }
  361. struct UBXMsgBuffer getAID_HUI(UBXI4_t health,
  362. UBXR4_t utcA0,
  363. UBXR4_t utcA1,
  364. UBXI4_t utcTOW,
  365. UBXI2_t utcWNT,
  366. UBXI2_t utcLS,
  367. UBXI2_t utcWNF,
  368. UBXI2_t utcDN,
  369. UBXI2_t utcLSF,
  370. UBXI2_t utcSpare,
  371. UBXR4_t klobA0,
  372. UBXR4_t klobA1,
  373. UBXR4_t klobA2,
  374. UBXR4_t klobA3,
  375. UBXR4_t klobB0,
  376. UBXR4_t klobB1,
  377. UBXR4_t klobB2,
  378. UBXR4_t klobB3,
  379. UBXX2_t flags)
  380. {
  381. int payloadSize = sizeof(struct UBXAID_HUI);
  382. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  383. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  384. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_HUI);
  385. msg->payload.AID_HUI.health = health;
  386. msg->payload.AID_HUI.utcA0 = utcA0;
  387. msg->payload.AID_HUI.utcA1 = utcA1;
  388. msg->payload.AID_HUI.utcTOW = utcTOW;
  389. msg->payload.AID_HUI.utcWNT = utcWNT;
  390. msg->payload.AID_HUI.utcLS = utcLS;
  391. msg->payload.AID_HUI.utcWNF = utcWNF;
  392. msg->payload.AID_HUI.utcDN = utcDN;
  393. msg->payload.AID_HUI.utcLSF = utcLSF;
  394. msg->payload.AID_HUI.utcSpare = utcSpare;
  395. msg->payload.AID_HUI.klobA0 = klobA0;
  396. msg->payload.AID_HUI.klobA1 = klobA1;
  397. msg->payload.AID_HUI.klobA2 = klobA2;
  398. msg->payload.AID_HUI.klobA3 = klobA3;
  399. msg->payload.AID_HUI.klobA0 = klobB0;
  400. msg->payload.AID_HUI.klobA1 = klobB1;
  401. msg->payload.AID_HUI.klobA2 = klobB2;
  402. msg->payload.AID_HUI.klobA3 = klobB3;
  403. msg->payload.AID_HUI.flags = flags;
  404. completeMsg(&buffer, payloadSize);
  405. return buffer;
  406. }
  407. struct UBXMsgBuffer getAID_INI_POLL()
  408. {
  409. int payloadSize = sizeof(struct UBXAID_INI_POLL);
  410. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  411. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  412. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_INI);
  413. completeMsg(&buffer, payloadSize);
  414. return buffer;
  415. }
  416. struct UBXMsgBuffer getAID_INI(UBXI1_t ecefXOrLat,
  417. UBXI1_t ecefYOrLat,
  418. UBXI1_t ecefZOrLat,
  419. UBXU1_t posAcc,
  420. UBXI1_t tmCfg,
  421. UBXU2_t wnoOrDate,
  422. UBXU4_t towOrDate,
  423. UBXI4_t towNs,
  424. UBXU4_t tAccMS,
  425. UBXU4_t tAccNS,
  426. UBXI4_t clkDOrFreq,
  427. UBXU4_t clkDAccOrFreqAcc,
  428. UBXX4_t flags)
  429. {
  430. int payloadSize = sizeof(struct UBXAID_INI);
  431. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  432. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  433. initMsg(msg, payloadSize, UBXMsgClassAID, UBXMsgIdAID_INI);
  434. msg->payload.AID_INI.ecefXOrLat = ecefXOrLat;
  435. msg->payload.AID_INI.ecefYOrLat = ecefYOrLat;
  436. msg->payload.AID_INI.ecefZOrLat = ecefZOrLat;
  437. msg->payload.AID_INI.posAcc = posAcc;
  438. msg->payload.AID_INI.tmCfg = tmCfg;
  439. msg->payload.AID_INI.wnoOrDate = wnoOrDate;
  440. msg->payload.AID_INI.towOrDate = towOrDate;
  441. msg->payload.AID_INI.towNs = towNs;
  442. msg->payload.AID_INI.tAccMS = tAccMS;
  443. msg->payload.AID_INI.tAccNS = tAccNS;
  444. msg->payload.AID_INI.clkDOrFreq = clkDOrFreq;
  445. msg->payload.AID_INI.clkDAccOrFreqAcc = clkDAccOrFreqAcc;
  446. msg->payload.AID_INI.flags = flags;
  447. completeMsg(&buffer, payloadSize);
  448. return buffer;
  449. }
  450. struct UBXMsgBuffer getCFG_ANT(){}
  451. struct UBXMsgBuffer getCFG_ANT_POLL()
  452. {
  453. int payloadSize = sizeof(struct UBXCFG_ANT_POLL);
  454. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  455. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  456. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_ANT);
  457. completeMsg(&buffer, payloadSize);
  458. return buffer;
  459. }
  460. struct UBXMsgBuffer getCFG_CFG(){}
  461. struct UBXMsgBuffer getCFG_CFG_OPT(){}
  462. struct UBXMsgBuffer getCFG_DAT_IN(){}
  463. struct UBXMsgBuffer getCFG_DAT_POLL()
  464. {
  465. int payloadSize = sizeof(struct UBXCFG_DAT_POLL);
  466. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  467. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  468. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_DAT);
  469. completeMsg(&buffer, payloadSize);
  470. return buffer;
  471. }
  472. struct UBXMsgBuffer getCFG_GNSS_POLL()
  473. {
  474. int payloadSize = sizeof(struct UBXCFG_GNSS_POLL);
  475. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  476. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  477. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_GNSS);
  478. completeMsg(&buffer, payloadSize);
  479. return buffer;
  480. }
  481. struct UBXMsgBuffer getCFG_GNSS(){}
  482. struct UBXMsgBuffer getCFG_INF_POLL(UBXU1_t protocolId)
  483. {
  484. int payloadSize = sizeof(struct UBXCFG_INF_POLL);
  485. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  486. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  487. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_INF);
  488. msg->payload.CFG_INF_POLL.protocolId = protocolId;
  489. completeMsg(&buffer, payloadSize);
  490. return buffer;
  491. }
  492. struct UBXMsgBuffer getCFG_INF(){}
  493. struct UBXMsgBuffer getCFG_ITFM_POLL()
  494. {
  495. int payloadSize = sizeof(struct UBXCFG_ITFM_POLL);
  496. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  497. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  498. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_ITFM);
  499. completeMsg(&buffer, payloadSize);
  500. return buffer;
  501. }
  502. struct UBXMsgBuffer getCFG_ITFM(){}
  503. struct UBXMsgBuffer getCFG_LOGFILTER_POLL()
  504. {
  505. int payloadSize = sizeof(struct UBXCFG_LOGFILTER_POLL);
  506. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  507. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  508. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_LOGFILTER);
  509. completeMsg(&buffer, payloadSize);
  510. return buffer;
  511. }
  512. struct UBXMsgBuffer getCFG_LOGFILTER(){}
  513. struct UBXMsgBuffer getCFG_NAV5_POLL()
  514. {
  515. int payloadSize = sizeof(struct UBXCFG_NAV5_POLL);
  516. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  517. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  518. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_NAV5);
  519. completeMsg(&buffer, payloadSize);
  520. return buffer;
  521. }
  522. struct UBXMsgBuffer getCFG_NAV5(){}
  523. struct UBXMsgBuffer getCFG_NAVX5_POLL()
  524. {
  525. int payloadSize = sizeof(struct UBXCFG_NAVX5_POLL);
  526. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  527. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  528. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_NAVX5);
  529. completeMsg(&buffer, payloadSize);
  530. return buffer;
  531. }
  532. struct UBXMsgBuffer getCFG_NAVX5(){}
  533. struct UBXMsgBuffer getCFG_NMEA_POLL()
  534. {
  535. int payloadSize = sizeof(struct UBXCFG_NMEA_POLL);
  536. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  537. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  538. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_NMEA);
  539. completeMsg(&buffer, payloadSize);
  540. return buffer;
  541. }
  542. struct UBXMsgBuffer getCFG_NMEA(){}
  543. struct UBXMsgBuffer getCFG_NVS(){}
  544. struct UBXMsgBuffer getCFG_PM2_POLL()
  545. {
  546. int payloadSize = sizeof(struct UBXCFG_PM2_POLL);
  547. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  548. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  549. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_PM2);
  550. completeMsg(&buffer, payloadSize);
  551. return buffer;
  552. }
  553. struct UBXMsgBuffer getCFG_PM2(){}
  554. struct UBXMsgBuffer getCFG_PRT_POLL()
  555. {
  556. int payloadSize = sizeof(struct UBXCFG_PRT_POLL);
  557. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  558. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  559. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_PRT);
  560. completeMsg(&buffer, payloadSize);
  561. return buffer;
  562. }
  563. struct UBXMsgBuffer getCFG_PRT_POLL_OPT(UBXU1_t portId)
  564. {
  565. int payloadSize = sizeof(struct UBXCFG_PRT_POLL_OPT);
  566. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  567. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  568. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_PRT);
  569. msg->payload.CFG_PRT_POLL_OPT.portId = portId;
  570. completeMsg(&buffer, payloadSize);
  571. return buffer;
  572. }
  573. struct UBXMsgBuffer getCFG_PRT(){}
  574. struct UBXMsgBuffer getCFG_RATE_POLL()
  575. {
  576. int payloadSize = sizeof(struct UBXCFG_RATE_POLL);
  577. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  578. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  579. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_RATE);
  580. completeMsg(&buffer, payloadSize);
  581. return buffer;
  582. }
  583. struct UBXMsgBuffer getCFG_RATE(){}
  584. struct UBXMsgBuffer getCFG_RINV(){}
  585. struct UBXMsgBuffer getCFG_RINV_POLL()
  586. {
  587. int payloadSize = sizeof(struct UBXCFG_RINV_POLL);
  588. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  589. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  590. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_RINV);
  591. completeMsg(&buffer, payloadSize);
  592. return buffer;
  593. }
  594. struct UBXMsgBuffer getCFG_RXM(){}
  595. struct UBXMsgBuffer getCFG_RXM_POLL()
  596. {
  597. int payloadSize = sizeof(struct UBXCFG_RXM_POLL);
  598. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  599. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  600. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_RXM);
  601. completeMsg(&buffer, payloadSize);
  602. return buffer;
  603. }
  604. struct UBXMsgBuffer getCFG_SBAS(){}
  605. struct UBXMsgBuffer getCFG_SBAS_POLL()
  606. {
  607. int payloadSize = sizeof(struct UBXCFG_SBAS_POLL);
  608. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  609. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  610. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_SBAS);
  611. completeMsg(&buffer, payloadSize);
  612. return buffer;
  613. }
  614. struct UBXMsgBuffer getCFG_TP5_POLL()
  615. {
  616. int payloadSize = sizeof(struct UBXCFG_TP5_POLL);
  617. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  618. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  619. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_TP5);
  620. completeMsg(&buffer, payloadSize);
  621. return buffer;
  622. }
  623. struct UBXMsgBuffer getCFG_USB_POLL()
  624. {
  625. int payloadSize = sizeof(struct UBXCFG_USB_POLL);
  626. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  627. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  628. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_USB);
  629. completeMsg(&buffer, payloadSize);
  630. return buffer;
  631. }
  632. struct UBXMsgBuffer getCFG_USB(){}
  633. struct UBXMsgBuffer getLOG_CREATE(){}
  634. struct UBXMsgBuffer getLOG_ERASE(){}
  635. struct UBXMsgBuffer getLOG_FINDTIME_IN(){}
  636. struct UBXMsgBuffer getLOG_INFO_POLL()
  637. {
  638. int payloadSize = sizeof(struct UBXCFG_INF_POLL);
  639. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  640. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  641. initMsg(msg, payloadSize, UBXMsgClassCFG, UBXMsgIdCFG_INF);
  642. completeMsg(&buffer, payloadSize);
  643. return buffer;
  644. }
  645. struct UBXMsgBuffer getLOG_RETRIEVE(){}
  646. struct UBXMsgBuffer getLOG_STRING(){}
  647. struct UBXMsgBuffer getMON_VER_POLL()
  648. {
  649. int payloadSize = sizeof(struct UBXMON_VER_POLL);
  650. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  651. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  652. initMsg(msg, payloadSize, UBXMsgClassMON, UBXMsgIdMON_VER);
  653. completeMsg(&buffer, payloadSize);
  654. return buffer;
  655. }
  656. struct UBXMsgBuffer getRXM_ALM_POLL()
  657. {
  658. int payloadSize = sizeof(struct UBXRXM_ALM_POLL);
  659. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  660. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  661. initMsg(msg, payloadSize, UBXMsgClassRXM, UBXMsgIdRXM_ALM);
  662. completeMsg(&buffer, payloadSize);
  663. return buffer;
  664. }
  665. struct UBXMsgBuffer getRXM_ALM_POLL_OPT(UBXU1_t svid)
  666. {
  667. int payloadSize = sizeof(struct UBXRXM_ALM_POLL_OPT);
  668. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  669. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  670. initMsg(msg, payloadSize, UBXMsgClassRXM, UBXMsgIdRXM_ALM);
  671. msg->payload.RXM_ALM_POLL_OPT.svid = svid;
  672. completeMsg(&buffer, payloadSize);
  673. return buffer;
  674. }
  675. struct UBXMsgBuffer getRXM_EPH_POLL()
  676. {
  677. int payloadSize = sizeof(struct UBXRXM_EPH_POLL);
  678. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  679. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  680. initMsg(msg, payloadSize, UBXMsgClassRXM, UBXMsgIdRXM_EPH);
  681. completeMsg(&buffer, payloadSize);
  682. return buffer;
  683. }
  684. struct UBXMsgBuffer getRXM_EPH_POLL_OPT(UBXU1_t svid)
  685. {
  686. int payloadSize = sizeof(struct UBXRXM_EPH_POLL_OPT);
  687. struct UBXMsgBuffer buffer = createBuffer(payloadSize);
  688. struct UBXMsg* msg = (struct UBXMsg*)buffer.data;
  689. initMsg(msg, payloadSize, UBXMsgClassRXM, UBXMsgIdRXM_ALM);
  690. msg->payload.RXM_ALM_POLL_OPT.svid = svid;
  691. completeMsg(&buffer, payloadSize);
  692. return buffer;
  693. }
  694. struct UBXMsgBuffer getRXM_PMREQ(){}
  695. struct UBXMsgBuffer getRXM_SVSI(){}