blob: 2246f6865b64a26841ffabdb76e5a324ffb9a4e3 [file] [log] [blame]
adamdunkels40ea9742004-08-09 22:12:04 +00001#include "contiki.h"
adamdunkelsb9614dc2004-08-09 20:33:51 +00002#include "loader.h"
3#include "ctk-term.h"
4#include "serial32.h"
5
6/*-----------------------------------------------------------------------------------*/
7/*
8 * #defines and enums
9 */
10/*-----------------------------------------------------------------------------------*/
11#define SIO_POLL(c) (SerialRead(&c) == 1)
12#define SIO_SEND(c) SerialWrite(c)
13#define SIO_INIT SerialOpenPort("COM1")
14
15#ifdef CTK_TERM_CONF_SERIAL_BUFFER_SIZE
16#define OUTPUT_BUFFER_SIZE CTK_TERM_CONF_SERIAL_BUFFER_SIZE
17#else
18#define OUTPUT_BUFFER_SIZE 200
19#endif
20
21/*-----------------------------------------------------------------------------------*/
22/*
23 * Local variables
24 */
25/*-----------------------------------------------------------------------------------*/
adamdunkelsb9614dc2004-08-09 20:33:51 +000026static ek_id_t id = EK_ID_NONE;
27
28static struct ctk_term_state* termstate;
29static unsigned char outbuffer[OUTPUT_BUFFER_SIZE];
30
adamdunkels40ea9742004-08-09 22:12:04 +000031EK_POLLHANDLER(pollhandler);
32EK_EVENTHANDLER(eventhandler, ev, data);
33EK_PROCESS(p, "CTK serial server", EK_PRIO_NORMAL,
34 eventhandler, pollhandler, NULL);
adamdunkelsb9614dc2004-08-09 20:33:51 +000035
36/*-----------------------------------------------------------------------------------*/
37/*
38 * Idle function
39 */
40/*-----------------------------------------------------------------------------------*/
adamdunkels40ea9742004-08-09 22:12:04 +000041EK_POLLHANDLER(pollhandler)
adamdunkelsb9614dc2004-08-09 20:33:51 +000042{
43 unsigned char c;
44 unsigned short len;
45 while(SIO_POLL(c)) {
46 ctk_term_input(termstate, c);
47 }
48
49 len = ctk_term_send(termstate, outbuffer, OUTPUT_BUFFER_SIZE);
50 if (len > 0) {
51 unsigned short i;
52 for (i=0; i < len; ++i) {
53 SIO_SEND(outbuffer[i]);
54 }
55 ctk_term_sent(termstate);
56 }
57}
58
59/*-----------------------------------------------------------------------------------*/
60/*
61 * Init function
62 */
63/*-----------------------------------------------------------------------------------*/
64LOADER_INIT_FUNC(ctk_termserial_init, arg)
65{
66 arg_free(arg);
67 SIO_INIT;
68 termstate = ctk_term_alloc_state();
69 if (termstate == NULL) return;
70 if(id == EK_ID_NONE) {
adamdunkels40ea9742004-08-09 22:12:04 +000071 id = ek_start(&p);
adamdunkelsb9614dc2004-08-09 20:33:51 +000072 }
73}
adamdunkels40ea9742004-08-09 22:12:04 +000074/*-----------------------------------------------------------------------------------*/
75EK_EVENTHANDLER(eventhandler, ev, data)
76{
77
78}