7#include "sensors/sensor_dev.h"
21typedef int MCULIB_HANDLE;
22typedef void (*pin_irq_callback)(
int pin);
23typedef void (*irq_callback)(void);
24typedef void (*serial_recv_callback)(
int port, uint8_t b);
32 void (*
debugf)(
const char *format, ...);
34 void (*
printf)(
const char *format, ...);
43 int (*mculib_serialport_disable)(MCULIB_HANDLE handle,
int portnum);
67 int (*
mculib_pin_in)(MCULIB_HANDLE handle,
int pinnum,
int speed,
int mode);
89 uint8_t (*mculib_has_time_passed)(
int secs_to_wait,
long *ctr);
107 int (*
mculib_spi_master_enable3)(MCULIB_HANDLE handle,
int portnum, uint8_t wide, uint8_t clkpol, uint8_t cpha, uint8_t dir,uint32_t baud_in_khz);
128 int (*mculib_timer_enable_simple)(MCULIB_HANDLE handle,
int timer,
int freq, irq_callback callback);
129 int (*mculib_timer_disable)(MCULIB_HANDLE handle,
int timer);
130 int (*mculib_timer_attach_pin_pwm)(MCULIB_HANDLE handle,
int timer,
int pin);
131 int (*mculib_timer_set_pwm)(MCULIB_HANDLE handle,
int timer,
int pin, uint16_t dutycycle);
136 int (*mculib_adc_read_once)(MCULIB_HANDLE handle,
int pin,
int *result);
137 int (*mculib_adc_get_resolution)(MCULIB_HANDLE handle,
int pin);
138 int (*mculib_adc_enable)(MCULIB_HANDLE handle,
int pin);
139 int (*mculib_adc_read)(MCULIB_HANDLE handle,
int pin,
int *result);
146 const char *(*com_get_named_arg)(
struct command *
com,
const char *name) ;
168 struct command * (*com_alloc)() ;
192 int (*snprintf)(
char *buf,
size_t size,
const char *format, ...) ;
193 int (*vsnprintf)(
char *buf,
size_t size,
const char *format, va_list args) ;
194 char *(* strncpy)(
char *dst,
const char *src,
size_t size) ;
195 size_t (*strlen)(
const char *txt);
196 void *(*memset)(
void *buf,
int c,
size_t n) ;
197 int (*strcmp)(
const char *c1,
const char *c2) ;
198 int (* atoi)(
const char *s);
205 void (*
led_blink) (
int colour,
int brightness,
int on,
int off);
221 int (*mculib_spi_send_dma)(MCULIB_HANDLE handle,
int portno,
void *data, uint32_t size,uint32_t
flags);
270 struct sensorruntime *(*sensor_get_runtime_by_index)(
int idx);
286 void (*
pin_pwm)(
int MCULIBHANDLE,
int pin, uint32_t newstate,
int flags);
295 int (*
timer_softirq)(uint32_t hertz,uint32_t opaque, void (*callback)(uint32_t));
401 uint32_t api_version;
406 uint32_t build_timestamp;
int(* sensor_register)(struct sensordev *sensor)
register a new sensor. returns 0 if ok
int(* mculib_serialport_write_char)(MCULIB_HANDLE handle, int portnum, uint8_t b)
write to serial port
int(* mculib_pin_in_callback)(MCULIB_HANDLE handle, pin_irq_callback pic)
set a callback to be called whenever a pin irq is triggered
void(* stop)()
last thing to be called. no more userloops or irqs afterwards
int(* time_get_localtime_as_struct)(struct sctime *time)
get the current time as time struct (return 0 if ok, otherwise error)
int(* mculib_pin_in)(MCULIB_HANDLE handle, int pinnum, int speed, int mode)
configure and enable an IO-Pin as input note: pinnum are sequential 0-99 are PAnn,...
void(* led_blink)(int colour, int brightness, int on, int off)
set the led to a certain colour or blink. to set a solid colour set off==0
int(* com_send_command)(struct command *com)
int(* mculib_spi_write_only)(MCULIB_HANDLE handle, int portnum, const uint16_t write)
write a byte, discard the read if a transmission is already in progress wait until transmission is do...
int(* mculib_pin_release)(MCULIB_HANDLE handle, int pinnum)
deconfigure a pin (MCULIB_HANDLE handle,used for a different purpose)
int(* com_get_named_arg_uint16)(struct command *com, const char *name, uint16_t *result)
0 == ok, otherwise error. if OK, value will be stored in "result"
int(* unhandled_call1)()
safety call, terminates the app
int(* unhandled_call3)()
safety call, terminates the app
int(* on_command_received)(struct command *com)
this is called for each command we receive
void(* com_add_arg)(struct command *com, const char *format,...)
add an argument to the command using a format strings (see printf)
int(* hijack_usb_acm)(void(*receive_hook)(uint8_t *received, int size))
"hijack" the usb port. this means the firmware will neither send bytes through the port nor process i...
long(* mculib_get_seconds_since_boot)(void)
get number of seconds elapsed since boot or power-up this counter is usually ever-increasing and roug...
int(* hijack_esp32_usart)(void(*receive_hook)(uint8_t received))
hijack the esp32 serial port
int(* start)(int MCULIBHANDLE, struct sc_firmware_api *api)
guaranteed to be called by the firmware before any other functions
int(* mculib_spi_master_enable3)(MCULIB_HANDLE handle, int portnum, uint8_t wide, uint8_t clkpol, uint8_t cpha, uint8_t dir, uint32_t baud_in_khz)
enable a spi port as master and set clkpol, cpha and width (wide=0 8bit, wide=1 16bit)(dir == 0=RW,...
int(* proto_buf_to_struct)(void *buf, int bufsize, void *iter, void *out)
decode a buffer containing a serialised proto into a struct
uint32_t(* userconfig_size)()
the userconfig: this is a little unstructured piece of flash set aside for configuration of userapps....
void(* printf)(const char *format,...)
print a message on console and possibly forward to server into logfile as well (uses radio - expensiv...
void(* com_add_varg)(struct command *com, const char *format, va_list args)
add an argument to the command using vargs
int(* mculib_serialport_enable)(MCULIB_HANDLE handle, int portnum, int baudrate)
configure a serial port with specified parameters num == 1..n (depending on mcu) baudrate == ....
int(* user_serialport_callback)(MCULIB_HANDLE handle, int portnum, serial_recv_callback cb)
set callback for serialport receive irq
void(* reset_module)(void)
reset the module (this does not return);
int(* timer_softirq)(uint32_t hertz, uint32_t opaque, void(*callback)(uint32_t))
a very simple, not-very-accurate softirq callback. May be called multiple times returns 0 if ok,...
int(* unhandled_call2)()
safety call, terminates the app
int(* userconfig_copy)(uint8_t *buf, uint16_t bufsize, uint16_t *actual_size)
this copies the userconfig into a ram buffer, IF the version has been updated and IF the destination ...
int(* mculib_pin_set)(MCULIB_HANDLE handle, int pinnum, int highlow)
set IOPin to high or low
int(* mculib_spi_disable)(MCULIB_HANDLE handle, int portnum)
disable the spi port
struct userapp_info _userapp_info_t
this must be implemented by the userapp, stored in flash at the beginning of the file (offset 0)
int(* com_add_binary_arg)(struct command *com, const int len, const uint8_t *buf)
add an argument to a command with an arbitrary length returns 0 if ok, otherwise errorcode
int(* unhandled_call5)()
safety call, terminates the app
struct sc_firmware_api _sc_firmware_api
these are the callbacks available. the firmware "api". provided to the app on startup
int(* send_via_usb_acm)(uint8_t *buf, int size)
once a usb_acm is "hijacked", the userapp can send bytes through the usb_acm port with this function ...
int(* com_deliver_command)(struct command *com, cpkt_callback)
queue a command for sending. This is asynchronous, transmission will be retried and re-routed as nece...
int(* mculib_spi_write_and_read)(MCULIB_HANDLE handle, int portnum, const uint16_t write, uint16_t *read)
write a byte and read from spi if a transmission is already in progress it waits. this writes and wai...
int(* unhandled_call8)()
safety call, terminates the app
int(* mculib_spi_read16_only)(MCULIB_HANDLE handle, int portnum, uint16_t *read)
there are weird devices, like tli4970, which aren't really spi. they basically start sending as soon ...
void(* debugf)(const char *format,...)
print a message on console/usb (only)
int(* mculib_pin_get)(MCULIB_HANDLE handle, int pinnum)
get current pin level (high or low) this is a bit funny: 0 or 1 indicate the pin level....
int(* time_get_diff)(struct sctime *time1, struct sctime *time2)
calculate seconds between two time structs
int(* userconfig_write)(uint8_t *buf, uint32_t size)
this saves a buf as "userconfig" RETURN VALUE: 0==ok, anything else is an error (same version is not ...
void(* on_new_node)(struct hostroute *host)
called when and if a new node is detected. this may be used, to, for example detect a route to the cl...
void(* user_loop)()
this is called frequently, but with no timing guarantees. essentially, it's called in the "idle-loop"...
int(* unhandled_call6)()
safety call, terminates the app
void(* hijack_esp32_usart_stop)(void)
hijack the esp32 serial port
int(* unhandled_call4)()
safety call, terminates the app
int(* get_config_flag)(int flag)
get a userconfig flag (0..n)
void(* pin_pwm)(int MCULIBHANDLE, int pin, uint32_t newstate, int flags)
pwm a pin (mosfets, and some other pins as well)
void(* com_free)(struct command *com)
free a command
int(* com_get_arg_size)(const struct command *com, int index)
get size (in bytes) of an argument by index
void(* reset_userapp)(void)
reset the userapp
int(* com_get_named_arg_uint32)(struct command *com, const char *name, uint32_t *result)
0 == ok, otherwise error. if OK, value will be stored in "result"
int(* mculib_serialport_write_string)(MCULIB_HANDLE handle, int port, const char *txt)
write a string to serial port
int(* mculib_pin_out)(MCULIB_HANDLE handle, int pinnum, int speed)
configure and enable an IO-Pin as output note: pinnum are sequential 0-99 are PAnn,...
void(* time_bcd_to_timestruct)(uint32_t bcd_time, uint32_t bcd_date, struct sctime *out)
convert BCDTime and BCDDate to timestruct
int(* mcu_set_speed)(int MCULIBHANDLE, int speed)
change cpu speed - sometimes we need to be guaranteed to be fast. speed [1==very fast ....
int(* com_send_reply_with_args)(struct command *com, uint8_t flags, const char *format,...)
send a reply together with arguments
int(* unhandled_call7)()
safety call, terminates the app
int(* mculib_pin_out_opendrain)(MCULIB_HANDLE handle, int pinnum, int speed)
configure and enable an IO-Pin as output note: pinnum are sequential 0-99 are PAnn,...
int(* mculib_spi_speed)(MCULIB_HANDLE handle, int portnum, long khz)
set the spi speed (after it's open and running) returns new speed or 0 if failure
void(* proto_release)(void *buf)
release a proto struct
uint32_t(* userconfig_version)()
each time the config is updated, the version is incremented. in other words, unless the version is ch...
int(* proto_struct_to_buf)(void *buf, int bufsize, void *iter, void *in)
encode a struct to a buffer. returns number of bytes written. (-1 for error)
definitions of routing table structures
these are the callbacks available. the firmware "api". provided to the app on startup
runtime data per sensor (in-ram)
this must be implemented by the userapp, stored in flash at the beginning of the file (offset 0)