packet이 3 종류라서 아래와 같이 만들어 하는데
typedef struct _sensor_packet_t {
// code here...
} sensor_packet_t;
typedef struct server_packet_t {
// code here...
} server_packet_t;
typedef struct client_packet_t {
// code here...
} client_packet_t
int paket_tx(sensor_packet_t packet);
int paket_tx(server_packet_t packet);
int paket_tx(client_packet_t packet);
위와 같이 함수를 3개로 만드는 것보다, void*를 이용하여 하나로 만드는게 낫다.
다만 void*는 받는 쪽에서 형을 모르니 형 정보까지 같이 보내줘야 함
typedef enum _packet_type_t {
SENSOR_PACKET_TYPE,
SERVER_PACKET_TYPE,
CLIENT_PACKET_TYPE,
} packet_type_t;
int paket_tx(void* packet, packet_type_t type);
// 3개의 함수가 1개로 통합되었다.
3개로 만드는게 좋은지, 1개로 만들고 타입을 보내주는게 좋은지는 선택의 문제이다.
패킷이 제대로 송신되고 있는지, 송신후 화면에 tx 데이터를 출력하는 경우는 많다.
그러나, tx값이 binary라면 화면 출력시 이상한 문자가 출력되므로, 이를 ASCII로 바꿔주는 함수도 만들어야 한다.
enum typedef _display_mode_t {
NONE, // 화면에 출력하지 않겠다.
ASCII_MODE, // ASCII 모드로 출력하겠다. 02면 깨짐, 34면 34가 그대로 출력되어서 4가 출력됨
BINAY_MODE, // 바이너리 모드로 출력하겠다. 02 면 0x30 0x32가 출력됨
};
int paket_tx(void* packet, packet_type_t type, display_mode_t mode);