]> rtime.felk.cvut.cz Git - hydro.git/commitdiff
Added regulator. Added accepting of PDO messages.
authorstefic User <stefic@ubuntu.ubuntu-domain>
Sun, 4 Jan 2009 09:20:39 +0000 (10:20 +0100)
committerstefic User <stefic@ubuntu.ubuntu-domain>
Sun, 4 Jan 2009 09:20:39 +0000 (10:20 +0100)
24 files changed:
Makefile [new file with mode: 0644]
Makefile.omk [new file with mode: 0644]
app-stefic/Makefile.omk
app-stefic/control/board.c
app-stefic/control/board.h
app-stefic/control/hydroponieoi.c
app-stefic/regulator/Makefile [new file with mode: 0644]
app-stefic/regulator/Makefile.omk [new file with mode: 0644]
app-stefic/regulator/board.c [new file with mode: 0644]
app-stefic/regulator/board.h [new file with mode: 0644]
app-stefic/regulator/definitions.c [new symlink]
app-stefic/regulator/definitions.h [new symlink]
app-stefic/regulator/hydroponie.c [new symlink]
app-stefic/regulator/hydroponie.h [new symlink]
app-stefic/regulator/hydroponieoi.c [new file with mode: 0644]
app-stefic/regulator/load_usb.sh [new file with mode: 0755]
app-stefic/regulator/ul_idstr.c [new symlink]
app-stefic/regulator/ul_idstr.h [new symlink]
app-stefic/sensor/board.c
app-stefic/sensor/board.h
app-stefic/sensor/definitions.c
app-stefic/sensor/definitions.h
app-stefic/sensor/hydroponie.c
app-stefic/sensor/hydroponieoi.c

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..b22a357
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,14 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
diff --git a/Makefile.omk b/Makefile.omk
new file mode 100644 (file)
index 0000000..55123a9
--- /dev/null
@@ -0,0 +1,3 @@
+# -*- makefile -*-
+
+SUBDIRS = app-stefic
index 5bf78201048eb6fcbf4978ee811392fa10155f56..d0256f0e923c5db5270fc12945b1725959fc20ac 100644 (file)
@@ -1,3 +1,3 @@
 # -*- makefile -*-
 
-SUBDIRS = sensor control
+SUBDIRS = sensor control regulator
index 16be3a32ce389d0582ff61f81acd1226f4f58014..10f5e8324853cb9bf78d973e600f2de1de435e2f 100644 (file)
@@ -6,13 +6,16 @@
 #include "board.h"
 
 // OBJECT INTERFACE VARIABLES
