blob: 7d8095cfe45712802ab19964b94f3f0654a9ea07 [file] [log] [blame]
#include "ctk.h"
#include "dispatcher.h"
#include "loader.h"
#include "sensors.h"
#include "uip-signal.h"
#include <stdio.h>
static void sensorcheck_idle(void);
static DISPATCHER_SIGHANDLER(sensorcheck_sighandler, s, data);
static struct dispatcher_proc p =
{DISPATCHER_PROC("Sensor check", sensorcheck_idle,
sensorcheck_sighandler, NULL)};
static ek_id_t id = EK_ID_NONE;
static unsigned char dataavail;
static struct uip_udp_conn *conn;
static int vib;
/*-----------------------------------------------------------------------------------*/
LOADER_INIT_FUNC(sensorcheck_init, arg)
{
u16_t server[2];
arg_free(arg);
if(id == EK_ID_NONE) {
id = dispatcher_start(&p);
uip_ipaddr(server, 192,168,1,1);
conn = uip_udp_new(server, 5125);
}
}
/*-----------------------------------------------------------------------------------*/
static void
sensorcheck_quit(void)
{
dispatcher_exit(&p);
id = EK_ID_NONE;
LOADER_UNLOAD();
}
/*-----------------------------------------------------------------------------------*/
static
DISPATCHER_SIGHANDLER(sensorcheck_sighandler, s, data)
{
DISPATCHER_SIGHANDLER_ARGS(s, data);
if(s == dispatcher_signal_quit) {
sensorcheck_quit();
}
}
/*-----------------------------------------------------------------------------------*/
static void
sensorcheck_idle(void)
{
/* Check vibration sensor, and send out data. */
if(sensors_vib != vib) {
vib = sensors_vib;
++dataavail;
if(conn != NULL) {
dispatcher_emit(uip_signal_poll_udp, conn, DISPATCHER_BROADCAST);
}
}
}
/*-----------------------------------------------------------------------------------*/
void
udp_appcall(void)
{
if(dataavail) {
*(int *)uip_appdata = vib;
uip_udp_send(sizeof(int));
dataavail = 0;
}
}
/*-----------------------------------------------------------------------------------*/