diff --git a/artwork/Dials/deluxe/lineardial-horizontal.svg b/artwork/Dials/deluxe/lineardial-horizontal.svg
new file mode 100644
index 000000000..2f6f71b17
--- /dev/null
+++ b/artwork/Dials/deluxe/lineardial-horizontal.svg
@@ -0,0 +1,1329 @@
+
+
+
+
diff --git a/artwork/Dials/deluxe/lineardial-vertical.svg b/artwork/Dials/deluxe/lineardial-vertical.svg
index 11a4e1c93..010283c2c 100644
--- a/artwork/Dials/deluxe/lineardial-vertical.svg
+++ b/artwork/Dials/deluxe/lineardial-vertical.svg
@@ -30,7 +30,7 @@
style="stop-color:#000000;stop-opacity:1" />
+ style="stop-color:#dcaf28;stop-opacity:1" />
+ offset="0.38184431"
+ style="stop-color:#00a000;stop-opacity:1" />
+ style="stop-color:#aa0000;stop-opacity:1" />
+ style="display:inline"
+ transform="translate(-129.62194,129.52019)">
= MIXERSETTINGS_MIXER1TYPE_ACCESSORY0) &&
+ (mixers[ct].type <= MIXERSETTINGS_MIXER1TYPE_ACCESSORY2))
+ {
+ if(AccessoryDesiredInstGet(mixers[ct].type - MIXERSETTINGS_MIXER1TYPE_ACCESSORY0,&accessory) == 0)
+ status[ct] = accessory.AccessoryVal;
+ else
+ status[ct] = -1;
+ }
+
command.Channel[ct] = scaleChannel(status[ct],
ChannelMax[ct],
ChannelMin[ct],
@@ -452,8 +495,6 @@ static void actuator_update_rate(UAVObjEvent * ev)
}
}
-
-
#if defined(ARCH_POSIX) || defined(ARCH_WIN32)
static bool set_channel(uint8_t mixer_channel, uint16_t value) {
return true;
diff --git a/flight/Modules/ManualControl/manualcontrol.c b/flight/Modules/ManualControl/manualcontrol.c
index 63543c67a..8b972bc6e 100644
--- a/flight/Modules/ManualControl/manualcontrol.c
+++ b/flight/Modules/ManualControl/manualcontrol.c
@@ -42,6 +42,7 @@
#include "stabilizationdesired.h"
#include "flighttelemetrystats.h"
#include "flightstatus.h"
+#include "accessorydesired.h"
// Private constants
#if defined(PIOS_MANUAL_STACK_SIZE)
@@ -170,6 +171,11 @@ static void manualControlTask(void *parameters)
uint8_t disconnected_count = 0;
uint8_t connected_count = 0;
+ // For now manual instantiate extra instances of Accessory Desired. In future should be done dynamically
+ // this includes not even registering it if not used
+ AccessoryDesiredCreateInstance();
+ AccessoryDesiredCreateInstance();
+
// Make sure unarmed on power up
ManualControlCommandGet(&cmd);
FlightStatusGet(&flightStatus);
@@ -266,10 +272,26 @@ static void manualControlTask(void *parameters)
cmd.Throttle = scaledChannel[settings.Throttle];
flightMode = scaledChannel[settings.FlightMode];
- // Set accessory channels
- cmd.Accessory1 = (settings.Accessory1 != MANUALCONTROLSETTINGS_ACCESSORY1_NONE) ? scaledChannel[settings.Accessory1] : 0;
- cmd.Accessory2 = (settings.Accessory2 != MANUALCONTROLSETTINGS_ACCESSORY2_NONE) ? scaledChannel[settings.Accessory2] : 0;
- cmd.Accessory3 = (settings.Accessory3 != MANUALCONTROLSETTINGS_ACCESSORY3_NONE) ? scaledChannel[settings.Accessory3] : 0;
+ AccessoryDesiredData accessory;
+ // Set Accessory 0
+ if(settings.Accessory0 != MANUALCONTROLSETTINGS_ACCESSORY0_NONE) {
+ accessory.AccessoryVal = scaledChannel[settings.Accessory0];
+ if(AccessoryDesiredInstSet(0, &accessory) != 0)
+ AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_WARNING);
+ }
+ // Set Accessory 1
+ if(settings.Accessory1 != MANUALCONTROLSETTINGS_ACCESSORY1_NONE) {
+ accessory.AccessoryVal = scaledChannel[settings.Accessory1];
+ if(AccessoryDesiredInstSet(1, &accessory) != 0)
+ AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_WARNING);
+ }
+ // Set Accsesory 2
+ if(settings.Accessory2 != MANUALCONTROLSETTINGS_ACCESSORY2_NONE) {
+ accessory.AccessoryVal = scaledChannel[settings.Accessory2];
+ if(AccessoryDesiredInstSet(2, &accessory) != 0)
+ AlarmsSet(SYSTEMALARMS_ALARM_MANUALCONTROL, SYSTEMALARMS_ALARM_WARNING);
+ }
+
processFlightMode(&settings, flightMode);
processArm(&cmd, &settings);
diff --git a/flight/OpenPilot/System/inc/FreeRTOSConfig.h b/flight/OpenPilot/System/inc/FreeRTOSConfig.h
index 6336639a4..3e770e421 100644
--- a/flight/OpenPilot/System/inc/FreeRTOSConfig.h
+++ b/flight/OpenPilot/System/inc/FreeRTOSConfig.h
@@ -75,9 +75,12 @@ NVIC value of 255. */
#if defined(DEBUG)
#define configGENERATE_RUN_TIME_STATS 1
#define INCLUDE_uxTaskGetRunTime 1
-#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() PIOS_RTC_Init()
-// Note: Using the tick count defeats the purpose here, need some timer on the scale of 10khz
-#define portGET_RUN_TIME_COUNTER_VALUE() PIOS_RTC_Counter()
+#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()\
+do {\
+(*(unsigned long *)0xe000edfc) |= (1<<24);/* DEMCR |= DEMCR_TRCENA */\
+(*(unsigned long *)0xe0001000) |= 1; /* DWT_CTRL |= DWT_CYCCNT_ENA */\
+} while(0)
+#define portGET_RUN_TIME_COUNTER_VALUE() (*(unsigned long *)0xe0001004)/* DWT_CYCCNT */
#endif
diff --git a/flight/OpenPilot/System/taskmonitor.c b/flight/OpenPilot/System/taskmonitor.c
index bc9651982..d7fa3fde4 100644
--- a/flight/OpenPilot/System/taskmonitor.c
+++ b/flight/OpenPilot/System/taskmonitor.c
@@ -35,6 +35,7 @@
// Private variables
static xSemaphoreHandle lock;
static xTaskHandle handles[TASKINFO_RUNNING_NUMELEM];
+static uint32_t lastMonitorTime;
// Private functions
@@ -45,6 +46,7 @@ int32_t TaskMonitorInitialize(void)
{
lock = xSemaphoreCreateRecursiveMutex();
memset(handles, 0, sizeof(xTaskHandle)*TASKINFO_RUNNING_NUMELEM);
+ lastMonitorTime = portGET_RUN_TIME_COUNTER_VALUE();
return 0;
}
@@ -95,6 +97,20 @@ void TaskMonitorUpdateAll(void)
// Lock
xSemaphoreTakeRecursive(lock, portMAX_DELAY);
+#if ( configGENERATE_RUN_TIME_STATS == 1 )
+ uint32_t currentTime;
+ uint32_t deltaTime;
+
+ /*
+ * Calculate the amount of elapsed run time between the last time we
+ * measured and now. Scale so that we can convert task run times
+ * directly to percentages.
+ */
+ currentTime = portGET_RUN_TIME_COUNTER_VALUE();
+ deltaTime = ((currentTime - lastMonitorTime) / 100) ? : 1; /* avoid divide-by-zero if the interval is too small */
+ lastMonitorTime = currentTime;
+#endif
+
// Update all task information
for (n = 0; n < TASKINFO_RUNNING_NUMELEM; ++n)
{
@@ -107,7 +123,8 @@ void TaskMonitorUpdateAll(void)
data.StackRemaining[n] = uxTaskGetStackHighWaterMark(handles[n]) * 4;
#if ( configGENERATE_RUN_TIME_STATS == 1 )
/* Generate run time stats */
- data.RunningTime[n] = 100 * (float) uxTaskGetRunTime(handles[n]) / portGET_RUN_TIME_COUNTER_VALUE();
+ data.RunningTime[n] = uxTaskGetRunTime(handles[n]) / deltaTime;
+
#endif
#endif
diff --git a/flight/OpenPilot/UAVObjects.inc b/flight/OpenPilot/UAVObjects.inc
index 4849367a9..3eb2fa571 100644
--- a/flight/OpenPilot/UAVObjects.inc
+++ b/flight/OpenPilot/UAVObjects.inc
@@ -24,6 +24,7 @@
# (all architectures)
UAVOBJSRCFILENAMES =
+UAVOBJSRCFILENAMES += accessorydesired
UAVOBJSRCFILENAMES += actuatorcommand
UAVOBJSRCFILENAMES += actuatordesired
UAVOBJSRCFILENAMES += actuatorsettings
diff --git a/flight/PiOS/Common/pios_flashfs_objlist.c b/flight/PiOS/Common/pios_flashfs_objlist.c
index ee3abe6f9..11a40822a 100644
--- a/flight/PiOS/Common/pios_flashfs_objlist.c
+++ b/flight/PiOS/Common/pios_flashfs_objlist.c
@@ -105,7 +105,7 @@ int32_t PIOS_FLASHFS_Init()
*/
static int32_t PIOS_FLASHFS_CleabObjectTableHeader()
{
- if(PIOS_Flash_W25X_EraseSector(OBJECT_TABLE_START) != 0)
+ if(PIOS_Flash_W25X_EraseSector(0) != 0)
return -1;
uint32_t object_table_magic = OBJECT_TABLE_MAGIC;
diff --git a/flight/PiOS/STM32F10x/Libraries/FreeRTOS/Source/tasks.c b/flight/PiOS/STM32F10x/Libraries/FreeRTOS/Source/tasks.c
index de7440f27..865d5e9db 100644
--- a/flight/PiOS/STM32F10x/Libraries/FreeRTOS/Source/tasks.c
+++ b/flight/PiOS/STM32F10x/Libraries/FreeRTOS/Source/tasks.c
@@ -2315,9 +2315,13 @@ tskTCB *pxNewTCB;
#if ( INCLUDE_uxTaskGetRunTime == 1 )
unsigned portBASE_TYPE uxTaskGetRunTime( xTaskHandle xTask )
{
+ unsigned long runTime;
+
tskTCB *pxTCB;
pxTCB = prvGetTCBFromHandle( xTask );
- return pxTCB->ulRunTimeCounter;
+ runTime = pxTCB->ulRunTimeCounter;
+ pxTCB->ulRunTimeCounter = 0;
+ return runTime;
}
#endif
diff --git a/flight/Project/OpenPilotOSX/OpenPilotOSX.xcodeproj/project.pbxproj b/flight/Project/OpenPilotOSX/OpenPilotOSX.xcodeproj/project.pbxproj
index 0fc7ccf73..4f2252237 100644
--- a/flight/Project/OpenPilotOSX/OpenPilotOSX.xcodeproj/project.pbxproj
+++ b/flight/Project/OpenPilotOSX/OpenPilotOSX.xcodeproj/project.pbxproj
@@ -2738,6 +2738,7 @@
65E6E09912E037C800058553 /* pios_adc_priv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_adc_priv.h; sourceTree = ""; };
65E8C743139A6D0900E1F979 /* pios_crc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pios_crc.c; sourceTree = ""; };
65E8C745139A6D1A00E1F979 /* pios_crc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pios_crc.h; sourceTree = ""; };
+ 65E8C788139AA2A800E1F979 /* accessorydesired.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = accessorydesired.xml; sourceTree = ""; };
65E8EF1F11EEA61E00BBF654 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; name = Makefile; path = ../../OpenPilot/Makefile; sourceTree = SOURCE_ROOT; };
65E8EF2011EEA61E00BBF654 /* Makefile.posix */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = Makefile.posix; path = ../../OpenPilot/Makefile.posix; sourceTree = SOURCE_ROOT; };
65E8EF5C11EEA61E00BBF654 /* alarms.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = alarms.c; path = ../../OpenPilot/System/alarms.c; sourceTree = SOURCE_ROOT; };
@@ -7418,6 +7419,7 @@
65C35E4F12EFB2F3004811C2 /* uavobjectdefinition */ = {
isa = PBXGroup;
children = (
+ 65E8C788139AA2A800E1F979 /* accessorydesired.xml */,
65C35E5012EFB2F3004811C2 /* actuatorcommand.xml */,
65C35E5112EFB2F3004811C2 /* actuatordesired.xml */,
65C35E5212EFB2F3004811C2 /* actuatorsettings.xml */,
diff --git a/flight/Project/gdb/coptercontrol b/flight/Project/gdb/coptercontrol
index d08282e50..7e7b53453 100644
--- a/flight/Project/gdb/coptercontrol
+++ b/flight/Project/gdb/coptercontrol
@@ -1,7 +1,7 @@
define connect
target remote localhost:3333
monitor cortex_m3 vector_catch all
- file ./build/coptercontrol/CopterControl.elf
+ file ./build/fw_coptercontrol/fw_coptercontrol.elf
end
#monitor reset halt
diff --git a/ground/openpilotgcs/share/openpilotgcs/dials/deluxe/lineardial-horizontal.svg b/ground/openpilotgcs/share/openpilotgcs/dials/deluxe/lineardial-horizontal.svg
new file mode 100644
index 000000000..2f6f71b17
--- /dev/null
+++ b/ground/openpilotgcs/share/openpilotgcs/dials/deluxe/lineardial-horizontal.svg
@@ -0,0 +1,1329 @@
+
+
+
+
diff --git a/ground/openpilotgcs/share/openpilotgcs/dials/deluxe/lineardial-vertical.svg b/ground/openpilotgcs/share/openpilotgcs/dials/deluxe/lineardial-vertical.svg
index 11a4e1c93..010283c2c 100644
--- a/ground/openpilotgcs/share/openpilotgcs/dials/deluxe/lineardial-vertical.svg
+++ b/ground/openpilotgcs/share/openpilotgcs/dials/deluxe/lineardial-vertical.svg
@@ -30,7 +30,7 @@
style="stop-color:#000000;stop-opacity:1" />
+ style="stop-color:#dcaf28;stop-opacity:1" />
+ offset="0.38184431"
+ style="stop-color:#00a000;stop-opacity:1" />
+ style="stop-color:#aa0000;stop-opacity:1" />
+ style="display:inline"
+ transform="translate(-129.62194,129.52019)">
isSingleInstance() ? 0 : 2)) != packetSize)
{ // packet error - mismatched packet size
stats.rxErrors++;
rxState = STATE_SYNC;
@@ -805,17 +805,3 @@ quint8 UAVTalk::updateCRC(quint8 crc, const quint8* data, qint32 length)
crc = crc_table[crc ^ *data++];
return crc;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/shared/uavobjectdefinition/accessorydesired.xml b/shared/uavobjectdefinition/accessorydesired.xml
new file mode 100644
index 000000000..d0a7b0ed8
--- /dev/null
+++ b/shared/uavobjectdefinition/accessorydesired.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/shared/uavobjectdefinition/manualcontrolcommand.xml b/shared/uavobjectdefinition/manualcontrolcommand.xml
index 58d6d9330..ef74c2576 100644
--- a/shared/uavobjectdefinition/manualcontrolcommand.xml
+++ b/shared/uavobjectdefinition/manualcontrolcommand.xml
@@ -6,11 +6,7 @@
-
-
-
-
-
+
diff --git a/shared/uavobjectdefinition/manualcontrolsettings.xml b/shared/uavobjectdefinition/manualcontrolsettings.xml
index 5060c12db..95423a3f5 100644
--- a/shared/uavobjectdefinition/manualcontrolsettings.xml
+++ b/shared/uavobjectdefinition/manualcontrolsettings.xml
@@ -7,9 +7,9 @@
+
-
diff --git a/shared/uavobjectdefinition/mixersettings.xml b/shared/uavobjectdefinition/mixersettings.xml
index efe48d090..a93b8c2ff 100644
--- a/shared/uavobjectdefinition/mixersettings.xml
+++ b/shared/uavobjectdefinition/mixersettings.xml
@@ -6,22 +6,23 @@
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+