|
|
@@ -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)
|
|
|
{
|