zhaohe 2 years ago
parent
commit
cfec9e59c8
  1. 11
      iflytop_xsync/xs_delay.c
  2. 9
      iflytop_xsync/xs_delay.h
  3. 4
      iflytop_xsync/xs_udp.c
  4. 3
      iflytop_xsync/xs_udp.h
  5. 1
      iflytop_xsync_protocol/iflytop_xsync_protocol.h
  6. 75
      usrc/main.cpp
  7. 7
      usrc/project_configs.h
  8. 2
      usrc/service/extern_if_service.c

11
iflytop_xsync/xs_delay.c

@ -48,4 +48,13 @@ void xs_delay_ms(int ms) {
} }
void xs_os_delay_ms(int ms) { osDelay(ms); } void xs_os_delay_ms(int ms) { osDelay(ms); }
int32_t xs_get_ticket(void) { return HAL_GetTick(); }
uint32_t xs_get_ticket(void) { return HAL_GetTick(); }
uint32_t xs_has_passedms(uint32_t ticket) {
uint32_t now = HAL_GetTick();
if (now >= ticket) {
return now - ticket;
} else {
return 0xFFFFFFFF - ticket + now;
}
}

9
iflytop_xsync/xs_delay.h

@ -1,6 +1,7 @@
#pragma once #pragma once
#include <stdint.h> #include <stdint.h>
void xs_delay_us(int us);
void xs_delay_ms(int ms);
void xs_os_delay_ms(int ms);
int32_t xs_get_ticket(void);
void xs_delay_us(int us);
void xs_delay_ms(int ms);
void xs_os_delay_ms(int ms);
uint32_t xs_get_ticket(void);
uint32_t xs_has_passedms(uint32_t ticket);

4
iflytop_xsync/xs_udp.c

