28 static void s_userio_xml_message_vprintf(
const userio *io,
void *user,
const char *fmt, va_list ap)
44 for (
int i = 0; i < nvp->
nnp; i++)
57 for (
int i = 0; i < tvp->
ntp; i++)
84 for (
int i = 0; i < svp->
nsp; i++)
102 const userio *io,
void *user,
103 const char *name,
unsigned int size,
unsigned int bloblen,
const void *blob,
const char *format
106 unsigned char *encblob;
131 io->
joinbuff(user,
" attached='true'>\n", (
void*)blob, bloblen);
133 size_t sz = 4 * bloblen / 3 + 4;
134 assert_mem(encblob = (
unsigned char *)malloc(sz));
137 fprintf(stderr,
"%s: Not enough memory for decoding.\n", __func__);
146 while ((
int)written < l)
148 size_t towrite = ((l - written) > 72) ? 72 : l - written;
149 size_t wr =
userio_write(io, user, encblob + written, towrite);
158 if ((written % 72) == 0)
162 if ((written % 72) != 0)
174 for (
int i = 0; i < bvp->
nbp; i++)
179 bp->name, bp->size, bp->bloblen, bp->blob, bp->format
186 for (
int i = 0; i < lvp->
nlp; i++)
213 indi_locale_C_numeric_pop(orig);
261 const userio *io,
void *user,
262 const char *dev,
const char *name,
const char *timestamp
272 if (timestamp != NULL)
287 const userio *io,
void *user,
288 const char *dev,
const char *name,
const char *fmt, va_list ap
302 s_userio_xml_message_vprintf(io, user, fmt, ap);
308 const userio *io,
void *user,
309 const char *dev,
const char *name
330 static const char *s_BLOBHandlingtoString(
BLOBHandling bh)
335 case B_ALSO:
return "Also";
336 case B_ONLY:
return "Only";
337 default:
return "Unknown";
342 const userio *io,
void *user,
359 const userio *io,
void *user,
360 const char *dev,
const char *fmt, va_list ap
371 s_userio_xml_message_vprintf(io, user, fmt, ap);
376 const userio *io,
void *user,
377 const char *dev,
const char *fmt, ...
387 const userio *io,
void *user,
int ctag
403 const userio *io,
void *user,
425 s_userio_xml_message_vprintf(io, user, fmt, ap);
428 for (
int i = 0; i < tvp->
ntp; i++)
446 indi_locale_C_numeric_pop(orig);
450 const userio *io,
void *user,
472 s_userio_xml_message_vprintf(io, user, fmt, ap);
475 for (
int i = 0; i < n->
nnp; i++)
498 indi_locale_C_numeric_pop(orig);
502 const userio *io,
void *user,
525 s_userio_xml_message_vprintf(io, user, fmt, ap);
528 for (
int i = 0; i < s->
nsp; i++)
543 indi_locale_C_numeric_pop(orig);
547 const userio *io,
void *user,
566 s_userio_xml_message_vprintf(io, user, fmt, ap);
569 for (
int i = 0; i < lvp->
nlp; i++)
587 const userio *io,
void *user,
609 s_userio_xml_message_vprintf(io, user, fmt, ap);
612 for (
int i = 0; i < b->
nbp; i++)
626 indi_locale_C_numeric_pop(orig);
630 const userio *io,
void *user,
645 s_userio_xml_message_vprintf(io, user, fmt, ap);
651 indi_locale_C_numeric_pop(orig);
655 const userio *io,
void *user,
670 s_userio_xml_message_vprintf(io, user, fmt, ap);
676 indi_locale_C_numeric_pop(orig);
680 const userio *io,
void *user,
695 s_userio_xml_message_vprintf(io, user, fmt, ap);
701 indi_locale_C_numeric_pop(orig);
705 const userio *io,
void *user,
718 s_userio_xml_message_vprintf(io, user, fmt, ap);
727 const userio *io,
void *user,
742 s_userio_xml_message_vprintf(io, user, fmt, ap);
748 indi_locale_C_numeric_pop(orig);
752 const userio *io,
void *user,
769 for (
int i = 0; i < nvp->
nnp; i++)
784 indi_locale_C_numeric_pop(orig);
int to64frombits_s(unsigned char *out, const unsigned char *in, int inlen, size_t outlen)
Convert bytes array to base64.
Constants and Data structure definitions for the interface to the reference INDI C API implementation...
#define assert_mem(p)
Bails out if memory pointer is 0. Prints file and function.
const char * indi_timestamp()
Create an ISO 8601 formatted time stamp. The format is YYYY-MM-DDTHH:MM:SS.
Implementations for common driver routines.
const char * ruleStr(ISRule r)
ISwitch * IUFindOnSwitch(const ISwitchVectorProperty *svp)
Returns the first ON switch it finds in the vector switch property.
const char * pstateStr(IPState s)
const char * sstateStr(ISState s)
const char * permStr(IPerm p)
Interface to the reference INDI C API device implementation on the Device Driver side.
BLOBHandling
How drivers handle BLOBs incoming from snooping drivers.
void IUUserIOBLOBContextOne(const userio *io, void *user, const char *name, unsigned int size, unsigned int bloblen, const void *blob, const char *format)
void IUUserIOSwitchContext(const userio *io, void *user, const ISwitchVectorProperty *svp)
void IUUserIOSetLightVA(const userio *io, void *user, const ILightVectorProperty *lvp, const char *fmt, va_list ap)
void IUUserIONewBLOBFinish(const userio *io, void *user)
void IUUserIODefLightVA(const userio *io, void *user, const ILightVectorProperty *lvp, const char *fmt, va_list ap)
void IUUserIOLightContext(const userio *io, void *user, const ILightVectorProperty *lvp)
void IUUserIONewBLOB(const userio *io, void *user, const IBLOBVectorProperty *bvp)
void IUUserIOUpdateMinMax(const userio *io, void *user, const INumberVectorProperty *nvp)
void IUUserIOTextContext(const userio *io, void *user, const ITextVectorProperty *tvp)
void IUUserIODefBLOBVA(const userio *io, void *user, const IBLOBVectorProperty *b, const char *fmt, va_list ap)
void IUUserIODeleteVA(const userio *io, void *user, const char *dev, const char *name, const char *fmt, va_list ap)
void IUUserIOSetSwitchVA(const userio *io, void *user, const ISwitchVectorProperty *svp, const char *fmt, va_list ap)
void IUUserIONewBLOBStart(const userio *io, void *user, const char *dev, const char *name, const char *timestamp)
void IUUserIONewSwitchFull(const userio *io, void *user, const ISwitchVectorProperty *svp)
void IUUserIODefTextVA(const userio *io, void *user, const ITextVectorProperty *tvp, const char *fmt, va_list ap)
void IUUserIONumberContext(const userio *io, void *user, const INumberVectorProperty *nvp)
void IDUserIOMessage(const userio *io, void *user, const char *dev, const char *fmt,...)
void IUUserIONewText(const userio *io, void *user, const ITextVectorProperty *tvp)
void IUUserIOSetNumberVA(const userio *io, void *user, const INumberVectorProperty *nvp, const char *fmt, va_list ap)
void IUUserIODefSwitchVA(const userio *io, void *user, const ISwitchVectorProperty *s, const char *fmt, va_list ap)
void IUUserIOSetBLOBVA(const userio *io, void *user, const IBLOBVectorProperty *bvp, const char *fmt, va_list ap)
void IUUserIOEnableBLOB(const userio *io, void *user, const char *dev, const char *name, BLOBHandling blobH)
void IUUserIOPingRequest(const userio *io, void *user, const char *pingUid)
void IUUserIONewSwitch(const userio *io, void *user, const ISwitchVectorProperty *svp)
void IDUserIOMessageVA(const userio *io, void *user, const char *dev, const char *fmt, va_list ap)
void IUUserIOBLOBContext(const userio *io, void *user, const IBLOBVectorProperty *bvp)
void IUUserIOSetTextVA(const userio *io, void *user, const ITextVectorProperty *tvp, const char *fmt, va_list ap)
void IUUserIOConfigTag(const userio *io, void *user, int ctag)
void IUUserIOSwitchContextFull(const userio *io, void *user, const ISwitchVectorProperty *svp)
void IUUserIONewNumber(const userio *io, void *user, const INumberVectorProperty *nvp)
void IUUserIOGetProperties(const userio *io, void *user, const char *dev, const char *name)
void IUUserIOPingReply(const userio *io, void *user, const char *pingUid)
void IUUserIOSwitchContextOne(const userio *io, void *user, const ISwitch *sp)
void IUUserIODefNumberVA(const userio *io, void *user, const INumberVectorProperty *n, const char *fmt, va_list ap)
One Blob (Binary Large Object) descriptor.
BLOB (Binary Large Object) vector property descriptor.
char device[MAXINDIDEVICE]
Light vector property descriptor.
char device[MAXINDIDEVICE]
Number vector property descriptor.
char device[MAXINDIDEVICE]
Switch vector property descriptor.
char device[MAXINDIDEVICE]
Text vector property descriptor.
char device[MAXINDIDEVICE]
void(* joinbuff)(void *user, const char *xml, void *buffer, size_t bloblen)
ssize_t userio_prints(const struct userio *io, void *user, const char *str)
ssize_t userio_write(const struct userio *io, void *user, const void *ptr, size_t count)
ssize_t userio_printf(const struct userio *io, void *user, const char *format,...)
size_t userio_xml_escape(const struct userio *io, void *user, const char *src)
ssize_t userio_putc(const struct userio *io, void *user, int ch)