コード例 #1
0
ファイル: serial.c プロジェクト: gehoern/AelithController
void executeSerialCommand(uint8_t string[], int length)
{
	if(string[0] == '-') /* All commands start with a - */
	{ 
		switch(string[1])
		{
			case 'h': /* Help command */
				sendSerialString("display help\n");
				break;

			case 'c':
				sendSerialString("calibrate\n");
				break;

			case 't':
				if (telemetryFlag == 0)
				{
					telemetryFlag = 1;
					sendSerialString("Telemetry started\n");
				}

				else
				{
					telemetryFlag = 0;
					sendSerialString("Telemetry stopped\n");
				}
				break;
		}
	}
}
コード例 #2
0
ファイル: serial.c プロジェクト: gehoern/AelithController
void initSerial()
{
	__DMA2_CLK_ENABLE();
	HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 5, 0);
	HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);

	huart1.Instance = USART1;
	huart1.Init.BaudRate = BAUDRATE;
	huart1.Init.WordLength = UART_WORDLENGTH_8B;
	huart1.Init.StopBits = UART_STOPBITS_1;
	huart1.Init.Parity = UART_PARITY_NONE;
	huart1.Init.Mode = UART_MODE_TX_RX;
	huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
	huart1.Init.OverSampling = UART_OVERSAMPLING_16;
	HAL_UART_Init(&huart1);
	sendSerialString("[OK] Serial started..\n");

	/* Start the receiver */
	HAL_UART_Receive_DMA(&huart1, &rxBuffer, 1);
}
コード例 #3
0
/* The Sensor reading task */
void vTaskSensor (void *pvParameters)
{
    bool success;
    unsigned char x;
    char sendString [ADC_READING_STRING_LEN * MAX_NUM_ADCS + 1]; /* +1 for terminator */
    CodedCommand codedSensorCommand;
    portBASE_TYPE xStatus;

    while (1)
    {
        xStatus = xQueueReceive (xSensorCommandQueue, &codedSensorCommand, portMAX_DELAY);

        ASSERT_STRING (xStatus == pdPASS, "Failed to receive from sensor command queue.");

        success = false; /* Assume failure */

        /* Print out what command we're going to execute */
        rob_lcd_goto_xy (0, 1);
        rob_print_from_program_space (PSTR ("CMD: "));
        if (codedSensorCommand.buffer[CODED_COMMAND_INDEX_POS] != CODED_COMMAND_INDEX_UNUSED)
        {
            rob_print_character ('#');
            rob_print_unsigned_long (codedSensorCommand.buffer[CODED_COMMAND_INDEX_POS]);
            rob_print_character (' ');
        }
        rob_print_character (codedSensorCommand.buffer[CODED_COMMAND_ID_POS]);

        rob_lcd_goto_xy (0, 2);
		
        /* Now do it */
        switch (codedSensorCommand.buffer[CODED_COMMAND_ID_POS])
        {
            case '*': /* The only sensor command supported at the moment */
            {
                RobMemset (sendString, ' ', sizeof (sendString));
                calibrateAdcs();
                for (x = 0; x < MAX_NUM_ADCS; x++)
                {
                    unsigned int milliVolts;
                    
                    /* Write something like "FL:40  " (for ADC 2 of 6 (which is Front Left), object detected at 40 cm),
                       or "FL:    " if nothing is there. */
                    memcpy (&sendString[ADC_READING_STRING_LEN * x], channelToString[x], SENSOR_STRING_LEN);
                    memcpy (&sendString[(ADC_READING_STRING_LEN * x) + SENSOR_STRING_LEN], NOTHING_THERE_STRING, NOTHING_THERE_STRING_LEN);
                    
                    milliVolts = readAdc (x);
                    if (objectDetected (milliVolts))
                    {
                        itoa (voltageToDistance (milliVolts), &(sendString[(ADC_READING_STRING_LEN * x) + SENSOR_STRING_LEN + 1]), 10); /* +1 to leave the ':' there */
                    }                    
                    
                    /* Overwrite the null terminator that itoa() puts in with a space */
                    sendString[RobStrlen (sendString)] = ' ';
                }
                sendString[sizeof (sendString) - 1] = 0; /* Add terminator */
                sendSerialString (sendString, sizeof (sendString));
                rob_print (sendString);
                success = true;
            }
            break;
            default:
            {
                ASSERT_ALWAYS_PARAM (codedSensorCommand.buffer[CODED_COMMAND_ID_POS]);
            }
            break;
        }

        if (!success)
        {
            sendSerialString (ERROR_STRING, sizeof (ERROR_STRING));
        }
    }
}
コード例 #4
0
ファイル: serial.c プロジェクト: gehoern/AelithController
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart)
{
	sendSerialString("[ERROR] Serial error\n");
}