Exemple #1
0
void ReadDataS(u8 id,NameType Name,u8 len,u16 *extractdata)
{
    Dynamixel_Structure *data=NULL;
    u8 temp=0,l;
    u16 i=0;
    for(l=0; l<len; l++)
    {
        temp=temp+Addr[Name+l][1];		//用k缓存 由寄存器个数计算出来的 数据个数
    }
    DataOPE(id,READ_DATA,Name,temp);
    while(( ((data = Receive_Data(XL_TTL))==NULL||(*data).ID !=id))&&i<7000) //获取返回的信息 //获取返回的信息
        i++;
    temp=0;  //缓存k 清零
    if(((*data).ID==id)&&(data !=NULL))
    {
        for(l=0; l<len; l++)
        {
            if(Addr[Name+l][1] == 1)		//判断寄存器长度
                extractdata[l] =(*data).Data[temp++];
            else
            {
                extractdata[l] = (u16)(((*data).Data[temp+1])<<8)+(u16)(((*data).Data[temp]));
                temp=temp+2;
            }
        }
    }
}
Exemple #2
0
int Detect_CMD(void)
{
    u16 i;
    Dynamixel_Structure *data=NULL;
    while((((data = Receive_Data(Upper_CMD))==NULL)||((*data).ID !=250)||(*data).Len!=1)&&(i<200))
        i++;
    if(i < 200)			//超时判断
        return (*data).Data[0];
    else
        return -1;
}
Exemple #3
0
u16 ReadData(u8 id,NameType Name)
{
    Dynamixel_Structure *data=NULL;
    u16 status,i;
    DataOPE(id,READ_DATA,Name,Addr[Name][1]);
    while( (((data = Receive_Data(XL_TTL))==NULL)||((*data).ID !=id)||(((*data).Len-4)!=Addr[Name][1]))&&(i<7000))
        i++; //获取返回的信息
    if(i!=7000)
    {
        if(Addr[Name][1] == 1)		//判断寄存器长度
        {
            status =(*data).Data[0];
        }
        else
        {
            status = ((*data).Data[1]<<8)+(*data).Data[0];
        }
    }
    return status;
}
Exemple #4
0
void WriteData(u8 id,NameType Name,int LEN,...)
{
    u8 k=0,l=0;
    u16 temp=0,i=0;
    Dynamixel_Structure cmd,*data=NULL;
    va_list ap;				//声明 变参链表
    va_start(ap,LEN);	//指向 变参地址
    cmd.ID = id;
    cmd.Insruction = WRITE_DATA;
    cmd.Data[k++]=Addr[Name][0];		//地址
    cmd.Data[k++]=0x00;
    for(l=0; l<LEN; l++)
    {
        if(Addr[Name+l][1]==1)
            cmd.Data [k++] = (u8)((va_arg(ap, int))&0xff);   //取出变参
        else
        {
            temp =va_arg(ap, int);
            cmd.Data [k++] = (u8)(temp&0xff);   //取出变参
            cmd.Data [k++] = (u8)((temp>>8)&0xff);   //取出变参
        }
    }
    va_end(ap);
    cmd.Len = k;     //数据个数+两个地址byte
    Send_Data_TTL(cmd);
    if(id==SPIN_FINGER)
    {
        if(i)
        {
            while((((data = Receive_Data(XL_TTL))==NULL)||((*data).ID !=id)||(*data).Data[0] !=0)&&(i<20000))
            {
                i++;
                if(i==19999)
                {
                    Send_Data_TTL(cmd);
                    i=0;
                }
            }
        }
    }
}
Exemple #5
0
u8 DataOPE(u8 id,u8 instruction,NameType Name,u16 parm)
{
    u8 k=0;
    Dynamixel_Structure cmd;
    cmd.ID = id;

    switch(instruction)
    {
    case WRITE_DATA:
    {
        cmd.Insruction = WRITE_DATA;
        cmd.Data[k++]= Addr[Name][0];   //低地址
        cmd.Data[k++]=0x00;
        if(Addr[Name][1]==1)	//查询数据占用几个Byte
            cmd.Data[k++] = (u8)parm; //写入参数
        else
        {
            cmd.Data[k++] = (u8)(parm&0xff);     			//写入参数
            cmd.Data[k++] = (u8)((parm>>8)&0xff);     			//写入参数
        }
        cmd.Len = k;
        Send_Data_TTL(cmd);
        break;
    }
    case READ_DATA:
    {
        cmd.Insruction = READ_DATA;
        cmd.Data[k++]= Addr[Name][0];      //低地址
        cmd.Data[k++]=0x00;
        cmd.Data[k++]=(u8)parm;    				//此时 parm 代表读取长度   低长度
        cmd.Data[k++]=0x00;
        cmd.Len = k;
        Send_Data_TTL(cmd);
        break;
    }
    case PING:
    {
        Dynamixel_Structure cmd,*data=NULL;
        cmd.ID = id;
        cmd.Insruction = PING;
        cmd.Len = 0x00;
        Send_Data_TTL(cmd);
        while( (data = Receive_Data(XL_TTL))==NULL||(*data).ID !=id); //获取返回的信息
        if((*data).Data[0])		//判断Error Byte
            return 0;
        else
            return 1;						//在线 且无错误信息
    }
    case REG_WRITE:
    {
        cmd.Insruction = REG_WRITE;
        cmd.Data[k++]= Addr[Name][0];   //低地址
        cmd.Data[k++]=0x00;
        if(Addr[Name][1]==1)	//查询数据占用几个Byte
            cmd.Data[k++] = (u8)parm; //写入参数
        else
        {
            cmd.Data[k++] = (u8)(parm&0xff);     			//写入参数
            cmd.Data[k++] = (u8)((parm>>8)&0xff);     			//写入参数
        }
        cmd.Len = k;
        Send_Data_TTL(cmd);
        break;
    }
    case ACTION:
    {
        cmd.ID = id;
        cmd.Insruction = ACTION;
        cmd.Len = 0x00;
        Send_Data_TTL(cmd);
        break;
    }
    case Reboot:
    {
        cmd.ID = id;
        cmd.Insruction = Reboot;
        cmd.Len = 0x00;
        Send_Data_TTL(cmd);
        break;
    }
    case FACTORY_RESET:
    {
        cmd.ID = id;
        cmd.Insruction = FACTORY_RESET;
        cmd.Data[0] = 0x02;
        cmd.Len = 0x01;
        Send_Data_TTL(cmd);
    }
    break;
    default :
        return 1;
    }
    return 1;
}
Exemple #6
0
/**
  * @brief  wifi_init
  *         User API for wifi init
  * @param  None
  * @retval None
  */