@ -16,6 +16,7 @@
static void udp_server_receive_thread(void const *argument) { // static void udp_server_receive_thread(void const *argument) { //
udp_t *udp_handler = (udp_t *)argument; udp_t *udp_handler = (udp_t *)argument;
ZLOGI(TAG, "udp server receive thread start: %s", udp_handler->name);
while (true) { while (true) {
struct sockaddr_in sock; struct sockaddr_in sock;
socklen_t sock_len = sizeof(sock); socklen_t sock_len = sizeof(sock);
@ -26,13 +27,14 @@ static void udp_server_receive_thread(void const *argument) { //
} }
} }
bool xs_udp_init(udp_t *udp_handler, uint16_t port, udp_on_packet_t on_packet, int32_t rxbuf_size, void *data) {
bool xs_udp_init(udp_t *udp_handler, const char *name, uint16_t port, udp_on_packet_t on_packet, int32_t rxbuf_size, void *data) {
memset(udp_handler, 0, sizeof(udp_t)); memset(udp_handler, 0, sizeof(udp_t));
udp_handler->server.sin_family = AF_INET; udp_handler->server.sin_family = AF_INET;
udp_handler->server.sin_addr.s_addr = inet_addr("0.0.0.0"); udp_handler->server.sin_addr.s_addr = inet_addr("0.0.0.0");
udp_handler->server.sin_port = htons(port); udp_handler->server.sin_port = htons(port);
udp_handler->on_packet = on_packet; udp_handler->on_packet = on_packet;
udp_handler->data = data; udp_handler->data = data;
udp_handler->name = name;
if (rxbuf_size == 0) { if (rxbuf_size == 0) {
udp_handler->rxbuf_len = 1024; udp_handler->rxbuf_len = 1024;
} else { } else {

3
iflytop_xsync/xs_udp.h

@ -20,6 +20,7 @@ struct udp_s {
int rxbuf_len; int rxbuf_len;
udp_on_packet_t on_packet; udp_on_packet_t on_packet;
void *data; void *data;
const char *name;
}; };
typedef struct { typedef struct {
@ -27,7 +28,7 @@ typedef struct {
int sock_fd; int sock_fd;
} udp_broadcast_handler_t; } udp_broadcast_handler_t;
bool xs_udp_init(udp_t *udp_handler, uint16_t port, udp_on_packet_t on_packet, int32_t rxbuf_size, void *data);
bool xs_udp_init(udp_t *udp_handler, const char *name, uint16_t port, udp_on_packet_t on_packet, int32_t rxbuf_size, void *data);
int xs_udp_send_message(udp_t *udp_handler, const char *remoteip, int remoteport, const char *data, int len); int xs_udp_send_message(udp_t *udp_handler, const char *remoteip, int remoteport, const char *data, int len);
int xs_udp_send_message2(udp_t *udp_handler, struct sockaddr_in *add, const char *data, int len); int xs_udp_send_message2(udp_t *udp_handler, struct sockaddr_in *add, const char *data, int len);

1
iflytop_xsync_protocol/iflytop_xsync_protocol.h

@ -51,7 +51,6 @@ typedef struct {
uint16_t cmd; uint16_t cmd;
uint16_t ndata; uint16_t ndata;
uint32_t data[]; // first is always checksum uint32_t data[]; // first is always checksum
/*uint8_t checksum*/
} iflytop_xsync_packet_header_t; } iflytop_xsync_packet_header_t;
typedef struct { typedef struct {

75
usrc/main.cpp

@ -36,16 +36,75 @@ void StartDefaultTask(void const* argument) { umain(); }
*/ */
xs_gpio_t m_debug_led; xs_gpio_t m_debug_led;
xs_gpio_t m_factory_reset_key;
xs_gpio_t m_power_led;
extern "C" { extern "C" {
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { report_generator_service_irq_trigger(GPIO_Pin); } void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { report_generator_service_irq_trigger(GPIO_Pin); }
} }
void debug_light_ctrl() {
static uint32_t lastcall = 0;
static bool light_status = false;
if (xs_has_passedms(lastcall) > 100) {
light_status = !light_status;
xs_gpio_write(&m_debug_led, light_status);
lastcall = xs_get_ticket();
}
}
void factory_reset_key_detect() {
static uint32_t reset_key_trigger_tp = 0;
static bool reset_key_triggered = false;
if (!reset_key_triggered) {
if (xs_gpio_read(&m_factory_reset_key)) {
reset_key_trigger_tp = xs_get_ticket();
reset_key_triggered = true;
}
}
if (reset_key_triggered) {
if (!xs_gpio_read(&m_factory_reset_key)) {
reset_key_triggered = false;
} else {
if (xs_has_passedms(reset_key_trigger_tp) > 3000) {
ZLOGI(TAG, "factory reset key triggered");
config_factory_reset();
// m_power_led
while (xs_gpio_read(&m_factory_reset_key)) {
xs_gpio_write(&m_power_led, false);
osDelay(100);
xs_gpio_write(&m_power_led, true);
osDelay(100);
}
ZLOGI(TAG, "system reset");
NVIC_SystemReset();
}
}
//
}
}
void umain() { void umain() {
/**
* @brief device_info init
*/
sn_t sn;
device_info_init();
device_info_get_sn(&sn);
XS_LOGI(TAG, "%s:%d", PC_PROJECT_NAME, PC_VERSION); XS_LOGI(TAG, "%s:%d", PC_PROJECT_NAME, PC_VERSION);
XS_LOGI(TAG, "sn: %x:%x:%x", sn.sn0, sn.sn1, sn.sn2);
/** /**
* @brief
* @brief
* 1.
* 2.
* 3.
*/ */
xs_gpio_init_as_output(&m_debug_led, PC_DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false); xs_gpio_init_as_output(&m_debug_led, PC_DEBUG_LIGHT_GPIO, kxs_gpio_nopull, false, false);
xs_gpio_init_as_output(&m_power_led, POWER_LED_PIN, kxs_gpio_nopull, false, true);
xs_gpio_init_as_input(&m_factory_reset_key, FACTORY_RESET_KEY, kxs_gpio_nopull, kxs_gpio_no_irq, true);
// m_power_led
/** /**
* @brief * @brief
*/ */
@ -62,10 +121,7 @@ void umain() {
* @brief report_generator init * @brief report_generator init
*/ */
report_generator_service_init(fpga_if_get_instance()->timecode_irq_pin, fpga_if_get_instance()->camera_sync_code_irq_pin); report_generator_service_init(fpga_if_get_instance()->timecode_irq_pin, fpga_if_get_instance()->camera_sync_code_irq_pin);
/**
* @brief device_info init
*/
device_info_init();
/** /**
* @brief reg_manager init * @brief reg_manager init
*/ */
@ -77,10 +133,11 @@ void umain() {
*/ */
extern_if_service_init(); extern_if_service_init();
ZLOGI(TAG, "system init done");
while (true) { while (true) {
xs_gpio_write(&m_debug_led, true);
xs_delay_ms(100);
xs_gpio_write(&m_debug_led, false);
xs_delay_ms(100);
osDelay(10);
debug_light_ctrl();
factory_reset_key_detect();
} }
} }

7
usrc/project_configs.h

@ -18,3 +18,10 @@
#define PC_IRQ_PREEMPTPRIORITY_DEFAULT 5 #define PC_IRQ_PREEMPTPRIORITY_DEFAULT 5
#define PC_NVS_ENABLE 1 #define PC_NVS_ENABLE 1
// =====================================================================
// =====================================================================
// =====================================================================
#define FACTORY_RESET_KEY PB1
#define POWER_LED_PIN PB2

2
usrc/service/extern_if_service.c

@ -110,7 +110,7 @@ static void udp_on_packet(udp_t *server, struct sockaddr_in *client, uint8_t *da
} }
} }
void extern_if_service_init() { ZASSERT(xs_udp_init(&m_udp_cmd_server, IFLYTOP_XSYNC_SERVICE_PORT, udp_on_packet, 1024, NULL)); }
void extern_if_service_init() { ZASSERT(xs_udp_init(&m_udp_cmd_server, "extern_if_udp", IFLYTOP_XSYNC_SERVICE_PORT, udp_on_packet, 1024, NULL)); }
#if 0 #if 0
void extern_if_service_send_timecode(struct sockaddr_in client, uint32_t timecode0, uint32_t timecode1) { create_and_send_timecode(client, timecode0, timecode1); } void extern_if_service_send_timecode(struct sockaddr_in client, uint32_t timecode0, uint32_t timecode1) { create_and_send_timecode(client, timecode0, timecode1); }
#endif #endif
Loading…
Cancel
Save