コード例 #1
0
ファイル: gprot.c プロジェクト: xiserre/open-bldc
/**
 * Userspace process handling the get version event.
 */
void run_gprot_get_version_process(void)
{
	if (gprot_get_version_triggered) {
		gprot_get_version_triggered = false;
		gpc_send_string(FIRMWARE_VERSION, sizeof(FIRMWARE_VERSION));
		gpc_send_string(FIRMWARE_COPYRIGHT, sizeof(FIRMWARE_COPYRIGHT));
		gpc_send_string(FIRMWARE_LICENSE, sizeof(FIRMWARE_LICENSE));
	}
}
コード例 #2
0
ファイル: check_gprot_suite.c プロジェクト: OpenUAS/open-bldc
END_TEST

START_TEST(test_gprot_send_long_string)
{
	int i;
	int string_size = (('z' - 'a') + 1) * ((('9' - '0') + 1) + 1);
	char string[string_size];

	/* Generate string. */
	{
		int gi, gj, gk = 0;

		for(gi=0; gi<(('z' - 'a') + 1); gi++) {
			string[gk++] = 'a'+gi;
			for(gj=0; gj<(('9' - '0') + 1); gj++){
				string[gk++] = '0'+gj;
			}
		}

		string[gk] = '\0';

	}

	fail_unless(string_size == gpc_send_string(string, string_size));

	fail_unless(string_size == gpm_string_received_len);
	fail_unless(1 == gpm_string_received);

	for (i=0; i<string_size; i++) {
		fail_unless(string[i] == gpm_string_received_string[i]);
	}

	fail_unless(0 == gpm_string_received_string[i]);
}
コード例 #3
0
END_TEST

START_TEST(test_gprotc_send_short_string)
{
	int i;
	char *string = "Hello World!";
	int string_size = strlen(string);

	fail_unless(string_size == gpc_send_string(string, string_size));

	fail_unless((GP_MODE_STRING | string_size) == gpc_pickup_byte());

	for (i=0; i<string_size; i++) {
		fail_unless(string[i] == gpc_pickup_byte());
	}

	fail_unless(-1 == gpc_pickup_byte());
}
コード例 #4
0
END_TEST

START_TEST(test_gprotc_send_long_string)
{
	int i,j;
	int string_size = (('z' - 'a') + 1) * ((('9' - '0') + 1) + 1);
	char string[string_size];

	/* Generate string. */
	{
		int gi, gj, gk = 0;

		for(gi=0; gi<(('z' - 'a') + 1); gi++) {
			string[gk++] = 'a'+gi;
			for(gj=0; gj<(('9' - '0') + 1); gj++){
				string[gk++] = '0'+gj;
			}
		}

		string[gk] = '\0';

	}

	/* Run test. */
	fail_unless(string_size == gpc_send_string(string, string_size));

	for (j=0; j<(string_size / GP_STR_PAK_MAX_LEN); j++) {
		fail_unless((GP_MODE_STRING | GP_STR_PAK_MAX_LEN) == gpc_pickup_byte());

		for (i=0; i<GP_STR_PAK_MAX_LEN; i++) {
			fail_unless(string[i + (j * GP_STR_PAK_MAX_LEN)] == gpc_pickup_byte());
		}
	}

	fail_unless((GP_MODE_STRING | (string_size % GP_STR_PAK_MAX_LEN)) == gpc_pickup_byte());


	for (i=0; i<(string_size % GP_STR_PAK_MAX_LEN); i++) {
		fail_unless(string[i + (j * GP_STR_PAK_MAX_LEN)] == gpc_pickup_byte());
	}

	fail_unless(-1 == gpc_pickup_byte());
}
コード例 #5
0
ファイル: check_gprot_suite.c プロジェクト: OpenUAS/open-bldc
END_TEST

