uint8_t BT::dataMode(void)
{
	if(!present)
		return 1;

	if(state == BT_ST_CONNECTED)
	{
		if(mode == BT_MODE_CMD)
		{
			sendP(PSTR("ATMD\r"));
			if(checkOK())
			{
				mode = BT_MODE_DATA;
				return 1;
			}
			else
			{
				return 0;
			}
		}
		return 1;
	}
	
	return 0;
}
uint8_t BT::sendCMD(const char* str)
{
	if(!present)
		return 1;

	cmdMode();

	return sendP(str);
}
uint8_t BT::cmdMode(void)
{
	if(!present)
		return 1;

	if(mode == BT_MODE_DATA)
	{
		sendP(PSTR("+++\r"));
		if(checkOK())
		{
			mode = BT_MODE_CMD;
			return 1;
		}
		else
		{
			return 0;
		}
	}

	return 1;
}
예제 #4
0
파일: input.c 프로젝트: Meilka/copter
void handleKeydown (SDLKey key)
{
	float tempin;
//	printf("keydown: %d\n", key);
	if (inputmode > 0 && key != 13)
	{
		userinputbuffer[userinputbufferpos] = (uint8_t)key;
		userinputbufferpos ++;
		if (userinputbufferpos == 128)
		{
			printf("\nuser input buffer overflow\n");
			userinputbufferpos = 0;
		}
	}
	switch (key)
	{
		case SDLK_ESCAPE:
			break;
		case 112: /* P */
			printf("\nType new P value: ");
			inputmode = 1;
			break;
		case 105: /* I */
			printf("\nType new I value: ");
			inputmode = 2;
			break;
		case 100: /* D */
			printf("\nType new D value: ");
			inputmode = 3;
			break;
		case 115: /* S */
			printf("\nCurrent PID values: ");
			printf("P = %f, ", KPin);
			printf("I = %f, ", KIin);
			printf("D = %f\n", KDin);
			printf("    New PID values: ");
			printf("P = %f, ", KPout);
			printf("I = %f, ", KIout);
			printf("D = %f\n", KDout);
			fflush(stdout);
			break;
		case 103: /* G */
			getPID();
			break;
		case 13: /* enter */
			parseuserinput();
			break;
		case 113: /* Q */
			sendP();
			break;
		case 119: /* W */
			sendI();
			break;
		case 101: /* E */
			sendD();
			break;
		case 108: /* L */
			startlog();
			break;
		case 107: /* K */
			printlog();
			break;
	}
}