+// fill buffer from structure [{uint8_t data, size_t length},...]
+int FillBuffer(uint8_t *data, size_t maxDataLength, size_t *dataLength, ...) {
+ *dataLength = 0;
+ va_list valist;
+ va_start(valist, dataLength);
+
+ uint8_t *vdata = NULL;
+ size_t vlength = 0;
+ do{
+ vdata = va_arg(valist, uint8_t *);
+ if (!vdata)
+ break;
+
+ vlength = va_arg(valist, size_t);
+ if (*dataLength + vlength > maxDataLength) {
+ va_end(valist);
+ return 1;
+ }
+
+ memcpy(&data[*dataLength], vdata, vlength);
+ *dataLength += vlength;
+
+ } while (vdata);
+
+ va_end(valist);
+
+ return 0;
+}
+
+bool CheckStringIsHEXValue(const char *value) {
+ for (int i = 0; i < strlen(value); i++)
+ if (!isxdigit(value[i]))
+ return false;
+
+ if (strlen(value) % 2)
+ return false;
+
+ return true;
+}
+