指向结构体的指针

本文介绍了一种用于解析Kone电梯状态数据的C语言结构体定义及数据处理流程。通过定义特定的数据结构来封装电梯故障状态、运行时间和操作状态等信息,并详细展示了如何从接收缓冲区中提取有效数据包进行解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//头文件
#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);	//?







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值