1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #include "SCFWrapper.h"
- #include <iostream>
- // 数据包解析回调函数
- PACKET_RET PacketParserCallback(const char* pRecData, uint32_t nLength, uint32_t& PacketLength) {
- // 实现你的数据包解析逻辑
- // 这里简单示例:查找换行符作为包结束标记
- for (uint32_t i = 0; i < nLength; i++) {
- if (pRecData[i] == '\n') {
- PacketLength = i + 1;
- return PACKET_ISPACKET;
- }
- }
- return PACKET_NOPACKET;
- }
- int main() {
- // 创建SCF包装器实例
- SCFWrapper scfWrapper;
-
- // 从配置文件获取连接参数
- ResDataObject connectionParams ;
- connectionParams["type"] = "COM";
- connectionParams["port"] = "/dev/ttyVS10"; // 替换为实际串口设备
- connectionParams["baudrate"] = "115200";
- connectionParams["bytesize"] = "8";
- connectionParams["parity"] = "0"; // 0=None, 1=Odd, 2=Even
- connectionParams["stopbits"] = "1";
- // 初始化SCF库
- std::string dllName = "libSerialSCF.so"; // 或 "libSerialSCF.so"
- if (!scfWrapper.Initialize(dllName)) {
- std::cerr << "Failed to initialize SCF: " << scfWrapper.GetLastError() << std::endl;
- return -1;
- }
-
- // 连接设备
- int result = scfWrapper.Connect(connectionParams, PacketParserCallback, SCF_NORMAL_TRANSFER, 3000);
- if (result != SCF_SUCCEED) {
- std::cerr << "Failed to connect: " << result << std::endl;
- return -1;
- }
-
- std::cout << "Connected successfully" << std::endl;
-
- // 发送数据
- std::string sendData = "Hello, device!\n";
- unsigned int bytesSent = 0;
-
- // 锁定资源
- if (!scfWrapper.Lock(1000)) {
- // 发送数据
- result = scfWrapper.SendPacket(sendData.c_str(), sendData.length(), 5000, bytesSent);
-
- // 解锁资源
- scfWrapper.Unlock();
-
- if (result != SCF_SUCCEED) {
- std::cerr << "Failed to send data: " << result << std::endl;
- } else {
- std::cout << "Sent " << bytesSent << " bytes" << std::endl;
- }
- } else {
- std::cerr << "Failed to lock SCF resource" << std::endl;
- }
-
- // 接收数据
- char buffer[1024];
- unsigned int bytesReceived = 0;
- while(1)
- {
- result = scfWrapper.ReceivePacket(buffer, sizeof(buffer), 5000, bytesReceived);
- if (result == SCF_SUCCEED&& result!=0) {
- std::cout << "Received " << bytesReceived << " bytes: "
- << std::string(buffer, bytesReceived) << std::endl;
- } else if (result == SCF_TIMEOUT) {
- std::cout << "Receive timeout" << std::endl;
- } else {
- std::cerr << "Failed to receive data: " << result << std::endl;
- }
- }
-
- // 断开连接
- scfWrapper.Disconnect();
-
- return 0;
- }
|