Compare commits

2 Commits

Author SHA1 Message Date
flower
80873ce026 测试版本 2026-02-02 18:58:23 +08:00
flower
d2b7b833b6 拍照version 2026-02-02 17:06:20 +08:00
113 changed files with 19335 additions and 940 deletions

View File

@@ -98,7 +98,7 @@ SkyLink 是一个多平台实时视频传输系统的通信协议,设计用于
3. 检查魔数是否为 0xAA55
✗ 否 → 丢弃该包
是 → 继续
是 → 继续
4. 根据 frame_id 找到对应的帧缓冲区
如果不存在 → 创建新的缓冲区

View File

@@ -165,6 +165,7 @@ data class DecodedFrame(
val lat: Double,
val lon: Double,
val alt: Double,
val photoNumber: Int = 0, // 照片编号从reserve字段提取
val receivedTime: Long = System.currentTimeMillis()
) {
override fun equals(other: Any?): Boolean {
@@ -207,6 +208,7 @@ data class FrameBuffer(
val lat: Double = 0.0,
val lon: Double = 0.0,
val alt: Double = 0.0,
val photoNumber: Int = 0, // 照片编号从reserve字段提取
val receiveTimestamp: Long = System.currentTimeMillis()
) {
/**

View File

@@ -89,7 +89,7 @@ class UdpReceiver(
Log.i(TAG, "UDP 接收缓冲区大小已设置为: ${socket!!.receiveBufferSize}")
}
Log.i(TAG, " UDP 接收器启动,监听端口 $listenPort")
Log.i(TAG, " UDP 接收器启动,监听端口 $listenPort")
startReceiving()
} catch (e: Exception) {
@@ -185,7 +185,8 @@ class UdpReceiver(
timestamp = header.timestamp,
lat = header.lat,
lon = header.lon,
alt = header.alt
alt = header.alt,
photoNumber = header.reserve // 从reserve字段提取照片编号
)
}
@@ -228,7 +229,8 @@ class UdpReceiver(
timestamp = frame.timestamp,
lat = frame.lat,
lon = frame.lon,
alt = frame.alt
alt = frame.alt,
photoNumber = frame.photoNumber // 传递照片编号
)
totalFrames++

View File

@@ -11,6 +11,9 @@
package com.skylink.app.ui
import android.graphics.Bitmap
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -19,6 +22,9 @@ import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import android.widget.EditText
import android.widget.ArrayAdapter
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import com.skylink.app.R
@@ -31,6 +37,10 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.text.SimpleDateFormat
import java.util.*
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
class HomeFragment : Fragment(), UdpReceiverListener {
@@ -48,6 +58,16 @@ class HomeFragment : Fragment(), UdpReceiverListener {
private var statusTextView: TextView? = null
private var saveButton: Button? = null
private var recordButton: Button? = null
private var triggerCaptureButton: Button? = null
private var triggerCaptureOriginalButton: Button? = null
private var triggerCaptureThumbnailButton: Button? = null
// HTTP客户端用于调用ROS2服务
private val httpClient = OkHttpClient()
// ROS2节点配置
private var ros2NodeIp = "192.168.1.100" // 默认IP需要配置
private var ros2HttpPort = 8080
// ========================================================================
// 业务逻辑
@@ -56,6 +76,7 @@ class HomeFragment : Fragment(), UdpReceiverListener {
private var udpReceiver: UdpReceiver? = null
private var currentFrame: DecodedFrame? = null
private var isRecording = false
private var totalPhotosReceived = 0 // 接收到的总照片数
// ========================================================================
// 生命周期方法
@@ -92,6 +113,9 @@ class HomeFragment : Fragment(), UdpReceiverListener {
statusTextView = view.findViewById(R.id.status_text)
saveButton = view.findViewById(R.id.save_button)
recordButton = view.findViewById(R.id.record_button)
triggerCaptureButton = view.findViewById(R.id.trigger_capture_button)
triggerCaptureOriginalButton = view.findViewById(R.id.trigger_capture_original_button)
triggerCaptureThumbnailButton = view.findViewById(R.id.trigger_capture_thumbnail_button)
// 设置按钮点击监听
saveButton?.setOnClickListener {
@@ -101,6 +125,18 @@ class HomeFragment : Fragment(), UdpReceiverListener {
recordButton?.setOnClickListener {
onRecordToggled()
}
triggerCaptureButton?.setOnClickListener {
showTriggerCaptureDialog()
}
triggerCaptureOriginalButton?.setOnClickListener {
triggerCapture(0) // 原图模式
}
triggerCaptureThumbnailButton?.setOnClickListener {
triggerCapture(1) // 缩略图模式
}
}
// ========================================================================
@@ -126,6 +162,11 @@ class HomeFragment : Fragment(), UdpReceiverListener {
override fun onFrameDecoded(frame: DecodedFrame) {
currentFrame = frame
// 更新照片计数
if (frame.photoNumber > 0) {
totalPhotosReceived++
}
// 移到后台线程执行解码,避免阻塞 UI 线程,进而影响 UDP 接收协程(如果是单核或高负载)
lifecycleScope.launch(Dispatchers.Default) {
@@ -133,7 +174,13 @@ class HomeFragment : Fragment(), UdpReceiverListener {
if (bitmap != null) {
withContext(Dispatchers.Main) {
view?.let {
videoImageView?.setImageBitmap(bitmap)
// 在图像上叠加显示照片编号
val bitmapWithText = if (frame.photoNumber > 0) {
addPhotoNumberToBitmap(bitmap, frame.photoNumber)
} else {
bitmap
}
videoImageView?.setImageBitmap(bitmapWithText)
updateGpsInfo(frame)
}
}
@@ -142,10 +189,12 @@ class HomeFragment : Fragment(), UdpReceiverListener {
}
override fun onStatsUpdated(fps: Int, kbps: Int, packetLoss: Double) {
statsTextView?.text = String.format(
"FPS: %d\nSpeed: %d KB/s\nPacket Loss: %.1f%%",
fps, kbps, packetLoss
)
val statsText = StringBuilder()
statsText.append(String.format("FPS: %d\nSpeed: %d KB/s\nPacket Loss: %.1f%%", fps, kbps, packetLoss))
if (totalPhotosReceived > 0) {
statsText.append(String.format("\nTotal Photos: %d", totalPhotosReceived))
}
statsTextView?.text = statsText.toString()
}
override fun onError(message: String, exception: Exception?) {
@@ -201,4 +250,217 @@ class HomeFragment : Fragment(), UdpReceiverListener {
val formatter = SimpleDateFormat("HH:mm:ss", Locale.getDefault())
return formatter.format(Date(millis))
}
/**
* 在图像上叠加显示照片编号
*/
private fun addPhotoNumberToBitmap(bitmap: Bitmap, photoNumber: Int): Bitmap {
val mutableBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true)
val canvas = Canvas(mutableBitmap)
val text = "Photo #$photoNumber"
val paint = Paint().apply {
color = Color.WHITE
textSize = 48f
isAntiAlias = true
style = Paint.Style.FILL
}
val textPaint = Paint(paint)
val textBounds = android.graphics.Rect()
textPaint.getTextBounds(text, 0, text.length, textBounds)
// 绘制半透明背景
val bgPaint = Paint().apply {
color = Color.argb(180, 0, 0, 0)
style = Paint.Style.FILL
}
val padding = 10
canvas.drawRect(
10f, 10f,
(textBounds.width() + padding * 2).toFloat(),
(textBounds.height() + padding * 2).toFloat(),
bgPaint
)
// 绘制文字
canvas.drawText(text, (10 + padding).toFloat(), (10 + padding + textBounds.height()).toFloat(), textPaint)
return mutableBitmap
}
/**
* 显示触发拍照参数输入对话框
*/
private fun showTriggerCaptureDialog() {
val view = layoutInflater.inflate(R.layout.dialog_trigger_capture, null)
val durationEdit = view.findViewById<EditText>(R.id.duration_edit)
val countEdit = view.findViewById<EditText>(R.id.count_edit)
val intervalEdit = view.findViewById<EditText>(R.id.interval_edit)
val modeSpinner = view.findViewById<android.widget.Spinner>(R.id.mode_spinner)
// 设置Spinner适配器
val modes = arrayOf("原图", "缩略图")
val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item, modes)
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
modeSpinner.adapter = adapter
// 设置默认值
durationEdit.setText("5.0")
countEdit.setText("10")
intervalEdit.setText("0.5")
AlertDialog.Builder(requireContext())
.setTitle("触发拍照")
.setView(view)
.setPositiveButton("确定") { _, _ ->
val duration = durationEdit.text.toString().toDoubleOrNull() ?: 5.0
val count = countEdit.text.toString().toIntOrNull() ?: 10
val interval = intervalEdit.text.toString().toDoubleOrNull() ?: 0.5
val mode = modeSpinner.selectedItemPosition // 0=原图, 1=缩略图
triggerCaptureWithParams(duration, count, interval, mode)
}
.setNegativeButton("取消", null)
.setNeutralButton("设置") { _, _ ->
// 显示IP和端口配置对话框
showConfigDialog()
}
.show()
}
/**
* 显示配置对话框IP和端口
*/
private fun showConfigDialog() {
val view = layoutInflater.inflate(android.R.layout.simple_list_item_2, null)
val ipEdit = EditText(requireContext())
ipEdit.hint = "ROS2节点IP地址"
ipEdit.setText(ros2NodeIp)
val portEdit = EditText(requireContext())
portEdit.hint = "HTTP端口"
portEdit.inputType = android.text.InputType.TYPE_CLASS_NUMBER
portEdit.setText(ros2HttpPort.toString())
val layout = android.widget.LinearLayout(requireContext()).apply {
orientation = android.widget.LinearLayout.VERTICAL
setPadding(50, 40, 50, 10)
addView(ipEdit)
addView(portEdit)
}
AlertDialog.Builder(requireContext())
.setTitle("ROS2节点配置")
.setView(layout)
.setPositiveButton("确定") { _, _ ->
ros2NodeIp = ipEdit.text.toString().ifEmpty { "192.168.1.100" }
ros2HttpPort = portEdit.text.toString().toIntOrNull() ?: 8080
Toast.makeText(context, "配置已保存: $ros2NodeIp:$ros2HttpPort", Toast.LENGTH_SHORT).show()
}
.setNegativeButton("取消", null)
.show()
}
/**
* 快速触发拍照(使用默认参数)
*/
private fun triggerCapture(mode: Int) {
triggerCaptureWithParams(5.0, 10, 0.5, mode)
}
/**
* 使用参数触发拍照
*/
private fun triggerCaptureWithParams(duration: Double, count: Int, interval: Double, mode: Int) {
val modeStr = if (mode == 0) "原图" else "缩略图"
lifecycleScope.launch(Dispatchers.IO) {
try {
// 构建JSON请求
val json = JSONObject().apply {
put("duration", duration)
put("count", count)
put("interval", interval)
put("transmission_mode", mode)
}
val requestBody = json.toString().toRequestBody("application/json".toMediaType())
val url = "http://$ros2NodeIp:$ros2HttpPort/api/v1/trigger_capture"
val request = Request.Builder()
.url(url)
.post(requestBody)
.addHeader("User-Agent", "SkyLink-Android/1.0")
.build()
val response = httpClient.newCall(request).execute()
withContext(Dispatchers.Main) {
if (response.isSuccessful) {
val responseBody = response.body?.string()
if (responseBody != null) {
try {
val responseJson = JSONObject(responseBody)
val success = responseJson.optBoolean("success", false)
val message = responseJson.optString("message", "")
val totalPhotos = responseJson.optInt("total_photos", 0)
if (success) {
Toast.makeText(context,
"拍照任务已启动!\n$message\n总照片数: $totalPhotos",
Toast.LENGTH_LONG).show()
updateStatus("拍照任务已启动 ($modeStr)")
} else {
Toast.makeText(context,
"请求失败: $message",
Toast.LENGTH_LONG).show()
updateStatus("请求失败: $message")
}
} catch (e: Exception) {
Toast.makeText(context,
"响应解析失败: ${e.message}",
Toast.LENGTH_SHORT).show()
updateStatus("响应解析失败")
}
} else {
Toast.makeText(context, "服务器返回空响应", Toast.LENGTH_SHORT).show()
updateStatus("服务器返回空响应")
}
} else {
val errorMsg = when (response.code) {
400 -> "请求参数错误"
404 -> "API端点不存在"
500 -> "服务器内部错误"
else -> "HTTP错误: ${response.code}"
}
Toast.makeText(context, errorMsg, Toast.LENGTH_LONG).show()
updateStatus(errorMsg)
}
}
} catch (e: java.net.SocketTimeoutException) {
withContext(Dispatchers.Main) {
Toast.makeText(context,
"请求超时请检查网络连接和ROS2节点IP地址 ($ros2NodeIp:$ros2HttpPort)",
Toast.LENGTH_LONG).show()
updateStatus("请求超时")
}
} catch (e: java.net.ConnectException) {
withContext(Dispatchers.Main) {
Toast.makeText(context,
"无法连接到ROS2节点 ($ros2NodeIp:$ros2HttpPort)\n请确认HTTP服务器正在运行",
Toast.LENGTH_LONG).show()
updateStatus("连接失败")
}
} catch (e: Exception) {
withContext(Dispatchers.Main) {
Toast.makeText(context,
"调用失败: ${e.message}",
Toast.LENGTH_LONG).show()
updateStatus("调用失败: ${e.message}")
}
}
}
}
}

