Software Archive
Read-only legacy content
Announcements
FPGA community forums and blogs on community.intel.com are migrating to the new Altera Community and are read-only. For urgent support needs during this transition, please visit the FPGA Design Resources page or contact an Altera Authorized Distributor.
17060 Discussions

Intel Mobile SDK Power and Observer query

conrad67
Beginner
939 Views

Hi fellas, i was hoping somebody could help me out.

I am using the Intel Mobile SDK 1.2 in order to access powerevents when the power is connected and disconnected.

Currently i have the events registering and a message box poping up when this happens, but i want to be able to log the events to a text box on my windows form, also i want to be able to re-size a picture when the power is disconnected, and then make it larger when power is connected again (power saving)but i cannot do either of these, it just seems to be the message box that pops up. I am using C#

Any ideas as to why this is not working for me, i have access to everything when the form.

here is my code:

thanks fellas,

PS my form is [MTATHREAD]

using

System;

using

System.Collections.Generic;

using

System.ComponentModel;

using

System.Data;

using

System.Drawing;

using

System.Text;

using

System.Windows.Forms;

using

System.Threading;

using

Intel.Mobile.Base;

using

Intel.Mobile.Battery;

using

Intel.Mobile.Context;

namespace

PowerExample

{

public partial class Form2 : Form

{

ContextClass myClass = new ContextClass();

public PowerInstance myInstance;

internal static bool LoopFlag = true;

internal static readonly System.Object Mutex = new System.Object();

private DelegateObserver.ObserverNotifyDelegate DisconnectNotifyDelegate = null;

public Form2()

{

InitializeComponent();

myInstance = (

PowerInstance)

myClass.GetInstance(

"Power");

DelegateObserver.ObserverNotifyDelegate del = new DelegateObserver.ObserverNotifyDelegate(ConnectedEventHandler);

Observer connectedChangeObsvr = new DelegateObserver(del);

myInstance.ExternallyPowered.AddObserver(connectedChangeObsvr);

myInstance.InternallyPowered.AddObserver(connectedChangeObsvr);

}

private void ConnectedEventHandler(Event eEvent)

{

try

{

if (eEvent.GetType() == EventBase.EventType.eExternallyPowered)

{

//textBox1.AppendText("Connected 1 " + DateTime.Now);

MessageBox.Show("Ac Adapter Connectd");

//textBox1.AppendText("Conneted 2 " + DateTime.Now);

}

if(eEvent.GetType() == EventBase.EventType.eInternallyPowered)

{

//textBox1.AppendText("Disconnect 1 " + DateTime.Now);

MessageBox.Show("Ac Adapter Disconnected");

//textBox1.AppendText("Disconnect 2 " + DateTime.Now);

}

}

catch (IntelMobileException ex)

{

textBox1.Text = (ex.ToString());

}

catch (Exception e)

{

textBox1.Text = (

"------------ Exception Occurred ------------");

textBox1.Text = (

"Message: " + e.Message);

textBox1.Text = (

"Source: " + e.Source);

textBox1.Text = (

"Target Site: " + e.TargetSite);

}

}

}

internal class DelegateObserver : Observer

{

public delegate void ObserverNotifyDelegate(Event eEvent);

public DelegateObserver(ObserverNotifyDelegate Notifydelegate)

{

this.MyNotifydelegate = Notifydelegate;

}

public override void Notify(Event ev)

{

this.MyNotifydelegate(ev);

}

private ObserverNotifyDelegate MyNotifydelegate;

}

}

0 Kudos
6 Replies
Bin_Z_Intel
Employee
939 Views

Hi, I have reproduced your problem. Because the event notification is a separate thread, it seems in a new thread that can't directlyinteract with the control created by the main thread. Just like creating a new thread and you will meet the same problem.

I will investigate more and get you later for the solution in such case.

0 Kudos
conrad67
Beginner
939 Views

thanks for getting back to me with that friend, id be reallly greatful if you could sort of a soultion for me or point me in the rigth direction to sort it myself as i have never used threading before.

thanks again for your help and i look forward to hearing from you again

0 Kudos
Bin_Z_Intel
Employee
939 Views

Hi, this is about Multitheaded Windows Forms Control as you are using event notification in MPSDK. MSDN has the detail ms-help://MS.MSDNQTR.2005JAN.1033/cpguide/html/cpco
nDevelopingMultithreadedWindowsFormsControl.htm

Hereis the samplesolution (part of code)in your case, to add one delegate and marshal the calling to Windows control in multi-threading. Please note the string is passed instead of event object during marshalling.

public partial class Form2 : Form
{
...
delegate void LogDelegate(string str);
LogDelegate logHandler;

public Form2()
{
logHandler = new LogDelegate(LogEvent);
...
}

private void ConnectedEventHandler(Event eEvent)
{
try
{
if (eEvent.GetType() == EventBase.EventType.eExternallyPowered)
{
this.BeginInvoke(logHandler, new object[] { "Connected" });
}
if (eEvent.GetType() == EventBase.EventType.eInternallyPowered)
{
this.BeginInvoke(logHandler, new object[] { "Disconnected" });
}
}
catch (IntelMobileException ex)
{
...
}
catch (Exception e)
{
...
}
}

private void LogEvent(string acType)
{
tex tBox1.AppendText(acType + " " + DateTime.Now);
}
}

0 Kudos
conrad67
Beginner
939 Views

worked perferct my friend thank you very much

i have one additionl query for you if you do not mind

i would like to add in windows media player into my app but it will only allow to play in single thread apps, is there any way round this?

many thanks

0 Kudos
conrad67
Beginner
939 Views

worked perferct my friend thank you very much

i have one additionl query for you if you do not mind

i would like to add in windows media player into my app but it will only allow to play in single thread apps, is there any way round this?

many thanks

0 Kudos
Bin_Z_Intel
Employee
939 Views

Hi, I don't know how Windows Media Player works here. If you wantto get events asynchronously in MPSDK, it only supports multi-thread applications.

You can consider inter-process communication for your single thread app.

-Bin

0 Kudos
Reply