Browse Source

单个数据发送正常

master
binsir 4 years ago
parent
commit
33ebc93728
  1. 2
      .mxproject
  2. 7
      .vscode/c_cpp_properties.json
  3. 21
      .vscode/settings.json
  4. 21
      App/freertos_action.c
  5. 31
      BSP/insifhtica_QOAR1271.c
  6. 2
      Core/Inc/FreeRTOSConfig.h
  7. 6
      Core/Src/freertos.c
  8. 2
      Core/Src/main.c
  9. 2
      Core/Src/stm32f1xx_hal_timebase_tim.c
  10. 49
      MDK-ARM/WaterLidar.uvoptx
  11. 5
      MDK-ARM/WaterLidar.uvprojx
  12. 2986
      MDK-ARM/WaterLidar/WaterLidar.hex
  13. 227
      UAVCAN/node_proximity.c
  14. 106
      UAVCAN/node_proximity.h
  15. 30
      UAVCAN/uavcan.c
  16. 33
      UAVCAN/uavcan.h
  17. 10
      WaterLidar.ioc

2
.mxproject

File diff suppressed because one or more lines are too long

7
.vscode/c_cpp_properties.json vendored

@ -7,12 +7,15 @@ @@ -7,12 +7,15 @@
"limitSymbolsToIncludedHeaders": true,
"path": [
"C://keil_v5/ARM/ARMCC/**", //keil5
"${workspaceRoot}/**"
"${workspaceFolder}/**",
"${workspaceFolder}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2"
]
},
"includePath": [
"C://keil_v5/ARM/ARMCC/**", //keil5
"${workspaceRoot}/**"
"${workspaceFolder}/**",
"${workspaceFolder}/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2",
"${workspaceFolder}/Middlewares/Third_Party/FreeRTOS/Source/include"
],
"defines": [
"_DEBUG",

21
.vscode/settings.json vendored

@ -1,21 +1,21 @@ @@ -1,21 +1,21 @@
{
"workbench.colorCustomizations": {
"activityBar.activeBackground": "#c8ca8e",
"activityBar.activeBorder": "#479598",
"activityBar.background": "#c8ca8e",
"activityBar.activeBackground": "#f8bfcd",
"activityBar.activeBorder": "#2f9010",
"activityBar.background": "#f8bfcd",
"activityBar.foreground": "#15202b",
"activityBar.inactiveForeground": "#15202b99",
"activityBarBadge.background": "#479598",
"activityBarBadge.background": "#2f9010",
"activityBarBadge.foreground": "#e7e7e7",
"statusBar.background": "#b7ba6b",
"statusBar.background": "#f391a9",
"statusBar.foreground": "#15202b",
"statusBarItem.hoverBackground": "#a2a54d",
"titleBar.activeBackground": "#b7ba6b",
"statusBarItem.hoverBackground": "#ee6385",
"titleBar.activeBackground": "#f391a9",
"titleBar.activeForeground": "#15202b",
"titleBar.inactiveBackground": "#b7ba6b99",
"titleBar.inactiveBackground": "#f391a999",
"titleBar.inactiveForeground": "#15202b99"
},
"peacock.color": "#b7ba6b",
"peacock.color": "#f391a9",
"files.associations": {
"*.dat": "makefile",
"*.c": "c",
@ -35,6 +35,7 @@ @@ -35,6 +35,7 @@
"stm32f1xx_hal.h": "c",
"node_measurement.h": "c",
"stdarg.h": "c",
"insifhtica_qoar1271.h": "c"
"insifhtica_qoar1271.h": "c",
"node_proximity.h": "c"
}
}

21
App/freertos_action.c

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
/*
* @Author: your name
* @Date: 2021-06-26 15:37:21
* @LastEditTime: 2021-07-14 16:42:56
* @LastEditTime: 2021-07-15 08:36:21
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: \warter_rader\App\freertos_action.c
@ -61,6 +61,7 @@ void task_uavcan_send_action(void) @@ -61,6 +61,7 @@ void task_uavcan_send_action(void)
uavcan_send_data_t data = {0};
float depth_data=0.0f;
osStatus_t status;
for(;;)
{
if (uavcan_send_queueHandle != NULL)
@ -79,6 +80,7 @@ void task_default_action(void) @@ -79,6 +80,7 @@ void task_default_action(void)
{
init_allocation();
uint32_t last_send_node_status_tick =0;
uint32_t last_send_proximity_tick =0;
/* Infinite loop */
for (;;)
{
@ -94,6 +96,23 @@ void task_default_action(void) @@ -94,6 +96,23 @@ void task_default_action(void)
osMessageQueuePut(uavcan_send_queueHandle,&send_data,0,10);
}
}
// if (last_send_proximity_tick + 200 < HAL_GetTick())
// {
// last_send_proximity_tick = HAL_GetTick();
// if (uavcan_send_queueHandle != NULL)
// {
// uavcan_send_data_t send_data = {0};
// send_data.id = ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID;
// uavcan_proximity_t data = {0};
// data.d0 = 200;
// data.d45 = 300;
// data.d315 = 400;
// data.d135 = 500;
// memcpy(&send_data.content.node_state, &data, sizeof(uavcan_node_status_t));
// osMessageQueuePut(uavcan_send_queueHandle, &send_data, 0, 10);
// }
// }
osDelay(200);
}
}