View File

@@ -44,7 +44,7 @@ object BitmapUtils {
// 实际解码
val bitmap = BitmapFactory.decodeByteArray(jpegData, 0, jpegData.size, options)
// Log.i(TAG, " Bitmap 解码成功: ${bitmap?.width}x${bitmap?.height}") // 移除高频日志
// Log.i(TAG, " Bitmap 解码成功: ${bitmap?.width}x${bitmap?.height}") // 移除高频日志
bitmap
} catch (e: Exception) {
Log.e(TAG, "Bitmap 解码失败", e)

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="总时间 (秒, 0=默认):"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/duration_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:hint="5.0"
android:layout_marginBottom="16dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="拍照数量 (0=默认):"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/count_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:hint="10"
android:layout_marginBottom="16dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="时间间隔 (秒, 0=自动):"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/interval_edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="numberDecimal"
android:hint="0.5"
android:layout_marginBottom="16dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="传输模式:"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<Spinner
android:id="@+id/mode_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/transmission_modes" />
</LinearLayout>

View File

@@ -68,8 +68,44 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="4dp"
android:layout_marginEnd="4dp"
android:text="⏺ 开始录制" />
<Button
android:id="@+id/trigger_capture_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="4dp"
android:text="📷 触发拍照" />
</LinearLayout>
<!-- 第二行按钮 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_horizontal"
android:layout_marginTop="8dp"
android:baselineAligned="false">
<Button
android:id="@+id/trigger_capture_original_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginEnd="4dp"
android:text="📷 原图拍照" />
<Button
android:id="@+id/trigger_capture_thumbnail_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="4dp"
android:text="📷 缩略图拍照" />
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="transmission_modes">
<item>原图</item>
<item>缩略图</item>
</string-array>
</resources>

View File

@@ -1,27 +1,48 @@
# ninja log v6
1 237 1768965744018577716 skylink_station_autogen/timestamp 67b8a88a4f836678
1 237 1768965744018577716 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
1 237 1768965744018577716 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
1 237 1768965744018577716 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
237 246 1768965744032578704 skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp e63e0a667a42556f
237 246 1768965744032578704 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp e63e0a667a42556f
247 259 1768965744034578845 CMakeFiles/skylink_station.dir/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp.o b144aef3415b71b2
247 1139 1768965744034578845 CMakeFiles/skylink_station.dir/src/main.cpp.o 7a56a74093adf479
247 2179 1768965744034578845 CMakeFiles/skylink_station.dir/src/GroundReceiver.cpp.o 6c56ad0b07b7bab9
247 1231 1768965744034578845 CMakeFiles/skylink_station.dir/src/DataLogger.cpp.o 3aaa238c7e188637
2 233 1768965948743624643 skylink_station_autogen/timestamp 67b8a88a4f836678
2 233 1768965948743624643 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
2 233 1768965948743624643 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
2 233 1768965948743624643 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
235 246 1768965948751625104 CMakeFiles/skylink_station.dir/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp.o af974169bd9ed7a4
234 1112 1768965948750625047 CMakeFiles/skylink_station.dir/src/DataLogger.cpp.o b87ed818438f6507
2 234 1768966062311868601 skylink_station_autogen/timestamp 67b8a88a4f836678
2 234 1768966062311868601 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
2 234 1768966062311868601 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
2 234 1768966062311868601 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
235 1024 1768966062321869125 CMakeFiles/skylink_station.dir/src/DeviceInfoReceiver.cpp.o a36de3bc6879b4b2
234 1120 1768966062320869073 CMakeFiles/skylink_station.dir/src/main.cpp.o a2b53bd089c5d0a9
234 2045 1768966062320869073 CMakeFiles/skylink_station.dir/skylink_station_autogen/mocs_compilation.cpp.o ef5337e928a073c4
234 2159 1768966062320869073 CMakeFiles/skylink_station.dir/src/GroundReceiver.cpp.o 161e05dd02078224
234 2219 1768966062320869073 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
234 1120 1768966062320869073 CMakeFiles/skylink_station.dir/src/main.cpp.o a2b53bd089c5d0a9
2219 2440 1768966064305973131 skylink_station 1a20341c5a20a204
234 2045 1768966062320869073 CMakeFiles/skylink_station.dir/skylink_station_autogen/mocs_compilation.cpp.o ef5337e928a073c4
2 234 1768966062311868601 skylink_station_autogen/timestamp 67b8a88a4f836678
2 234 1768966062311868601 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
2 234 1768966062311868601 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
237 246 1768965744032578704 skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp e63e0a667a42556f
235 1024 1768966062321869125 CMakeFiles/skylink_station.dir/src/DeviceInfoReceiver.cpp.o a36de3bc6879b4b2
234 2219 1768966062320869073 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
237 246 1768965744032578704 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp e63e0a667a42556f
2 234 1768966062311868601 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
235 246 1768965948751625104 CMakeFiles/skylink_station.dir/skylink_station_autogen/EWIEGA46WW/qrc_resources.cpp.o af974169bd9ed7a4
2 233 1770021668864715294 skylink_station_autogen/timestamp 67b8a88a4f836678
2 233 1770021668864715294 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
2 233 1770021668864715294 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
2 233 1770021668864715294 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
234 1013 1770021668872715450 CMakeFiles/skylink_station.dir/src/DeviceInfoReceiver.cpp.o a36de3bc6879b4b2
233 1127 1770021668871715431 CMakeFiles/skylink_station.dir/src/main.cpp.o a2b53bd089c5d0a9
233 2068 1770021668871715431 CMakeFiles/skylink_station.dir/skylink_station_autogen/mocs_compilation.cpp.o ef5337e928a073c4
233 2156 1770021668871715431 CMakeFiles/skylink_station.dir/src/GroundReceiver.cpp.o 161e05dd02078224
233 2264 1770021668871715431 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
2264 2520 1770021670902755003 skylink_station 1a20341c5a20a204
2 139 1770022201333131084 skylink_station_autogen/timestamp 67b8a88a4f836678
2 139 1770022201333131084 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
2 139 1770022201333131084 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
2 139 1770022201333131084 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
139 1010 1770022201341131292 CMakeFiles/skylink_station.dir/src/main.cpp.o a2b53bd089c5d0a9
139 1948 1770022201341131292 CMakeFiles/skylink_station.dir/skylink_station_autogen/mocs_compilation.cpp.o ef5337e928a073c4
140 2054 1770022201341131292 CMakeFiles/skylink_station.dir/src/GroundReceiver.cpp.o 161e05dd02078224
140 2461 1770022201341131292 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
2461 2682 1770022203662191772 skylink_station 1a20341c5a20a204
1 22 1770022435693402494 skylink_station_autogen/timestamp 67b8a88a4f836678
1 22 1770022435693402494 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
1 22 1770022435693402494 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
1 22 1770022435693402494 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
22 2151 1770022435714403069 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
2151 2376 1770022437843461352 skylink_station 1a20341c5a20a204
2 146 1770023385016108685 skylink_station_autogen/timestamp 67b8a88a4f836678
2 146 1770023385016108685 skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
2 146 1770023385016108685 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/timestamp 67b8a88a4f836678
2 146 1770023385016108685 /home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/mocs_compilation.cpp 67b8a88a4f836678
147 1057 1770023385024108961 CMakeFiles/skylink_station.dir/src/main.cpp.o a2b53bd089c5d0a9
146 1931 1770023385023108927 CMakeFiles/skylink_station.dir/skylink_station_autogen/mocs_compilation.cpp.o ef5337e928a073c4
147 2514 1770023385024108961 CMakeFiles/skylink_station.dir/src/MainWindow.cpp.o fd43d8ab38120043
2514 2738 1770023387391190731 skylink_station 1a20341c5a20a204

View File

@@ -1,11 +1,18 @@
skylink_station_autogen/timestamp: \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDateTime \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDebug \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QFlags \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QIODevice \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QList \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QMap \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QMetaType \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QObject \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QSharedDataPointer \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QString \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QThread \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QTimer \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QUrl \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QVariant \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20memory.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20type_traits.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qalgorithms.h \
@@ -34,6 +41,7 @@ skylink_station_autogen/timestamp: \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontainerinfo.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontainertools_impl.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontiguouscache.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcryptographichash.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdarwinhelpers.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdatastream.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdatetime.h \
@@ -152,10 +160,24 @@ skylink_station_autogen/timestamp: \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtransform.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qwindowdefs.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QHostAddress \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkAccessManager \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkReply \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkRequest \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QSslConfiguration \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QTcpSocket \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QUdpSocket \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qabstractsocket.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qhostaddress.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkaccessmanager.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkreply.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkrequest.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qssl.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslcertificate.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslconfiguration.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslerror.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslsocket.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtcpsocket.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetwork-config.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkexports.h \

View File

@@ -944,9 +944,16 @@
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/src/MainWindow.h
mdp:/home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/moc_predefs.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDateTime
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QFlags
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QIODevice
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QList
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QMetaType
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QObject
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QSharedDataPointer
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QString
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QTimer
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QUrl
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QVariant
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20memory.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20type_traits.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qalgorithms.h
@@ -975,6 +982,7 @@
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontainerinfo.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontainertools_impl.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontiguouscache.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcryptographichash.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdarwinhelpers.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdatastream.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdatetime.h
@@ -1090,10 +1098,24 @@
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtransform.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qwindowdefs.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QHostAddress
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkAccessManager
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkReply
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkRequest
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QSslConfiguration
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QSslPreSharedKeyAuthenticator
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QTcpSocket
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QUdpSocket
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qabstractsocket.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qhostaddress.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkaccessmanager.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkreply.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkrequest.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qssl.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslcertificate.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslconfiguration.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslerror.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslpresharedkeyauthenticator.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslsocket.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtcpsocket.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetwork-config.h
mdp:/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkexports.h

View File

@@ -1,3 +1,3 @@
Start testing: Jan 21 11:24 CST
Start testing: Feb 02 16:41 CST
----------------------------------------------------------
End testing: Jan 21 11:24 CST
End testing: Feb 02 16:41 CST

View File

@@ -45,6 +45,8 @@ static constexpr auto qt_meta_stringdata_CLASSGroundReceiverENDCLASS = QtMocHelp
"lat",
"lon",
"alt",
"uint32_t",
"photo_number",
"statsUpdated",
"fps",
"kbs",
@@ -56,7 +58,7 @@ static constexpr auto qt_meta_stringdata_CLASSGroundReceiverENDCLASS = QtMocHelp
);
#else // !QT_MOC_HAS_STRING_DATA
struct qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t {
uint offsetsAndSizes[30];
uint offsetsAndSizes[34];
char stringdata0[15];
char stringdata1[13];
char stringdata2[1];
@@ -64,14 +66,16 @@ struct qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t {
char stringdata4[4];
char stringdata5[4];
char stringdata6[4];
char stringdata7[13];
char stringdata8[4];
char stringdata9[4];
char stringdata10[6];
char stringdata11[10];
char stringdata12[18];
char stringdata13[13];
char stringdata14[19];
char stringdata7[9];
char stringdata8[13];
char stringdata9[13];
char stringdata10[4];
char stringdata11[4];
char stringdata12[6];
char stringdata13[10];
char stringdata14[18];
char stringdata15[13];
char stringdata16[19];
};
#define QT_MOC_LITERAL(ofs, len) \
uint(sizeof(qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t::offsetsAndSizes) + ofs), len
@@ -84,14 +88,16 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t qt_met
QT_MOC_LITERAL(33, 3), // "lat"
QT_MOC_LITERAL(37, 3), // "lon"
QT_MOC_LITERAL(41, 3), // "alt"
QT_MOC_LITERAL(45, 12), // "statsUpdated"
QT_MOC_LITERAL(58, 3), // "fps"
QT_MOC_LITERAL(62, 3), // "kbs"
QT_MOC_LITERAL(66, 5), // "error"
QT_MOC_LITERAL(72, 9), // "error_msg"
QT_MOC_LITERAL(82, 17), // "on_udp_read_ready"
QT_MOC_LITERAL(100, 12), // "on_udp_error"
QT_MOC_LITERAL(113, 18) // "on_cleanup_timeout"
QT_MOC_LITERAL(45, 8), // "uint32_t"
QT_MOC_LITERAL(54, 12), // "photo_number"
QT_MOC_LITERAL(67, 12), // "statsUpdated"
QT_MOC_LITERAL(80, 3), // "fps"
QT_MOC_LITERAL(84, 3), // "kbs"
QT_MOC_LITERAL(88, 5), // "error"
QT_MOC_LITERAL(94, 9), // "error_msg"
QT_MOC_LITERAL(104, 17), // "on_udp_read_ready"
QT_MOC_LITERAL(122, 12), // "on_udp_error"
QT_MOC_LITERAL(135, 18) // "on_cleanup_timeout"
},
"GroundReceiver",
"frameDecoded",
@@ -100,6 +106,8 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSGroundReceiverENDCLASS_t qt_met
"lat",
"lon",
"alt",
"uint32_t",
"photo_number",
"statsUpdated",
"fps",
"kbs",
@@ -127,19 +135,19 @@ Q_CONSTINIT static const uint qt_meta_data_CLASSGroundReceiverENDCLASS[] = {
3, // signalCount
// signals: name, argc, parameters, tag, flags, initial metatype offsets
1, 4, 50, 2, 0x06, 1 /* Public */,
7, 2, 59, 2, 0x06, 6 /* Public */,
10, 1, 64, 2, 0x06, 9 /* Public */,
1, 5, 50, 2, 0x06, 1 /* Public */,
9, 2, 61, 2, 0x06, 7 /* Public */,
12, 1, 66, 2, 0x06, 10 /* Public */,
// slots: name, argc, parameters, tag, flags, initial metatype offsets
12, 0, 67, 2, 0x08, 11 /* Private */,
13, 0, 68, 2, 0x08, 12 /* Private */,
14, 0, 69, 2, 0x08, 13 /* Private */,
14, 0, 69, 2, 0x08, 12 /* Private */,
15, 0, 70, 2, 0x08, 13 /* Private */,
16, 0, 71, 2, 0x08, 14 /* Private */,
// signals: parameters
QMetaType::Void, QMetaType::QImage, QMetaType::Double, QMetaType::Double, QMetaType::Double, 3, 4, 5, 6,
QMetaType::Void, QMetaType::Int, QMetaType::Int, 8, 9,
QMetaType::Void, QMetaType::QString, 11,
QMetaType::Void, QMetaType::QImage, QMetaType::Double, QMetaType::Double, QMetaType::Double, 0x80000000 | 7, 3, 4, 5, 6, 8,
QMetaType::Void, QMetaType::Int, QMetaType::Int, 10, 11,
QMetaType::Void, QMetaType::QString, 13,
// slots: parameters
QMetaType::Void,
@@ -164,6 +172,7 @@ Q_CONSTINIT const QMetaObject GroundReceiver::staticMetaObject = { {
QtPrivate::TypeAndForceComplete<double, std::false_type>,
QtPrivate::TypeAndForceComplete<double, std::false_type>,
QtPrivate::TypeAndForceComplete<double, std::false_type>,
QtPrivate::TypeAndForceComplete<uint32_t, std::false_type>,
// method 'statsUpdated'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
QtPrivate::TypeAndForceComplete<int, std::false_type>,
@@ -187,7 +196,7 @@ void GroundReceiver::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _
auto *_t = static_cast<GroundReceiver *>(_o);
(void)_t;
switch (_id) {
case 0: _t->frameDecoded((*reinterpret_cast< std::add_pointer_t<QImage>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[2])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[3])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[4]))); break;
case 0: _t->frameDecoded((*reinterpret_cast< std::add_pointer_t<QImage>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[2])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[3])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[4])),(*reinterpret_cast< std::add_pointer_t<uint32_t>>(_a[5]))); break;
case 1: _t->statsUpdated((*reinterpret_cast< std::add_pointer_t<int>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<int>>(_a[2]))); break;
case 2: _t->error((*reinterpret_cast< std::add_pointer_t<QString>>(_a[1]))); break;
case 3: _t->on_udp_read_ready(); break;
@@ -198,7 +207,7 @@ void GroundReceiver::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _
} else if (_c == QMetaObject::IndexOfMethod) {
int *result = reinterpret_cast<int *>(_a[0]);
{
using _t = void (GroundReceiver::*)(const QImage & , double , double , double );
using _t = void (GroundReceiver::*)(const QImage & , double , double , double , uint32_t );
if (_t _q_method = &GroundReceiver::frameDecoded; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
*result = 0;
return;
@@ -252,9 +261,9 @@ int GroundReceiver::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
}
// SIGNAL 0
void GroundReceiver::frameDecoded(const QImage & _t1, double _t2, double _t3, double _t4)
void GroundReceiver::frameDecoded(const QImage & _t1, double _t2, double _t3, double _t4, uint32_t _t5)
{
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t2))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t3))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t4))) };
void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t2))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t3))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t4))), const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t5))) };
QMetaObject::activate(this, &staticMetaObject, 0, _a);
}

