]> rtime.felk.cvut.cz Git - hydro.git/commitdiff
Minor repairs, adding analog-digital convertor source code
authorstefic User <stefic@ubuntu.ubuntu-domain>
Tue, 25 Nov 2008 19:16:18 +0000 (20:16 +0100)
committerstefic User <stefic@ubuntu.ubuntu-domain>
Tue, 25 Nov 2008 19:16:18 +0000 (20:16 +0100)
app/hydro/Makefile.omk
app/hydro/adc.c [new file with mode: 0644]
app/hydro/adc.h
app/hydro/hydroponie.c
app/hydro/hydroponie.h
app/hydro/hydroponieoi.c

index fe3b8c4a841d05ed01d18f09f404646c1a3ecc59..4bf6ad840680a8cfedefe5fe4240bee2c1488dbc 100644 (file)
@@ -16,7 +16,7 @@ INCLUDES += -I.
 
 
 bin_PROGRAMS = hydroponie
-hydroponie_SOURCES = hydroponie.c hydroponieoi.c ul_idstr.c
+hydroponie_SOURCES = hydroponie.c hydroponieoi.c ul_idstr.c adc.c
 hydroponie_MOREOBJS = $(USER_LIB_DIR)/system_stub.o
 hydroponie_MOREOBJS += $(USER_LIB_DIR)/ivt.o
 
diff --git a/app/hydro/adc.c b/app/hydro/adc.c
new file mode 100644 (file)
index 0000000..e9aeaf5
--- /dev/null
@@ -0,0 +1,28 @@
+
+#include "adc.h"
+
+int init_adc(){
+#ifndef OS_POSIX
+    // Set P0.22 and P0.23 as AIN0 -> AD0.1 and AD0.2 (pinsel value 01)
+    PINSEL1=(PINSEL1 & ~(0xF << (22*2-32))) | (1 << (22*2-32)) | (1 << (23*2-32));
+    // Set P0.24 and P0.25 as AIN1 -> AD0.1 and AD0.2 (pinsel value 01)
+    PINSEL1=(PINSEL1 & ~(0xF << (24*2-32))) | (1 << (24*2-32)) | (1 << (25*2-32));
+    // Setting of AD control register
+    AD0CR=__val2mfld(ADCR_SEL,3) | __val2mfld(ADCR_CLKDIV,255) | (ADCR_BURST*1) | (ADCR_PDN*1);
+    // Interupt eneable bit
+    AD0INTEN=0;
+#endif
+    return 0;
+}
+
+int get_adc(adc_stat_t * adcst){
+#ifndef OS_POSIX
+    // Read DATA
+    adcst->temp =__mfld2val(ADDR_RESULT, AD0DR0);
+    adcst->hum =__mfld2val(ADDR_RESULT, AD0DR1);
+#endif
+
+    return 0;
+}
+
+
index 4cfaee4d4f8f5f2f79759b46d69935585e5865f6..7052431718ceeae51a260b6cb245e012fb63b093 100644 (file)
@@ -1,14 +1,26 @@
-#ifndef _ADC_H
-#define _ADC_H
+#ifndef _TEMP_ADC_H
+#define _TEMP_ADC_H
 
-//addresses of ADC registers
+#include <stdio.h>
 
-//ADC Control Register
-#define ADCR 0xE0034000
-//ADC Status Register
-#define ADSTAT 0xE0034030
-//ADC Interrupt Enable Register
-#define ADINTEN 0xE003400C
+typedef struct
+{
+  int temp;
+  int hum;
+} adc_stat_t;
 
-#define ADDR0 0xE0034010
-#define ADDR1 0xE0034014
\ No newline at end of file
+
+typedef struct
+{
+
+} adc_cal_t;
+
+#ifndef OS_POSIX
+    #include <system_def.h>
+    #include <cpu_def.h>
+#endif
+
+    int get_adc(adc_stat_t * adcst);
+    int init_adc();
+
+#endif
index 2ba81e90bf2dd838b95060e7e320d0386863295b..7f0c3214475c7e372f0e710454965ad19141b096 100644 (file)
     #include <system_def.h>
     #include <cpu_def.h>
 #endif
+
 // #include <lpciap.h>
 // #include <keyval_id.h>
 // #include <keyval_loc.h>
 // #include <lpciap_kvpb.h>
 
 //INCLUDE IN CURRENT DIRECTORY
-#include "hydroponie.h"
 #include "ul_idstr.h"
+#include "hydroponie.h"
 
 // CONSTANTS
 #define UL_DEV "/dev/ulan"
@@ -76,6 +77,9 @@ ul_fd_t ul_fd1;
 ul_msginfo msginfo;
 int addfilt;
 
+adc_stat_t adcst;
+// adc_cal_t adccal;
+
 #ifndef UL_WITHOUT_HANDLE
 //kvpb_block_t *kvpb_block=&kvpb_block_global;
 uloi_coninfo_t *coninfo=&uloi_coninfo_global;
@@ -84,10 +88,10 @@ ul_dyac_t *ul_dyac=&ul_dyac_global;
 
 // OBJECT INTERFACE VARIABLES
 uint16_t status_val;
