#pragma once #ifdef WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include <WS2tcpip.h> #include <WinSock2.h> #define socketerrno WSAGetLastError() #define SOCKET_EAGAIN_EINPROGRESS WSAEINPROGRESS #define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK #ifndef _SSIZE_T_DEFINED typedef int ssize_t; #define _SSIZE_T_DEFINED #endif #ifndef _SOCKET_T_DEFINED typedef SOCKET socket_t; #define _SOCKET_T_DEFINED #endif #else #include <unistd.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netinet/tcp.h> #include <fcntl.h> #define socketerrno errno #define SOCKET_EAGAIN_EINPROGRESS EAGAIN #define SOCKET_EWOULDBLOCK EWOULDBLOCK #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 #ifndef _SOCKET_T_DEFINED typedef int socket_t; #define _SOCKET_T_DEFINED #endif #endif #include "../common/notifier.h" #include <stdint.h> #include "../common/comm.h" #include "../common/iobuffer.h" #include "../common/sensor_socket.h" #include <thread> #include <math.h> class CMessageQueue; class CPcanSensor { public: CPcanSensor(CMessageQueue * q); void Notify(TPCANMsg *buffer, int32_t size); void SetSensorSocket(SensorPeakCan<CPcanSensor>* can); void OnMessage(cannet_frame* frames, int32_t count = 4); void Start(); void Stop(); bool Emergency(); //急停 只局限于程序 和网络 void Run(); private: void SendStatusToMSG(); private: CMessageQueue * _message; SensorPeakCan<CPcanSensor> * _socket; bool _run; std::mutex _last_can_lock; bool _front_view = true; TPCANMsg _msg[4]; FeedData _data; //int b_ready; //int b_over; int model;//0本地,1远程 int16_t Direction;//方向 int16_t Hand_Throttle;//手油门 int16_t Foot_Throttle;//脚油门 int16_t Brake;//刹车 };