View File

@@ -8,6 +8,7 @@
#include "../../../../src/MainWindow.h"
#include <QtGui/qtextcursor.h>
#include <QtNetwork/QSslError>
#include <QtCore/qmetatype.h>
#if __has_include(<QtCore/qtmochelpers.h>)
@@ -46,6 +47,8 @@ static constexpr auto qt_meta_stringdata_CLASSMainWindowENDCLASS = QtMocHelpers:
"lat",
"lon",
"alt",
"uint32_t",
"photo_number",
"on_stats_updated",
"fps",
"kbs",
@@ -53,13 +56,14 @@ static constexpr auto qt_meta_stringdata_CLASSMainWindowENDCLASS = QtMocHelpers:
"on_record_toggled",
"checked",
"on_settings_clicked",
"on_trigger_capture_clicked",
"on_device_info_received",
"DeviceInfo",
"info"
);
#else // !QT_MOC_HAS_STRING_DATA
struct qt_meta_stringdata_CLASSMainWindowENDCLASS_t {
uint offsetsAndSizes[34];
uint offsetsAndSizes[40];
char stringdata0[11];
char stringdata1[18];
char stringdata2[1];
@@ -67,16 +71,19 @@ struct qt_meta_stringdata_CLASSMainWindowENDCLASS_t {
char stringdata4[4];
char stringdata5[4];
char stringdata6[4];
char stringdata7[17];
char stringdata8[4];
char stringdata9[4];
char stringdata10[22];
char stringdata11[18];
char stringdata12[8];
char stringdata13[20];
char stringdata14[24];
char stringdata15[11];
char stringdata16[5];
char stringdata7[9];
char stringdata8[13];
char stringdata9[17];
char stringdata10[4];
char stringdata11[4];
char stringdata12[22];
char stringdata13[18];
char stringdata14[8];
char stringdata15[20];
char stringdata16[27];
char stringdata17[24];
char stringdata18[11];
char stringdata19[5];
};
#define QT_MOC_LITERAL(ofs, len) \
uint(sizeof(qt_meta_stringdata_CLASSMainWindowENDCLASS_t::offsetsAndSizes) + ofs), len
@@ -89,16 +96,19 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSMainWindowENDCLASS_t qt_meta_st
QT_MOC_LITERAL(34, 3), // "lat"
QT_MOC_LITERAL(38, 3), // "lon"
QT_MOC_LITERAL(42, 3), // "alt"
QT_MOC_LITERAL(46, 16), // "on_stats_updated"
QT_MOC_LITERAL(63, 3), // "fps"
QT_MOC_LITERAL(67, 3), // "kbs"
QT_MOC_LITERAL(71, 21), // "on_save_frame_clicked"
QT_MOC_LITERAL(93, 17), // "on_record_toggled"
QT_MOC_LITERAL(111, 7), // "checked"
QT_MOC_LITERAL(119, 19), // "on_settings_clicked"
QT_MOC_LITERAL(139, 23), // "on_device_info_received"
QT_MOC_LITERAL(163, 10), // "DeviceInfo"
QT_MOC_LITERAL(174, 4) // "info"
QT_MOC_LITERAL(46, 8), // "uint32_t"
QT_MOC_LITERAL(55, 12), // "photo_number"
QT_MOC_LITERAL(68, 16), // "on_stats_updated"
QT_MOC_LITERAL(85, 3), // "fps"
QT_MOC_LITERAL(89, 3), // "kbs"
QT_MOC_LITERAL(93, 21), // "on_save_frame_clicked"
QT_MOC_LITERAL(115, 17), // "on_record_toggled"
QT_MOC_LITERAL(133, 7), // "checked"
QT_MOC_LITERAL(141, 19), // "on_settings_clicked"
QT_MOC_LITERAL(161, 26), // "on_trigger_capture_clicked"
QT_MOC_LITERAL(188, 23), // "on_device_info_received"
QT_MOC_LITERAL(212, 10), // "DeviceInfo"
QT_MOC_LITERAL(223, 4) // "info"
},
"MainWindow",
"on_frame_received",
@@ -107,6 +117,8 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSMainWindowENDCLASS_t qt_meta_st
"lat",
"lon",
"alt",
"uint32_t",
"photo_number",
"on_stats_updated",
"fps",
"kbs",
@@ -114,6 +126,7 @@ Q_CONSTINIT static const qt_meta_stringdata_CLASSMainWindowENDCLASS_t qt_meta_st
"on_record_toggled",
"checked",
"on_settings_clicked",
"on_trigger_capture_clicked",
"on_device_info_received",
"DeviceInfo",
"info"
@@ -128,7 +141,7 @@ Q_CONSTINIT static const uint qt_meta_data_CLASSMainWindowENDCLASS[] = {
11, // revision
0, // classname
0, 0, // classinfo
6, 14, // methods
7, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
@@ -136,20 +149,22 @@ Q_CONSTINIT static const uint qt_meta_data_CLASSMainWindowENDCLASS[] = {
0, // signalCount
// slots: name, argc, parameters, tag, flags, initial metatype offsets
1, 4, 50, 2, 0x08, 1 /* Private */,
7, 2, 59, 2, 0x08, 6 /* Private */,
10, 0, 64, 2, 0x08, 9 /* Private */,
11, 1, 65, 2, 0x08, 10 /* Private */,
13, 0, 68, 2, 0x08, 12 /* Private */,
14, 1, 69, 2, 0x08, 13 /* Private */,
1, 5, 56, 2, 0x08, 1 /* Private */,
9, 2, 67, 2, 0x08, 7 /* Private */,
12, 0, 72, 2, 0x08, 10 /* Private */,
13, 1, 73, 2, 0x08, 11 /* Private */,
15, 0, 76, 2, 0x08, 13 /* Private */,
16, 0, 77, 2, 0x08, 14 /* Private */,
17, 1, 78, 2, 0x08, 15 /* Private */,
// slots: parameters
QMetaType::Void, QMetaType::QImage, QMetaType::Double, QMetaType::Double, QMetaType::Double, 3, 4, 5, 6,
QMetaType::Void, QMetaType::Int, QMetaType::Int, 8, 9,
QMetaType::Void, QMetaType::QImage, QMetaType::Double, QMetaType::Double, QMetaType::Double, 0x80000000 | 7, 3, 4, 5, 6, 8,
QMetaType::Void, QMetaType::Int, QMetaType::Int, 10, 11,
QMetaType::Void,
QMetaType::Void, QMetaType::Bool, 12,
QMetaType::Void, QMetaType::Bool, 14,
QMetaType::Void,
QMetaType::Void, 0x80000000 | 15, 16,
QMetaType::Void,
QMetaType::Void, 0x80000000 | 18, 19,
0 // eod
};
@@ -169,6 +184,7 @@ Q_CONSTINIT const QMetaObject MainWindow::staticMetaObject = { {
QtPrivate::TypeAndForceComplete<double, std::false_type>,
QtPrivate::TypeAndForceComplete<double, std::false_type>,
QtPrivate::TypeAndForceComplete<double, std::false_type>,
QtPrivate::TypeAndForceComplete<uint32_t, std::false_type>,
// method 'on_stats_updated'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
QtPrivate::TypeAndForceComplete<int, std::false_type>,
@@ -180,6 +196,8 @@ Q_CONSTINIT const QMetaObject MainWindow::staticMetaObject = { {
QtPrivate::TypeAndForceComplete<bool, std::false_type>,
// method 'on_settings_clicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'on_trigger_capture_clicked'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
// method 'on_device_info_received'
QtPrivate::TypeAndForceComplete<void, std::false_type>,
QtPrivate::TypeAndForceComplete<const DeviceInfo &, std::false_type>
@@ -193,12 +211,13 @@ void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id,
auto *_t = static_cast<MainWindow *>(_o);
(void)_t;
switch (_id) {
case 0: _t->on_frame_received((*reinterpret_cast< std::add_pointer_t<QImage>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[2])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[3])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[4]))); break;
case 0: _t->on_frame_received((*reinterpret_cast< std::add_pointer_t<QImage>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[2])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[3])),(*reinterpret_cast< std::add_pointer_t<double>>(_a[4])),(*reinterpret_cast< std::add_pointer_t<uint32_t>>(_a[5]))); break;
case 1: _t->on_stats_updated((*reinterpret_cast< std::add_pointer_t<int>>(_a[1])),(*reinterpret_cast< std::add_pointer_t<int>>(_a[2]))); break;
case 2: _t->on_save_frame_clicked(); break;
case 3: _t->on_record_toggled((*reinterpret_cast< std::add_pointer_t<bool>>(_a[1]))); break;
case 4: _t->on_settings_clicked(); break;
case 5: _t->on_device_info_received((*reinterpret_cast< std::add_pointer_t<DeviceInfo>>(_a[1]))); break;
case 5: _t->on_trigger_capture_clicked(); break;
case 6: _t->on_device_info_received((*reinterpret_cast< std::add_pointer_t<DeviceInfo>>(_a[1]))); break;
default: ;
}
}
@@ -223,13 +242,13 @@ int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 6)
if (_id < 7)
qt_static_metacall(this, _c, _id, _a);
_id -= 6;
_id -= 7;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 6)
if (_id < 7)
*reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
_id -= 6;
_id -= 7;
}
return _id;
}

