Example #1
0
static void deserialize_s_b_p(uint8_t fn_index, struct net_buf *buf)
{
	const uint8_t *p_struct_data;
	uint8_t struct_length;
	const uint8_t *p_vbuf;
	uint16_t vbuf_length;
	uintptr_t priv;

	deserialize_struct(buf, &p_struct_data, &struct_length);
	deserialize_buf(buf, &p_vbuf, &vbuf_length);
	deserialize_ptr(buf, &priv);

	if (struct_length != m_size_s_b_p[fn_index]) {
		panic(-1);
	} else {
		/* Always align structures on word boundary */
		uintptr_t struct_data[(struct_length +
				(sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];
		uintptr_t vbuf[(vbuf_length +
				(sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];
		void *buf = NULL;

		memcpy(struct_data, p_struct_data, struct_length);

		if (vbuf_length) {
			memcpy(vbuf, p_vbuf, vbuf_length);
			buf = vbuf;
		}

		m_fct_s_b_p[fn_index](struct_data, buf, vbuf_length,
				      (void *)priv);
	}
}
static void deserialize_s_p(uint8_t fn_index, const uint8_t * p_buf, uint16_t length)
{
	const uint8_t *p_struct_data;
	uint8_t struct_length;
	uintptr_t p_priv;
	const uint8_t *p;

	p = deserialize_struct(p_buf, &p_struct_data, &struct_length);
	p += 4;

	if ((length != (p - p_buf)) ||
	    (struct_length != m_size_s_p[fn_index]))
		panic(-1);

	{
		/* Always align structures on word boundary */
		uintptr_t struct_data[(struct_length + (sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];

		memcpy(struct_data, p_struct_data, struct_length);
		p = p_struct_data + struct_length;

		/* little endian conversion */
		p_priv = p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);

		m_fct_s_p[fn_index](struct_data, (void *)p_priv);
	}
}
static void deserialize_s_b(uint8_t fn_index, const uint8_t * p_buf, uint16_t length) {
	const uint8_t *p_struct_data;
	uint8_t struct_length;
	const uint8_t *p_vbuf;
	uint16_t vbuf_length;
	const uint8_t *p;

	p = deserialize_struct(p_buf, &p_struct_data, &struct_length);
	p = deserialize_buf(p, &p_vbuf, &vbuf_length);

	if ((length != (p - p_buf)) ||
	    (struct_length != m_size_s_b[fn_index]))
		panic(-1);

	{
		/* Always align structures on word boundary */
		uintptr_t struct_data[(struct_length + (sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];
		uintptr_t vbuf[(vbuf_length + (sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];
		void * buf = NULL;

		memcpy(struct_data, p_struct_data, struct_length);

		if (vbuf_length) {
			memcpy(vbuf, p_vbuf, vbuf_length);
			buf = vbuf;
		}

		m_fct_s_b[fn_index](struct_data, buf, vbuf_length);
	}
}
Example #4
0
static void deserialize_control(u8_t fn_index, struct net_buf *buf)
{
	const u8_t *p_struct_data;
	u8_t struct_length;
	struct {
		u32_t version;
		u32_t ser_hash;
		u32_t des_hash;
	} struct_data;

	switch (fn_index) {
	case 0:
		deserialize_struct(buf, &p_struct_data, &struct_length);

		if (struct_length != sizeof(struct_data))
			panic(-1);
		memcpy(&struct_data, p_struct_data, struct_length);
		if (struct_data.ser_hash != rpc_deserialize_hash() ||
		    struct_data.des_hash != rpc_serialize_hash()) {
			rpc_init_cb(struct_data.version, false);
		} else {
			rpc_init_cb(struct_data.version, true);
		}
		break;
	default:
		panic(-1);
		break;
	}
}
Example #5
0
static void deserialize_s_b_b_p(uint8_t fn_index, const uint8_t *buf,
				uint16_t length)
{
	const uint8_t *p_struct_data;
	uint8_t struct_length;
	const uint8_t *p_vbuf1;
	uint16_t vbuf1_length;
	const uint8_t *p_vbuf2;
	uint16_t vbuf2_length;
	uintptr_t priv;
	const uint8_t *p;

	p = deserialize_struct(buf, &p_struct_data, &struct_length);
	p = deserialize_buf(p, &p_vbuf1, &vbuf1_length);
	p = deserialize_buf(p, &p_vbuf2, &vbuf2_length);
	p += 4;

	if ((length != (p - buf)) ||
	    (struct_length != m_size_s_b_b_p[fn_index])) {
		panic(-1);
	} else {
		/* Always align structures on word boundary */
		uintptr_t struct_data[(struct_length +
				(sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];
		uintptr_t vbuf1[(vbuf1_length +
				(sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];
		uintptr_t vbuf2[(vbuf2_length +
				(sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];
		void *buf1 = NULL;
		void *buf2 = NULL;

		memcpy(struct_data, p_struct_data, struct_length);

		if (vbuf1_length) {
			memcpy(vbuf1, p_vbuf1, vbuf1_length);
			buf1 = vbuf1;
		}

		if (vbuf2_length) {
			memcpy(vbuf2, p_vbuf2, vbuf2_length);
			buf2 = vbuf2;
		}

		p = p_vbuf2 + vbuf2_length;

		/* little endian conversion */
		priv = p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);

		m_fct_s_b_b_p[fn_index](struct_data, buf1, vbuf1_length, buf2,
					vbuf2_length, (void *)priv);
	}
}
Example #6
0
static void deserialize_s(uint8_t fn_index, struct net_buf *buf)
{
	const uint8_t *struct_ptr;
	uint8_t struct_length;

	deserialize_struct(buf, &struct_ptr, &struct_length);

	if (struct_length != m_size_s[fn_index]) {
		panic(-1);
	} else {
		/* Always align structures on word boundary */
		uintptr_t struct_data[(struct_length +
				(sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];

		memcpy(struct_data, struct_ptr, struct_length);

		m_fct_s[fn_index](struct_data);
	}
}
static void deserialize_s(uint8_t fn_index, const uint8_t * p_buf, uint16_t length) {
	const uint8_t *p_struct_data;
	uint8_t struct_length;
	const uint8_t *p;

	p = deserialize_struct(p_buf, &p_struct_data, &struct_length);

	if ((length != (p - p_buf)) ||
	   (struct_length != m_size_s[fn_index]))
		panic(-1);

	{
		/* Always align structures on word boundary */
		uintptr_t struct_data[(struct_length + (sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];

		memcpy(struct_data, p_struct_data, struct_length);

		m_fct_s[fn_index](struct_data);
	}
}
Example #8
0
static void deserialize_s_p(uint8_t fn_index, struct net_buf *buf)
{
	const uint8_t *p_struct_data;
	uint8_t struct_length;
	uintptr_t priv;

	deserialize_struct(buf, &p_struct_data, &struct_length);
	deserialize_ptr(buf, &priv);

	if (struct_length != m_size_s_p[fn_index]) {
		panic(-1);
	} else {
		/* Always align structures on word boundary */
		uintptr_t struct_data[(struct_length +
				(sizeof(uintptr_t) - 1))/(sizeof(uintptr_t))];

		memcpy(struct_data, p_struct_data, struct_length);

		m_fct_s_p[fn_index](struct_data, (void *)priv);
	}
}