+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ul_lib/ulan.h>
+#include <system_def.h>
+#include <cpu_def.h>
+
+// #include <lpciap.h>
+// #include <keyval_id.h>
+// #include <keyval_loc.h>
+// #include <lpciap_kvpb.h>
+
+#include "definitions.h"
+
+//variables
+long sn = SN;
+
+#ifndef UL_WITHOUT_HANDLE
+uloi_coninfo_t *coninfo=&uloi_coninfo_global;
+ul_dyac_t *ul_dyac=&ul_dyac_global;
+// kvpb_block_t *kvpb_block=&kvpb_block_global;
+#endif
+
+// LED variables
+int led1 = 200;
+int led2 = 100;
+
+void long2buf(uchar *buf,unsigned long mod){
+ buf[0]=mod>>0;
+ buf[1]=mod>>8;
+ buf[2]=mod>>16;
+ buf[3]=mod>>24;
+}
+
+void int2buf(uchar *buf,int mod){
+ buf[0]=mod>>0;
+ buf[1]=mod>>8;
+}
+
+mstime_t current_time(){
+ mstime_t ret = 0;
+
+ #ifdef OS_POSIX
+ struct timespec tp;
+ if(clock_gettime(CLOCK_REALTIME, &tp) == 0){
+ ret = tp.tv_sec*1000;
+ ret += tp.tv_nsec/1000000;
+ }
+ #else
+ lt_mstime_update();
+ ret = actual_msec;
+ #endif
+
+ return ret;
+}
+
+void blink(void){
+ #ifndef OS_POSIX
+ if(led1 == 0) IO0SET=LED1_BIT;
+ else if(led1 == 1) IO0CLR=LED1_BIT;
+ else if((current_time()-led1_time) > led1){
+ IO0PIN=IO0PIN^LED1_BIT;
+ led1_time+=led1;
+ }
+
+ if(led2 == 0) IO0SET=LED2_BIT;
+ else if(led2 == 1) IO0CLR=LED2_BIT;
+ else if((current_time()-led2_time) > led2){
+ IO0PIN=IO0PIN^LED2_BIT;
+ led2_time+=led2;
+ }
+ #endif
+}
+
+int all_init(void){
+ // kvpb init
+// kvpb_block->base=(uint8_t*)KEYVAL_START;
+// kvpb_block->size=KEYVAL_PAGE_LEN;
+// kvpb_block->flags=KVPB_DESC_DOUBLE|KVPB_DESC_CHUNKWO;
+// kvpb_block->chunk_size=KVPB_CHUNK_SIZE;
+// kvpb_block->erase=lpcisp_kvpb_erase;
+// kvpb_block->copy=lpcisp_kvpb_copy;
+// kvpb_block->flush=lpcisp_kvpb_flush;
+// printf("Keyval ready\n");
+
+ /***********************************/
+ // set configuration for device
+// kvpb_get_key(kvpb_block,KVPB_KEYID_ULAN_ADDR,1,&uaddr);
+// kvpb_get_key(kvpb_block,KVPB_KEYID_ULAN_SN,4,&usn);
+//
+// kvpb_get_key(kvpb_block,KVPB_KEYID_ADC_CFG,sizeof(adc_cal_t),&adccal);
+// kvpb_get_key(kvpb_block,KVPB_KEYID_CON_PARAM,sizeof(pid_con_param_t),&con_param);
+// kvpb_get_key(kvpb_block,KVPB_KEYID_APPL_PARAM,sizeof(appl_param_t),&appl_param);
+// printf("Keyval variables read\n");
+
+ //opening file descriptor
+ ul_fd = ul_open(NULL,NULL);
+ ul_fd1 = ul_open(NULL,NULL);
+ if ((ul_fd == UL_FD_INVALID) || (ul_fd1 == UL_FD_INVALID)){
+ printf("error in creating ul_fd\n");
+ return -1;
+ }
+
+ //memory set and filter set
+ memset(&msginfo,0,sizeof(msginfo));
+ addfilt=ul_addfilt(ul_fd,&msginfo);
+ if(addfilt<0) {
+ printf("spy_messages : add filter failed\n");
+ return addfilt;
+ }
+
+ setmyaddr();
+ ul_setidstr(ul_fd,ul_idstr);
+
+ // uLan object interface init
+ coninfo->cmd = UL_CMD_OISV;
+ coninfo->sn = SN;
+ coninfo->bsn = 0;
+ coninfo->ul_fd = ul_fd;
+ coninfo->ul_fd1 = ul_fd1;
+
+ oiinit();
+
+ // uLan dyac init
+ uldy_init(ul_dyac,ul_fd,ul_save_sn,ul_save_adr,(char*)ul_idstr,sn);
+
+ return 0;
+
+}
+
+void send_sn(void){
+ int msgsend;
+
+ //.preparing of msg
+ uchar buf_out[ULDY_TMBUF_LEN];
+ buf_out[0]=ULNCS_ADR_RQ;
+ long2buf(&buf_out[1],sn);
+
+ //address set and sign on the ulan
+ msgsend = ul_send_command(ul_fd, msginfo.dadr, UL_CMD_NCS, UL_BFL_NORE, (void*) buf_out, ULDY_TMBUF_LEN);
+ printf("[I] sn was send\n");
+ ul_freemsg(ul_fd);
+}
+
+void heartbeat(void){
+ //int period;
+ int msgsend, i;
+ int len = HEART_BUF_LEN;
+ uchar *buf;
+
+ //.preparing of msg
+ buf = (uchar *) malloc(len*sizeof(uchar)); // NULL NULL NULL CID_HEART status_val
+ for (i=0; i<=2; i++) buf[i] = 0;
+ int2buf(&buf[3],HEART_CID);
+ int2buf(&buf[5],2);
+ int2buf(&buf[7],status_val);
+
+ msgsend = ul_send_command(ul_fd, ul_dyac->ul_dysa, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, HEART_BUF_LEN);
+ printf("[I] BEAT\n");
+ free(buf);
+}
+
+char ul_save_sn(uint32_t usn){
+// kvpb_set_key(kvpb_block,KVPB_KEYID_ULAN_SN,sizeof(unsigned long),&usn);
+ return 0;
+}
+
+char ul_save_adr(uint8_t uaddr){
+// unsigned int v=uaddr;
+// kvpb_set_key(kvpb_block,KVPB_KEYID_ULAN_ADDR,sizeof(unsigned int),&v);
+ return 0;
+}