Exemple #1
0
    short orientation;
    short flash_mode;
    short flash_fired;
    short metering_mode;
};


#define BE(v)   ((v&0x000000FF)<<24)|((v&0x0000FF00)<<8)|((v&0x00FF0000)>>8)|((v&0xFF000000)>>24)   // Convert to big_endian

#define BADPIX_CFA_INDEX    6   // Index of CFAPattern value in badpixel_opcodes array

static unsigned int badpixel_opcode[] =
{
    // *** all values must be in big endian order

    BE(1),              // Count = 1

    BE(4),              // FixBadPixelsConstant = 4
    BE(0x01030000),     // DNG version = 1.3.0.0
    BE(1),              // Flags = 1
    BE(8),              // Opcode length = 8 bytes
    BE(0),              // Constant = 0
    BE(0),              // CFAPattern (set in code below)
};


static struct t_data_for_exif exif_data;

#define BE(v)   ((v&0x000000FF)<<24)|((v&0x0000FF00)<<8)|((v&0x00FF0000)>>8)|((v&0xFF000000)>>24)   // Convert to big_endian

// warning: according to TIFF format specification, elements must be sorted by tag value in ascending order!
Exemple #2
0
int main (void)
{
	if (!USPiEnvInitialize ())
	{
		return EXIT_HALT;
	}
	
	if (!USPiInitialize ())
	{
		LogWrite (FromSample, LOG_ERROR, "Cannot initialize USPi");

		USPiEnvClose ();

		return EXIT_HALT;
	}

	if (!USPiEthernetAvailable ())
	{
		LogWrite (FromSample, LOG_ERROR, "Ethernet device not found");

		USPiEnvClose ();

		return EXIT_HALT;
	}

	u8 OwnMACAddress[MAC_ADDRESS_SIZE];
	USPiGetMACAddress (OwnMACAddress);

	while (1)
	{
		u8 Buffer[USPI_FRAME_BUFFER_SIZE];
		unsigned nFrameLength;
		if (!USPiReceiveFrame (Buffer, &nFrameLength))
		{
			continue;
		}

		LogWrite (FromSample, LOG_NOTICE, "Frame received (length %u)", nFrameLength);

		if (nFrameLength < sizeof (TARPFrame))
		{
			continue;
		}

		TARPFrame *pARPFrame = (TARPFrame *) Buffer;
		if (   pARPFrame->Ethernet.nProtocolType	!= BE (ETH_PROT_ARP)
		    || pARPFrame->ARP.nHWAddressSpace		!= BE (HW_ADDR_ETHER)
		    || pARPFrame->ARP.nProtocolAddressSpace	!= BE (PROT_ADDR_IP)
		    || pARPFrame->ARP.nHWAddressLength		!= MAC_ADDRESS_SIZE
		    || pARPFrame->ARP.nProtocolAddressLength	!= IP_ADDRESS_SIZE
		    || pARPFrame->ARP.nOPCode			!= BE (ARP_REQUEST))
		{
			continue;
		}

		LogWrite (FromSample, LOG_NOTICE, "Valid ARP request from %u.%u.%u.%u received",
			  (unsigned) pARPFrame->ARP.ProtocolAddressSender[0],
			  (unsigned) pARPFrame->ARP.ProtocolAddressSender[1],
			  (unsigned) pARPFrame->ARP.ProtocolAddressSender[2],
			  (unsigned) pARPFrame->ARP.ProtocolAddressSender[3]);

		if (memcmp (pARPFrame->ARP.ProtocolAddressTarget, OwnIPAddress, IP_ADDRESS_SIZE) != 0)
		{
			continue;
		}

		LogWrite (FromSample, LOG_NOTICE, "ARP request is to us");

		// prepare reply packet
		memcpy (pARPFrame->Ethernet.MACReceiver, pARPFrame->ARP.HWAddressSender, MAC_ADDRESS_SIZE);
		memcpy (pARPFrame->Ethernet.MACSender, OwnMACAddress, MAC_ADDRESS_SIZE);
		pARPFrame->ARP.nOPCode = BE (ARP_REPLY);

		memcpy (pARPFrame->ARP.HWAddressTarget, pARPFrame->ARP.HWAddressSender, MAC_ADDRESS_SIZE);
		memcpy (pARPFrame->ARP.ProtocolAddressTarget, pARPFrame->ARP.ProtocolAddressSender, IP_ADDRESS_SIZE);

		memcpy (pARPFrame->ARP.HWAddressSender, OwnMACAddress, MAC_ADDRESS_SIZE);
		memcpy (pARPFrame->ARP.ProtocolAddressSender, OwnIPAddress, IP_ADDRESS_SIZE);
		
		if (!USPiSendFrame (pARPFrame, sizeof *pARPFrame))
		{
			LogWrite (FromSample, LOG_ERROR, "USPiSendFrame failed");

			break;
		}

		LogWrite (FromSample, LOG_NOTICE, "ARP reply successfully sent");
	}

	USPiEnvClose ();

	return EXIT_HALT;
}