前言

如果熟悉爱智和看过我之前文章的朋友见到这篇文章一定会有很大疑问,SDDC 作为智能设备发现控制协议,怎么会用在 windows 上?

这一切还是源自于我巨大的脑洞,因为这段在搞 Windows 开发,突发奇想能不能把电脑也接入到爱智上,于是就把嵌入式设备使用的 SDDC 协议移植到了 Windows 上,本文就介绍下基于 QT 移植的 libsddc 库,其实我还移植到了 VS2022 上了,这个之后再介绍吧。

软硬件选择

这里使用 windows 开发,除了电脑也不需要其他额外的硬件了。

软件的话,使用的是 QT 5.9.0 版本,官网下载太慢了,推荐大家下载这个清华大学开源镜像站的资源:https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.9/5.9.0/qt-opensource-windows-x86-5.9.0.exe

代码获取与解析

代码可以从我的 gitee 仓库直接获取:

https://gitee.com/inspiration-desktop/windows-libsddc.git

打开 libsddc 项目如下:

其中 SDDC 相关代码都已基于 windows环境进行兼容修改,具体修改内容可以全局搜索 __WINDOWS__ 宏来查看,其中主要的差异是 windows 和嵌入式系统的 socket 相关实现上,还有就是多线程,QT本身就支持 pthread ,这个给移植带来了很大的便利,不像 VS 为了支持 pthread 还需要一顿折腾,对于VS的移植之后的文章再介绍吧。

main.cpp 代码解析,主要内容是获取uuid作为设备唯一标识(其实还是我没找到合适的获取 windows MAC 地址的接口…);

#include "mainwindow.h"
#include <QApplication>
#include "sddc_message_example.h"
#include "sddc.h"
#include "test_thread.h"
#include "cJSON.h"
#include <QUuid>
#include <QFile>
#include <iostream>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 启动可视化窗口,暂时用不到//MainWindow w;//w.show();char * uuid_str;char buffer[128];QString uuidstr;QUuid uuid;// 获取uuid作为设备唯一标识QFile file("uuid.txt");if(file.exists()){std::cout << "file exist\n";if(!file.open(QIODevice::ReadWrite)){std::cout << "open file failed\n";}else{//读取文件//判断文件是否已经读到末尾了while(!file.atEnd()){//读取数据memset(buffer,0,sizeof(buffer));qint64 length = file.readLine(buffer,128);if(length != -1){uuid_str = (char*)&buffer;std::cout << "read success\n";}}file.close();}}else{if(!file.open(QIODevice::ReadWrite)){std::cout << "open file failed\n";}else{uuid = QUuid::createUuid();uuidstr = uuid.toString();uuid_str = (char *)uuidstr.remove("{").remove("}").remove("-").toStdString().data();memset(buffer,0,sizeof(buffer));memcpy(buffer,uuid_str,strlen(uuid_str));uuid_str = buffer;std::cout << uuid_str << std::endl;qint64 length = -1;length = file.write(uuid_str);if(length == -1){std::cout << "write file failed\n";}else{std::cout << "write file success\n";}file.close();}}std::cout << uuid_str << std::endl;// 启动一个新线程进行其他业务处理//test_thread *thread1 = new test_thread();//thread1->start();// 启动 SDDC 协议sddc_main(uuid_str);a.exec();return 0;
}

效果

点击左下角的绿色三角运行程序;

可以在爱智设备搜索中发现对应设备并添加;