View File

@@ -1,9 +1,16 @@
/home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/UVLADIE3JM/moc_MainWindow.cpp: /home/flower/code/camera/flyLink/skylink_qt_station/src/MainWindow.h \
/home/flower/code/camera/flyLink/skylink_qt_station/build/Desktop_Qt_6_5_3_GCC_64bit-Debug/skylink_station_autogen/moc_predefs.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDateTime \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QFlags \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QIODevice \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QList \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QMetaType \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QObject \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QSharedDataPointer \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QString \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QTimer \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QUrl \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QVariant \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20memory.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20type_traits.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qalgorithms.h \
@@ -32,6 +39,7 @@
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontainerinfo.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontainertools_impl.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontiguouscache.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcryptographichash.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdarwinhelpers.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdatastream.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdatetime.h \
@@ -147,10 +155,24 @@
/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtransform.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qwindowdefs.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QHostAddress \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkAccessManager \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkReply \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkRequest \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QSslConfiguration \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QTcpSocket \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QUdpSocket \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qabstractsocket.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qhostaddress.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkaccessmanager.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkreply.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkrequest.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qssl.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslcertificate.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslconfiguration.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslerror.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslsocket.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtcpsocket.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetwork-config.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkexports.h \

View File

@@ -1,11 +1,18 @@
skylink_station_autogen/timestamp: \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDateTime \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QDebug \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QFlags \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QIODevice \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QList \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QMap \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QMetaType \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QObject \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QSharedDataPointer \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QString \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QThread \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QTimer \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QUrl \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/QVariant \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20memory.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/q20type_traits.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qalgorithms.h \
@@ -34,6 +41,7 @@ skylink_station_autogen/timestamp: \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontainerinfo.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontainertools_impl.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcontiguouscache.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qcryptographichash.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdarwinhelpers.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdatastream.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtCore/qdatetime.h \
@@ -152,10 +160,24 @@ skylink_station_autogen/timestamp: \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qtransform.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtGui/qwindowdefs.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QHostAddress \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkAccessManager \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkReply \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QNetworkRequest \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QSslConfiguration \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QSslPreSharedKeyAuthenticator \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QTcpSocket \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/QUdpSocket \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qabstractsocket.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qhostaddress.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkaccessmanager.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkreply.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qnetworkrequest.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qssl.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslcertificate.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslconfiguration.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslerror.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslpresharedkeyauthenticator.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qsslsocket.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtcpsocket.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetwork-config.h \
/home/flower/app/Qt/6.5.3/gcc_64/include/QtNetwork/qtnetworkexports.h \