WiFi_Status_t wifi_init(wifi_config* config)
{
#ifndef WIFI_USE_VCOM
  uint8_t tx_level;
#endif
  
  WiFi_Status_t status = WiFi_MODULE_SUCCESS;
  
#if DEBUG_PRINT
  printf("\r\nInitializing SPWF01SA1 Interface..\r\n");
#endif  
    
  WiFi_Module_Init();
    
#ifndef WIFI_USE_VCOM  
  wifi_wakeup(WIFI_TRUE);//Prevent from going to sleep during configuration    
  
  /* Soft reset the module */
  wifi_reset();
  
  /* Set localecho1 to 0*/  
  status = SET_Configuration_Value(LOCALECHO1, 0);
  if(status != WiFi_MODULE_SUCCESS) return status;
  
  /* Restore default setting*/    
  Reset_AT_CMD_Buffer();  
  sprintf((char*)(char*)WiFi_AT_Cmd_Buff,AT_RESTORE_DEFAULT_SETTING);  
  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
  if(status == WiFi_MODULE_SUCCESS)
  {
    status = USART_Receive_AT_Resp(Receive_AT_Cmd_Response);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }
  
  /* Switch on HW Flow Control*/  
  status = SET_Configuration_Value(CONSOLE1_HWFC, 1);
  if(status != WiFi_MODULE_SUCCESS) return status; 
  
  if(config->wifi_baud_rate)
  {
    /* Set USART Speed*/  
    status = SET_Configuration_Value(CONSOLE1_SPEED, config->wifi_baud_rate);
    if(status != WiFi_MODULE_SUCCESS) return status; 
  }
  
  /* Set wifi_mode to idle*/  
  status = SET_Configuration_Value(WIFI_MODE, WiFi_IDLE_MODE);
  if(status != WiFi_MODULE_SUCCESS) return status;   
  
  switch(config->ht_mode)
  {
  case WIFI_FALSE:
    status = SET_Configuration_Value(WIFI_HT_MODE, 0);
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Addr(WIFI_OPR_RATE_MASK, "0x00003FCF");
    if(status != WiFi_MODULE_SUCCESS) return status;
    break;
  case WIFI_TRUE:
    status = SET_Configuration_Value(WIFI_HT_MODE, 1);
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Addr(WIFI_OPR_RATE_MASK, "0x003FFFCF");
    if(status != WiFi_MODULE_SUCCESS) return status;
    break;
  default:
    break;
  }
  
  switch(config->power)
  {
  case active:
    status = SET_Configuration_Value(WIFI_POWERSAVE, 0);
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Value(WIFI_SLEEP_ENABLED, 0);  
    if(status != WiFi_MODULE_SUCCESS) return status;
    break;
  case reactive:
    status = SET_Configuration_Value(WIFI_POWERSAVE, 1);
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Value(WIFI_OPERATIONAL_MODE, 11);  
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Value(WIFI_BEACON_WAKEUP, 0);
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Value(WIFI_LISTEN_INTERVAL, 0);
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Value(WIFI_SLEEP_ENABLED, 0);  
    if(status != WiFi_MODULE_SUCCESS) return status;
    break;
  case sleep:
    status = SET_Configuration_Value(WIFI_POWERSAVE, 1);
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Value(WIFI_OPERATIONAL_MODE, 12);  
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Value(WIFI_BEACON_WAKEUP, 10);
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Value(WIFI_LISTEN_INTERVAL, 1);
    if(status != WiFi_MODULE_SUCCESS) return status;
    status = SET_Configuration_Value(WIFI_SLEEP_ENABLED, 1);  
    if(status != WiFi_MODULE_SUCCESS) return status;
    break;
  default:
    break;
  }
  
  switch(config->power_level)
  {
  case low:
  case medium:
  case high:
  case max:
    tx_level=config->power_level*6;
    status = SET_Configuration_Value(WIFI_TX_POWER, tx_level);
    if(status != WiFi_MODULE_SUCCESS) return status;
    break;
  default:
    break;
  }
  
  switch(config->dhcp)
  {
  case off:
  case on:
  case custom:
    status = SET_Configuration_Value(IP_USE_DHCP_SERVER, config->dhcp);
    if(status != WiFi_MODULE_SUCCESS) return status;
    break;
  default:
    break;
  }
  
  /* Set IP address */
  if(config->ip_addr)
  {
    status = SET_Configuration_Addr(WIFI_IP_ADDRESS, config->ip_addr);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }
  /* Set netmask address */
  if(config->netmask_addr)
  {
    status = SET_Configuration_Addr(WIFI_IP_NETMASK, config->netmask_addr);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }
  /* Set default gateway address */
  if(config->gateway_addr)
  {
    status = SET_Configuration_Addr(WIFI_IP_DEFAULT_GATEWAY, config->gateway_addr);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }
  /* Set dns address */
  if(config->dns_addr)
  {
    status = SET_Configuration_Addr(WIFI_IP_DNS, config->dns_addr);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }
  /* Set hostname */
  if(config->host_name)
  {
    status = SET_Configuration_Addr(WIFI_IP_HOSTNAME, config->host_name);  
    if(status != WiFi_MODULE_SUCCESS) return status;
  }
  
  if(config->ap_domain_name)
  {
    status = SET_Configuration_Addr(WIFI_IP_APDOMAINNAME, config->ap_domain_name);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }
  
  if(config->ap_config_page_name)
  {
    status = SET_Configuration_Addr(WIFI_IP_APREDIRECT, config->ap_config_page_name);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }
  
  if(config->http_timeout)
  {
    status = SET_Configuration_Value(WIFI_IP_HTTP_TIMEOUT, config->http_timeout*1000);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }
  if(config->dhcp_timeout)
  {
    status = SET_Configuration_Value(WIFI_IP_DHCP_TIMEOUT, config->dhcp_timeout);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }   

#ifdef MODULE_VERSION_SPWF01Sx_1y
  Reset_AT_CMD_Buffer();  
  sprintf((char*)(char*)WiFi_AT_Cmd_Buff,AT_HTTPD, config->web_server);  
  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
  if(status == WiFi_MODULE_SUCCESS)
  {
    status = USART_Receive_AT_Resp(Receive_AT_Cmd_Response);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }  
#endif  
  
  /*AT+S.TLSCERT2=clean,all */
  Reset_AT_CMD_Buffer();  
  sprintf((char*)(char*)WiFi_AT_Cmd_Buff,"AT+S.TLSCERT2=clean,all\r");        
  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
  if(status == WiFi_MODULE_SUCCESS)
  {
    status = USART_Receive_AT_Resp(Receive_AT_Cmd_Response);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }  
  
  /* save current setting in flash */
  Reset_AT_CMD_Buffer();  
  sprintf((char*)(char*)WiFi_AT_Cmd_Buff,AT_SAVE_CURRENT_SETTING);  
  status = USART_Transmit_AT_Cmd(strlen((char*)WiFi_AT_Cmd_Buff));
  if(status == WiFi_MODULE_SUCCESS)
  {
    status = USART_Receive_AT_Resp(Receive_AT_Cmd_Response);
    if(status != WiFi_MODULE_SUCCESS) return status;
  }   
  
  if(config->wifi_baud_rate)
  {
    UART_Configuration(config->wifi_baud_rate); 
    Receive_Data();//Restart data reception
  }
  
  /* Soft reset the module, Do the second reset after setting all parameters and saving in flash */
  wifi_reset();

  wifi_wakeup(WIFI_FALSE);//De-assert wakeup signal (PC13) to allow sleep if enabled
#endif  //WIFI_USE_VCOM
  
#if DEBUG_PRINT
  printf("\r\nEnd of Initialization..\r\n");
#endif
  
  return status;
}