SDDC的Windows初体验-QT篇相关推荐

  1. SDN初体验·理论篇(零):SDN与传统网络不得不说的那些事

    本人是一名热爱网络工程的菜鸡,是一只兴趣使然的菜鸡,我目前发的blog只是作为我学习阶段的一个总结,分享给大家,希望大家一起交流,一起探讨,文章中有不正确的知识或言论请大家指出,同时我觉得对网络感兴趣 ...

  2. Xposed模块初体验——第一篇

    注:所有的资源可以在文章末尾下载 什么是Xposed框架 ? Xposed框架是一套开源的.在Android高权限模式下运行的框架服务,可以在不修改APK文件的情况下影响程序运行(修改系统)的框架服务 ...

  3. 旗鱼SailfishOS SDK for Windows初体验

    SailfishOS SDK for Windows开放下载啦! 正好从cnbeta上看到这新闻,于是第一时间体验了一下. 1.使用SailfishOSSDK for Windows需要预装4.1.1 ...

  4. 使用Docker for Windows初体验

    这是第二次使用Docker for Windows了. 最近准备研究一下Docker的一些高级特性如Swarm Clusters,需要用到docker-machine,docker-machine目前 ...

  5. 硬件玩物 | 闲置物理主机安装群辉NAS-DSM-7.x系统实践试用初体验(保姆篇)

    欢迎关注「全栈工程师修炼指南」 点击

  6. Windows Embedded CE 6.0开发初体验(二)CE开发环境 收藏

    上一篇<Windows Embedded CE 6.0开发初体验>之"嵌入式开发流程": http://blog.csdn.net/aawolf/archive/200 ...

  7. Windows Embedded CE 6.0开发初体验(三)设置Boot-loader

    在Digi CC 9P开发板中已经预置了Boot-loader和一个CE 6.0的系统,所以,我们直接启动开发板,就可以运行一个CE 6.0的操作系统.不过,我们的最终目的是要开发一个自己的CE 6. ...

  8. Windows Embedded CE 6.0开发初体验(二)CE开发环境

    CE开发环境 下面就要让今天的主角闪亮登场了--Digi CC 9P开发板.为了感谢Digi提供的开发板,还是给他们做个广告吧:这是一家以WiFi相关产品为主营业务的公司,也生产ARM架构的CPU,所 ...

  9. Windows Embedded CE 6.0开发初体验(一)Windows CE概述

    这篇文章的目的并不是介绍Windows Embedded CE开发的方方面面,只是用一个初涉嵌入式领域的软件开发者的视角来介绍Windows CE开发中最常用的概念和知识,解决大家会在实际开发中碰到的 ...

最新文章

  1. 电子商店——图片轮播
  2. Java 继承 执行顺序
  3. 感觉没有学会什么真正的本领
  4. Swift-Tips之重复字符串
  5. java程序中没有错,但是项目上面显示一个红叉的解决办法
  6. ngx_rtmp_shared模块对ngx_chain_t的操作总结
  7. azdb文件怎么打开_AZDBExplorerSvcs.dll
  8. java GZIP压缩和解压
  9. 动态球html,用html5标签让小球动起来
  10. 为什么有些小老板,做了一辈子,还是没办法发展大?
  11. android studio for android learning (十五) Camera2界面定制与保存到外部存储
  12. 三面网易,四面阿里,五年开发经验程序员剑指大厂,稳拿offer
  13. iOS 解决:调用系统相册、相机是英文状态。
  14. 计算机跨考专业基础差复试,跨考计算机过来人教你备考:从初试到复试
  15. 程序员用「美貌」突破二维图像的人脸识别
  16. VR插件:VR Interaction Framework 1.7(VRIF)(一)
  17. 磁盘满了怎么清理之空间占用分析软件SpaceSniffer
  18. /bin/sh: 1: x86_64-linux-gnu-gcc: not found
  19. 产品经理工作流| 月度汇报月报整理
  20. ue4 android联机,UE4 局域网联机(LAN)

热门文章

  1. openstack neutron基本原理
  2. 计算机常见故障以及维修方法
  3. ChatGPT 中文调教指南
  4. 计算机网络:网络安全(网络安全概述)
  5. 道德经·太上,不知有之
  6. k8s源码分析 pdf_如何高效阅读 Kubernetes 源码?
  7. 关于新增dnsmasq --help的option选项
  8. Linux安装Apache环境(有图有真相!)
  9. editable string 转_Java Editable.getSpans方法代码示例
  10. editable组件_表格行内编辑事件