-uint16_t oi_fan;
-uint16_t oi_cid_fan;
-uint16_t oi_humidifier;
-uint16_t oi_cid_humidifier;
-uint16_t oi_light;
-uint16_t oi_cid_light;
-uint16_t oi_period;
+unsigned int oi_fan;
+unsigned int oi_cid_fan;
+unsigned int oi_slot_fan;
+unsigned int oi_humidifier;
+unsigned int oi_cid_humidifier;
+unsigned int oi_slot_humidifier;
+unsigned int oi_light;
+unsigned int oi_cid_light;
+unsigned int oi_slot_light;
+unsigned int oi_period;
 
 // OBJECT INTERFACE FUNCTIONS
 int oi_cid_fan_wrfnc(ULOI_PARAM_coninfo void *context){
@@ -30,14 +33,27 @@ int oi_cid_light_wrfnc(ULOI_PARAM_coninfo void *context){
     return 1;
 }
 
-int oi_period_wrfnc(ULOI_PARAM_coninfo void *context){
+int oi_slot_fan_wrfnc(ULOI_PARAM_coninfo void *context){
     uloi_uint_wrfnc(ULOI_ARG_coninfo context);
     return 1;
 }
 
-//*********************************************************
-int oi_fan_wrfnc(ULOI_PARAM_coninfo void *context){
+int oi_slot_humidifier_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    return 1;
+}
+
+int oi_slot_light_wrfnc(ULOI_PARAM_coninfo void *context){
     uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    return 1;
+}
+
+int oi_period_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    return 1;
+}
+
+void set_fan_PIN(){
     if (oi_fan == 1) {
         SET_OUT_PIN(OUT_PORT,P1_27_FAN);
         printf("FAN PIN UP\n");
@@ -45,11 +61,9 @@ int oi_fan_wrfnc(ULOI_PARAM_coninfo void *context){
         CLR_OUT_PIN(OUT_PORT,P1_27_FAN);
         printf("FAN PIN DOWN\n");
     }
-    return 1;
 }
 
-int oi_humidifier_wrfnc(ULOI_PARAM_coninfo void *context){
-    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+void set_humidifier_PIN(){
     if (oi_humidifier == 1) {
         SET_OUT_PIN(OUT_PORT,P1_28_HUMIDIFIER);
         printf("HUM PIN UP\n");
@@ -57,11 +71,9 @@ int oi_humidifier_wrfnc(ULOI_PARAM_coninfo void *context){
         CLR_OUT_PIN(OUT_PORT,P1_28_HUMIDIFIER);
         printf("HUM PIN DOWN\n");
     }
-    return 1;
 }
 
-int oi_light_wrfnc(ULOI_PARAM_coninfo void *context){
-    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+void set_light_PIN(){
     if (oi_light == 1) {
         SET_OUT_PIN(OUT_PORT,P1_29_LIGHT);
         printf("LIGHT PIN UP\n");
@@ -69,71 +81,113 @@ int oi_light_wrfnc(ULOI_PARAM_coninfo void *context){
         CLR_OUT_PIN(OUT_PORT,P1_29_LIGHT);
         printf("LIGHT PIN DOWN\n");
     }
+}
+
+//*********************************************************
+int oi_fan_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    set_fan_PIN();
+    return 1;
+}
+
+int oi_humidifier_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    set_humidifier_PIN();
+    return 1;
+}
+
+int oi_light_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    set_light_PIN();
     return 1;
 }
 //*********************************************************
 
 void send_data() {
     int msgsend;
-    uchar *buf;
-    int i, len;
 
-    len = DATA_BUF_LEN + 6;
-//     if (oi_period == 1) len = len + 6;
-
-    // preparing of msg
-    buf = (uchar *) malloc(len*sizeof(uchar));  // NULL NULL NULL TEMPERATURE_CID len_data oi_temperature CID_HUM len_data oi_humidity
-    for (i=0; i<=2; i++) buf[i] = 0;
+    int cid_cnt = 0;
+    static const int MAX_CID_CNT = 4;
+    cid_data_t cids[MAX_CID_CNT];
 
     if (oi_period == 1){
-        int2buf(&buf[3],HEART_CID);
-        int2buf(&buf[5],2);
-        int2buf(&buf[7],status_val);
+        cids[cid_cnt].cid = HEART_CID;
+        cids[cid_cnt].value = status_val;
+        cid_cnt++;
+    }
+    if (oi_cid_fan > 0){
+        cids[cid_cnt].cid = oi_cid_fan;
+        cids[cid_cnt].value = oi_fan;
+        cid_cnt++;
+    }
+    if (oi_cid_humidifier > 0) {
+        cids[cid_cnt].cid = oi_cid_humidifier;
+        cids[cid_cnt].value = oi_humidifier;
+        cid_cnt++;
     }
+    if (oi_cid_light > 0) {
+        cids[cid_cnt].cid = oi_cid_light;
+        cids[cid_cnt].value = oi_light;
+        cid_cnt++;
+    }
+
+    if (cid_cnt == 0){
+        heartbeat();
+    } else {
+
+        int i;
+        int buff_len;
 
-    msgsend = ul_send_query(ul_fd, ul_dyac->ul_dysa, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, len);
-    printf("[I] DATA\n");
-    free(buf);
-    ul_freemsg(ul_fd);
-}
-
-void accept_SDO(void) {
-        // setting lan configuration
-        if ((ul_inepoll(ul_fd)>0) && (ul_acceptmsg(ul_fd, &msginfo)>=0)) {
-            if ((msginfo.cmd != UL_CMD_PDO) && (msginfo.sadr != 98)) {
-                if (!(msginfo.flg&(UL_BFL_PROC | UL_BFL_FAIL))) {
-                    //waiting for msg from bus
-                    if (uloi_process_msg(ULOI_ARG_coninfo (uloi_objdes_array_t*)&uloi_objdes_main, &msginfo)<0) {
-                        //checking dynamic adresation
-                        if (uldy_process_msg(ULDY_ARG_ul_dyac &msginfo)>=0){
-                            printf("message recieved - UL_CMD_NCS, sadr: %i, dadr: %i, cmd: %i\n",msginfo.sadr, msginfo.dadr, msginfo.cmd);
-                            printf("server addr :%i\n",ul_dyac->ul_dysa);
-                        } else {
-                            ul_freemsg(ul_fd);
-                            printf("problem in uldy_process_msg\n");
-                        }
-                    } else {
-                        printf("ULOI message processed\n");
-                    }
-                } else {
-                    ul_freemsg(ul_fd);
-                }
-            }
+        uchar buf[cid_cnt * 6 + 3];
+        for (buff_len = 0; buff_len < 3; buff_len++) buf[buff_len] = 0;
+
+        for(i=0; i<cid_cnt; i++) {
+            int2buf(buf + buff_len, cids[i].cid);
+            buff_len += 2;
+            int2buf(buf + buff_len, 2);
+            buff_len += 2;
+            int2buf(buf + buff_len, cids[i].value);
+            buff_len += 2;
         }
-}
 
-void setmyaddr(void){
-    ul_setmyadr(ul_fd,98);
+        msgsend = ul_send_query(ul_fd, 0, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, buff_len);
+        printf("[I] DATA\n");
+        free(buf);
+        ul_freemsg(ul_fd);
+    }
 }
 
 void oiinit(void){
-    oi_cid_fan=243;
-    oi_cid_humidifier=244;
-    oi_cid_light=245;
-    oi_period=1;
+    oi_fan = 0;
+    oi_cid_fan = 0;
+    oi_slot_fan = 0;
+    oi_humidifier = 0;
+    oi_cid_humidifier = 0;
+    oi_slot_humidifier = 0;
+    oi_light = 0;
+    oi_cid_light = 0;
+    oi_slot_light = 0;
+    oi_period = 1;
     status_val = 5;
 }
 
+void check_PDO(int cid, int data){
+    if (cid == oi_slot_fan){
+        oi_fan = data;
+        set_fan_PIN();
+    }
+    if (cid == oi_slot_humidifier){
+        oi_humidifier = data;
+        set_humidifier_PIN();
+    }
+    if (cid == oi_slot_light){
+        oi_light = data;
+        set_light_PIN();
+    }
+}
+
+void regulate(void){}
+
 void work_with(void){
 
     PINSEL1 &= 0xFFFFB3FF;
index 3990f2dd8d3e418249ded0bab9b981c133b443cd..812d4c8b33331853528385f8d7a56815828f0da6 100644 (file)
 #define SN 102
 
 extern const ULOI_CODE uloi_objdes_array_t uloi_objdes_main;
-extern uint16_t status_val;
-extern uint16_t oi_fan;
-extern uint16_t oi_cid_fan;
-extern uint16_t oi_humidifier;
-extern uint16_t oi_cid_humidifier;
-extern uint16_t oi_light;
-extern uint16_t oi_cid_light;
-extern uint16_t oi_period;
+extern unsigned int status_val;
+extern unsigned int oi_fan;
+extern unsigned int oi_cid_fan;
+extern unsigned int oi_slot_fan;
+extern unsigned int oi_humidifier;
+extern unsigned int oi_cid_humidifier;
+extern unsigned int oi_slot_humidifier;
+extern unsigned int oi_light;
+extern unsigned int oi_cid_light;
+extern unsigned int oi_slot_light;
+extern unsigned int oi_period;
+
+typedef struct cid_data {
+    int cid;
+    int value;
+} cid_data_t;
 
 int oi_cid_fan_wrfnc(ULOI_PARAM_coninfo void *context);
 int oi_cid_humidifier_wrfnc(ULOI_PARAM_coninfo void *context);
 int oi_cid_light_wrfnc(ULOI_PARAM_coninfo void *context);
 
+int oi_slot_fan_wrfnc(ULOI_PARAM_coninfo void *context);
+int oi_slot_humidifier_wrfnc(ULOI_PARAM_coninfo void *context);
+int oi_slot_light_wrfnc(ULOI_PARAM_coninfo void *context);
+
 int oi_fan_wrfnc(ULOI_PARAM_coninfo void *context);
 int oi_humidifier_wrfnc(ULOI_PARAM_coninfo void *context);
 int oi_light_wrfnc(ULOI_PARAM_coninfo void *context);
 
 int oi_period_wrfnc(ULOI_PARAM_coninfo void *context);
 
-void accept_SDO(void);
-void setmyaddr(void);
 void send_data();
 void adc2oi(void);
 void oiinit(void);
+void check_PDO(int cid, int data);
+void regulate(void);
 void work_with(void);
 
 #endif
index 30ab74c6c7cefd03adcb7a9925c867e63476361c..1c8b3c876180a78fe962b4f83c8b71186e0f5c2b 100644 (file)
@@ -6,13 +6,16 @@
 
 #define I_FAN 400
 #define I_FAN_CID 410
+#define I_FAN_SLOT 420
 #define I_HUMIDIFIER 500
 #define I_HUMIDIFIER_CID 510
+#define I_HUMIDIFIER_SLOT 520
 #define I_LIGHT 600
 #define I_LIGHT_CID 610
+#define I_LIGHT_SLOT 620
 #define I_PERIOD 700
 
-uint16_t status_val;
+unsigned int status_val;
 
 int status_rdfnc(ULOI_PARAM_coninfo void *context)
 {
@@ -44,16 +47,19 @@ ULOI_GENOBJDES_RAW(ULOI_RDRQ,NULL,NULL_CODE,NULL,uloi_rdrq_fnc,(void*)&uloi_objd
 ULOI_GENOBJDES(STATUS,ULOI_STATUS,"u2",status_rdfnc,&status_val,NULL_CODE,NULL)
 ULOI_GENOBJDES(ERRCLR,ULOI_ERRCLR,"e",NULL_CODE,NULL,errclr_wrfnc,&status_val)
 
-ULOI_GENOBJDES(FAN,I_FAN,"u2",uloi_uint_rdfnc,&oi_fan,oi_fan_wrfnc,&oi_fan)
-ULOI_GENOBJDES(FAN_CID,I_FAN_CID,"u2",uloi_uint_rdfnc,&oi_cid_fan,oi_cid_fan_wrfnc,&oi_cid_fan)
+ULOI_GENOBJDES(FAN,I_FAN,"u2/bool",uloi_uint_rdfnc,&oi_fan,oi_fan_wrfnc,&oi_fan)
+ULOI_GENOBJDES(FAN_CID,I_FAN_CID,"u2/cid",uloi_uint_rdfnc,&oi_cid_fan,oi_cid_fan_wrfnc,&oi_cid_fan)
+ULOI_GENOBJDES(FAN_SLOT,I_FAN_SLOT,"u2/slot",uloi_uint_rdfnc,&oi_slot_fan,oi_slot_fan_wrfnc,&oi_slot_fan)
 
-ULOI_GENOBJDES(HUMIDIFIER,I_HUMIDIFIER,"u2",uloi_uint_rdfnc,&oi_humidifier,oi_humidifier_wrfnc,&oi_humidifier)
-ULOI_GENOBJDES(HUMIDIFIER_CID,I_HUMIDIFIER_CID,"u2",uloi_uint_rdfnc,&oi_cid_humidifier,oi_cid_humidifier_wrfnc,&oi_cid_humidifier)
+ULOI_GENOBJDES(HUMIDIFIER,I_HUMIDIFIER,"u2/bool",uloi_uint_rdfnc,&oi_humidifier,oi_humidifier_wrfnc,&oi_humidifier)
+ULOI_GENOBJDES(HUMIDIFIER_CID,I_HUMIDIFIER_CID,"u2/cid",uloi_uint_rdfnc,&oi_cid_humidifier,oi_cid_humidifier_wrfnc,&oi_cid_humidifier)
+ULOI_GENOBJDES(HUMIDIFIER_SLOT,I_HUMIDIFIER_SLOT,"u2/slot",uloi_uint_rdfnc,&oi_slot_humidifier,oi_slot_humidifier_wrfnc,&oi_slot_humidifier)
 
-ULOI_GENOBJDES(LIGHT,I_LIGHT,"u2",uloi_uint_rdfnc,&oi_light,oi_light_wrfnc,&oi_light)
-ULOI_GENOBJDES(LIGHT_CID,I_LIGHT_CID,"u2",uloi_uint_rdfnc,&oi_cid_light,oi_cid_light_wrfnc,&oi_cid_light)
+ULOI_GENOBJDES(LIGHT,I_LIGHT,"u2/bool",uloi_uint_rdfnc,&oi_light,oi_light_wrfnc,&oi_light)
+ULOI_GENOBJDES(LIGHT_CID,I_LIGHT_CID,"u2/cid",uloi_uint_rdfnc,&oi_cid_light,oi_cid_light_wrfnc,&oi_cid_light)
+ULOI_GENOBJDES(LIGHT_SLOT,I_LIGHT_SLOT,"u2/slot",uloi_uint_rdfnc,&oi_slot_light,oi_slot_light_wrfnc,&oi_slot_light)
 
-ULOI_GENOBJDES(PERIOD,I_PERIOD,"u2",uloi_uint_rdfnc,&oi_period,oi_period_wrfnc,&oi_period)
+ULOI_GENOBJDES(PERIOD,I_PERIOD,"u2",uloi_uint_rdfnc,&oi_period,NULL_CODE,NULL/*oi_period_wrfnc,&oi_period*/)
 
 const uloi_objdes_t * ULOI_CODE uloi_objdes_main_items[]={
     &uloid_objdes_DOII,
@@ -66,10 +72,13 @@ const uloi_objdes_t * ULOI_CODE uloi_objdes_main_items[]={
     &uloid_objdes_ERRCLR,
     &uloid_objdes_FAN,
     &uloid_objdes_FAN_CID,
+    &uloid_objdes_FAN_SLOT,
     &uloid_objdes_HUMIDIFIER,
     &uloid_objdes_HUMIDIFIER_CID,
+    &uloid_objdes_HUMIDIFIER_SLOT,
     &uloid_objdes_LIGHT,
     &uloid_objdes_LIGHT_CID,
+    &uloid_objdes_LIGHT_SLOT,
     &uloid_objdes_PERIOD
 
 };
diff --git a/app-stefic/regulator/Makefile b/app-stefic/regulator/Makefile
new file mode 100644 (file)
index 0000000..cafc99f
--- /dev/null
@@ -0,0 +1,15 @@
+# Generic directory or leaf node makefile for OCERA make framework
+
+ifndef MAKERULES_DIR
+MAKERULES_DIR := $(shell ( old_pwd="" ;  while [ ! -e Makefile.rules ] ; do if [ "$$old_pwd" = `pwd`  ] ; then exit 1 ; else old_pwd=`pwd` ; cd -L .. 2>/dev/null ; fi ; done ; pwd ) )
+endif
+
+ifeq ($(MAKERULES_DIR),)
+all : default
+.DEFAULT::
+       @echo -e "\nThe Makefile.rules has not been found in this or partent directory\n"
+else
+include $(MAKERULES_DIR)/Makefile.rules
+endif
+
+# DO NOT DELETE
diff --git a/app-stefic/regulator/Makefile.omk b/app-stefic/regulator/Makefile.omk
new file mode 100644 (file)
index 0000000..2aae532
--- /dev/null
@@ -0,0 +1,33 @@
+
+default_CONFIG = CONFIG_APP_REGULATOR=n
+
+ifeq ($(CONFIG_APP_REGULATOR),y)
+
+ULAN_ID=regulator
+
+default_CONFIG += CONFIG_ULOI_LT=x
+default_CONFIG += CONFIG_ULAN_DY=x
+default_CONFIG += MACH=$(MACH)
+default_CONFIG += ULAN_ID=$(ULAN_ID)
+
+LOCAL_CONFIG_H = ulan_config.h
+
+INCLUDES += -I.
+
+
+bin_PROGRAMS = regulator
+regulator_SOURCES = hydroponie.c ul_idstr.c board.c hydroponieoi.c definitions.c
+
+ifeq ($(BUILD_OS),linux)
+lib_LOADLIBES = uloi uldy ulan pthread rt
+DEFS += -DOS_POSIX
+else
+regulator_MOREOBJS = $(USER_LIB_DIR)/system_stub.o
+regulator_MOREOBJS += $(USER_LIB_DIR)/ivt.o
+lib_LOADLIBES = uloi uldy bspbase ulan ul_drv lpciap keyval lpciap lpciap_kvpb mach_hal
+endif
+
+# This selects linker script
+link_VARIANTS = app
+
+endif
\ No newline at end of file
diff --git a/app-stefic/regulator/board.c b/app-stefic/regulator/board.c
new file mode 100644 (file)
index 0000000..6c2ce49
--- /dev/null
@@ -0,0 +1,152 @@
+
+#include <stdio.h>
+#include <system_def.h>
+#include <cpu_def.h>
+
+#include "board.h"
+
+// OBJECT INTERFACE VARIABLES
+unsigned int oi_cid_fan;
+unsigned int oi_cid_hum;
+unsigned int oi_cid_light;
+unsigned int oi_slot_temp;
+unsigned int oi_slot_hum;
+unsigned int oi_period;
+
+unsigned int oi_want_temp;
+unsigned int oi_want_hum;
+unsigned int oi_want_light;
+unsigned int oi_want_dark;
+
+int hyst_temp = 1;
+int hyst_hum = 10;
+unsigned int fan = 0;
+unsigned int hum = 0;
+unsigned int light = 0;
+int temperature;
+int humidity;
+
+// OBJECT INTERFACE FUNCTIONS
+int oi_cid_fan_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    return 1;
+}
+
+int oi_cid_hum_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    return 1;
+}
+
+int oi_cid_light_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    return 1;
+}
+
+int oi_slot_temp_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    return 1;
+}
+
+int oi_slot_hum_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    return 1;
+}
+
+int oi_period_wrfnc(ULOI_PARAM_coninfo void *context){
+    uloi_uint_wrfnc(ULOI_ARG_coninfo context);
+    return 1;
+}
+
+void send_data() {
+    int msgsend;
+
+    int cid_cnt = 0;
+    static const int MAX_CID_CNT = 4;
+    cid_data_t cids[MAX_CID_CNT];
+
+    if (oi_period == 1){
+        cids[cid_cnt].cid = HEART_CID;
+        cids[cid_cnt].value = status_val;
+        cid_cnt++;
+    }
+    if (oi_cid_fan > 0){
+        cids[cid_cnt].cid = oi_cid_fan;
+        cids[cid_cnt].value = fan;
+        cid_cnt++;
+    }
+    if (oi_cid_hum > 0) {
+        cids[cid_cnt].cid = oi_cid_hum;
+        cids[cid_cnt].value = hum;
+        cid_cnt++;
+    }
+    if (oi_cid_light > 0) {
+        cids[cid_cnt].cid = oi_cid_light;
+        cids[cid_cnt].value = light;
+        cid_cnt++;
+    }
+
+    if (cid_cnt == 0){
+        heartbeat();
+    } else {
+
+        int i;
+        int buff_len;
+
+        uchar buf[cid_cnt * 6 + 3];
+        for (buff_len = 0; buff_len < 3; buff_len++) buf[buff_len] = 0;
+
+        for(i=0; i<cid_cnt; i++) {
+            int2buf(buf + buff_len, cids[i].cid);
+            buff_len += 2;
+            int2buf(buf + buff_len, 2);
+            buff_len += 2;
+            int2buf(buf + buff_len, cids[i].value);
+            buff_len += 2;
+        }
+
+        msgsend = ul_send_query(ul_fd, 0, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, buff_len);
+        printf("[I] DATA\n");
+        free(buf);
+        ul_freemsg(ul_fd);
+    }
+}
+
+void oiinit(void){
+    oi_cid_fan = 0;
+    oi_cid_hum = 0;
+    oi_cid_light = 0;
+    oi_slot_temp = 0;
+    oi_slot_hum = 0;
+    oi_period = 1;
+}
+
+void check_PDO(int cid, int data){
+    if (cid == oi_slot_temp)
+        temperature = data;
+    if (cid == oi_slot_temp)
+        humidity = data;
+}
+
+void regulate(void){
+
+    if (((oi_want_temp + hyst_temp) > temperature) && fan != 1) fan = 1; 
+    if (((oi_want_temp - hyst_temp) < temperature) && fan != 0) fan = 0;
+
+    if (((oi_want_hum + hyst_hum) > humidity) && hum != 1) hum = 1; 
+    if (((oi_want_hum - hyst_hum) < humidity) && hum != 0) hum = 0;
+
+    if(((current_time()-l3time) < oi_want_light*3600*1000) && light == 0) {
+        light = 1;
+        l3time = current_time();
+    }
+    if(((current_time()-l3time) < oi_want_dark*3600*1000) && light == 1) {
+        light = 0;
+        l3time = current_time();
+    }
+}
+
+void work_with(void){
+
+}
+
+
diff --git a/app-stefic/regulator/board.h b/app-stefic/regulator/board.h
new file mode 100644 (file)
index 0000000..e95de78
--- /dev/null
@@ -0,0 +1,44 @@
+#ifndef _BOARD_H
+#define _BOARD_H
+
+#include <uloi_base.h>
+#include <types.h>
+
+#include "definitions.h"
+
+#define DATA_BUF_LEN 15
+#define SN 103
+
+
+// OI
+extern const ULOI_CODE uloi_objdes_array_t uloi_objdes_main;
+extern unsigned int status_val;
+extern unsigned int oi_cid_fan;
+extern unsigned int oi_fan;
+extern unsigned int oi_cid_hum;
+extern unsigned int oi_fan;
+extern unsigned int oi_cid_light;
+extern unsigned int oi_fan;
+extern unsigned int oi_slot_temp;
+extern unsigned int oi_slot_hum;
+extern unsigned int oi_period;
+
+typedef struct cid_data {
+    int cid;
+    int value;
+} cid_data_t;
+
+int oi_cid_fan_wrfnc(ULOI_PARAM_coninfo void *context);
+int oi_cid_hum_wrfnc(ULOI_PARAM_coninfo void *context);
+int oi_cid_light_wrfnc(ULOI_PARAM_coninfo void *context);
+int oi_slot_temp_wrfnc(ULOI_PARAM_coninfo void *context);
+int oi_slot_hum_wrfnc(ULOI_PARAM_coninfo void *context);
+int oi_period_wrfnc(ULOI_PARAM_coninfo void *context);
+
+void send_data();
+void oiinit(void);
+void check_PDO(int cid, int data);
+void regulate(void);
+void work_with(void);
+
+#endif
diff --git a/app-stefic/regulator/definitions.c b/app-stefic/regulator/definitions.c
new file mode 120000 (symlink)
index 0000000..a57d9e9
--- /dev/null
@@ -0,0 +1 @@
+../sensor/definitions.c
\ No newline at end of file
diff --git a/app-stefic/regulator/definitions.h b/app-stefic/regulator/definitions.h
new file mode 120000 (symlink)
index 0000000..0d0cc01
--- /dev/null
@@ -0,0 +1 @@
+../sensor/definitions.h
\ No newline at end of file
diff --git a/app-stefic/regulator/hydroponie.c b/app-stefic/regulator/hydroponie.c
new file mode 120000 (symlink)
index 0000000..bd04185
--- /dev/null
@@ -0,0 +1 @@
+../sensor/hydroponie.c
\ No newline at end of file
diff --git a/app-stefic/regulator/hydroponie.h b/app-stefic/regulator/hydroponie.h
new file mode 120000 (symlink)
index 0000000..fbc6c4c
--- /dev/null
@@ -0,0 +1 @@
+../sensor/hydroponie.h
\ No newline at end of file
diff --git a/app-stefic/regulator/hydroponieoi.c b/app-stefic/regulator/hydroponieoi.c
new file mode 100644 (file)
index 0000000..b9732ec
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+    OBJECT INTERFACE FOR SENSOR
+*/
+
+#include "board.h"
+
+#define I_FAN_CID 800
+#define I_HUMIDIFIER_CID 810
+#define I_LIGHT_CID 820
+#define I_TEMPERATURE_SLOT 900
+#define I_HUMIDITY_SLOT 910
+#define I_PERIOD 1000
+
+unsigned int status_val;
+
+int status_rdfnc(ULOI_PARAM_coninfo void *context)
+{
+    return uloi_uint_rdfnc(ULOI_ARG_coninfo &status_val);
+}
+
+int errclr_wrfnc(ULOI_PARAM_coninfo void *context)
+{
+    status_val=0; 
+    return 1;
+}
+
+/* description of input objects */
+const ULOI_CODE uloi_objdes_t uloid_objdes_DOII =
+ULOI_GENOBJDES_RAW(ULOI_DOII,NULL,NULL_CODE,NULL,uloi_doii_fnc,(void*)&uloi_objdes_main)
+/* description of output objects */
+const ULOI_CODE uloi_objdes_t uloid_objdes_DOIO =
+ULOI_GENOBJDES_RAW(ULOI_DOIO,NULL,NULL_CODE,NULL,uloi_doio_fnc,(void*)&uloi_objdes_main)
+/* ID numbers of recognized input objects */
+const ULOI_CODE uloi_objdes_t uloid_objdes_QOII =
+ULOI_GENOBJDES_RAW(ULOI_QOII,NULL,NULL_CODE,NULL,uloi_qoii_fnc,(void*)&uloi_objdes_main)
+/* ID numbers of recognized output objects */
+const ULOI_CODE uloi_objdes_t uloid_objdes_QOIO =
+ULOI_GENOBJDES_RAW(ULOI_QOIO,NULL,NULL_CODE,NULL,uloi_qoio_fnc,(void*)&uloi_objdes_main)
+/* object values read request */
+const ULOI_CODE uloi_objdes_t uloid_objdes_RDRQ =
+ULOI_GENOBJDES_RAW(ULOI_RDRQ,NULL,NULL_CODE,NULL,uloi_rdrq_fnc,(void*)&uloi_objdes_main)
+
+ULOI_GENOBJDES(STATUS,ULOI_STATUS,"u2",status_rdfnc,&status_val,NULL_CODE,NULL)
+ULOI_GENOBJDES(ERRCLR,ULOI_ERRCLR,"e",NULL_CODE,NULL,errclr_wrfnc,&status_val)
+
+ULOI_GENOBJDES(FAN_CID,I_FAN_CID,"u2/cid",uloi_uint_rdfnc,&oi_cid_fan,oi_cid_fan_wrfnc,&oi_cid_fan)
+ULOI_GENOBJDES(HUMIDIFIER_CID,I_HUMIDIFIER_CID,"u2/cid",uloi_uint_rdfnc,&oi_cid_hum,oi_cid_hum_wrfnc,&oi_cid_hum)
+ULOI_GENOBJDES(LIGHT_CID,I_LIGHT_CID,"u2/cid",uloi_uint_rdfnc,&oi_cid_light,oi_cid_light_wrfnc,&oi_cid_light)
+
+ULOI_GENOBJDES(TEMPERATURE_SLOT,I_TEMPERATURE_SLOT,"u2/slot",uloi_uint_rdfnc,&oi_slot_temp,oi_slot_temp_wrfnc,&oi_slot_temp)
+ULOI_GENOBJDES(HUMIDITY_SLOT,I_HUMIDITY_SLOT,"u2/slot",uloi_uint_rdfnc,&oi_slot_hum,oi_slot_hum_wrfnc,&oi_slot_hum)
+
+ULOI_GENOBJDES(PERIOD,I_PERIOD,"u2",uloi_uint_rdfnc,&oi_period,oi_period_wrfnc,&oi_period)
+
+const uloi_objdes_t * ULOI_CODE uloi_objdes_main_items[]={
+    &uloid_objdes_DOII,
+    &uloid_objdes_DOIO,
+    &uloid_objdes_QOII,
+    &uloid_objdes_QOIO,
+    &uloid_objdes_RDRQ,
+
+    &uloid_objdes_STATUS,
+    &uloid_objdes_ERRCLR,
+    &uloid_objdes_FAN_CID,
+    &uloid_objdes_HUMIDIFIER_CID,
+    &uloid_objdes_LIGHT_CID,
+    &uloid_objdes_TEMPERATURE_SLOT,
+    &uloid_objdes_HUMIDITY_SLOT,
+    &uloid_objdes_PERIOD
+
+};
+
+const ULOI_CODE uloi_objdes_array_t uloi_objdes_main={
+    {
+        (uloi_objdes_t **)uloi_objdes_main_items,
+        sizeof(uloi_objdes_main_items)/sizeof(uloi_objdes_main_items[0]),
+        -1
+    }
+};
diff --git a/app-stefic/regulator/load_usb.sh b/app-stefic/regulator/load_usb.sh
new file mode 100755 (executable)
index 0000000..b33529d
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+usb_sendhex -d 0xdead -i 0x2263 -s 0x20000 -l 0x20000 -e; 
+sleep 2 ; 
+usb_sendhex -d 0xdead -i 0x2263 -s 0x20000 -f binary /home/stefic/BAP/build_ulan/ulan-build/arm-ul_usb1-ulad31/_compiled/bin/regulator-app.bin
+usb_sendhex -d 0xdead -i 0x2263 -r ; 
diff --git a/app-stefic/regulator/ul_idstr.c b/app-stefic/regulator/ul_idstr.c
new file mode 120000 (symlink)
index 0000000..01bdbd2
--- /dev/null
@@ -0,0 +1 @@
+../sensor/ul_idstr.c
\ No newline at end of file
diff --git a/app-stefic/regulator/ul_idstr.h b/app-stefic/regulator/ul_idstr.h
new file mode 120000 (symlink)
index 0000000..1826486
--- /dev/null
@@ -0,0 +1 @@
+../sensor/ul_idstr.h
\ No newline at end of file
index 5eb441efdafbef18f256c9e60f77fd33c5544984..d84b280eaf030a09b37b911a02f9dc41dfc6e4fc 100644 (file)
@@ -8,24 +8,20 @@
 adc_stat_t adcst;
 
 // OBJECT INTERFACE VARIABLES
-int16_t oi_temperature;
-uint16_t oi_cid_temp;
-int16_t oi_humidity;
-uint16_t oi_cid_hum;
-uint16_t oi_period;
+int oi_temperature;
+unsigned int oi_cid_temp;
+int oi_humidity;
+unsigned int oi_cid_hum;
+unsigned int oi_period;
 
 // OBJECT INTERFACE FUNCTIONS
 int oi_cid_temp_wrfnc(ULOI_PARAM_coninfo void *context){
-    printf("cid_temp: %i\n",oi_cid_temp);
     uloi_uint_wrfnc(ULOI_ARG_coninfo &oi_cid_temp);
-    printf("cid_temp: %i\n",oi_cid_temp);
     return 1;
 }
 
 int oi_cid_hum_wrfnc(ULOI_PARAM_coninfo void *context){
-    printf("cid_hum: %i\n",oi_cid_hum);
     uloi_uint_wrfnc(ULOI_ARG_coninfo &oi_cid_hum);
-    printf("cid_hum: %i\n",oi_cid_hum);
     return 1;
 }
 
@@ -36,85 +32,80 @@ int oi_period_wrfnc(ULOI_PARAM_coninfo void *context){
 
 void send_data() {
     int msgsend;
-    uchar *buf;
-    int i, len;
 
-    len = DATA_BUF_LEN;
-    if (oi_period == 1) len = len + 6;
-
-    read_ADC(&adcst);
-    adc2oi();
-
-    //.preparing of msg
-    buf = (uchar *) malloc(len*sizeof(uchar));  // NULL NULL NULL TEMPERATURE_CID len_data oi_temperature CID_HUM len_data oi_humidity
-    for (i=0; i<=2; i++) buf[i] = 0;
+    int cid_cnt = 0;
+    static const int MAX_CID_CNT = 3;
+    cid_data_t cids[MAX_CID_CNT];
 
     if (oi_period == 1){
-        int2buf(&buf[3],HEART_CID);
-        int2buf(&buf[5],2);
-        int2buf(&buf[7],status_val);
-        int2buf(&buf[9],oi_cid_temp);
-        int2buf(&buf[11],2);
-        int2buf(&buf[13],oi_temperature);
-        int2buf(&buf[15],oi_cid_hum);
-        int2buf(&buf[17],2);
-        int2buf(&buf[19],oi_humidity);
-    } else {
-        int2buf(&buf[3],oi_cid_temp);
-        int2buf(&buf[5],2);
-        int2buf(&buf[7],oi_temperature);
-        int2buf(&buf[9],oi_cid_hum);
-        int2buf(&buf[11],2);
-        int2buf(&buf[13],oi_humidity);
+        cids[cid_cnt].cid = HEART_CID; 
+        cids[cid_cnt].value = status_val; 
+        cid_cnt++;
+    }
+    if (oi_cid_temp > 0){
+        cids[cid_cnt].cid = oi_cid_temp; 
+        cids[cid_cnt].value = oi_temperature; 
+        cid_cnt++;
+    }
+    if (oi_cid_hum > 0) {
+        cids[cid_cnt].cid = oi_cid_hum; 
+        cids[cid_cnt].value = oi_humidity; 
+        cid_cnt++;
     }
 
-    msgsend = ul_send_query(ul_fd, ul_dyac->ul_dysa, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, len);
-    printf("[I] DATA\n");
-    free(buf);
-    ul_freemsg(ul_fd);
-}
+    if (cid_cnt == 0){
+        heartbeat();
+    } else {
 
-void accept_SDO(void) {
-        // setting lan configuration
-        if ((ul_inepoll(ul_fd)>0) && (ul_acceptmsg(ul_fd, &msginfo)>=0)) {
-           if ((msginfo.cmd != UL_CMD_PDO) && (msginfo.sadr != 99)) {
-                if (!(msginfo.flg&(UL_BFL_PROC | UL_BFL_FAIL))) {
-                    //waiting for msg from bus
-                    if (uloi_process_msg(ULOI_ARG_coninfo (uloi_objdes_array_t*)&uloi_objdes_main, &msginfo)<0) {
-                        //checking dynamic adresation
-                        if (uldy_process_msg(ULDY_ARG_ul_dyac &msginfo)>=0){
-                            printf("message recieved - UL_CMD_NCS, sadr: %i, dadr: %i, cmd: %i\n",msginfo.sadr, msginfo.dadr, msginfo.cmd);
-                            printf("server addr :%i\n",ul_dyac->ul_dysa);
-                        } else {
-                            ul_freemsg(ul_fd);
-                            printf("problem in uldy_process_msg\n");
-                        }
-                    } else {
-                        printf("ULOI message processed\n");
-                    }
-                } else {
-                    ul_freemsg(ul_fd);
-                }
-            }
+        int i;
+        int buff_len;
+
+        for (i=0; i<=CNT; i++) read_ADC(&adcst);
+        adc2oi();
+
+        uchar buf[cid_cnt * 6 + 3];
+        for (buff_len = 0; buff_len < 3; buff_len++) buf[buff_len] = 0;
+
+        for(i=0; i<cid_cnt; i++) {
+            int2buf(buf + buff_len, cids[i].cid);
+            buff_len += 2;
+            int2buf(buf + buff_len, 2);
+            buff_len += 2;
+            int2buf(buf + buff_len, cids[i].value);
+            buff_len += 2;
         }
-}
 
-void setmyaddr(void){
-    ul_setmyadr(ul_fd,99);
+        msgsend = ul_send_query(ul_fd, 0, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, buff_len);
+        printf("[I] DATA\n");
+        free(buf);
+        ul_freemsg(ul_fd);
+    }
 }
 
+// void adc2oi(void){
+//     oi_temperature = 25;
+// //     printf("temperature: %i\n",adcst.temp);
+//     oi_humidity = 100;
+// //     printf("humidity: %i\n",adcst.hum);
+// }
+
 void adc2oi(void){
     oi_temperature = adcst.temp;
+    printf("temperature: %i\n",adcst.temp);
     oi_humidity = adcst.hum;
+    printf("humidity: %i\n",adcst.hum);
 }
 
 void oiinit(void){
-    oi_cid_temp=233;
-    oi_cid_hum=234;
-    oi_period=2;
+    oi_cid_temp = 0;
+    oi_cid_hum = 0;
+    oi_period = 2;
     status_val = 5;
 }
 
+void check_PDO(int cid, int data){}
+void regulate(void){}
+
 void work_with(void){
     mstime_t time;
     led1_time = current_time();
@@ -129,12 +120,12 @@ void work_with(void){
     time = current_time();
 
     while(1){
-        blink();
-        read_ADC(&adcst);
+//         blink();
+//         read_ADC(&adcst);
 
         if((current_time()-time) > 1000){
             printf("AD0.1 %i\n", adcst.temp);
-            printf("AD0.2 %i\n", adcst.hum);
+//             printf("AD0.2 %i\n", adcst.hum);
             time = current_time();
             }
     }
@@ -176,10 +167,10 @@ int read_ADC (adc_stat_t *adcst){
     adcst->hum_tmp += adcst->read;
 
     adcst->cnt++;
-    if (adcst->cnt == 30){
+    if (adcst->cnt == CNT){
         adcst->cnt = 0;
-        adcst->temp = adcst->temp_tmp/16;
-        adcst->hum = adcst->hum_tmp/16;
+        adcst->temp = adcst->temp_tmp/CNT;
+        adcst->hum = adcst->hum_tmp/CNT;
         adcst->temp_tmp = 0;
         adcst->hum_tmp = 0;
         return 1;
index 25eaa6e78e97f1c6cdd674bb018af5172d7f44f9..32076535224396f833d6ec78fc0b9ef24186869c 100644 (file)
@@ -9,14 +9,16 @@
 #define DATA_BUF_LEN 15
 #define SN 101
 
+#define CNT 10
+
 // OI
 extern const ULOI_CODE uloi_objdes_array_t uloi_objdes_main;
-extern uint16_t status_val;
-extern int16_t oi_temperature;
-extern uint16_t oi_cid_temp;
-extern int16_t oi_humidity;
-extern uint16_t oi_cid_hum;
-extern uint16_t oi_period;
+extern unsigned int status_val;
+extern int oi_temperature;
+extern unsigned int oi_cid_temp;
+extern int oi_humidity;
+extern unsigned int oi_cid_hum;
+extern unsigned int oi_period;
 
 int oi_cid_temp_wrfnc(ULOI_PARAM_coninfo void *context);
 int oi_cid_hum_wrfnc(ULOI_PARAM_coninfo void *context);
@@ -33,20 +35,19 @@ typedef struct
     int cnt;
 } adc_stat_t;
 
-
-typedef struct
-{
-
-} adc_cal_t;
+typedef struct cid_data {
+    int cid;
+    int value;
+} cid_data_t;
 
 void init_ADC (int);
 int read_ADC (adc_stat_t *);
 
-void accept_SDO(void);
-void setmyaddr(void);
 void send_data();
 void adc2oi(void);
 void oiinit(void);
+void check_PDO(int cid, int data);
+void regulate(void);
 void work_with(void);
 
 #endif
index 22cf70720041c5d2b8cd2ebd5ac0bcca28a39dd0..0f014196daae0b9acd192818bd5b279f493c6880 100644 (file)
@@ -5,11 +5,6 @@
 #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
@@ -18,23 +13,29 @@ 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;
+int led1 = 500;
+int led2 = 300;
 
 void long2buf(uchar *buf,unsigned long mod){
-  buf[0]=mod>>0;
-  buf[1]=mod>>8;
-  buf[2]=mod>>16;
-  buf[3]=mod>>24;
+    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;
+    buf[0]=mod>>0;
+    buf[1]=mod>>8;
+}
+
+int buf2int(uchar *buf){
+    int i;
+    i = (uchar) buf[0];
+    i = ((uchar) buf[1]<<8) | i;
+    return i;
 }
 
 mstime_t current_time(){
@@ -73,20 +74,6 @@ void blink(void){
 }
 
 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,&sn);
 
     //opening file descriptor
     ul_fd = ul_open(NULL,NULL);
@@ -104,7 +91,7 @@ int all_init(void){
         return addfilt;
     }
 
-    setmyaddr();
+    ul_setmyadr(ul_fd,99);
     ul_setidstr(ul_fd,ul_idstr);
 
     // uLan object interface init
@@ -155,13 +142,81 @@ void heartbeat(void){
     free(buf);
 }
 
+void accept_SDO(void) {
+        // setting lan configuration
+        if ((ul_inepoll(ul_fd)>0) && (ul_acceptmsg(ul_fd, &msginfo)>=0)) {
+            if (msginfo.cmd == UL_CMD_PDO){
+                process_PDO();
+            } else if (msginfo.sadr != 99) {
+                if (!(msginfo.flg&(UL_BFL_PROC | UL_BFL_FAIL))) {
+                    //waiting for msg from bus
+                    if (uloi_process_msg(ULOI_ARG_coninfo (uloi_objdes_array_t*)&uloi_objdes_main, &msginfo)<0) {
+                        //checking dynamic adresation
+                        if (uldy_process_msg(ULDY_ARG_ul_dyac &msginfo)>=0){
+                            printf("message recieved - UL_CMD_NCS, sadr: %i, dadr: %i, cmd: %i\n",msginfo.sadr, msginfo.dadr, msginfo.cmd);
+                            printf("server addr :%i\n",ul_dyac->ul_dysa);
+                        } else {
+                            ul_freemsg(ul_fd);
+                            printf("problem in uldy_process_msg\n");
+                        }
+                    } else {
+                        printf("ULOI message processed\n");
+                    }
+                } else {
+                    ul_freemsg(ul_fd);
+                }
+            }
+        }
+}
+
+void process_PDO(void){
+uchar * buf;
+int buf_len = 0;
+
+int position = 0;
+
+int cid = 0;
+int len_data = 0;
+int data = 0;
+
+    buf_len = msginfo.len;
+    buf = (uchar *) malloc(buf_len*sizeof(uchar));
+    ul_read(ul_fd, buf, buf_len);
+
+    while(1){
+        if ((position+2) > buf_len) break;
+        cid = take_cid(&buf[position]);
+        position += 2;
+
+        if ((position+2) > buf_len) break;
+        len_data = take_len(&buf[position]);
+        position += 2;
+
+        if ((position+len_data) > buf_len) break;
+        data = take_data(&buf[position], len_data);
+        position += len_data;
+
+        check_PDO(cid, data);
+    }
+}
+
+int take_cid(uchar * buf){
+    return buf2int(buf);
+}
+
+int take_len(uchar * buf){
+    return buf2int(buf);
+}
+
+int take_data(uchar * buf, int len){
+    if (len == 2) return buf2int(buf);
+    return 0;
+}
+
 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;
 }
index 4b88538cc3377714b3ea820231ed8ba0b785099e..bece6063a26d5286237e8dbfff6212007fd5e6cf 100644 (file)
@@ -25,12 +25,10 @@ ul_fd_t ul_fd1;
 
 uloi_coninfo_t uloi_coninfo_global;
 ul_dyac_t ul_dyac_global;
-// kvpb_block_t kvpb_block_global;
 
 #ifndef UL_WITHOUT_HANDLE
 extern uloi_coninfo_t *coninfo;
 extern ul_dyac_t *ul_dyac;
-// extern kvpb_block_t *kvpb_block;
 #endif
 
 #ifdef OS_POSIX
@@ -39,10 +37,11 @@ extern ul_dyac_t *ul_dyac;
     typedef lt_mstime_t mstime_t;
 #endif
 
-mstime_t led1_time, led2_time;
+mstime_t led1_time, led2_time, l3time;
 
 void long2buf(uchar *buf,unsigned long mod);
 void int2buf(uchar *buf,int mod);
+int buf2int(uchar *buf);
 
 mstime_t current_time();
 void blink(void);
@@ -50,6 +49,12 @@ void blink(void);
 int all_init(void);
 void send_sn(void);
 void heartbeat(void);
+void accept_SDO(void);
+void process_PDO(void);
+
+int take_cid(uchar* buf);
+int take_len(uchar* buf);
+int take_data(uchar* buf, int len);
 
 char ul_save_sn(uint32_t usn);
 char ul_save_adr(uint8_t uaddr);
index 341732abce0f5cffeb83228d618fc830f3fe8eba..5a3776b2b95df6e413a34471b3d7c06e67378151 100644 (file)
@@ -46,7 +46,7 @@ void loop(void){
         ltime = current_time();
         while(1){
             ctime = current_time();
-            if((ctime-ltime) > 1000){
+            if((ctime-ltime) > 3000){
                 break;
             }
             #ifdef OS_POSIX
@@ -59,27 +59,33 @@ void loop(void){
 
     ltime  = current_time();
     l2time = current_time();
+    l3time = current_time();
 
     while(1){
         blink();
         ctime = current_time();
 
-        if (oi_period == 1){
-            if((ctime-ltime) > 1000){
-                send_data();
-                ltime = current_time();
-            }
-        } else {
-            if((ctime-ltime) > 1000){
-                heartbeat();
-                ltime = current_time();
-            }
-            if((ctime-l2time) > 1000*oi_period){
-                send_data();
-                l2time = current_time();
+        if (oi_period != 0){
+            if (oi_period == 1){
+                if((ctime-ltime) > 1000){
+                    send_data();
+                    ltime = current_time();
+                }
+            } else {
+                if((ctime-ltime) > 1000){
+                    heartbeat();
+                    ltime = current_time();
+                }
+                if((ctime-l2time) > 1000*oi_period){
+                    send_data();
+                    l2time = current_time();
+                }
             }
         }
         accept_SDO();
+
+        regulate();
+
         #ifdef OS_POSIX
             usleep(1);
         #endif
index df1128f23a1d09d25cfcc94cb56e263dcfa2152a..3b02f901690b9e09afbe3686f8592502fdbf5a51 100644 (file)
@@ -10,7 +10,7 @@
 #define I_HUMIDITY_CID 210
 #define I_PERIOD 300
 
-uint16_t status_val;
+unsigned int status_val;
 
 int status_rdfnc(ULOI_PARAM_coninfo void *context)
 {
@@ -42,11 +42,11 @@ ULOI_GENOBJDES_RAW(ULOI_RDRQ,NULL,NULL_CODE,NULL,uloi_rdrq_fnc,(void*)&uloi_objd
 ULOI_GENOBJDES(STATUS,ULOI_STATUS,"u2",status_rdfnc,&status_val,NULL_CODE,NULL)
 ULOI_GENOBJDES(ERRCLR,ULOI_ERRCLR,"e",NULL_CODE,NULL,errclr_wrfnc,&status_val)
 
-ULOI_GENOBJDES(TEMPERATURE,I_TEMPERATURE,"s2",uloi_int_rdfnc,&oi_temperature,NULL_CODE,NULL)
-ULOI_GENOBJDES(TEMPERATURE_CID,I_TEMPERATURE_CID,"u2",uloi_uint_rdfnc,&oi_cid_temp,oi_cid_temp_wrfnc,&oi_cid_temp)
+ULOI_GENOBJDES(TEMPERATURE,I_TEMPERATURE,"s2/.1",uloi_int_rdfnc,&oi_temperature,NULL_CODE,NULL)
+ULOI_GENOBJDES(TEMPERATURE_CID,I_TEMPERATURE_CID,"u2/cid",uloi_uint_rdfnc,&oi_cid_temp,oi_cid_temp_wrfnc,&oi_cid_temp)
 
-ULOI_GENOBJDES(HUMIDITY,I_HUMIDITY,"s2",uloi_int_rdfnc,&oi_humidity,NULL_CODE,NULL)
-ULOI_GENOBJDES(HUMIDITY_CID,I_HUMIDITY_CID,"u2",uloi_uint_rdfnc,&oi_cid_hum,oi_cid_hum_wrfnc,&oi_cid_hum)
+ULOI_GENOBJDES(HUMIDITY,I_HUMIDITY,"s2/.1",uloi_int_rdfnc,&oi_humidity,NULL_CODE,NULL)
+ULOI_GENOBJDES(HUMIDITY_CID,I_HUMIDITY_CID,"u2/cid",uloi_uint_rdfnc,&oi_cid_hum,oi_cid_hum_wrfnc,&oi_cid_hum)
 
 ULOI_GENOBJDES(PERIOD,I_PERIOD,"u2",uloi_uint_rdfnc,&oi_period,oi_period_wrfnc,&oi_period)