Hello,
I discover that mbed provide a online compiler compliant to RVDS 4.1 for users:
http://mbed.org/handbook/mbed-Compiler
What about this facility for Netduino users who wants to compile NETMF kit ?
rgds,
- Netduino Forums
- → Viewing Profile: Topics: pascal06
The Netduino forums have been replaced by new forums at community.wildernesslabs.co.
This site has been preserved for archival purposes only
and the ability to make new accounts or posts has been turned off.
Community Stats
- Group Members
- Active Posts 95
- Profile Views 11665
- Member Title Advanced Member
- Age Age Unknown
- Birthday Birthday Unknown
-
Gender
Male
-
Location
France
Topics I've Started
RVDS Online Compiler
10 May 2011 - 11:14 AM
Netbios
04 October 2010 - 09:30 PM
Hello,
Netbios name resolution can be a easy way to communicate with a NetduinoPlus. Especialy in case of using DHCP. With this feature, you can use (only on local subnet) the name of your Netduino instead of using IP address. But, it seems that NetduinoPlus doesn't support local broadcast UDP. My sample works on Emulator, but not on NetduinoPlus.
To test this program, run it on emulator and try to ping NETDUINO with a computer connected on the same subnet.
Is it possible to change the configuration of lwIP to support udp local broadcast ?
Pascal
Netbios name resolution can be a easy way to communicate with a NetduinoPlus. Especialy in case of using DHCP. With this feature, you can use (only on local subnet) the name of your Netduino instead of using IP address. But, it seems that NetduinoPlus doesn't support local broadcast UDP. My sample works on Emulator, but not on NetduinoPlus.
using System; using System.Threading; using Microsoft.SPOT; using System.Net.Sockets; using System.Net; using Microsoft.SPOT.Net.NetworkInformation; namespace Netbios { public class Program { private const int UDP_PORT_NETBIOS_NS = 137; public static Byte[] EncodeNetbiosName(string Name) { byte[] result = new byte[32]; char c; for (int i = 0; i < 15; i++) { c = i < Name.Length ? Name[i] : ' '; result[i * 2] = (byte)(((byte)(c) >> 4) + 65); result[(i * 2) + 1] = (byte)(((byte)(c) & 0x0f) + 65); } result[30] = 0x41; result[31] = 0x41; return result; } public static string DecodeNetbiosName(byte[] NbName) { string result = ""; for (int i = 0; i < 15; i++) { byte b1 = NbName[i * 2]; byte b2 = NbName[(i * 2) + 1]; char c = (char)( ( (b1 - 65) << 4 ) | ( b2 - 65 ) ); result += c; } return result; } public static bool BytesEqual(byte[] Array1, int Start1, byte[] Array2, int Start2, int Count) { bool result = true; for (int i = 0; i < Count - 1; i++) { if (Array1[i + Start1] != Array2[i + Start2]) { result = false; break; } } return result; } public static void Main() { byte[] myNbName = EncodeNetbiosName("NETDUINO"); NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces(); using (Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) { EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, UDP_PORT_NETBIOS_NS); byte[] IP = IPAddress.Parse(networkInterfaces[0].IPAddress).GetAddressBytes(); serverSocket.Bind(remoteEndPoint); while (true) { if (serverSocket.Poll(1000, //timeout in micro seconds SelectMode.SelectRead)) { byte[] inBuffer = new byte[serverSocket.Available]; int count = serverSocket.ReceiveFrom(inBuffer, ref remoteEndPoint); if ((inBuffer[2] >> 3) == 0) // opcode == 0 { byte[] nbName = new byte[32]; Array.Copy(inBuffer, 13, nbName, 0, 32); Debug.Print("NETBIOS NAME QUERY: "+DecodeNetbiosName(nbName)); if (BytesEqual(inBuffer, 13, myNbName, 0, 32)) { byte[] outBuffer = new byte[62]; outBuffer[0] = inBuffer[0]; // trnid outBuffer[1] = inBuffer[1]; // trnid outBuffer[2] = 0x85; outBuffer[3] = 0x00; outBuffer[4] = 0x00; outBuffer[5] = 0x00; outBuffer[6] = 0x00; outBuffer[7] = 0x01; outBuffer[8] = 0x00; outBuffer[9] = 0x00; outBuffer[10] = 0x00; outBuffer[11] = 0x00; outBuffer[12] = 0x20; for (int i = 0; i < 32; i++) { outBuffer[i + 13] = myNbName[i]; } outBuffer[45] = 0x00; outBuffer[46] = 0x00; outBuffer[47] = 0x20; // RR_TYPE: NB outBuffer[48] = 0x00; outBuffer[49] = 0x01; // RR_CLASS: IN outBuffer[50] = 0x00; // TTL outBuffer[51] = 0x0f; outBuffer[52] = 0x0f; outBuffer[53] = 0x0f; outBuffer[54] = 0x00; outBuffer[55] = 0x06; // RDLENGTH outBuffer[56] = 0x60; outBuffer[57] = 0x00; // NB_FLAGS outBuffer[58] = IP[0]; outBuffer[59] = IP[1]; outBuffer[60] = IP[2]; outBuffer[61] = IP[3]; serverSocket.SendTo(outBuffer, remoteEndPoint); } } } Thread.Sleep(100); } } } } }
To test this program, run it on emulator and try to ping NETDUINO with a computer connected on the same subnet.
Is it possible to change the configuration of lwIP to support udp local broadcast ?
Pascal
MS ARM Compiler support
01 October 2010 - 11:48 AM
Why the ARM compiler provided with Embedded Compact 7 is not supported by .NET MF ?
There is certainly a good reason,
Just curious,
Pascal
Emulator Firmware
28 September 2010 - 01:10 PM
Hello,
To simplify developing and debuging of some piece of firmware, I imagine to use the emulator. Due to very constrained environement, the price of RVDS, the size of code generated by GNU G++ and the size of debug information, it would be great if I can write/test/debug my native code with emulator before.
As a example, for a IP stack , instead of using socket level with emulator, is it possible to strip this part, write a driver for WinpCap, and work on code between socket assembly and this driver with emulator ?
Anyone have experience on this ?
Any comments appreciate,
Pascal
uIP Introduction
24 September 2010 - 02:17 PM
Hello Netduino Community,
Some information about uIP,
uIP is a very small open-source TCP/IP stack written by Adam Dunkels from Swedish Institude of Computer Science. Same author as original lwIP. This stack can run also on 8 bits MCU.
The official uIP web site:
http://www.sics.se/~...x.php/Main_Page
This site is dedicated to the first version uIP and it support IPv4.
In parallel, Adam Dunkels work on a mini OS named Contiki:
http://www.sics.se/contiki/
In this mini-OS, you can see a more up-to-date version of uIP stack for IPv4 and IPv6. This stack is IPv6 ready. Compare to IPv6 support on lwIP which is experimental.
It doesn't support Dual Stack, so you need to choice between IPv4 and IPv6.
uIP can be used without Contiki.
Here is a example of porting IPv6 uIP on Arduino without Contiki using a enc28j60 chip:
http://sites.google....ipv6ethershield
A little question to Netduino Community :
What's your priority regarding porting IPv6 or IPv4 ?
Regarding this, one very important information:
If you plan to use low-power wireless like 802.15.4, IPv6 can be a good choice because of 6lowPAN. 6lowPAN use header compression to be compatible with 802.15.4. The dream is to be able to communicate with all devices, wire and wireless, simply by using IP. IPv4 over 802.15.4 is impossible due to low MTU size of 802.15.4 frame.
Pascal
- Netduino Forums
- → Viewing Profile: Topics: pascal06
- Privacy Policy