8000 Add PixHawk telemetry support for Jumper R8 receiver by vishwamartur · Pull Request #146 · dgatf/msrc · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Add PixHawk telemetry support for Jumper R8 receiver #146

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions board/project/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,8 @@ typedef enum rx_protocol_t {
SERIAL_MONITOR,
RX_CRSF,
RX_HOTT,
RX_SANWA
RX_SANWA,
RX_PIXHAWK
} rx_protocol_t;

typedef enum esc_protocol_t {
Expand Down Expand Up @@ -173,4 +174,6 @@ float get_consumption(float current, uint16_t current_max, uint32_t *timestamp);
float voltage_read(uint8_t adc_num);
float get_altitude(float pressure, float temperature, float P0);

#endif
void pixhawk_task(void *parameters);

#endif
266 changes: 136 additions & 130 deletions board/project/main.c
Original file line number Diff line number Diff line change
@@ -1,130 +1,136 @@
#include <stdio.h>

#include "config.h"
#include "frsky_d.h"
#include "hitec.h"
#include "ibus.h"
#include "jetiex.h"
#include "led.h"
#include "multiplex.h"
#include "sbus.h"
#include "serial_monitor.h"
#include "sim_rx.h"
#include "smartport.h"
#include "srxl.h"
#include "srxl2.h"
#include "usb.h"
#include "xbus.h"
#include "crsf.h"
#include "hott.h"
#include "sanwa.h"

context_t context;

void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) {
debug("stack overflow %x %s\r\n", xTask, (portCHAR *)pcTaskName);
while (1)
;
}

