//头文件
#ifndef __KONE_BATTERY_H__
#define __KONE_BATTERY_H__
typedef struct
{
char fault_status[256];
uint16_t operation_status;
uint32_t power_on_time;
uint32_t drop_out_time;
uint32_t availability_day;
uint32_t availability_week;
uint32_t runnings_up;
uint32_t runnings_down;
uint32_t emergency_stops_bottom;
uint32_t emergency_stops_top;
uint32_t operation_hours_up;
uint32_t operation_hours_down;
char fault_storage[256];
}kone_escalator_401_status_t;
typedef struct
{
uint8_t magic; //68
uint8_t len; //len
uint8_t len2; //len
uint8_t magic2; //68
uint8_t xx[2]; //no meaning
uint8_t cmd[2]; //ID
uint8_t yy; //no meaning
uint8_t data[0]; //变长度数组data
//eg:68 09 09 68 01 00 00 81 62 00 00 01 27 0C 16 data:00 00 01 27
}kone_escalator_401_msg_t;
typedef struct
{
int32_t tty_fd;
char recv_buffer[4096];
int32_t recv_len;
int32_t proc_len;
bool_t read_failed;
kone_escalator_401_msg_t *msg_401;
union
{
kone_escalator_401_status_t escalator_401;
};
}kone_battery_info_t;
#endif
C文件
static kone_battery_info_t *kbinfo;
kbinfo = calloc(sizeof(kone_battery_info_t), 1); //分配空间
if(kbinfo->msg_401->len + 6 != kbinfo->recv_len)
{
for(i=0;i<20;i++) //find the first bit '68'
{
if(kbinfo->recv_buffer[i] == 0x68 && kbinfo->recv_buffer[i+3] == 0x68)
{
memset(recv_buffer_tmp,0,sizeof(recv_buffer_tmp));
memcpy(recv_buffer_tmp,&kbinfo->recv_buffer[i],kbinfo->recv_len - i); //68---16一个数据包
kbinfo->msg_401 = (kone_escalator_401_msg_t *)recv_buffer_tmp;
break;
}
}
}
else //just first bit is '68'
{
kbinfo->msg_401 = (kone_escalator_401_msg_t *)kbinfo->recv_buffer;
}
memcpy(&kbinfo->escalator_401.operation_status,kbinfo->msg_401->data,sizeof(uint32_t));
kbinfo->escalator_401.operation_status = ntohs(kbinfo->escalator_401.operation_status); //前后置换 16bit
renv_printf("kone_power_on_time","%d",kbinfo->escalator_401.operation_status); //?
log_debug("power_on_time=%d;%x",kbinfo->escalator_401.operation_status,kbinfo->escalator_401.operation_status); //?