Skip to content

Commit

Permalink
단편화 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
imsoo committed May 24, 2019
1 parent f4ef9cf commit 6b27b1e
Show file tree
Hide file tree
Showing 16 changed files with 519 additions and 102 deletions.
4 changes: 3 additions & 1 deletion Drivers/BLUETOOTH/BLUETOOTH_MAC/Src/bluetooth.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@ unsigned char bluetooth_init(unsigned char deviceType)
unsigned char bluetooth_send(unsigned char* dest_addr, unsigned char* data, int data_length)
{
//printf("[BLUETOOTH] 전송 시도\r\n");
HAL_UART_Transmit(&huart2, data, data_length, 1000);
memcpy(btBuf, data, INTEG_FRAME_HEADER_LEN);
memcpy(btBuf + INTEG_FRAME_HEADER_LEN, ((INTEG_FRAME*) data)->data, data_length - INTEG_FRAME_HEADER_LEN);
HAL_UART_Transmit(&huart2, btBuf, data_length, 1000);
return 0;
}

Expand Down
6 changes: 5 additions & 1 deletion Drivers/CC2530/CC2530_MAC/Src/mac_interface.c
Original file line number Diff line number Diff line change
Expand Up @@ -452,7 +452,11 @@ unsigned char macDataReq(unsigned char* dest_addr, unsigned char* data, int data
macBuf[30] = data_length;

// MSDU
memcpy(macBuf+31, data, data_length);
//memcpy(macBuf+31, data, data_length);

memcpy(macBuf+31, data, INTEG_FRAME_HEADER_LEN);
memcpy(macBuf+31 + INTEG_FRAME_HEADER_LEN, ((INTEG_FRAME*) data)->data, data_length - INTEG_FRAME_HEADER_LEN);


uartSreq(STATE_SREQ);

Expand Down
75 changes: 44 additions & 31 deletions Drivers/INTEG_MAC/Inc/integ_mac.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
*/

// 단편화 테스트 용 데이터
extern unsigned char testBuf_2[120];

#define MEDIA_NUM 3 // 사용 매체 수
#define LIFI 0 // Media Type
#define BLUETOOTH 1
Expand All @@ -16,8 +20,8 @@ static char *media_name[MEDIA_NUM] = {"LI-FI", "BLUETOOTH", "CC2530"};
extern unsigned char integ_init_state; // 통합 MAC 초기화 상태

// 연결 성태 저장 테이블
#define STATUS_NUM 2
#define INIT_STATUS 0
#define STATUS_NUM 2 // 상태 개수
#define INIT_STATUS 0
#define CONNECT_STATUS 1
#define CON 1
#define DISCON 0
Expand All @@ -27,69 +31,78 @@ extern unsigned char STATUS_TABLE[STATUS_NUM][MEDIA_NUM];

#define FIND_OPT_PERIOD 5 // 최적 노드 검색 주기 500ms
#define RETRANSMIT_TIME 3 // 재전송 주기 300ms
#define RETRANSMIT_NUM 3 // 재전송 횟수
#define R_SUCCESS 1
#define R_FAIL 0
#define RETRANSMIT_NUM 3 // 3번 ACK 안오는 경우 재전송
#define R_SUCCESS 1 // 실행 결과 : 성공
#define R_FAIL 0 // 실행 결과 : 실패
static char *result_string[2] = {"FAIL", "SUCCESS"};

#define INTEG_ADDR_LEN 6 // 통합 맥 주소 길이
#define LIFI_ADDR_LEN 6 // lifi 맥 주소 길이
#define BLUETOOTH_ADDR_LEN 6 // BLUETOOTH 맥 주소 길이
#define CC2530_ADDR_LEN 8 // CC2530 맥 주소 길이
#define MEDIA_ADDR_LEN_MAX 8 // 각 매체 주소중 길이가장 긴 값
static unsigned char media_addr_len[MEDIA_NUM] = {LIFI_ADDR_LEN, BLUETOOTH_ADDR_LEN, CC2530_ADDR_LEN};
static unsigned char media_addr_len[MEDIA_NUM] = {LIFI_ADDR_LEN, BLUETOOTH_ADDR_LEN, CC2530_ADDR_LEN}; /// 각 매체 주소 길이 인덱스로 접근 시

#define INTEG_FRAME_HEADER_LEN 17 // 통합 맥 프레임 헤더 길이
#define INTEG_FRAME_DATA_LEN 40
#define INTEG_FRAME_TOTAL_LEN 57
#define INTEG_FRAME_HEADER_LEN 19 // 통합 맥 프레임 헤더 길이
#define INTEG_FRAME_DATA_LEN 39 // 통합 맥 프레임 데이터 길이
#define INTEG_FRAME_TOTAL_LEN 58 + 1 // 통합 맥 프레임 헤더 + 데이터 길이

#define INTEG_FRAME_LEN_FIELD 0
#define INTEG_FRAME_LEN_FIELD 0 // 프레임 길이 필드는 통합 프레임의 0번

// messageType
#define DATA_MSG 0x01
#define ACK_MSG 0x02
#define ADV_MSG 0x04
#define ADV_IND 0x05
#define PASS_MSG 0xFF
#define DATA_MSG 0x01 // 일반 데이터를 담은 메시지
#define ACK_MSG 0x02 // 응답 메시지
#define ADV_MSG 0x04 // 노드 자신의 존재를 브로드캐스팅 할때
#define ADV_IND 0x05 // ADV_MSG에 대한 응답
#define PASS_MSG 0xFF // 아무것도 없는 메시지

// deviceType
#define MASTER 0x00
#define SLAVE 0x01

// fragmentaion 관련
static int media_mtu_size[MEDIA_NUM] = {20, 43, 91};
extern unsigned char fragment_id;
#define DEFAULT_FRAGMENT_ID 0 // 단편화 식별자 초기값
#define MIN_MTU_SIZE 48 // 매체들 MTU 크기 중 가장 작은 값


extern unsigned char my_integ_address[INTEG_ADDR_LEN];
#define HOOD_HASH_ID 0x10
extern unsigned char hood_integ_address[INTEG_ADDR_LEN];

// SEQ
#define MAX_SEQ_NUMBER 10 // 순서 번호 최대
#define DEFAULT_SEQ_NUMBER 0 // 순서 번호 초기값
extern unsigned char seqNumber; // 순서 번호

#define STATIC_ADDR 0
#define DYNAMIC_ADDR 1
static char *addr_type_name[2] = {"STATIC", "DYNAMIC"};

#define STATIC_ADDR 0 // 수집하지 않은 주소 (자신의 주소, 브로드캐스트)
#define DYNAMIC_ADDR 1 // 외부로 부터 수집한 줏조
static char *addr_type_name[2] = {"STATIC", "DYNAMIC"};
extern unsigned char my_integ_address[INTEG_ADDR_LEN];
extern unsigned char hood_integ_address[INTEG_ADDR_LEN];

// 통합 MAC 테이블 구조체
typedef struct integ_table {
unsigned char integ_addr[INTEG_ADDR_LEN];
unsigned char integ_addr[INTEG_ADDR_LEN]; // 통합 MAC 주소
unsigned char addr_type; // static : 0, dynamic : 1
unsigned char media_addr[MEDIA_NUM][MEDIA_ADDR_LEN_MAX];
unsigned char media_addr[MEDIA_NUM][MEDIA_ADDR_LEN_MAX]; // 각 매체 주소
} INTEG_TABLE;


// 통합 MAC 프레임 구조체
typedef struct integ_frame {
unsigned char frame_length;
unsigned char message_type;
unsigned char src_address[INTEG_ADDR_LEN];
unsigned char dest_address[INTEG_ADDR_LEN];
unsigned char media_type;
unsigned char seqNumber;
unsigned char ackNumber;
unsigned char data[INTEG_FRAME_DATA_LEN];
unsigned char frame_length; // 프레임 길이
unsigned char message_type; // 메시지 유형
unsigned char src_address[INTEG_ADDR_LEN]; // 근원지 주소
unsigned char dest_address[INTEG_ADDR_LEN]; // 목적지 주소
unsigned char media_type; // 매체 유형
unsigned char seqNumber; // 순서 번호
unsigned char ackNumber; // 응답 번호
unsigned char fragment_id; // 단편화 식별자
unsigned char fragment_offset; // 프레그 먼트 오프셋
unsigned char *data;// 페이로드
} INTEG_FRAME;


extern INTEG_FRAME advertising_frame;

unsigned char get_seq_number(void);
Expand Down
10 changes: 10 additions & 0 deletions Drivers/INTEG_MAC/Inc/mem_pool.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
/*
mem_pool.h
*/

#define MAX_MEM_POOL_SIZE 30
#define MEM_SIZE 100

void mem_pool_init(void);
unsigned char *get_mem(void);
unsigned char return_mem(unsigned char *mem);
Loading

0 comments on commit 6b27b1e

Please sign in to comment.