blob: 7d8095cfe45712802ab19964b94f3f0654a9ea07 [file] [log] [blame]
adamdunkels03129502003-10-01 08:05:02 +00001#include "ctk.h"
2#include "dispatcher.h"
3#include "loader.h"
4#include "sensors.h"
5
6#include "uip-signal.h"
7
8#include <stdio.h>
9
10
11static void sensorcheck_idle(void);
12static DISPATCHER_SIGHANDLER(sensorcheck_sighandler, s, data);
13static struct dispatcher_proc p =
14 {DISPATCHER_PROC("Sensor check", sensorcheck_idle,
15 sensorcheck_sighandler, NULL)};
16static ek_id_t id = EK_ID_NONE;
17
18static unsigned char dataavail;
19
20static struct uip_udp_conn *conn;
21static int vib;
22
23/*-----------------------------------------------------------------------------------*/
24LOADER_INIT_FUNC(sensorcheck_init, arg)
25{
26 u16_t server[2];
27 arg_free(arg);
28
29 if(id == EK_ID_NONE) {
30 id = dispatcher_start(&p);
31 uip_ipaddr(server, 192,168,1,1);
32 conn = uip_udp_new(server, 5125);
33 }
34}
35/*-----------------------------------------------------------------------------------*/
36static void
37sensorcheck_quit(void)
38{
39 dispatcher_exit(&p);
40 id = EK_ID_NONE;
41 LOADER_UNLOAD();
42}
43/*-----------------------------------------------------------------------------------*/
44static
45DISPATCHER_SIGHANDLER(sensorcheck_sighandler, s, data)
46{
47 DISPATCHER_SIGHANDLER_ARGS(s, data);
48
49 if(s == dispatcher_signal_quit) {
50 sensorcheck_quit();
51 }
52}
53/*-----------------------------------------------------------------------------------*/
54static void
55sensorcheck_idle(void)
56{
57 /* Check vibration sensor, and send out data. */
58 if(sensors_vib != vib) {
59 vib = sensors_vib;
60 ++dataavail;
61 if(conn != NULL) {
62 dispatcher_emit(uip_signal_poll_udp, conn, DISPATCHER_BROADCAST);
63 }
64 }
65}
66/*-----------------------------------------------------------------------------------*/
67void
68udp_appcall(void)
69{
70 if(dataavail) {
71 *(int *)uip_appdata = vib;
72 uip_udp_send(sizeof(int));
73 dataavail = 0;
74 }
75}
76/*-----------------------------------------------------------------------------------*/