/** ****************************************************************************** * @addtogroup OpenPilotModules OpenPilot Modules * @{ * @addtogroup CCAttitude Copter Control Attitude Estimation * @brief Handles communication with AHRS and updating position * Specifically updates the the @ref AttitudeActual "AttitudeActual" and @ref AttitudeRaw "AttitudeRaw" settings objects * @{ * * @file ccattitude.c * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. * @brief Module to handle all comms to the AHRS on a periodic basis. * * @see The GNU Public License (GPL) Version 3 * ******************************************************************************/ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /** * Input objects: None, takes sensor data via pios * Output objects: @ref AttitudeRaw @ref AttitudeActual * * This module computes an attitude estimate from the sensor data * * The module executes in its own thread. * * UAVObjects are automatically generated by the UAVObjectGenerator from * the object definition XML file. * * Modules have no API, all communication to other modules is done through UAVObjects. * However modules may use the API exposed by shared libraries. * See the OpenPilot wiki for more details. * http://www.openpilot.org/OpenPilot_Application_Architecture * */ #include "pios.h" #include "ccattitude.h" #include "attituderaw.h" // Private constants #define STACK_SIZE_BYTES 340 #define TASK_PRIORITY (tskIDLE_PRIORITY+4) // Private types // Private variables static xTaskHandle taskHandle; // Private functions static void CCAttitudeTask(void *parameters); /** * Initialise the module, called on startup * \returns 0 on success or -1 if initialisation failed */ int32_t CCAttitudeInitialize(void) { // Start main task xTaskCreate(CCAttitudeTask, (signed char *)"CCAttitude", STACK_SIZE_BYTES/4, NULL, TASK_PRIORITY, &taskHandle); TaskMonitorAdd(TASKINFO_RUNNING_AHRSCOMMS, taskHandle); return 0; } /** * Module thread, should not return. */ static void CCAttitudeTask(void *parameters) { portTickType lastSysTime; // AlarmsClear(SYSTEMALARMS_ALARM_AHRSCOMMS, SYSTEMALARMS_ALARM_CRITICAL); // Main task loop while (1) { //PIOS_WDG_UpdateFlag(PIOS_WDG_AHRS); // TODO: register the adc callback, push the data onto a queue (safe for thread) // with the queue ISR version AttitudeRawData attitudeRaw; AttitudeRawGet(&attitudeRaw); attitudeRaw.gyros_filtered[ATTITUDERAW_GYROS_FILTERED_X] = PIOS_ADC_PinGet(0); attitudeRaw.gyros_filtered[ATTITUDERAW_GYROS_FILTERED_Y] = PIOS_ADC_PinGet(1); attitudeRaw.gyros_filtered[ATTITUDERAW_GYROS_FILTERED_Z] = PIOS_ADC_PinGet(2); AttitudeRawSet(&attitudeRaw); /* Wait for the next update interval */ vTaskDelayUntil(&lastSysTime, 100 / portTICK_RATE_MS); } } /** * @} * @} */