-int16_t oi_temperature = 20;
+int16_t oi_temperature;
 int16_t oi_cid_temp;
 int16_t oi_per_temp;
-int16_t oi_humidity = 100;
+int16_t oi_humidity;
 int16_t oi_cid_hum;
 int16_t oi_per_hum;
 
@@ -145,8 +149,7 @@ char ul_save_adr(uint8_t uaddr)
 }
 
 
-int send_sn(void){
-    //declaration
+void send_sn(void){
     int msgsend;
 
     //.preparing of msg
@@ -162,7 +165,7 @@ int send_sn(void){
 
 }
 
-int heartbeat(void){
+void heartbeat(void){
     //int period;
     int msgsend, i;
     int len = HEART_BUF_LEN;
@@ -179,13 +182,15 @@ int heartbeat(void){
     free(buf);
 }
 
-int send_data(void) {
+void send_data(void) {
     int msgsend;
     uchar *buf;
     int i;
     int len = DATA_BUF_LEN;
 
-    get_data();
+    init_adc();
+    get_adc(&adcst);
+//     PC_adc();
 
     //.preparing of msg
     buf = (uchar *) malloc(len*sizeof(uchar));  // NULL NULL NULL CID_TEMP len_data oi_temperature CID_HUM len_data oi_humidity
@@ -193,20 +198,20 @@ int send_data(void) {
     int2buf(&buf[3],CID_TEMP);
     int2buf(&buf[5],2);
     int2buf(&buf[7],oi_temperature);
-//     int2buf(&buf[9],CID_HUM);
-//     int2buf(&buf[11],2);
-//     int2buf(&buf[13],oi_humidity);
+    int2buf(&buf[9],CID_HUM);
+    int2buf(&buf[11],2);
+    int2buf(&buf[13],oi_humidity);
 
-    msgsend = ul_send_query(ul_fd, ul_dyac->ul_dysa, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, /*DATA_BUF_LEN*/9);
+    msgsend = ul_send_query(ul_fd, ul_dyac->ul_dysa, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, DATA_BUF_LEN);
     printf("[I] DATA\n");
     free(buf);
     ul_freemsg(ul_fd);
 
 }
 
-int get_data(void){
+void PC_adc(void){
 #ifdef OS_POSIX
-    oi_temperature = -25000;
+    oi_temperature = 25;
     oi_humidity = 99;
 #else
     oi_temperature = AD0DR1;
@@ -214,7 +219,7 @@ int get_data(void){
 #endif
 }
 
-int accept_SDO(void) {
+void accept_SDO(void) {
 
         // setting lan configuration
         if ((ul_inepoll(ul_fd)>0) && (ul_acceptmsg(ul_fd, &msginfo)>=0)) {
@@ -308,6 +313,33 @@ void loop(void){
 
 }
 
+void blink(void){
+    #ifndef OS_POSIX
+    while(1){
+        int led1 = 200;
+        int led2 = 0;
+        mstime_t led1_time, led2_time;
+        led1_time = current_time();
+        led2_time = current_time();
+
+        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 main(int argc, char *argv[]) { 
 
     //opening file descriptor
@@ -337,7 +369,9 @@ int main(int argc, char *argv[]) {
     uldy_init(ul_dyac,ul_fd,ul_save_sn,ul_save_adr,(char*)ul_idstr,sn);
 
     loop();
+//     blink();
 
     ul_close(ul_fd);
+
     return EXIT_SUCCESS;
 }
index ccf034b63955bcad4cfdbee1f866db53259cc613..215f0876165d5e0284a1ad16233dbacf5850f0a5 100644 (file)
@@ -1,14 +1,15 @@
-#ifndef _HYDRO
-#define _HYDRO
+#ifndef _HYDROPONIE_H
+#define _HYDROPONIE_H
 
 #ifdef __cplusplus
 /*extern "C" {*/
 #endif
 
 #include <uloi_base.h>
-#include <uldy_base.h>
 #include <types.h>
 
+#include "adc.h"
+
 extern const ULOI_CODE uloi_objdes_array_t uloi_objdes_main;
 extern uint16_t status_val;
 extern int16_t oi_temperature;
@@ -26,6 +27,8 @@ int oi_per_temp_wrfnc(ULOI_PARAM_coninfo void *context);
 int oi_cid_hum_wrfnc(ULOI_PARAM_coninfo void *context);
 int oi_per_hum_wrfnc(ULOI_PARAM_coninfo void *context);
 
+void PC_adc(void);
+
 #ifdef __cplusplus
 /*}*/ /* extern "C"*/
 #endif
index 2d049b5eaaa5dfe6ba621e144170c9e1fe335c1c..35750f4bbea00fae52cc8bc450f0e1c20046e9d0 100644 (file)
@@ -2,7 +2,6 @@
     OBJECT INTERFACE FOR HYDRO
 */
 
-#include <uloi_base.h>
 #include "hydroponie.h"
 
 #define I_TEMPERATURE 100