START_TEST(test_gprot_send_short_string)
{
	int i;
	char *string = "Hello World!";
	int string_size = strlen(string);

	fail_unless(string_size == gpc_send_string(string, string_size));

	fail_unless(string_size == gpm_string_received_len);
	fail_unless(1 == gpm_string_received);

	for (i=0; i<string_size; i++) {
		fail_unless(string[i] == gpm_string_received_string[i]);
	}

	fail_unless(0 == gpm_string_received_string[i]);
}
コード例 #6
0
ファイル: check_gprot_suite.c プロジェクト: OpenUAS/open-bldc
END_TEST

START_TEST(test_gprot_send_arbitrary_string)
{
	int i, j;
	int string_size = (('z' - 'a') + 1) * ((('9' - '0') + 1) + 1);
	char string[string_size];

	/* Generate string. */
	{
		int gi, gj, gk = 0;

		for(gi=0; gi<(('z' - 'a') + 1); gi++) {
			string[gk++] = 'a'+gi;
			for(gj=0; gj<(('9' - '0') + 1); gj++){
				string[gk++] = '0'+gj;
			}
		}

		string[gk] = '\0';

	}

	for (j=0; j<=string_size; j++) {

		fail_unless(j == gpc_send_string(string, j));

		fail_unless(j == gpm_string_received_len);
		fail_unless(1 == gpm_string_received);

		for (i=0; i<j; i++) {
			fail_unless(string[i] == gpm_string_received_string[i]);
		}

		fail_unless(0 == gpm_string_received_string[i]);

		gpm_string_received_len = 0;
		gpm_string_received = 0;
		memset(gpm_string_received_string, 0, sizeof(gpm_string_received_string));
	}

}
コード例 #7
0
ファイル: gprotc.c プロジェクト: MbedTinkerer/Open-BLDC-IML
int gpc_handle_byte(u8 byte)
{
	DEBUG("got byte %04X ", byte);

	switch (gpc_state) {
	case GPCS_IDLE:
		if (byte & GP_MODE_STRING) {
			if (byte == GP_MODE_STRING) {
				gpc_send_string(GPC_VERSION, sizeof(GPC_VERSION) - 1);
				gpc_send_string(GPC_COPYRIGHT, sizeof(GPC_COPYRIGHT) - 1);
				gpc_send_string(GPC_LICENSE, sizeof(GPC_LICENSE) - 1);
				if (gpc_hooks.get_version)
					gpc_hooks.get_version(gpc_hooks.get_version_data);
				return 0;
			}
			DEBUG("not handled\n");
			return 1;
		}

		if ((byte & GP_MODE_MASK) == (GP_MODE_WRITE)) {
			DEBUG("write ");
			gpc_addr = byte & GP_ADDR_MASK;
			gpc_state = GPCS_DATA_LSB;
		} else if ((byte & GP_MODE_MASK) ==
			   (GP_MODE_READ | GP_MODE_PEEK)) {
			DEBUG("read ");
			gpc_send_reg(byte & GP_ADDR_MASK);
		} else if ((byte & GP_MODE_MASK) ==
			   (GP_MODE_READ | GP_MODE_CONT)) {
			DEBUG("read cont ");
			gpc_monitor_map ^= 1 << (byte & GP_ADDR_MASK);
		} else {
			DEBUG("unimplemented\n");
			return 1;
		}
		break;
	case GPCS_DATA_LSB:
		DEBUG("lsb ");
		gpc_data = byte;
		gpc_state = GPCS_DATA_MSB;
		break;
	case GPCS_DATA_MSB:
		DEBUG("msb ");
		gpc_data |= byte << 8;
		gpc_state = GPCS_IDLE;

		if (!gpc_register_map[gpc_addr]) {
			DEBUG("addr %02X with pointer %p not set up\n",
			      gpc_addr, gpc_register_map[gpc_addr]);
			return 1;
		}

		*gpc_register_map[gpc_addr] = gpc_data;
		if (gpc_hooks.register_changed)
			gpc_hooks.register_changed(gpc_hooks.
						   register_changed_data,
						   gpc_addr);

		break;
	default:
		return 1;
	}

	DEBUG("\n");
	return 0;
}