Пример #1
0
int main()
{
    // Initialize PortHandler Structs
    // Set the port path
    // Get methods and members of PortHandlerLinux or PortHandlerWindows
    int port_num = PortHandler(DEVICENAME);

    // Initialize PacketHandler Structs 
    PacketHandler();

    int dxl_comm_result = COMM_TX_FAIL;             // Communication result

    UINT8_T dxl_error = 0;                          // Dynamixel error
    UINT8_T dxl_baudnum_read;                       // Read baudnum

    // Open port
    if (OpenPort(port_num))
    {
        printf("Succeeded to open the port!\n");
    }
    else
    {
        printf("Failed to open the port!\n");
        printf("Press any key to terminate...\n");
        _getch();
        return 0;
    }

    // Set port baudrate
    if (SetBaudRate(port_num, BAUDRATE))
    {
        printf("Succeeded to change the baudrate!\n");
    }
    else
    {
        printf("Failed to change the baudrate!\n");
        printf("Press any key to terminate...\n");
        _getch();
        return 0;
    }

    // Read present baudrate of the controller
    printf("Now the controller baudrate is : %d\n", GetBaudRate(port_num));

    // Try factoryreset
    printf("[ID:%03d] Try factoryreset : ", DXL_ID);
    FactoryReset(port_num, PROTOCOL_VERSION, DXL_ID, OPERATION_MODE);
    if ((dxl_comm_result = GetLastTxRxResult(port_num, PROTOCOL_VERSION)) != COMM_SUCCESS)
    {
        printf("Aborted\n");
        PrintTxRxResult(PROTOCOL_VERSION, dxl_comm_result);
        return 0;
    }
    else if ((dxl_error = GetLastRxPacketError(port_num, PROTOCOL_VERSION)) != 0)
        PrintRxPacketError(PROTOCOL_VERSION, dxl_error);

    // Wait for reset
    printf("Wait for reset...\n");
    msecSleep(2000);

    printf("[ID:%03d] FactoryReset Success!\n", DXL_ID);

    // Set controller baudrate to Dynamixel default baudrate
    if (SetBaudRate(port_num, FACTORYRST_DEFAULTBAUDRATE))
    {
        printf("Succeed to change the controller baudrate to : %d\n", FACTORYRST_DEFAULTBAUDRATE);
    }
    else
    {
        printf("Failed to change the controller baudrate\n");
        printf("Press any key to terminate...\n");
        _getch();
        return 0;
    }

    // Read Dynamixel baudnum
    dxl_baudnum_read = Read1ByteTxRx(port_num, PROTOCOL_VERSION, DXL_ID, ADDR_PRO_BAUDRATE);
    if ((dxl_comm_result = GetLastTxRxResult(port_num, PROTOCOL_VERSION)) != COMM_SUCCESS)
        PrintTxRxResult(PROTOCOL_VERSION, dxl_comm_result);
    else if ((dxl_error = GetLastRxPacketError(port_num, PROTOCOL_VERSION)) != 0)
        PrintRxPacketError(PROTOCOL_VERSION, dxl_error);
    else
        printf("[ID:%03d] DXL baudnum is now : %d\n", DXL_ID, dxl_baudnum_read);

    // Write new baudnum
    Write1ByteTxRx(port_num, PROTOCOL_VERSION, DXL_ID, ADDR_PRO_BAUDRATE, NEW_BAUDNUM);
    if ((dxl_comm_result = GetLastTxRxResult(port_num, PROTOCOL_VERSION)) != COMM_SUCCESS)
        PrintTxRxResult(PROTOCOL_VERSION, dxl_comm_result);
    else if ((dxl_error = GetLastRxPacketError(port_num, PROTOCOL_VERSION)) != 0)
        PrintRxPacketError(PROTOCOL_VERSION, dxl_error);
    else
        printf("[ID:%03d] Set Dynamixel baudnum to : %d\n", DXL_ID, NEW_BAUDNUM);

    // Set port baudrate to BAUDRATE
    if (SetBaudRate(port_num, BAUDRATE))
    {
        printf("Succeed to change the controller baudrate to : %d\n", BAUDRATE);
    }
    else
    {
        printf("Failed to change the controller baudrate\n");
        printf("Press any key to terminate...\n");
        _getch();
        return 0;
    }

    msecSleep(200);

    // Read Dynamixel baudnum
    dxl_baudnum_read = Read1ByteTxRx(port_num, PROTOCOL_VERSION, DXL_ID, ADDR_PRO_BAUDRATE);
    if ((dxl_comm_result = GetLastTxRxResult(port_num, PROTOCOL_VERSION)) != COMM_SUCCESS)
        PrintTxRxResult(PROTOCOL_VERSION, dxl_comm_result);
    else if ((dxl_error = GetLastRxPacketError(port_num, PROTOCOL_VERSION)) != 0)
        PrintRxPacketError(PROTOCOL_VERSION, dxl_error);
    else
        printf("[ID:%03d] Dynamixel Baudnum is now : %d\n", DXL_ID, dxl_baudnum_read);

    // Close port
    ClosePort(port_num);

    return 0;
}
Пример #2
0
void FactoryReset(mozilla::dom::FactoryResetReason& aReason)
{
  AssertMainThread();
  PROXY_IF_SANDBOXED(FactoryReset(aReason));
}
Пример #3
0
void FactoryReset()
{
  AssertMainThread();
  PROXY_IF_SANDBOXED(FactoryReset());
}
Пример #4
0
// Process a touch event
void ProcessTouch(DisplayField *df)
{
	if (df->IsButton())
	{
		Button *f = static_cast<Button*>(df);
		currentButton = f;
		mgr.Press(f, true);
		Event ev = (Event)(f->GetEvent());
		switch(ev)
		{
		case evTabControl:
		case evTabPrint:
//		case evTabFiles:
		case evTabMsg:
		case evTabInfo:
			ChangeTab(f);
			break;

		case evAdjustActiveTemp:
		case evAdjustStandbyTemp:
			if (static_cast<IntegerButton*>(f)->GetValue() < 0)
			{
				static_cast<IntegerButton*>(f)->SetValue(0);
			}
			Adjusting(f);
			mgr.SetPopup(setTempPopup, tempPopupX, popupY);
			break;

		case evAdjustSpeed:
		case evExtrusionFactor:
			Adjusting(f);
			mgr.SetPopup(setTempPopup, tempPopupX, popupY);
			break;

		case evSetInt:
			if (fieldBeingAdjusted != NULL)
			{
				int val = static_cast<const IntegerButton*>(fieldBeingAdjusted)->GetValue();
				switch(fieldBeingAdjusted->GetEvent())
				{
				case evAdjustActiveTemp:
					{
						int heater = fieldBeingAdjusted->GetIParam();
						if (heater == 0)
						{
							SerialIo::SendString("M140 S");
							SerialIo::SendInt(val);
							SerialIo::SendChar('\n');
						}
						else
						{
							SerialIo::SendString("G10 P");
							SerialIo::SendInt(heater - 1);
							SerialIo::SendString(" S");
							SerialIo::SendInt(val);
							SerialIo::SendChar('\n');
						}
					}
					break;
					
				case evAdjustStandbyTemp:
					{
						int heater = fieldBeingAdjusted->GetIParam();
						if (heater > 0)
						{
							SerialIo::SendString("G10 P");
							SerialIo::SendInt(heater - 1);
							SerialIo::SendString(" R");
							SerialIo::SendInt(val);
							SerialIo::SendChar('\n');
						}
					}
					break;
				
				case evExtrusionFactor:
					{
						int heater = fieldBeingAdjusted->GetIParam();
						SerialIo::SendString("M221 P");
						SerialIo::SendInt(heater);
						SerialIo::SendString(" S");
						SerialIo::SendInt(val);
						SerialIo::SendChar('\n');
					}
					break;
					
				default:
					{
						const char* null cmd = fieldBeingAdjusted->GetSParam();
						if (cmd != NULL)
						{
							SerialIo::SendString(cmd);
							SerialIo::SendInt(val);
							SerialIo::SendChar('\n');
						}
					}
					break;
				}
				mgr.SetPopup(NULL);
				StopAdjusting();
			}
			break;

		case evAdjustInt:
			if (fieldBeingAdjusted != NULL)
			{
				static_cast<IntegerButton*>(fieldBeingAdjusted)->Increment(f->GetIParam());
				ShortenTouchDelay();
			}
			break;

		case evMove:
			mgr.SetPopup(movePopup, movePopupX, movePopupY);
			break;
		
		case evMoveX:
		case evMoveY:
		case evMoveZ:
			SerialIo::SendString("G91\nG1 ");
			SerialIo::SendChar((ev == evMoveX) ? 'X' : (ev == evMoveY) ? 'Y' : 'Z');
			SerialIo::SendString(f->GetSParam());
			SerialIo::SendString(" F6000\nG90\n");
			break;

		case evListFiles:
			FileManager::DisplayFilesList();
			break;

		case evListMacros:
			FileManager::DisplayMacrosList();
			break;

		case evCalTouch:
			CalibrateTouch();
			CheckSettingsAreSaved();
			break;

		case evFactoryReset:
			PopupAreYouSure(ev, "Confirm factory reset");
			break;

		case evRestart:
			PopupAreYouSure(ev, "Confirm restart");
			break;

		case evSaveSettings:
			SaveSettings();
			if (restartNeeded)
			{
				PopupRestart();
			}
			break;

		case evSelectHead:
			{
				int head = f->GetIParam();
				if (head == 0)
				{
					// There is no command to switch the bed to standby temperature, so we always set it to the active temperature
					SerialIo::SendString("M140 S");
					SerialIo::SendInt(activeTemps[0]->GetValue());
					SerialIo::SendChar('\n');
				}
				else if (head < (int)maxHeaters)
				{
					if (heaterStatus[head] == 2)		// if head is active
					{
						SerialIo::SendString("T-1\n");
					}
					else
					{
						SerialIo::SendChar('T');
						SerialIo::SendInt(head - 1);
						SerialIo::SendChar('\n');
					}
				}
			}
			break;
	
		case evFile:
			{
				const char *fileName = f->GetSParam();
				if (fileName != nullptr)
				{
					currentFile = fileName;
					SerialIo::SendString("M36 /gcodes/");			// ask for the file info
					SerialIo::SendString(currentFile);
					SerialIo::SendChar('\n');
					fpNameField->SetValue(currentFile);
					// Clear out the old field values, they relate to the previous file we looked at until we process the response
					fpSizeField->SetValue(0);						// would be better to make it blank
					fpHeightField->SetValue(0.0);					// would be better to make it blank
					fpLayerHeightField->SetValue(0.0);				// would be better to make it blank
					fpFilamentField->SetValue(0);					// would be better to make it blank
					generatedByText.clear();
					fpGeneratedByField->SetChanged();
					mgr.SetPopup(filePopup, (DisplayX - filePopupWidth)/2, (DisplayY - filePopupHeight)/2);
				}
				else
				{
					ErrorBeep();
				}
			}
			break;

		case evMacro:
			{
				const char *fileName = f->GetSParam();
				if (fileName != nullptr)
				{
					if (fileName[0] == '*')		// if it's a directory
					{
					
					}
					else
					{
						SerialIo::SendString("M98 P/macros/");
						SerialIo::SendString(fileName);
						SerialIo::SendChar('\n');
					} 
				}
				else
				{
					ErrorBeep();
				}
			}
			break;

		case evPrint:
			mgr.SetPopup(NULL);
			if (currentFile != NULL)
			{
				SerialIo::SendString("M32 ");
				SerialIo::SendString(currentFile);
				SerialIo::SendChar('\n');
				printingFile.copyFrom(currentFile);
				currentFile = NULL;							// allow the file list to be updated
				CurrentButtonReleased();
				ChangeTab(tabPrint);
			}
			break;

		case evCancelPrint:
			CurrentButtonReleased();
			mgr.SetPopup(NULL);
			currentFile = NULL;								// allow the file list to be updated
			break;

		case evDeleteFile:
			CurrentButtonReleased();;
			PopupAreYouSure(ev, "Confirm file delete");
			break;

		case evSendCommand:
		case evPausePrint:
		case evResumePrint:
		case evReset:
			SerialIo::SendString(f->GetSParam());
			SerialIo::SendChar('\n');
			break;

		case evScrollFiles:
			FileManager::Scroll(f->GetIParam());
			ShortenTouchDelay();				
			break;

		case evKeyboard:
			mgr.SetPopup(keyboardPopup, keyboardPopupX, keyboardPopupY);
			break;

		case evInvertDisplay:
			nvData.lcdOrientation = static_cast<DisplayOrientation>(nvData.lcdOrientation ^ (ReverseX | ReverseY | InvertText | InvertBitmap));
			lcd.InitLCD(nvData.lcdOrientation);
			CalibrateTouch();
			CheckSettingsAreSaved();
			break;

		case evSetBaudRate:
			Adjusting(f);
			mgr.SetPopup(baudPopup, fullWidthPopupX, popupY);
			break;

		case evAdjustBaudRate:
			nvData.baudRate = f->GetIParam();
			SerialIo::Init(nvData.baudRate);
			baudRateButton->SetValue(nvData.baudRate);
			CheckSettingsAreSaved();
			CurrentButtonReleased();
			mgr.SetPopup(NULL);
			StopAdjusting();
			break;

		case evSetVolume:
			Adjusting(f);
			mgr.SetPopup(volumePopup, fullWidthPopupX, popupY);
			break;

		case evAdjustVolume:
			nvData.touchVolume = f->GetIParam();
			volumeButton->SetValue(nvData.touchVolume);
			TouchBeep();									// give audible feedback of the touch at the new volume level
			CheckSettingsAreSaved();
			break;

		case evSetLanguage:
			Adjusting(f);
			mgr.SetPopup(languagePopup, fullWidthPopupX, popupY);
			break;

		case evAdjustLanguage:
			nvData.language = f->GetIParam();
			languageButton->SetText(longLanguageNames[nvData.language]);
			CheckSettingsAreSaved();						// not sure we need this because we are going to reset anyway
			break;

		case evYes:
			CurrentButtonReleased();
			mgr.SetPopup(nullptr);
			switch (eventToConfirm)
			{
			case evFactoryReset:
				FactoryReset();
				break;

			case evDeleteFile:
				if (currentFile != nullptr)
				{
					SerialIo::SendString("M30 ");
					SerialIo::SendString(currentFile);
					SerialIo::SendChar('\n');
					filesListTimer.SetPending();
					currentFile = nullptr;
				}
				break;

			case evRestart:
				if (nvData != savedNvData)
				{
					SaveSettings();
				}
				Restart();
				break;

			default:
				break;
			}
			eventToConfirm = evNull;
			currentFile = NULL;
			break;

		case evCancel:
			eventToConfirm = evNull;
			currentFile = NULL;
			CurrentButtonReleased();
			mgr.SetPopup(NULL);
			break;

		case evKey:
			if (!userCommandBuffer.full())
			{
				userCommandBuffer.add((char)f->GetIParam());
				userCommandField->SetChanged();
			}
			break;

		case evBackspace:
			if (!userCommandBuffer.isEmpty())
			{
				userCommandBuffer.erase(userCommandBuffer.size() - 1);
				userCommandField->SetChanged();
				ShortenTouchDelay();
			}
			break;

		case evSendKeyboardCommand:
			if (userCommandBuffer.size() != 0)
			{
				SerialIo::SendString(userCommandBuffer.c_str());
				SerialIo::SendChar('\n');
			}
			break;

		default:
			break;
		}