Pārlūkot izejas kodu

级联调试bug。

liyi 1 gadu atpakaļ
vecāks
revīzija
76c0436bc0
1 mainītis faili ar 55 papildinājumiem un 18 dzēšanām
  1. 55 18
      f407/applications/cascade.c

+ 55 - 18
f407/applications/cascade.c

@@ -68,6 +68,17 @@ static int mb_write_read(cascade_handle_t *cas, int addr, data_t *wd, data_t *rd
 static int master_query(cascade_handle_t *cas);
 void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth);
 
+static void memswap(uint8_t *buf, int len)
+{
+    int i;
+    uint8_t tmp;
+
+    for(i=0; i<len; i+=2) {
+        tmp = buf[i];
+        buf[i] = buf[i+1];
+        buf[i+1] = tmp;
+    }
+}
 
 
 
@@ -293,12 +304,20 @@ static int slave_get_info(cascade_handle_t *cas)
 	slave_info_t *info=&cas->info;
 	power_data_t power = power_data_get();
 	info->channels = power.chs;
+	info->channels = power.chs-1 > 0 ? power.chs-1 :  power.chs;
 	//info->channels=0;
 	//memcpy(info->ch,board->pbrd[],)
 	//copy mem to info
 	if(info->channels  > SLAVE_CH_MAX)
 			info->channels = SLAVE_CH_MAX;
-	memcpy(info->ch,&power.pch[0],sizeof(power.pch[0]) * info->channels);
+	paras_data_t* p_data = paras_get();
+	if(p_data->prod.type == PDU_AC_I1O1 || p_data->prod.type == PDU_DC_I1O1){
+		for(int i=0; i < info->channels;i++)
+		{
+			info->ch[i].power[0] = power.pch[i+1].power[0];
+			//memcpy(&info->ch[i],&power.pch[i].power[0],sizeof(power.pch[i].power[0]));
+		}
+	}
 	
 }
 
@@ -339,14 +358,35 @@ static void* off_on_thread(void *arg)
 
 static int sendlen=0;
 
-
+void *my_memcpy_byte(void *dst, const void *src, int n)
+{
+    if (dst == NULL || src == NULL || n <= 0)
+         return NULL;
+  
+      char * pdst = (char *)dst;
+      char * psrc = (char *)src;
+  
+      if (pdst > psrc && pdst < psrc + n)
+     {
+         pdst = pdst + n - 1;
+         psrc = psrc + n - 1;
+         while (n--)
+             *pdst-- = *psrc--;
+     }
+     else
+     {
+         while (n--)
+             *pdst++ = *psrc++;
+     }
+     return dst;
+}
 
 void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
 {
 	cmd_data_t *cmd=NULL;
 	mb_handle_t *handle = (mb_handle_t *)(slave_info.mb);
 	pthread_t id = 0;
-	LOGD("____XXXXXXXXXX____ reg = %d\n",reg);
+	LOGD("____XXXXXXXXXX____ reg = %d lenth=%d\n",reg,lenth);
 	switch (reg)
 	{
 		case CASCADE_REG_SCAN:
@@ -359,7 +399,7 @@ void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
       if(cmd->cmd>=CASCADE_CMD_GET_INFO) {
 					slave_info.cmd = *cmd;
       }
-			LOGD("____XXXXXXX__WRITE_XXXXXXXXXXXXXX____cmd->cmd=%d,lenth=%d\n",cmd->cmd,lenth);
+			//LOGD("____XXXXXXX__WRITE_XXXXXXXXXXXXXX____cmd->cmd=%d,lenth=%d\n",cmd->cmd,lenth);
 			if(lenth > 10)
 			{
 				for(int i = 0; i < 10;i++)
@@ -413,19 +453,27 @@ void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
 		case CASCADE_REG_READ:
 		{
 			cmd = &slave_info.cmd;
-			LOGD("____XXXXXXX__READ_XXXXXXXXXXXXXX____cmd->cmd=%d\n",cmd->cmd);
+			
 			switch(cmd->cmd)
 			{
 				case CASCADE_CMD_GET_INFO:
 				{
+					LOGD("____XXXXXXX__READ_XXXXXXXXXXXXXX____cmd->cmd=%d readlen=%d sendlen= %d sizeof(slave_info_t)=%d\n",cmd->cmd,lenth,sendlen,sizeof(slave_info_t));
 					slave_get_info(&slave_info);
-					memcpy(r_w_data,&slave_info.info+sendlen,lenth*2);
+					LOGD("1\n");
+					my_memcpy_byte(r_w_data,(void*)&slave_info.info+sendlen,lenth*2);
+					//memcpy(r_w_data,&slave_info.info+sendlen,lenth*2);
+					LOGD("2\n");
+					memswap(r_w_data,lenth*2);
+					LOGD("3\n");
+					
 				}
 					break;
 				case CASCADE_CMD_QUERY_CH:
 				{
 					slave_get_info(&slave_info);
-					memcpy(r_w_data,&slave_info.info+sendlen,lenth*2);
+					my_memcpy_byte(r_w_data,(void*)&slave_info.info+sendlen,lenth*2);
+					memswap(r_w_data,lenth*2);
 				}
 					break;
 				case CASCADE_CMD_BREAKER_QUERY:
@@ -453,17 +501,6 @@ void slave_func(uint16_t reg,void *r_w_data,uint32_t lenth)
 #define REGS(x)    (((x)+(x)%2)/2)
 
 
-static void memswap(uint8_t *buf, int len)
-{
-    int i;
-    uint8_t tmp;
-
-    for(i=0; i<len; i+=2) {
-        tmp = buf[i];
-        buf[i] = buf[i+1];
-        buf[i+1] = tmp;
-    }
-}
 
 static int _mb_write(cascade_handle_t *cas, int addr, data_t *d)
 {