?? fmaclien.c
字號:
// fill header params
rb -> rb2_header.seg_length_1 = LEN_SAP_ACTIVATE;
rb -> rb2_header.offset_1 = 80;
rb -> rb2_header.fill_length_1 = LEN_SAP_ACTIVATE;
rb -> rb2_header.seg_length_2 = 0;
rb -> rb2_header.fill_length_2 = 0;
rb -> rb2_header.offset_2 = 0;
rb -> rb2_header.priority = pr;
rb -> application_block.service.code = sap_activate;
rb -> application_block.dsap = sap_nr;
rb -> application_block.ssap = 0;
sptr = ( struct fdl_sap * ) &( rb->user_data_1[0] );
sptr->user_id = sap_nr;
sptr->max_l_sdu_length = 246;
sptr->access_sap = ACCSAP; //ALL; // no reservations
sptr->access_station = ACCSTAT; //ALL; // no reservations
sptr->sda = SDA_R; //BOTH_ROLES;
sptr->sdn = SDN_R; //BOTH_ROLES;
sptr->srd = SRD_R; //BOTH_ROLES;
}
/**********************************************************************/
/* D e s c r i p t i o n : */
/* */
/* build request_block for sap_activate for all services */
/**********************************************************************/
void build_rqb_rsap_activate( fdl_rb *rb,
UBYTE sap_nr,
UBYTE ACCSAP,
UBYTE ACCSTAT,
BYTE pr )
{
struct fdl_sap *sptr;
build_head( rb );
// fill header params
rb -> rb2_header.seg_length_1 = LEN_SAP_ACTIVATE;
rb -> rb2_header.offset_1 = 80;
rb -> rb2_header.fill_length_1 = LEN_SAP_ACTIVATE;
rb -> rb2_header.seg_length_2 = 0;
rb -> rb2_header.fill_length_2 = 0;
rb -> rb2_header.offset_2 = 0;
rb -> rb2_header.priority = pr;
rb -> application_block.service.code = rsap_activate;
rb -> application_block.dsap = sap_nr;
rb -> application_block.ssap = 0;
sptr = ( struct fdl_sap * ) &rb->user_data_1;
sptr->user_id = sap_nr;
sptr->max_l_sdu_length = 246;
sptr->access_sap = ACCSAP; //ALL; // no reservations
sptr->access_station = ACCSTAT; //ALL; // no reservations
sptr->srd = RESPONDER; // na pevno
}
/**********************************************************************/
/* D e s c r i p t i o n : */
/* */
/* build request_block for sap_deactivate for all services */
/**********************************************************************/
void build_rqb_sap_deactivate( fdl_rb *rb, UBYTE sap_nr, BYTE pr )
{
// struct fdl_sap * sptr;
build_head( rb );
// fill header params
rb -> rb2_header.priority = pr;
rb -> rb2_header.seg_length_1 = LEN_SAP_ACTIVATE;
rb -> rb2_header.offset_1 = 80;
rb -> rb2_header.fill_length_1 = 0;
rb -> application_block.service.code = sap_deactivate;
rb -> application_block.dsap = sap_nr;
}
/**********************************************************************/
/* D e s c r i p t i o n : */
/* */
/* build request_block for lsap_status */
/**********************************************************************/
void build_rqb_lsap_status( fdl_rb *rb, UBYTE stat_num, UBYTE sap_nr, BYTE pr )
{
build_head( rb );
// fill header params
rb -> rb2_header.priority = pr;
rb -> rb2_header.fill_length_1 = 0;
rb -> rb2_header.seg_length_2 = 0;
rb -> rb2_header.fill_length_2 = 0;
rb -> rb2_header.offset_2 = 0;
rb -> application_block.service.code = lsap_status;
rb -> application_block.dsap = sap_nr;
rb -> application_block.receive_l_sdu.length = 255;
rb -> application_block.rem_add.station = stat_num; // number of station
}
/**********************************************************************/
/* D e s c r i p t i o n : */
/* */
/* */
/**********************************************************************/
void build_rqb_event_sap( fdl_rb *rb, UBYTE pr )
{
struct event_indication * temp_ptr;
temp_ptr = ( struct event_indication * ) rb->user_data_1;
build_head( rb );
rb -> rb2_header.fill_length_1 = LEN_EVENT_INDICATION;
rb -> rb2_header.seg_length_1 = 260;
rb -> rb2_header.offset_1 = 80;
rb -> rb2_header.priority = pr;
rb -> rb2_header.fill_length_2 = 0;
rb -> rb2_header.seg_length_2 = 0;
rb -> application_block.service.code = await_indication;
rb -> application_block.dsap = EVENT_SAP;
rb -> application_block.send_l_sdu.length = 255;
rb -> application_block.send_l_sdu.buffer_ptr = 0;
rb -> application_block.send_l_sdu.length = 1;
temp_ptr->time_out.threshold = time_out_threshold_default;
temp_ptr->not_syn.threshold = not_syn_threshold_default;
temp_ptr->uart_error.threshold = uart_error_threshold_default;
temp_ptr->out_of_ring.threshold = out_of_ring_threshold_default;
temp_ptr->sdn_not_indicated.threshold = sdn_not_indicated_threshold_default;
temp_ptr->duplicate_address.threshold = duplicate_address_threshold_default;
temp_ptr->hardware_error.threshold = hardware_error_threshold_default;
temp_ptr->mac_error.threshold = mac_error_threshold_default;
temp_ptr->priority = pr;
}
/**********************************************************************/
/* D e s c r i p t i o n : */
/* */
/* Prevede retezec bytu ve forme "xx xx xx" kde xx je sestnactkove */
/* vyjadreni kazdeho bytu na posloupnost bytu (Out) */
/* */
/**********************************************************************/
HexStringToByteString( unsigned char *HexString, int length, unsigned char *Out )
{
// lenght je pocet bytu vyjadrenych v HexStringu nikoliv pocet znaku v HexStringu
unsigned char hi,lo,ch;
int i;
if ( length > 0 )
{
for ( i = 0; i < length; i++ )
{
ch = HexString[i * 3];
if ( ch >= '0' && ch <= '9' )
hi = ch - '0';
if ( ch >= 'a' && ch <= 'f' )
hi = ch - 'a' + 10;
if ( ch >= 'A' && ch <= 'F' )
hi = ch - 'A' + 10;
ch = HexString[i * 3 + 1];
if ( ch >= '0' && ch <= '9' )
lo = ch - '0';
if ( ch >= 'a' && ch <= 'f' )
lo = ch - 'a' + 10;
if ( ch >= 'A' && ch <= 'F' )
lo = ch - 'A' + 10;
Out[i] = ( hi << 4 ) + lo;
}
}
}
/**********************************************************************/
/* D e s c r i p t i o n : */
/* */
/* build request_block for send_srd */
/* */
/**********************************************************************/
void build_rqb_srd( fdl_rb *rb,
BYTE remadd,
UBYTE remsap,
UBYTE source_sap,
BYTE pr,
unsigned char user_data[260] )
{
int j;
build_head( rb );
j = ( strlen( user_data ) + 1 ) / 3; // data predavana ve forme znaku zapsany v retezci sestnactkove jednotlive dvoujznaky
// oddeleny mezerou "xx xx xx"
rb -> rb2_header.fill_length_1 = j + NETTO_DATA_OFFSET;
rb -> rb2_header.seg_length_1 = 260;
rb -> rb2_header.offset_1 = 80;
rb -> rb2_header.priority = pr;
rb -> rb2_header.fill_length_2 = 0;
rb -> rb2_header.seg_length_2 = 260;
rb -> rb2_header.offset_2 = 80 + 260;
rb -> application_block.service.code = srd;
rb -> application_block.dsap = remsap;
rb -> application_block.ssap = source_sap; // local SAP
rb -> application_block.rem_add.station = remadd;
rb -> application_block.rem_add.segment = NO_SEGMENT;
rb -> application_block.serv_class = pr;
rb -> application_block.receive_l_sdu.length = 255;
rb -> application_block.send_l_sdu.length = j;
rb -> user_data_1[0] = NETTO_DATA_OFFSET;
// initialize Data
HexStringToByteString( user_data, j, rb->user_data_1 + NETTO_DATA_OFFSET );
/*
for (i = 0; i < j; i++)
{
C=strtol(user_data, &HH,16);
*user_data++;
*user_data++;
*user_data++;
rb -> user_data_1[NETTO_DATA_OFFSET+i] =C;
}*/
}
/**********************************************************************/
/* D e s c r i p t i o n : */
/* */
/* build request_block for send_sda */
/**********************************************************************/
void build_rqb_sda( fdl_rb *rb,
BYTE remadd,
UBYTE remsap,
UBYTE ssap,
BYTE pr,
unsigned char user_data[260] )
{
int j;
build_head( rb );
j = ( strlen( user_data ) + 1 ) / 3; // data predavana ve forme znaku zapsany v retezci sestnactkove jednotlive dvoujznaky
// oddeleny mezerou "xx xx xx"
rb -> rb2_header.fill_length_1 = strlen( user_data ) + NETTO_DATA_OFFSET;
rb -> rb2_header.seg_length_1 = 260;
rb -> rb2_header.offset_1 = 80;
rb -> rb2_header.priority = pr;
rb -> rb2_header.fill_length_2 = 0;
rb -> rb2_header.seg_length_2 = 0;
rb -> rb2_header.offset_2 = 0;
rb -> application_block.service.code = sda;
rb -> application_block.dsap = remsap;
rb -> application_block.ssap = ssap; // local SAP
rb -> application_block.rem_add.station = remadd;
rb -> application_block.rem_add.segment = NO_SEGMENT;
rb -> application_block.serv_class = pr;
rb -> application_block.send_l_sdu.length = strlen( user_data );
rb -> user_data_1[0] = NETTO_DATA_OFFSET;
// initialize Data
HexStringToByteString( user_data, j, rb->user_data_1 + NETTO_DATA_OFFSET );
/*
// tohle se musi predelat !
for (i = 0; i < strlen(user_data); i++)
rb -> user_data_1[NETTO_DATA_OFFSET+i] = user_data[i];
*/
}
/**********************************************************************/
/* D e s c r i p t i o n : */
/* */
/* build request_block for send_sdn */
/**********************************************************************/
void build_rqb_sdn( fdl_rb *rb,
BYTE remadd,
UBYTE remsap,
UBYTE source_sap,
BYTE pr,
unsigned char user_data[260] )
{
int j;
build_head( rb );
j = ( strlen( user_data ) + 1 ) / 3; // data predavana ve forme znaku zapsany v retezci sestnactkove jednotlive dvoujznaky
// oddeleny mezerou "xx xx xx"
rb -> rb2_header.fill_length_1 = j + NETTO_DATA_OFFSET;
rb -> rb2_header.seg_length_1 = 260;
rb -> rb2_header.offset_1 = 80;
rb -> rb2_header.priority = pr;
rb -> rb2_header.fill_length_2 = 0;
rb -> rb2_header.seg_length_2 = 0;
rb -> rb2_header.offset_2 = 0;
rb -> application_block.service.code = sdn;
rb-> application_block.loc_add.segment = NO_SEGMENT;
rb -> application_block.dsap = remsap;
rb -> application_block.ssap = source_sap;
rb -> application_block.rem_add.station = remadd;
rb -> application_block.rem_add.segment = NO_SEGMENT;
rb -> application_block.serv_class = pr;
rb -> application_block.receive_l_sdu.length = 0;
rb -> application_block.send_l_sdu.length = j;
rb -> user_data_1[0] = NETTO_DATA_OFFSET;
// initialize Data
HexStringToByteString( user_data, j, rb->user_data_1 + NETTO_DATA_OFFSET );
}
/**********************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -