telldus/examples/dotnet/sensors/SensorPollWin/Program.cs
2011-05-19 15:31:07 +00:00

69 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace SensorPollWin
{
unsafe class Program
{
[DllImport("TelldusCore.dll")]
public static extern void tdInit();
[DllImport("TelldusCore.dll")]
public static extern void tdClose();
[DllImport("TelldusCore.dll")]
public static extern int tdSensor(char* protocol, int protocolLength, char* model, int modelLength, int* id, int* dataTypes);
[DllImport("TelldusCore.dll")]
public static extern int tdSensorValue(char* protocol, char* model, int id, int dataType, char* value, int valueLength, int* timestamp);
static unsafe void Main(string[] args)
{
int protocolstringsize = 20;
int modelstringsize = 30;
int valuestringsize = 20;
char* protocol = (char*)Marshal.AllocHGlobal(Marshal.SystemDefaultCharSize * protocolstringsize);
char* model = (char*)Marshal.AllocHGlobal(Marshal.SystemDefaultCharSize * modelstringsize);
IntPtr id = Marshal.AllocHGlobal(sizeof(int));
IntPtr dataType = Marshal.AllocHGlobal(sizeof(int));
Console.WriteLine("getting sensors");
tdInit();
while (tdSensor(protocol, protocolstringsize, model, modelstringsize, (int*)id, (int*)dataType) == 0)
{
Console.WriteLine("Sensor: " + System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Unicode.GetBytes(new string(protocol))) + " " + System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Unicode.GetBytes(new string(model))));
char* value = (char*)Marshal.AllocHGlobal(Marshal.SystemDefaultCharSize * valuestringsize);
IntPtr timestamp = Marshal.AllocHGlobal(sizeof(int));
if ((Marshal.ReadIntPtr(dataType).ToInt32() & 1) != 0)
{
tdSensorValue(protocol, model, Marshal.ReadIntPtr(id).ToInt32(), 1, value, valuestringsize, (int*)timestamp);
Console.WriteLine("Temperature: " + System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Unicode.GetBytes(new string(value))) + "C, " + datify(Marshal.ReadIntPtr(timestamp).ToInt32()));
}
if ((Marshal.ReadIntPtr(dataType).ToInt32() & 2) != 0)
{
tdSensorValue(protocol, model, Marshal.ReadIntPtr(id).ToInt32(), 2, value, valuestringsize, (int*)timestamp);
Console.WriteLine("Humidity: " + System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Unicode.GetBytes(new string(value))) + "%, " + datify(Marshal.ReadIntPtr(timestamp).ToInt32()));
}
Console.WriteLine("");
Marshal.FreeHGlobal((IntPtr)value);
Marshal.FreeHGlobal(timestamp);
}
Marshal.FreeHGlobal((IntPtr)protocol);
Marshal.FreeHGlobal((IntPtr)model);
Marshal.FreeHGlobal(id);
Marshal.FreeHGlobal(dataType);
tdClose();
}
private static string datify(int timestamp){
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
dateTime = dateTime.AddSeconds(timestamp);
dateTime = dateTime.ToLocalTime();
return dateTime.ToString();
}
}
}