serial_example.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "SCFWrapper.h"
  2. #include <iostream>
  3. // 数据包解析回调函数
  4. PACKET_RET PacketParserCallback(const char* pRecData, uint32_t nLength, uint32_t& PacketLength) {
  5. // 实现你的数据包解析逻辑
  6. // 这里简单示例:查找换行符作为包结束标记
  7. for (uint32_t i = 0; i < nLength; i++) {
  8. if (pRecData[i] == '\n') {
  9. PacketLength = i + 1;
  10. return PACKET_ISPACKET;
  11. }
  12. }
  13. return PACKET_NOPACKET;
  14. }
  15. int main() {
  16. // 创建SCF包装器实例
  17. SCFWrapper scfWrapper;
  18. // 从配置文件获取连接参数
  19. ResDataObject connectionParams ;
  20. connectionParams["type"] = "COM";
  21. connectionParams["port"] = "/dev/ttyVS10"; // 替换为实际串口设备
  22. connectionParams["baudrate"] = "115200";
  23. connectionParams["bytesize"] = "8";
  24. connectionParams["parity"] = "0"; // 0=None, 1=Odd, 2=Even
  25. connectionParams["stopbits"] = "1";
  26. // 初始化SCF库
  27. std::string dllName = "libSerialSCF.so"; // 或 "libSerialSCF.so"
  28. if (!scfWrapper.Initialize(dllName)) {
  29. std::cerr << "Failed to initialize SCF: " << scfWrapper.GetLastError() << std::endl;
  30. return -1;
  31. }
  32. // 连接设备
  33. int result = scfWrapper.Connect(connectionParams, PacketParserCallback, SCF_NORMAL_TRANSFER, 3000);
  34. if (result != SCF_SUCCEED) {
  35. std::cerr << "Failed to connect: " << result << std::endl;
  36. return -1;
  37. }
  38. std::cout << "Connected successfully" << std::endl;
  39. // 发送数据
  40. std::string sendData = "Hello, device!\n";
  41. unsigned int bytesSent = 0;
  42. // 锁定资源
  43. if (!scfWrapper.Lock(1000)) {
  44. // 发送数据
  45. result = scfWrapper.SendPacket(sendData.c_str(), sendData.length(), 5000, bytesSent);
  46. // 解锁资源
  47. scfWrapper.Unlock();
  48. if (result != SCF_SUCCEED) {
  49. std::cerr << "Failed to send data: " << result << std::endl;
  50. } else {
  51. std::cout << "Sent " << bytesSent << " bytes" << std::endl;
  52. }
  53. } else {
  54. std::cerr << "Failed to lock SCF resource" << std::endl;
  55. }
  56. // 接收数据
  57. char buffer[1024];
  58. unsigned int bytesReceived = 0;
  59. while(1)
  60. {
  61. result = scfWrapper.ReceivePacket(buffer, sizeof(buffer), 5000, bytesReceived);
  62. if (result == SCF_SUCCEED&& result!=0) {
  63. std::cout << "Received " << bytesReceived << " bytes: "
  64. << std::string(buffer, bytesReceived) << std::endl;
  65. } else if (result == SCF_TIMEOUT) {
  66. std::cout << "Receive timeout" << std::endl;
  67. } else {
  68. std::cerr << "Failed to receive data: " << result << std::endl;
  69. }
  70. }
  71. // 断开连接
  72. scfWrapper.Disconnect();
  73. return 0;
  74. }