]> rtime.felk.cvut.cz Git - can-usb1.git/blob - ulan/embedded/app/ha/light_switch/light_switch.c
Initializing repo
[can-usb1.git] / ulan / embedded / app / ha / light_switch / light_switch.c
1 /*
2     HA LIGHT SWITCH
3 */
4
5 #include <stdio.h>
6 #include <system_def.h>
7 #include <cpu_def.h>
8 #include <ul_lib/ulan.h>
9 #include <keyval_id.h>
10 #include <uloi_base.h>
11 #include <lt_timer.h>
12 #include <uldy_base.h>
13 #include <keyval_loc.h>
14 #include <lpciap_kvpb.h>
15 #include <hal_machperiph.h>
16 #include "light_switch.h"
17 #include "ul_idstr.h"
18
19 LT_TIMER_DEC(lt_100msec)
20 LT_TIMER_IMP(lt_100msec)
21
22 /***********************************/
23 // global variables
24 kvpb_block_t kvpb_block_global;
25 uloi_coninfo_t uloi_coninfo_global;
26 ul_dyac_t ul_dyac_global;
27 int tled_off;
28
29 kvpb_block_t *kvpb_block=&kvpb_block_global;
30 uloi_coninfo_t *coninfo=&uloi_coninfo_global;
31 ul_dyac_t *ul_dyac=&ul_dyac_global;
32 ul_fd_t ul_fd;
33 ul_fd_t ul_fd1;
34 ul_msginfo msginfo;
35
36 /* ulan variables */
37 unsigned char ubuff[30];
38 unsigned int  DATA uaddr;
39 unsigned long DATA usn;
40 uchar ustatus;
41
42 //object interface variables
43 unsigned int oi_led_state;
44
45 /****************************************************************************/
46 int uloi_led_state_wrfnc(ULOI_PARAM_coninfo void *context)
47 {
48   uloi_uint_wrfnc(ULOI_ARG_coninfo context);
49   if (oi_led_state==1) {
50     SET_OUT_PIN(LED_PORT,LED4_BIT);
51     tled_off=50;
52   }
53   return 1;
54 }
55
56 /***********************************/
57 char ul_save_sn(uint32_t usn)
58 {
59   kvpb_set_key(kvpb_block,KVPB_KEYID_ULAN_SN,sizeof(unsigned long),&usn);
60   return 0;
61 }
62
63 /***********************************/
64 char ul_save_adr(uint8_t uaddr)
65 {
66   unsigned int v=uaddr;
67   kvpb_set_key(kvpb_block,KVPB_KEYID_ULAN_ADDR,sizeof(unsigned int),&v);
68   return 0;
69 }
70
71 void sys_err()
72 {
73   while(1);
74 }
75
76 int main(void) 
77 {
78   int i=0;
79
80   /***********************************/
81   // timer
82   lt_100msec_init();
83
84   /***********************************/
85   //init values
86   tled_off=0;
87
88   /***********************************/
89   // kvpb init
90   kvpb_block->base=(uint8_t CODE*)KEYVAL_START;
91   kvpb_block->size=KEYVAL_PAGE_LEN;
92   kvpb_block->flags=KVPB_DEFAULT_FLAGS;
93   kvpb_block->chunk_size=KVPB_CHUNK_SIZE;
94   kvpb_block->erase=kvpb_erase;
95   kvpb_block->copy=kvpb_copy;
96   kvpb_block->flush=kvpb_flush;
97   if (kvpb_check(kvpb_block,1)<0) sys_err();
98
99   // read data from kvpb
100   uaddr=62;
101   usn=0L;
102   oi_led_state=0;
103   kvpb_get_key(kvpb_block,KVPB_KEYID_ULAN_ADDR,sizeof(unsigned int),&uaddr);
104   kvpb_get_key(kvpb_block,KVPB_KEYID_ULAN_SN,sizeof(unsigned long),&usn);
105
106   //********************
107   // uLan init
108   ul_fd=ul_open(NULL,NULL);
109   if (ul_fd==UL_FD_INVALID) sys_err();    
110   ul_fd1=ul_open(NULL,NULL);
111   if (ul_fd1==UL_FD_INVALID) sys_err();    
112   ul_setidstr(ul_fd,ul_idstr);
113   ul_setmyadr(ul_fd,uaddr);
114   msginfo.sadr=0;
115   msginfo.dadr=0;
116   msginfo.cmd=0;
117   ul_addfilt(ul_fd,&msginfo);
118   ul_stroke(ul_fd);
119
120   /***********************************/
121   // uLan object interface init
122   coninfo->cmd=UL_CMD_OISV;
123   coninfo->sn=0;
124   coninfo->bsn=0;
125   coninfo->ul_fd=ul_fd;
126   coninfo->ul_fd1=ul_fd1;
127
128   /***********************************/
129   // uLan dyac init
130   uldy_init(ul_dyac,ul_fd,ul_save_sn,ul_save_adr,(char*)ul_idstr,usn);
131
132   //********************
133   // start
134   while (1) {
135
136     /* processing of ulan messages */
137     if ((ul_inepoll(ul_fd)>0) && (ul_acceptmsg(ul_fd, &msginfo)>=0)) {
138       if (!(msginfo.flg&(UL_BFL_PROC|UL_BFL_FAIL))) {
139         if (uloi_process_msg(ULOI_ARG_coninfo (uloi_objdes_array_t*)&uloi_objdes_main, &msginfo)<0) {
140           if (uldy_process_msg(ULDY_ARG_ul_dyac &msginfo)<0) {
141             ul_freemsg(ul_fd);
142           }
143         }
144       } else 
145         ul_freemsg(ul_fd);
146     }
147
148     /* 100ms timer */
149     if (lt_100msec_expired(100)) {
150     
151      if (tled_off) {
152        tled_off--;    
153        if (!tled_off) {
154          CLR_OUT_PIN(LED_PORT,LED4_BIT);
155        }
156      }
157
158       CLR_OUT_PIN(LED_PORT,LED1_BIT);
159       CLR_OUT_PIN(LED_PORT,LED2_BIT);
160       CLR_OUT_PIN(LED_PORT,LED3_BIT);
161       if (i++>2) i=0;
162       switch (i) {
163         case 1:SET_OUT_PIN(LED_PORT,LED1_BIT);break;
164         case 2:SET_OUT_PIN(LED_PORT,LED2_BIT);break;
165         case 3:SET_OUT_PIN(LED_PORT,LED3_BIT);break;
166       };
167
168       /* watchdog */
169      #ifdef WATCHDOG_ENABLED
170       watchdog_feed();
171      #endif /* WATCHDOG_ENABLED */
172     
173       /* ulan stroke */
174      #ifdef SDCC 
175       ul_stroke(ul_fd);
176      #endif
177     }
178   }
179   return 0;
180 }