int main() {
stdio_init_all();

if (CONFIG_FORZE_WRITE) config_forze_write();
config_t *config = config_read();

context.debug = config->debug;
if (context.debug) sleep_ms(1000);
debug("\n\nMSRC init");

context.tasks_queue_handle = xQueueCreate(64, sizeof(QueueHandle_t));

context.led_cycle_duration = 200;
context.led_cycles = 3;
xTaskCreate(led_task, "led_task", STACK_LED, NULL, 1, &context.led_task_handle);

xTaskCreate(usb_task, "usb_task", STACK_USB, NULL, 1, &context.usb_task_handle);

switch (config->rx_protocol) {
case RX_XBUS:
xTaskCreate(xbus_task, "xbus_task", STACK_RX_XBUS, NULL, 3, &context.receiver_task_handle);
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_IBUS:
xTaskCreate(ibus_task, "ibus_task", STACK_RX_IBUS, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_FRSKY_D:
xTaskCreate(frsky_d_task, "frsky_d_task", STACK_RX_FRSKY_D, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_MULTIPLEX:
xTaskCreate(multiplex_task, "multiplex_task", STACK_RX_MULTIPLEX, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SMARTPORT:
xTaskCreate(smartport_task, "smartport_task", STACK_RX_SMARTPORT, NULL, 4, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_JETIEX:
xTaskCreate(jetiex_task, "jetiex_task", STACK_RX_JETIEX, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SBUS:
xTaskCreate(sbus_task, "sbus_task", STACK_RX_SBUS, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_HITEC:
xTaskCreate(hitec_task, "hitec_task", STACK_RX_HITEC, NULL, 3, &context.receiver_task_handle);
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SRXL:
xTaskCreate(srxl_task, "srxl_task", STACK_RX_SRXL, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SRXL2:
xTaskCreate(srxl2_task, "srxl2_task", STACK_RX_SRXL2, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case SERIAL_MONITOR:
xTaskCreate(serial_monitor_task, "serial_monitor", STACK_SERIAL_MONITOR, NULL, 3,
&context.receiver_task_handle);
context.uart1_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_CRSF:
xTaskCreate(crsf_task, "crfs_task", STACK_RX_CRSF, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_HOTT:
xTaskCreate(hott_task, "hott_task", STACK_RX_HOTT, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SANWA:
xTaskCreate(sanwa_task, "sanwa_task", STACK_RX_SANWA, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
}

#ifdef SIM_RX
sim_rx_parameters_t parameter = {config->rx_protocol};
xTaskCreate(sim_rx_task, "sim_rx_task", STACK_SIM_RX, &parameter, 3, NULL);
#endif

vTaskStartScheduler();

vTaskResume(context.led_task_handle);
while (1)
;
}
#include <stdio.h>

#include "config.h"
#include "frsky_d.h"
#include "hitec.h"
#include "ibus.h"
#include "jetiex.h"
#include "led.h"
#include "multiplex.h"
#include "sbus.h"
#include "serial_monitor.h"
#include "sim_rx.h"
#include "smartport.h"
#include "srxl.h"
#include "srxl2.h"
#include "usb.h"
#include "xbus.h"
#include "crsf.h"
#include "hott.h"
#include "sanwa.h"
#include "pixhawk.h"

context_t context;

void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) {
debug("stack overflow %x %s\r\n", xTask, (portCHAR *)pcTaskName);
while (1)
;
}

int main() {
stdio_init_all();

if (CONFIG_FORZE_WRITE) config_forze_write();
config_t *config = config_read();

context.debug = config->debug;
if (context.debug) sleep_ms(1000);
debug("\n\nMSRC init");

context.tasks_queue_handle = xQueueCreate(64, sizeof(QueueHandle_t));

context.led_cycle_duration = 200;
context.led_cycles = 3;
xTaskCreate(led_task, "led_task", STACK_LED, NULL, 1, &context.led_task_handle);

xTaskCreate(usb_task, "usb_task", STACK_USB, NULL, 1, &context.usb_task_handle);

switch (config->rx_protocol) {
case RX_XBUS:
xTaskCreate(xbus_task, "xbus_task", STACK_RX_XBUS, NULL, 3, &context.receiver_task_handle);
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_IBUS:
xTaskCreate(ibus_task, "ibus_task", STACK_RX_IBUS, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_FRSKY_D:
xTaskCreate(frsky_d_task, "frsky_d_task", STACK_RX_FRSKY_D, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_MULTIPLEX:
xTaskCreate(multiplex_task, "multiplex_task", STACK_RX_MULTIPLEX, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SMARTPORT:
xTaskCreate(smartport_task, "smartport_task", STACK_RX_SMARTPORT, NULL, 4, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_JETIEX:
xTaskCreate(jetiex_task, "jetiex_task", STACK_RX_JETIEX, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SBUS:
xTaskCreate(sbus_task, "sbus_task", STACK_RX_SBUS, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_HITEC:
xTaskCreate(hitec_task, "hitec_task", STACK_RX_HITEC, NULL, 3, &context.receiver_task_handle);
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SRXL:
xTaskCreate(srxl_task, "srxl_task", STACK_RX_SRXL, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SRXL2:
xTaskCreate(srxl2_task, "srxl2_task", STACK_RX_SRXL2, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case SERIAL_MONITOR:
xTaskCreate(serial_monitor_task, "serial_monitor", STACK_SERIAL_MONITOR, NULL, 3,
&context.receiver_task_handle);
context.uart1_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_CRSF:
xTaskCreate(crsf_task, "crfs_task", STACK_RX_CRSF, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_HOTT:
xTaskCreate(hott_task, "hott_task", STACK_RX_HOTT, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_SANWA:
xTaskCreate(sanwa_task, "sanwa_task", STACK_RX_SANWA, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
case RX_PIXHAWK:
xTaskCreate(pixhawk_task, "pixhawk_task", STACK_RX_PIXHAWK, NULL, 3, &context.receiver_task_handle);
context.uart0_notify_task_handle = context.receiver_task_handle;
xQueueSendToBack(context.tasks_queue_handle, context.receiver_task_handle, 0);
break;
}

#ifdef SIM_RX
sim_rx_parameters_t parameter = {config->rx_protocol};
xTaskCreate(sim_rx_task, "sim_rx_task", STACK_SIM_RX, &parameter, 3, NULL);
#endif

vTaskStartScheduler();

vTaskResume(context.led_task_handle);
while (1)
;
}
15 changes: 15 additions & 0 deletions board/project/protocol/pixhawk.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include "pixhawk.h"
#include "uart.h"
#include <stdio.h>
#include <stdlib.h>

void pixhawk_task(void *parameters) {
uart0_begin(57600, UART_RECEIVER_TX, UART_RECEIVER_RX, 1000, 8, 1, UART_PARITY_NONE, false);
while (1) {
if (uart0_available()) {
uint8_t data = uart0_read();
// Process PixHawk telemetry data
// Add your data parsing and processing logic here
}
}
}
8 changes: 8 additions & 0 deletions board/project/protocol/pixhawk.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#ifndef PIXHAWK_H
#define PIXHAWK_H

#include "uart.h"

void pixhawk_task(void *parameters);

#endif
0