1 #ifndef USER_APP_INFO_H
2 #define USER_APP_INFO_H
7 #include "sensors/sensor_dev.h"
19 typedef int MCULIB_HANDLE;
20 typedef void (*pin_irq_callback)(
int pin);
21 typedef void (*irq_callback)(void);
22 typedef void (*serial_recv_callback)(
int port, uint8_t b);
30 void (*
debugf)(
const char *format, ...);
32 void (*
printf)(
const char *format, ...);
40 int (*mculib_serialport_disable)(MCULIB_HANDLE handle,
int portnum);
64 int (*
mculib_pin_in)(MCULIB_HANDLE handle,
int pinnum,
int speed,
int mode);
86 uint8_t (*mculib_has_time_passed)(
int secs_to_wait,
long *ctr);
104 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);
125 int (*mculib_timer_enable_simple)(MCULIB_HANDLE handle,
int timer,
int freq, irq_callback callback);
126 int (*mculib_timer_disable)(MCULIB_HANDLE handle,
int timer);
127 int (*mculib_timer_attach_pin_pwm)(MCULIB_HANDLE handle,
int timer,
int pin);
128 int (*mculib_timer_set_pwm)(MCULIB_HANDLE handle,
int timer,
int pin, uint16_t dutycycle);
133 int (*mculib_adc_read_once)(MCULIB_HANDLE handle,
int pin,
int *result);
134 int (*mculib_adc_get_resolution)(MCULIB_HANDLE handle,
int pin);
135 int (*mculib_adc_enable)(MCULIB_HANDLE handle,
int pin);
136 int (*mculib_adc_read)(MCULIB_HANDLE handle,
int pin,
int *result);
143 const char *(*com_get_named_arg)(
struct command *
com,
const char *name) ;
165 struct command * (*com_alloc)() ;
189 void (*snprintf)(
char *buf,
int size,
const char *format, ...) ;
190 void (*vsnprintf)(
char *buf,
int size,
const char *format, va_list args) ;
191 void (* strncpy)(
char *dst,
const char *src,
int size) ;
192 int (*strlen)(
const char *txt);
193 void (*memset)(
void *buf,
int c,
int n) ;
194 int (*strcmp)(
const char *c1,
const char *c2) ;
195 int (* atoi)(
const char *s);
202 void (*
led_blink) (
int colour,
int brightness,
int on,
int off);
218 int (*mculib_spi_send_dma)(MCULIB_HANDLE handle,
int portno,
void *data, uint32_t size,uint32_t
flags);
267 struct sensorruntime *(*sensor_get_runtime_by_index)(
int idx);
283 void (*
pin_pwm)(
int MCULIBHANDLE,
int pin, uint32_t newstate,
int flags);
292 int (*
timer_softirq)(uint32_t hertz,uint32_t opaque, void (*callback)(uint32_t));
361 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)
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(* 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,...
void(* start)(int MCULIBHANDLE, struct sc_firmware_api *api)
guaranteed to be called by the firmware before any other functions
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(* 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(* 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(* 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
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
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(* 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
int(* mculib_serialport_callback)(MCULIB_HANDLE handle, serial_recv_callback cb)
set callback for serialport receive irq
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)