View File

@@ -47,7 +47,7 @@ void GroundReceiver::start() {
return;
}
std::cout << " UDP 接收器已启动,监听端口: " << listen_port_ << std::endl;
std::cout << " UDP 接收器已启动,监听端口: " << listen_port_ << std::endl;
}
void GroundReceiver::stop() {
@@ -147,6 +147,7 @@ void GroundReceiver::process_packet(const uint8_t* data, size_t len) {
fb.lon = header->lon;
fb.alt = header->alt;
fb.receive_time_ms = QDateTime::currentMSecsSinceEpoch();
fb.photo_number = header->reserve; // 从reserve字段提取照片编号
it = frame_buffers_.insert({header->frame_id, fb}).first;
}
@@ -343,10 +344,10 @@ void GroundReceiver::handle_complete_frame(const FrameBuffer& frame) {
last_complete_frame_id_ = frame.frame_id;
}
// 发出信号
// 发出信号(包含照片编号)
qDebug() << "" << frame.frame_id << "解码成功,图像大小:" << image.width() << "x" << image.height()
<< "格式:" << image.format() << "准备发出frameDecoded信号";
emit frameDecoded(image, frame.lat, frame.lon, frame.alt);
<< "格式:" << image.format() << "照片编号:" << frame.photo_number << "准备发出frameDecoded信号";
emit frameDecoded(image, frame.lat, frame.lon, frame.alt, frame.photo_number);
qDebug() << "frameDecoded信号已发出";
}

Some files were not shown because too many files have changed in this diff Show More