TA的每日心情 | 开心 2016-7-19 10:35 |
---|
签到天数: 8 天 连续签到: 1 天 [LV.3]偶尔看看II
|
本帖最后由 netlhx 于 2016-12-23 15:12 编辑
WINDOWS下点灯的程序,在WINDOWS IOT系统里面比较常见,因为提供了相应的SDK。
UP上的GPIO分布图
WINDOWS 10下准备来尝试点个灯,翻遍了论坛,只找到一个例程叫DIO,而且代码也没有,只有一个DLL,好在提供了例程,参考着做了个非常丑陋的通用点灯程序。
程序界面,用的是C#写的,因为大家都是X86架构,所以也就没有什么交叉编译的说法了,直接在自用的电脑上面写,写好了复制到UP上就可以使用了。
亮灯
灭灯
由于没有提供完整的源代码,只好参考例程代码,凑合着写,界面用的是WPF,网格布局,一个网格里放一个控件。
上点关键代码- public MainWindow()
- {
- InitializeComponent();
- UInt32 err = EApiLibInitialize();
- if (err != EAPI.EAPI_STATUS_INITIALIZED)
- {
- MessageBox.Show("Error Initializing Device!");
- return;
- }
- for (int k = 0; k < 40; k++)
- {
- EApiGPIOGetCaps(EAPI.EAPI_GPIO_GPIO_ID((UInt32)k), ref nPinCount, ref bDioDisable);
- if (bDioDisable != 0x01)
- {
- gpioPinCombo.Items.Add("GPIO-" + k);
- EApiGPIOSetDirection((uint)k, 0xFFFFFFFF, EAPI.EAPI_GPIO_OUTPUT);
- }
- }
- gpioPinCombo.SelectedIndex = 0;
- }
- ~MainWindow()
- {
- EApiLibUnInitialize();
- }
- private void gpioPinCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
-
- string pinName = (((ComboBox)sender).SelectedItem.ToString()).Split('-')[1];
- uint p = Convert.ToUInt32(pinName);
- UpdateStatus(p);
- }
- private void UpdateStatus(uint p)
- {
- UInt32 err = EAPI.EAPI_STATUS_SUCCESS;
- UInt32 bInput = 0x00;
- UInt32 bHigh = 0x00;
- err = EApiGPIOGetDirection(p, 0xFFFFFFFF, ref bInput);
- if (err != EAPI.EAPI_STATUS_SUCCESS)
- {
- MessageBox.Show("Read GPIO Failure!");
- return;
- }
- if (bInput == 1)
- gpioDirLabel.Content = "Dir: INPUT";
- else
- gpioDirLabel.Content = "Dir: OUTPUT";
- //LEVEL UPDATE
- err = EApiGPIOGetLevel(p, 0xFFFFFFFF, ref bHigh);
- if (err != EAPI.EAPI_STATUS_SUCCESS)
- {
- MessageBox.Show("Read GPIO Failure!");
- return;
- }
- if (bHigh == 1)
- gpioStatusLabel.Content = "LEVEL: HIGH";
- else
- gpioStatusLabel.Content = "LEVEL: LOW";
- }
- private void toggleButton_Click(object sender, RoutedEventArgs e)
- {
- string pinName = (gpioPinCombo.SelectedItem.ToString()).Split('-')[1];
- uint p = Convert.ToUInt32(pinName);
- uint level = 0;
- EApiGPIOGetLevel(p, 0xFFFFFFFF, ref level);
- if (level == 0)
- EApiGPIOSetLevel(p, 0xFFFFFFFF, EAPI.EAPI_GPIO_HIGH);
- else
- EApiGPIOSetLevel(p, 0xFFFFFFFF, EAPI.EAPI_GPIO_LOW);
- UpdateStatus(p);
- }
- }
- }
复制代码 凑合着看吧。
附可用的执行文件包:
UP_Led.zip
(901.56 KB, 下载次数: 63)
|
|