+ void copyArray(uint8_t size, uint8_t type2, const void* data, uint8_t len)
+ {
+ int8_t start;
+
+ if( len > 15 )
+ len = 15;
+
+ start = allocate(size*len + 1, TYPE_ARRAY);
+ if( start >= 0 )
+ {
+ recording->data[start] = (type2 << 4) + len;
+ memcpy(&(recording->data[start + 1]), data, size*len);
+ }
+ }
+
+#define IMPLEMENT(NAME, TYPE, TYPE2) \
+ async command void DiagMsg.NAME(TYPE value) { copyData(sizeof(TYPE), TYPE2, &value); } \
+ async command void DiagMsg.NAME##s(const TYPE *value, uint8_t len) { copyArray(sizeof(TYPE), TYPE2, value, len); }
+