3 #include <system_def.h>
10 // OBJECT INTERFACE VARIABLES
12 int16_t oi_temperature;
18 // OBJECT INTERFACE FUNCTIONS
19 int oi_cid_temp_wrfnc(ULOI_PARAM_coninfo void *context){
20 uloi_uint_wrfnc(ULOI_ARG_coninfo context);
24 int oi_cid_hum_wrfnc(ULOI_PARAM_coninfo void *context){
25 uloi_uint_wrfnc(ULOI_ARG_coninfo context);
29 int oi_period_wrfnc(ULOI_PARAM_coninfo void *context){
30 uloi_uint_wrfnc(ULOI_ARG_coninfo context);
40 if (oi_period == 1) len = len + 6;
46 buf = (uchar *) malloc(len*sizeof(uchar)); // NULL NULL NULL TEMPERATURE_CID len_data oi_temperature CID_HUM len_data oi_humidity
47 for (i=0; i<=2; i++) buf[i] = 0;
50 int2buf(&buf[3],HEART_CID);
52 int2buf(&buf[7],status_val);
53 int2buf(&buf[9],oi_cid_temp);
55 int2buf(&buf[13],oi_temperature);
56 int2buf(&buf[15],oi_cid_hum);
58 int2buf(&buf[19],oi_humidity);
60 int2buf(&buf[3],oi_cid_temp);
62 int2buf(&buf[7],oi_temperature);
63 int2buf(&buf[9],oi_cid_hum);
65 int2buf(&buf[13],oi_humidity);
68 msgsend = ul_send_query(ul_fd, ul_dyac->ul_dysa, UL_CMD_PDO, UL_BFL_NORE, (void*) buf, len);
74 void accept_SDO(void) {
75 // setting lan configuration
76 if ((ul_inepoll(ul_fd)>0) && (ul_acceptmsg(ul_fd, &msginfo)>=0)) {
77 if ((msginfo.cmd != UL_CMD_PDO) && (msginfo.sadr != 99)) {
78 if (!(msginfo.flg&(UL_BFL_PROC | UL_BFL_FAIL))) {
79 //waiting for msg from bus
80 if (uloi_process_msg(ULOI_ARG_coninfo (uloi_objdes_array_t*)&uloi_objdes_main, &msginfo)<0) {
81 //checking dynamic adresation
82 if (uldy_process_msg(ULDY_ARG_ul_dyac &msginfo)>=0){
83 printf("message recieved - UL_CMD_NCS, sadr: %i, dadr: %i, cmd: %i\n",msginfo.sadr, msginfo.dadr, msginfo.cmd);
84 printf("server addr :%i\n",ul_dyac->ul_dysa);
87 printf("problem in uldy_process_msg\n");
90 printf("ULOI message processed\n");
100 ul_setmyadr(ul_fd,99);
104 oi_temperature = adcst.temp;
105 oi_humidity = adcst.hum;
115 void work_with(void){
117 led1_time = current_time();
118 led2_time = current_time();
121 // adcst.temp_tmp = 0;
123 // adcst.hum_tmp = 0;
126 time = current_time();
132 if((current_time()-time) > 1000){
133 printf("AD0.1 %i\n", adcst.temp);
134 printf("AD0.2 %i\n", adcst.hum);
135 time = current_time();
140 void init_ADC (int selected){
141 PINSEL1|= 0x05000000; // P0.28 and P0.29 set for AD0.1 and AD0.2 inputs
142 AD0CR &= 0x00000000; // Clear All Bit Control
144 case 1: AD0CR |= 0x00000002; // Select ADC = AIN1, CLKDive => Pclk/(x+1)< 4.5Mhz
146 case 2: AD0CR |= 0x00000004; // Select ADC = AIN2
149 AD0CR |= 0x0000FF00; // ADC Clock = VBP(PCLK) / 7 1.55us
150 AD0CR &= 0xFFF1FFFF; // CLKS 11 ciclos de reloj Res Máx
151 AD0CR |= 0x00200000; // PDN = 1 = Active ADC Module
152 // AD0CR |= 0x00010000; // Burst = 1 = Continuing conversion
153 // AD0CR &= 0xFF3FFFFF; // TEST[1:0] = 00 = Modo normal
154 // AD0CR &= 0xF7FFFFFF; // EDGE = 0 = Flanco de bajada
155 // AD0STAT = 0x00000110;
158 int read_ADC (adc_stat_t *adcst){
160 AD0CR |= 0x01000000; // start conversion
161 while (!(AD0GDR & (ADGDR_DONE))); // wait for DONE to go high
163 adcst->read = AD0DR1; // get ADC data
164 adcst->read = ((adcst->read >>6) & 0x03FF); // extraction of result
165 adcst->temp_tmp += adcst->read;
168 AD0CR |= 0x01000000; // start conversion
169 while (!(AD0GDR & (ADGDR_DONE))); // wait for DONE to go high
171 adcst->read = AD0DR2;
172 adcst->read = ((adcst->read >>6) & 0x03FF); // extraction of result
173 adcst->hum_tmp += adcst->read;
176 if (adcst->cnt == 30){
178 adcst->temp = adcst->temp_tmp/16;
179 adcst->hum = adcst->hum_tmp/16;