⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fmaclien.c

📁 SPC3 SETUP PROGRAMS SP C3 SETUP PROGRAMS
💻 C
📖 第 1 页 / 共 3 页
字号:
  // 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 + -