31
BSP/insifhtica_QOAR1271.c

@ -20,7 +20,7 @@ void parse_ar1271_data(usart_data_t *usart_data) @@ -20,7 +20,7 @@ void parse_ar1271_data(usart_data_t *usart_data)
if (buffer_count == 2) //判断帧头2 应为前一句已经++ 故2
{
if (c !='H')
if (c != 'H')
{
buffer_count = 0;
}
@ -34,22 +34,18 @@ void parse_ar1271_data(usart_data_t *usart_data) @@ -34,22 +34,18 @@ void parse_ar1271_data(usart_data_t *usart_data)
{
if (usart_data->usart_instance == 1)
{
// proximity_t proximity = {0};
// proximity.d0 = uint16_value(buffer[2], buffer[3]);
// proximity.d315 = uint16_value(buffer[4], buffer[5]);
// proximity.d45 = uint16_value(buffer[16], buffer[17]);
uavcan_send_data_t msg = {0};
if (uavcan_send_queueHandle != NULL)
{
msg.id = UAVCAN_EQUIPMENT_RANGE_SENSOR_MEASUREMENT_ID;
uavcan_measurement_t m_data = {0};
m_data.timestamp.usec = HAL_GetTick() * 1000;
m_data.range = uint16_value(buffer[2], buffer[3]) / 1000.0f;
m_data.sensor_id = RANGE_FINDER_ID;
m_data.sensor_type = SENSOR_TYPE_SONAR;
m_data.reading_type = READING_TYPE_VALID_RANGE;
memcpy(&msg.content.measurement_msg, &m_data, sizeof(uavcan_measurement_t));
msg.id = ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID;
uavcan_proximity_t data = {0};
data.sensor_type = SENSOR_TYPE_RADAR;
data.d0 = uint16_value(buffer[2], buffer[3]);
data.d45 = uint16_value(buffer[4], buffer[5]);
data.d315 = uint16_value(buffer[16], buffer[17]);
memcpy(&msg.content.proximity, &data, sizeof(uavcan_proximity_t));
osMessageQueuePut(uavcan_send_queueHandle, &msg, NULL, 10U);
}
}
@ -88,7 +84,8 @@ uint8_t crc_crc8(const uint8_t *p, uint8_t len) @@ -88,7 +84,8 @@ uint8_t crc_crc8(const uint8_t *p, uint8_t len)
{
uint16_t crc = 0x0;
while (len--) {
while (len--)
{
const uint16_t i = (crc ^ *p++) & 0xFF;
crc = (crc8_table[i] ^ (crc << 8)) & 0xFF;
}
@ -96,9 +93,9 @@ uint8_t crc_crc8(const uint8_t *p, uint8_t len) @@ -96,9 +93,9 @@ uint8_t crc_crc8(const uint8_t *p, uint8_t len)
return crc & 0xFF;
}
uint16_t uint16_value(uint8_t h_byte,uint8_t l_byte)
uint16_t uint16_value(uint8_t h_byte, uint8_t l_byte)
{
return (uint16_t)(h_byte<<8)|l_byte;
return (uint16_t)(h_byte << 8) | l_byte;
}
void request_QOAR1271_data(void)

2
Core/Inc/FreeRTOSConfig.h

@ -60,7 +60,7 @@ @@ -60,7 +60,7 @@
#define configTICK_RATE_HZ ((TickType_t)1000)
#define configMAX_PRIORITIES ( 56 )
#define configMINIMAL_STACK_SIZE ((uint16_t)128)
#define configTOTAL_HEAP_SIZE ((size_t)8192)
#define configTOTAL_HEAP_SIZE ((size_t)11264)
#define configMAX_TASK_NAME_LEN ( 16 )
#define configUSE_TRACE_FACILITY 1
#define configUSE_16_BIT_TICKS 0

6
Core/Src/freertos.c

@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
osThreadId_t DefaultTaskHandle;
const osThreadAttr_t DefaultTask_attributes = {
.name = "DefaultTask",
.stack_size = 128 * 4,
.stack_size = 256 * 4,
.priority = (osPriority_t) osPriorityNormal,
};
/* Definitions for UavcanRevTask */
@ -66,14 +66,14 @@ const osThreadAttr_t UavcanRevTask_attributes = { @@ -66,14 +66,14 @@ const osThreadAttr_t UavcanRevTask_attributes = {
osThreadId_t UsartSendTaskHandle;
const osThreadAttr_t UsartSendTask_attributes = {
.name = "UsartSendTask",
.stack_size = 256 * 4,
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityBelowNormal2,
};
/* Definitions for UavcanSendTask */
osThreadId_t UavcanSendTaskHandle;
const osThreadAttr_t UavcanSendTask_attributes = {
.name = "UavcanSendTask",
.stack_size = 256 * 4,
.stack_size = 512 * 4,
.priority = (osPriority_t) osPriorityAboveNormal4,
};
/* Definitions for UsartRevTask */

2
Core/Src/main.c

@ -158,7 +158,7 @@ void SystemClock_Config(void) @@ -158,7 +158,7 @@ void SystemClock_Config(void)
/* USER CODE END 4 */
/**
/**
* @brief Period elapsed callback in non blocking mode
* @note This function is called when TIM2 interrupt took place, inside
* HAL_TIM_IRQHandler(). It makes a direct call to HAL_IncTick() to increment

2
Core/Src/stm32f1xx_hal_timebase_tim.c

@ -50,6 +50,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) @@ -50,6 +50,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
/* Enable the TIM2 global Interrupt */
HAL_NVIC_EnableIRQ(TIM2_IRQn);
/* Enable TIM2 clock */
__HAL_RCC_TIM2_CLK_ENABLE();
@ -74,6 +75,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority) @@ -74,6 +75,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
htim2.Init.Prescaler = uwPrescalerValue;
htim2.Init.ClockDivision = 0;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
if(HAL_TIM_Base_Init(&htim2) == HAL_OK)
{
/* Start the TIM time Base generation in interrupt mode */

49
MDK-ARM/WaterLidar.uvoptx

@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>72000000</CLKADS>
<CLKADS>16000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
@ -148,40 +148,7 @@ @@ -148,40 +148,7 @@
<Name>-U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F103T8$Flash\STM32F10x_128.FLM)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>33</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134232672</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\BSP\insifhtica_QOAR1271.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\WaterLidar\../BSP/insifhtica_QOAR1271.c\33</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>97</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134229822</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\BSP\insifhtica_QOAR1271.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\WaterLidar\../BSP/insifhtica_QOAR1271.c\97</Expression>
</Bp>
</Breakpoint>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
@ -903,6 +870,18 @@ @@ -903,6 +870,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\UAVCAN\node_proximity.c</PathWithFileName>
<FilenameWithoutPath>node_proximity.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>

5
MDK-ARM/WaterLidar.uvprojx

@ -872,6 +872,11 @@ @@ -872,6 +872,11 @@
<FileType>1</FileType>
<FilePath>..\UAVCAN\libcanard\drivers\stm32\canard_stm32.c</FilePath>
</File>
<File>
<FileName>node_proximity.c</FileName>
<FileType>1</FileType>
<FilePath>..\UAVCAN\node_proximity.c</FilePath>
</File>
</Files>
</Group>
<Group>

2986
MDK-ARM/WaterLidar/WaterLidar.hex

File diff suppressed because it is too large Load Diff

227
UAVCAN/node_proximity.c

@ -0,0 +1,227 @@ @@ -0,0 +1,227 @@
/*
* UAVCAN data structure definition for libcanard.
*
* Autogenerated, do not edit.
*
* Source file: E:\000_MyProjects\UAVCAN\libcanard_zrzk_new\dsdl_compiler\zrzk\equipment\range_sensor\26110.Proximity.uavcan
*/
#include "node_proximity.h"
#include "canard.h"
#ifndef CANARD_INTERNAL_SATURATE
#define CANARD_INTERNAL_SATURATE(x, max) ( ((x) > max) ? max : ( (-(x) > max) ? (-max) : (x) ) );
#endif
#ifndef CANARD_INTERNAL_SATURATE_UNSIGNED
#define CANARD_INTERNAL_SATURATE_UNSIGNED(x, max) ( ((x) >= max) ? max : (x) );
#endif
#if defined(__GNUC__)
# define CANARD_MAYBE_UNUSED(x) x __attribute__((unused))
#else
# define CANARD_MAYBE_UNUSED(x) x
#endif
/**
* @brief zrzk_equipment_range_sensor_Proximity_encode_internal
* @param source : pointer to source data struct
* @param msg_buf: pointer to msg storage
* @param offset: bit offset to msg storage
* @param root_item: for detecting if TAO should be used
* @retval returns offset
*/
uint32_t zrzk_equipment_range_sensor_Proximity_encode_internal(uavcan_proximity_t* source,
void* msg_buf,
uint32_t offset,
uint8_t CANARD_MAYBE_UNUSED(root_item))
{
canardEncodeScalar(msg_buf, offset, 8, (void*)&source->sensor_id); // 255
offset += 8;
source->sensor_type = CANARD_INTERNAL_SATURATE_UNSIGNED(source->sensor_type, 31)
canardEncodeScalar(msg_buf, offset, 5, (void*)&source->sensor_type); // 31
offset += 5;
source->reading_type = CANARD_INTERNAL_SATURATE_UNSIGNED(source->reading_type, 7)
canardEncodeScalar(msg_buf, offset, 3, (void*)&source->reading_type); // 7
offset += 3;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d0); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d45); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d90); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d135); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d180); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d225); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d270); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d315); // 65535
offset += 16;
return offset;
}
/**
* @brief zrzk_equipment_range_sensor_Proximity_encode
* @param source : Pointer to source data struct
* @param msg_buf: Pointer to msg storage
* @retval returns message length as bytes
*/
uint32_t zrzk_equipment_range_sensor_Proximity_encode(uavcan_proximity_t* source, void* msg_buf)
{
uint32_t offset = 0;
offset = zrzk_equipment_range_sensor_Proximity_encode_internal(source, msg_buf, offset, 1);
return (offset + 7 ) / 8;
}
/**
* @brief zrzk_equipment_range_sensor_Proximity_decode_internal
* @param transfer: Pointer to CanardRxTransfer transfer
* @param payload_len: Payload message length
* @param dest: Pointer to destination struct
* @param dyn_arr_buf: NULL or Pointer to memory storage to be used for dynamic arrays
* uavcan_proximity_t dyn memory will point to dyn_arr_buf memory.
* NULL will ignore dynamic arrays decoding.
* @param offset: Call with 0, bit offset to msg storage
* @retval offset or ERROR value if < 0
*/
int32_t zrzk_equipment_range_sensor_Proximity_decode_internal(
const CanardRxTransfer* transfer,
uint16_t CANARD_MAYBE_UNUSED(payload_len),
uavcan_proximity_t* dest,
uint8_t** CANARD_MAYBE_UNUSED(dyn_arr_buf),
int32_t offset)
{
int32_t ret = 0;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 8, false, (void*)&dest->sensor_id);
if (ret != 8)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 8;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 5, false, (void*)&dest->sensor_type);
if (ret != 5)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 5;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 3, false, (void*)&dest->reading_type);
if (ret != 3)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 3;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d0);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d45);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d90);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d135);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d180);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d225);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d270);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d315);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
return offset;
zrzk_equipment_range_sensor_Proximity_error_exit:
if (ret < 0)
{
return ret;
}
else
{
return -CANARD_ERROR_INTERNAL;
}
}
/**
* @brief zrzk_equipment_range_sensor_Proximity_decode
* @param transfer: Pointer to CanardRxTransfer transfer
* @param payload_len: Payload message length
* @param dest: Pointer to destination struct
* @param dyn_arr_buf: NULL or Pointer to memory storage to be used for dynamic arrays
* uavcan_proximity_t dyn memory will point to dyn_arr_buf memory.
* NULL will ignore dynamic arrays decoding.
* @retval offset or ERROR value if < 0
*/
int32_t zrzk_equipment_range_sensor_Proximity_decode(const CanardRxTransfer* transfer,
uint16_t payload_len,
uavcan_proximity_t* dest,
uint8_t** dyn_arr_buf)
{
const int32_t offset = 0;
int32_t ret = 0;
// Clear the destination struct
for (uint32_t c = 0; c < sizeof(uavcan_proximity_t); c++)
{
((uint8_t*)dest)[c] = 0x00;
}
ret = zrzk_equipment_range_sensor_Proximity_decode_internal(transfer, payload_len, dest, dyn_arr_buf, offset);
return ret;
}

