示例#1
0
int gpc_send_string(char *string, int len)
{
	int i;

	for (i=0; i<(len / GP_STR_PAK_MAX_LEN); i++) {
		/* Send out the start byte for a string */
		if (0 > ring_safe_write_ch(&gpc_output_ring, GP_MODE_STRING |
						GP_STR_PAK_MAX_LEN)) {
			return -1;
		}

		/* Send packet contents */
		if (0 > ring_safe_write(&gpc_output_ring, (u8 *)(string + (i * GP_STR_PAK_MAX_LEN)), GP_STR_PAK_MAX_LEN)) {
			return -1;
		}
	}

	if (0 > ring_safe_write_ch(&gpc_output_ring, GP_MODE_STRING | (len % GP_STR_PAK_MAX_LEN))) {
		return -1;
	}

	if (0 > ring_safe_write(&gpc_output_ring, (u8 *)(string + (i * GP_STR_PAK_MAX_LEN)), (len % GP_STR_PAK_MAX_LEN))) {
		return -1;
	}

	if (gpc_hooks.trigger_output)
		gpc_hooks.trigger_output(gpc_hooks.trigger_output_data);

	return len;
}
示例#2
0
s32 ring_safe_write(struct ring * ring, u8 * data, ring_size_t size)
{
	s32 i;

	for (i = 0; i < size; i++) {
		if (0 > ring_safe_write_ch(ring, data[i])) {
			return -i;
		}
	}

	return i;
}