Пример #1
0
/**
 * \fn BOOL Packet_Get(void)
 * \brief Attempts to get a packet from the received data.
 * \return TRUE if a valid packet was received
 */
BOOL Packet_Get(void)
{
  /* temps for packet receive state machine */
  static PACKET_STATE state = STATE_1;
  static UINT8 command = 0, parameter1 = 0, parameter2 = 0, parameter3 = 0, checksum = 0;

#ifdef NO_INTERRUPT    
  SCI_Poll();
#endif  
  switch(state)
  {
    case STATE_0:
      if (SCI_InChar(&command))
      {
        state = STATE_1;
      }
      break;
    case STATE_1:
      if (SCI_InChar(&parameter1))
      {
        state = STATE_2;
      }
      break;
    case STATE_2:
      if (SCI_InChar(&parameter2))
      {
        state = STATE_3;
      }
      break;
    case STATE_3:
      if (SCI_InChar(&parameter3))
      {
        state = STATE_4;
      }
      break;            
    case STATE_4:
      if (SCI_InChar(&checksum))
      {
        state = STATE_5;
      }
      break;
    case STATE_5:
      if (checksum != Packet_Checksum(command, parameter1, parameter2, parameter3))
      {
        command = parameter1;
        parameter1 = parameter2;
        parameter2 = parameter3;
        parameter3 = checksum;
        state = STATE_4;                    
      }
      else
      {
        Packet_Command = command;
        Packet_Parameter1 = parameter1;
        Packet_Parameter2 = parameter2;
        Packet_Parameter3 = parameter3;
        state = STATE_0;
        return bTRUE;
      }
      break;
    default:
      break;
  }
  return bFALSE;
}
Пример #2
0
int main(int argc, char **argv)
{
    sci_info_t info;
    sci_filter_info_t filter_info;

    char msg[256];
    char *s;
    int i, rc, num_bes, job_key, sizes[1];
    int pollfd;
    void *bufs[1];

    char pwd[256];
    char hfile[256], bpath[256], fpath[256];

    fd_set  fdSet;
    
    getcwd(pwd, 256);
    sprintf(hfile, "%s/host.list", pwd);
#ifdef __64BIT__
    sprintf(bpath, "%s/dsh_be64", pwd);
#else
    sprintf(bpath, "%s/dsh_be", pwd);
#endif

    bzero(&info, sizeof(info));
    info.type = SCI_FRONT_END;
    info.fe_info.mode = SCI_POLLING;
    info.fe_info.hostfile = hfile;
    info.fe_info.bepath = bpath;
    info.fe_info.hndlr = (SCI_msg_hndlr *)&handler;
    info.fe_info.param = NULL;
    
    rc = SCI_Initialize(&info);
    if (rc != SCI_SUCCESS) {
        exit(1);
    }
    rc = SCI_Query(NUM_BACKENDS, &num_bes);
    if (rc != SCI_SUCCESS) {
        exit(1);
    }
    rc = SCI_Query(POLLING_FD, &pollfd);
    if (rc != SCI_SUCCESS) {
        exit(1);
    }
    
    FD_ZERO(&fdSet);
    FD_SET(pollfd, &fdSet);

    while (1) {
        printf(">>> ");
        fflush(stdout);
        memset(msg, 0 , sizeof(msg));
        fgets(msg, sizeof(msg), stdin);
        msg[strlen(msg) - 1] = '\0';

        if (0 == strcmp(msg, "quit"))
            break;
        
        num_resp = 0;
        
        bufs[0] = msg;
        sizes[0] = strlen(msg) + 1;
        rc = SCI_Bcast(SCI_FILTER_NULL, SCI_GROUP_ALL, 1, bufs, sizes);
        if (rc != SCI_SUCCESS) {
            exit(1);
        }
        
        do {
            int rc = ::select(pollfd+1, &fdSet, 0, 0, NULL);
            if (rc > 0) {
                SCI_Poll(-1);
            }
        } while (num_resp < num_bes);
    }
    
    rc = SCI_Terminate();
    
    return rc;
}