106
UAVCAN/node_proximity.h

@ -0,0 +1,106 @@ @@ -0,0 +1,106 @@
/*
* UAVCAN data structure definition for libcanard.
*
* Autogenerated, do not edit.
*
* Source file: E:\000_MyProjects\UAVCAN\libcanard_zrzk_new\dsdl_compiler\zrzk\equipment\range_sensor\26110.Proximity.uavcan
*/
#ifndef __ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY
#define __ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY
#include <stdint.h>
#include "canard.h"
#ifdef __cplusplus
extern "C"
{
#endif
/******************************* Source text **********************************
uint8 sensor_id
uint5 SENSOR_TYPE_UNDEFINED = 0
uint5 SENSOR_TYPE_SONAR = 1
uint5 SENSOR_TYPE_LIDAR = 2
uint5 SENSOR_TYPE_RADAR = 3
uint5 sensor_type
uint3 READING_TYPE_UNDEFINED = 0 # Range is unknown
uint3 READING_TYPE_VALID_RANGE = 1 # Range field contains valid distance
uint3 READING_TYPE_TOO_CLOSE = 2 # Range field contains min range for the sensor
uint3 READING_TYPE_TOO_FAR = 3 # Range field contains max range for the sensor
uint3 reading_type
uint16 d0 # Meters distance_cm
uint16 d45
uint16 d90
uint16 d135
uint16 d180
uint16 d225
uint16 d270
uint16 d315
******************************************************************************/
/********************* DSDL signature source definition ***********************
zrzk.equipment.range_sensor.Proximity
saturated uint8 sensor_id
saturated uint5 sensor_type
saturated uint3 reading_type
saturated uint16 d0
saturated uint16 d45
saturated uint16 d90
saturated uint16 d135
saturated uint16 d180
saturated uint16 d225
saturated uint16 d270
saturated uint16 d315
******************************************************************************/
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID 26110
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_NAME "zrzk.equipment.range_sensor.Proximity"
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_SIGNATURE (0x92066602E96C261ULL)
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_MAX_SIZE ((144 + 7)/8)
// Constants
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_SENSOR_TYPE_UNDEFINED 0 // 0
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_SENSOR_TYPE_SONAR 1 // 1
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_SENSOR_TYPE_LIDAR 2 // 2
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_SENSOR_TYPE_RADAR 3 // 3
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_READING_TYPE_UNDEFINED 0 // 0
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_READING_TYPE_VALID_RANGE 1 // 1
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_READING_TYPE_TOO_CLOSE 2 // 2
#define ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_READING_TYPE_TOO_FAR 3 // 3
typedef struct
{
uint16_t d0; // bit len 16
uint16_t d45; // bit len 16
uint16_t d90; // bit len 16
uint16_t d135; // bit len 16
uint16_t d180; // bit len 16
uint16_t d225; // bit len 16
uint16_t d270; // bit len 16
uint16_t d315; // bit len 16
uint8_t sensor_id; // bit len 8
uint8_t sensor_type; // bit len 5
uint8_t reading_type; // bit len 3
} uavcan_proximity_t;
extern
uint32_t zrzk_equipment_range_sensor_Proximity_encode(uavcan_proximity_t* source, void* msg_buf);
extern
int32_t zrzk_equipment_range_sensor_Proximity_decode(const CanardRxTransfer* transfer, uint16_t payload_len, uavcan_proximity_t* dest, uint8_t** dyn_arr_buf);
extern
uint32_t zrzk_equipment_range_sensor_Proximity_encode_internal(uavcan_proximity_t* source, void* msg_buf, uint32_t offset, uint8_t root_item);
extern
int32_t zrzk_equipment_range_sensor_Proximity_decode_internal(const CanardRxTransfer* transfer, uint16_t payload_len, uavcan_proximity_t* dest, uint8_t** dyn_arr_buf, int32_t offset);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // __ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY

30
UAVCAN/uavcan.c

@ -187,7 +187,7 @@ static void handle_canard_get_node_info(CanardRxTransfer *transfer) @@ -187,7 +187,7 @@ static void handle_canard_get_node_info(CanardRxTransfer *transfer)
void uavcan_init(void)
{
set_unique_id("zrzk.proximity.1");
set_unique_id("com.zr3d.proxi");
CanardSTM32CANTimings timings;
int result = canardSTM32ComputeCANTimings(HAL_RCC_GetPCLK1Freq(), 1000000, &timings);
if (result)
@ -220,7 +220,7 @@ void uavcan_init(void) @@ -220,7 +220,7 @@ void uavcan_init(void)
void uavcan_init_with_cubemx(void)
{
set_unique_id("zrzk.proximity.1");
set_unique_id("com.zr3d.proxi");
initCanOnlyFilter();
@ -242,7 +242,7 @@ void uavcan_init_with_cubemx(void) @@ -242,7 +242,7 @@ void uavcan_init_with_cubemx(void)
void init_allocation(void)
{
set_unique_id("zrzk.flow.depth");
set_unique_id("com.zr3d.proxi");
initCanOnlyFilter();
@ -570,8 +570,6 @@ void publish_log_message( uavcan_log_level_t log_level, const char *source, cons @@ -570,8 +570,6 @@ void publish_log_message( uavcan_log_level_t log_level, const char *source, cons
);
}
void send_uavcan_data(uavcan_send_data_t *send_data)
{
switch (send_data->id)
@ -591,6 +589,9 @@ void send_uavcan_data(uavcan_send_data_t *send_data) @@ -591,6 +589,9 @@ void send_uavcan_data(uavcan_send_data_t *send_data)
case UAVCAN_NODE_STATUS_DATA_TYPE_ID:
publish_node_status();
break;
case ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID:
publish_proximity(&send_data->content.proximity);
break;
default:
break;
}
@ -621,7 +622,7 @@ void publish_device_temperature(uavcan_equipment_device_Temperature *data) @@ -621,7 +622,7 @@ void publish_device_temperature(uavcan_equipment_device_Temperature *data)
{
uint8_t buffer[UAVCAN_EQUIPMENT_DEVICE_TEMPERATURE_MAX_SIZE] = {0};
uint32_t len = uavcan_equipment_device_Temperature_encode(data, &buffer);
if (len == UAVCAN_EQUIPMENT_DEVICE_TEMPERATURE_MAX_SIZE)
if (len > 0)
{
canardBroadcast(
&g_canard,
@ -633,3 +634,20 @@ void publish_device_temperature(uavcan_equipment_device_Temperature *data) @@ -633,3 +634,20 @@ void publish_device_temperature(uavcan_equipment_device_Temperature *data)
len);
}
}
void publish_proximity(uavcan_proximity_t *msg)
{
uint8_t buffer[ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_MAX_SIZE] = {0};
uint32_t len = zrzk_equipment_range_sensor_Proximity_encode(msg, &buffer);
if (len > 0)
{
canardBroadcast(
&g_canard,
ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_SIGNATURE,
ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID,
&transfer_id,
CANARD_TRANSFER_PRIORITY_HIGH,
buffer,
len);
}
}

33
UAVCAN/uavcan.h

@ -16,13 +16,14 @@ extern "C" @@ -16,13 +16,14 @@ extern "C"
#include "node_measurement.h"
#include "node_timestamp.h"
#include "node_coarse_orientation.h"
#include "node_proximity.h"
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
#define APP_VERSION_MAJOR 1
#define APP_VERSION_MINOR 0
#define HARDWARE_VERSION_MAJOR 1
#define APP_NODE_NAME "zrzk.water.depth"
#define APP_NODE_NAME "zrzk.proxi.1"
#define GIT_HASH 0xBADC0FFE
#define UAVCAN_GET_NODE_INFO_DATA_TYPE_SIGNATURE 0xee468a8121c46a9e
@ -102,16 +103,6 @@ extern "C" @@ -102,16 +103,6 @@ extern "C"
#define FIlTER_USED_AMOUNT 2
#define SENSOR_TYPE_UNDEFINED 0
#define SENSOR_TYPE_SONAR 1
#define SENSOR_TYPE_LIDAR 2
#define SENSOR_TYPE_RADAR 3
#define READING_TYPE_UNDEFINED 0 //# Range is unknown
#define READING_TYPE_VALID_RANGE 1 //# Range field contains valid distance
#define READING_TYPE_TOO_CLOSE 2 // # Range field contains min range for the sensor
#define READING_TYPE_TOO_FAR 3 // # Range field contains max range for the sensor
//#define UAVCAN_PROTOCOL_DEBUG_LOGLEVEL_DEBUG 0 // 0
//#define UAVCAN_PROTOCOL_DEBUG_LOGLEVEL_INFO 1 // 1
//#define UAVCAN_PROTOCOL_DEBUG_LOGLEVEL_WARNING 2 // 2
@ -173,13 +164,30 @@ extern "C" @@ -173,13 +164,30 @@ extern "C"
uavcan_measurement_t measurement_msg;
uavcan_equipment_device_Temperature device_temp_msg;
uavcan_node_status_t node_state;
uavcan_proximity_t proximity;
} content;
} uavcan_send_data_t;
typedef enum
{
SENSOR_TYPE_UNDEFINED = 0,
SENSOR_TYPE_SONAR,
SENSOR_TYPE_LIDAR,
SENSOR_TYPE_RADAR
} sensor_type_e;
typedef enum
{
READING_TYPE_UNDEFINED = 0,
READING_TYPE_VALID_RANGE = 1,
READING_TYPE_TOO_CLOSE = 2,
READING_TYPE_TOO_FAR = 3
} reading_type_e;
//------------------------------Filter-Start-----------------------------------------
//----------------------------Filter-END----------------------------------
void action_transfer_received_request(CanardInstance *ins, CanardRxTransfer *transfer);
void
action_transfer_received_request(CanardInstance *ins, CanardRxTransfer *transfer);
void action_transfer_received_broadcast(CanardInstance *ins, CanardRxTransfer *transfer);
void action_transfer_received_response(CanardInstance *ins, CanardRxTransfer *transfer);
@ -229,6 +237,7 @@ extern "C" @@ -229,6 +237,7 @@ extern "C"
void publish_water_dapth(zrzk_equipment_flow_WaterDepth *data);
void publish_measurement_canard(uavcan_measurement_t *msg);
void publish_device_temperature(uavcan_equipment_device_Temperature *data);
void publish_proximity(uavcan_proximity_t *msg);
#ifdef __cplusplus
}
#endif

10
WaterLidar.ioc

@ -42,10 +42,10 @@ FREERTOS.FootprintOK=true @@ -42,10 +42,10 @@ FREERTOS.FootprintOK=true
FREERTOS.IPParameters=Tasks01,Queues01,configTOTAL_HEAP_SIZE,configQUEUE_REGISTRY_SIZE,configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,FootprintOK,Mutexes01
FREERTOS.Mutexes01=uavcan_send_mutex,Dynamic,NULL
FREERTOS.Queues01=uavcan_rev_queue,10,uavcan_rev_t,0,Dynamic,NULL,NULL;uavcan_send_queue,10,uavcan_send_data_t,0,Dynamic,NULL,NULL;usart_rev_queue,10,usart_data_t,0,Dynamic,NULL,NULL
FREERTOS.Tasks01=DefaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;UavcanRevTask,35,256,StartUavcanRevTask,Default,NULL,Dynamic,NULL,NULL;UsartSendTask,18,256,StartTaskUsartSend,Default,NULL,Dynamic,NULL,NULL;UavcanSendTask,36,256,StartUavcanSendTask,Default,NULL,Dynamic,NULL,NULL;UsartRevTask,39,128,StartUsartRevTask,Default,NULL,Dynamic,NULL,NULL
FREERTOS.Tasks01=DefaultTask,24,256,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;UavcanRevTask,35,256,StartUavcanRevTask,Default,NULL,Dynamic,NULL,NULL;UsartSendTask,18,128,StartTaskUsartSend,Default,NULL,Dynamic,NULL,NULL;UavcanSendTask,36,512,StartUavcanSendTask,Default,NULL,Dynamic,NULL,NULL;UsartRevTask,39,128,StartUsartRevTask,Default,NULL,Dynamic,NULL,NULL
FREERTOS.configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY=5
FREERTOS.configQUEUE_REGISTRY_SIZE=40
FREERTOS.configTOTAL_HEAP_SIZE=8192
FREERTOS.configTOTAL_HEAP_SIZE=11264
File.Version=6
GPIO.groupedBy=Group By Peripherals
KeepUserPlacement=false
@ -77,8 +77,8 @@ Mcu.PinsNb=12 @@ -77,8 +77,8 @@ Mcu.PinsNb=12
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F103T8Ux
MxCube.Version=6.2.1
MxDb.Version=DB.6.0.21
MxCube.Version=6.3.0
MxDb.Version=DB.6.0.30
NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.CAN1_RX1_IRQn=true\:7\:0\:true\:false\:true\:true\:true\:true
NVIC.DMA1_Channel4_IRQn=true\:9\:0\:true\:false\:true\:true\:false\:true
@ -147,7 +147,7 @@ ProjectManager.ProjectFileName=WaterLidar.ioc @@ -147,7 +147,7 @@ ProjectManager.ProjectFileName=WaterLidar.ioc
ProjectManager.ProjectName=WaterLidar
ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=MDK-ARM V5.27
ProjectManager.TargetToolchain=MDK-ARM V5.32
ProjectManager.ToolChainLocation=
ProjectManager.UnderRoot=false
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-false,4-MX_CAN_Init-CAN-false-HAL-true,5-MX_USART1_UART_Init-USART1-false-HAL-true,6-MX_USART2_UART_Init-USART2-false-HAL-true

Loading…
Cancel
Save