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

📄 fmaclien.c

📁 profibus-dp主站源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
  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)                  */
/*                                                                    */
/**********************************************************************/

void 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;
    }

    Out[length] = 0 ;

  }
  else
  {
    Out[0]=0;
  }
}



/**********************************************************************/
/*  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,
                    int length )
{
  build_head( rb );

  rb -> rb2_header.fill_length_1 = length + 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 = length;

  rb -> user_data_1[0] = NETTO_DATA_OFFSET;

  // initialize Data
  memcpy( rb->user_data_1 + NETTO_DATA_OFFSET, user_data, length );

}



/**********************************************************************/
/*  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,
                    int length )
{
  build_head( rb );

  rb -> rb2_header.fill_length_1 = length + 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 = length;

  rb -> user_data_1[0] = NETTO_DATA_OFFSET;

  // initialize Data
  memcpy( rb->user_data_1 + NETTO_DATA_OFFSET, user_data, length );
}



/**********************************************************************/
/*  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,
                    int length )
{
  build_head( rb );

  rb -> rb2_header.fill_length_1 = length + 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 = length;
  rb -> user_data_1[0] = NETTO_DATA_OFFSET;

  // initialize Data
  memcpy( rb->user_data_1 + NETTO_DATA_OFFSET, user_data, length );
}



/**********************************************************************/
/*  D e s c r i p t i o n :                                           */
/*                                                                    */
/*  build request_block for await_indication  for this SAP            */
/**********************************************************************/
void build_rqb_await_indication( fdl_rb *rb, UBYTE remsap, BYTE Priority )
{
  build_head( rb );

  // fill header params
  rb -> rb2_header.seg_length_1 = 260;
  rb -> rb2_header.offset_1 = 80;
  rb -> rb2_header.fill_length_1 = 0;
  rb -> rb2_header.priority = Priority;
  rb -> rb2_header.seg_length_2 = 0;
  rb -> rb2_header.fill_length_2 = 0;
  rb -> rb2_header.offset_2 = 0;

  // application block params
  rb -> application_block.service.code = await_indication;
  rb -> application_block.dsap = remsap;
  rb -> application_block.rem_add.segment = NO_SEGMENT;
  rb -> application_block.serv_class = Priority;
  rb -> application_block.receive_l_sdu.length = 255; // maximum length
  rb -> application_block.send_l_sdu.buffer_ptr = 0 ;
  rb -> application_block.send_l_sdu.length = 1;
}



/**************************************************************************/
/*  fdl_withdraw_indication                                               */
/*  fetch back all await_indication ressources                            */
/**************************************************************************/
/*int Send_fdl_withdraw_indication(UBYTE s,BYTE p)
{
    int ret;
    build_rqb_await_indication(rqb,s,p);
    rqb->application_block.service.code = withdraw_indication;

    ret = fdl_write(rqb);
    return(ret);
    }*/



/**********************************************************************/
/*  D e s c r i p t i o n :                                           */
/*                                                                    */
/*  build request_block for reply_update_single                       */
/**********************************************************************/
void build_rqb_reply_update_single( fdl_rb *rb,
                                    UBYTE source_sap,
                                    BYTE priority,
                                    unsigned char *user_data,
                                    int length )
{
  build_head( rb );

  rb -> rb2_header.fill_length_1 = length + NETTO_DATA_OFFSET;
  rb -> rb2_header.seg_length_1 = 260;
  rb -> rb2_header.offset_1 = 80;
  rb -> rb2_header.priority = priority;


  rb -> rb2_header.fill_length_2 = 0;
  rb -> rb2_header.seg_length_2 = 0;
  rb -> rb2_header.offset_2 = 0;

  rb -> application_block.serv_class = priority;
  rb -> application_block.service.code = reply_update_single;
  rb -> application_block.ssap = source_sap;   // local SAP
  rb -> application_block.send_l_sdu.length = length;
  rb -> user_data_1[0] = NETTO_DATA_OFFSET;

  // initialize Data
  memcpy( rb->user_data_1 + NETTO_DATA_OFFSET, user_data, length );
}




/**********************************************************************/
/*  D e s c r i p t i o n :                                           */
/*                                                                    */
/*  build request_block for FDL_statistic_counter                     */
/**********************************************************************/
void build_rqb_statistic_count( fdl_rb *rb, BYTE priority )
{
  build_head( rb );

  rb -> rb2_header.fill_length_1 = 0;
  rb -> rb2_header.seg_length_1 = sizeof( statistic_ctr_list );
  rb -> rb2_header.offset_1 = 80;
  rb -> rb2_header.priority = priority;

  rb -> rb2_header.fill_length_2 = 0;
  rb -> rb2_header.seg_length_2 = 0;

  rb -> application_block.serv_class = priority;
  rb -> application_block.service.code = fdl_read_statistic_ctr;
}




/**********************************************************************/
/*  D e s c r i p t i o n :                                           */
/*                                                                    */
/*  build request_block for reply_update_multiple                     */
/**********************************************************************/
void build_rqb_reply_update_multiple( fdl_rb *rb,
                                      UBYTE source_sap,
                                      BYTE priority,
                                      unsigned char *user_data,
                                      int length )
{
  build_head( rb );

  rb -> rb2_header.fill_length_1 = length + NETTO_DATA_OFFSET;
  rb -> rb2_header.seg_length_1 = 260;
  rb -> rb2_header.offset_1 = 80;
  rb -> rb2_header.priority = priority;

  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 = reply_update_multiple;
  rb -> application_block.ssap = source_sap;   // local SAP
  rb -> application_block.serv_class = priority;
  rb -> application_block.send_l_sdu.length = length;
  rb -> user_data_1[0] = NETTO_DATA_OFFSET;

  // initialize Data
  memcpy( rb->user_data_1 + NETTO_DATA_OFFSET, user_data, length );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -