Exemple #1
0
void* callBack::registerCCall(int index) {
    void* result = malloc(10);
    char* chunk = (char*) result;

    // MOV ECX, index
    chunk = store_byte(chunk, '\xB9');
    chunk = store_long(chunk, index);

    // JMP _handleCCallStub
    chunk = store_byte(chunk, '\xE9');
    chunk = store_long(chunk, ((long)StubRoutines::handle_C_callback_stub()) - (4 + (long) chunk));

    return result;
}
Exemple #2
0
/****************************************************************************
 *
 *  Name:		packet_send
 *	Function:	send a packet
 *	variable:	pPacket 	-- packet information point
 *  
 ****************************************************************************/
UINT32 packet_send(PPACKET pPacket)
{
	//create packet head buffer;
	unsigned char packet_head[PACKET_HEAD_LEN];
	unsigned char szCRC[4];
	
	MakePacketHeadBuffer(pPacket, packet_head);
	
	//send packet header
	if(PACKET_HEAD_LEN != com_send(packet_head, PACKET_HEAD_LEN))
	{
		return ERROR_SENDPACKETHEAD;
	}

	UINT32 nLength = pPacket->packet_length;

	if(0 != pPacket->blank_flag && PACKET_DATA == pPacket->packet_type)
		nLength = 4;
	
	if(nLength != com_send(pPacket->data_buffer, nLength))
	{
		return ERROR_SENDPACKETDATA;
	}

	UINT32 nCRC = MG_Table_Driven_CRC(0xFFFFFFFF, pPacket->data_buffer, nLength);
	store_long(szCRC, nCRC);
	if(4 != com_send(szCRC, 4))
	{
		return ERROR_SENDPACKETCRC;
	}	

	return SUCCESS;
}
Exemple #3
0
/****************************************************************************
 *
 *  Name:		MakePacketHeadBuffer
 *	Function:	Make Packet head buffer
 *	Remark:		local function
 *	variable:	
 *  
 ****************************************************************************/
void MakePacketHeadBuffer(PPACKET pPacket, unsigned char *packet_head)
{
	MEMSET(packet_head, 0, PACKET_HEAD_LEN);

	// set packet head information;
	MEMCPY(packet_head + PACKET_HEAD_FLAG_OFFSET, l_packet_head_flag, sizeof(l_packet_head_flag) - 1);
	MEMCPY(packet_head + PACKET_TYPE_OFFSET, &(pPacket->packet_type), sizeof(pPacket->packet_type)); 
	MEMCPY(packet_head + PACKET_BLANKFLAG_OFFSET, &(pPacket->blank_flag), sizeof(pPacket->blank_flag));	

	store_long(packet_head + PACKET_INDEX_OFFSET, pPacket->packet_index);
	MEMCPY(packet_head + PACKET_REPEAT_OFFSET, &(pPacket->packet_repeat), sizeof(pPacket->packet_repeat));

	store_long( packet_head + PACKET_LENGTH_OFFSET, pPacket->packet_length);
	UINT32 nCRC = MG_Table_Driven_CRC(0xFFFFFFFF, packet_head + PACKET_TYPE_OFFSET, PACKET_HEAD_LEN - 8);
	store_long( packet_head + PACKET_HEAD_CRC_OFFSET, nCRC);
	
}
Exemple #4
0
void* callBack::registerPascalCall(int index, int nofArgs) {
    void* result = malloc(15);
    char* chunk = (char*) result;

    // MOV ECX, index
    chunk = store_byte(chunk, '\xB9');
    chunk = store_long(chunk, index);

    // MOV EDX, number of bytes for parameters
    chunk = store_byte(chunk, '\xBA');
    chunk = store_long(chunk, nofArgs * sizeof(int));

    // JMP _handleCCallStub
    chunk = store_byte(chunk, '\xE9');
    chunk = store_long(chunk, ((long)StubRoutines::handle_pascal_callback_stub()) - (4 + (long) chunk));

    return result;
}
Exemple #5
0
void ota_save_parameter(UINT8 *p)
{
    unsigned long crc, len;
	
	MEMCPY(p+CHUNK_HEADER_SIZE, &m_ota_cfg, sizeof(m_ota_cfg));
	MG_Setup_CRC_Table();
    len = fetch_long(p + CHUNK_LENGTH);
	crc = (unsigned long)MG_Table_Driven_CRC(0xFFFFFFFF, p + CHUNK_NAME, len);
	store_long( (unsigned char*)(p + CHUNK_CRC), crc);
}
Exemple #6
0
/****************************************************************************
 *
 *  Name:		SendStatusPacket
 *	Function:	send a status packet
 *	variable:	cStatus	-- status
 *			nCode 	-- error code or status code
 *				
 *
 ****************************************************************************/
UINT32 SendStatusPacket(unsigned char cStatus, UINT32 nCode)
{
	PACKET packet;
	MEMSET(&packet, 0 , sizeof(PACKET));
	packet.packet_type = PACKET_STATUS;
	packet.packet_index = g_packet_index;
	packet.packet_repeat = g_packet_repeat;
	packet.blank_flag = 0;
	packet.packet_length = 5;
	packet.data_buffer[0] = cStatus;
	store_long(packet.data_buffer + 1, nCode);
	return packet_send(&packet);
}
Exemple #7
0
/****************************************************************************
 *
 *  Name:		SendRequestPacket
 *	Function:	Send a request status Packet
 *	variable:	nPacketNum		-- packet number request
 *				
 *				
 *  
 ****************************************************************************/
UINT32 SendRequestPacket(UINT32 nPacketNum)
{
	//data in packet = (4B)PacketNum + data
//	PACKET	packet;
	MEMSET(&send_packet, 0, sizeof(PACKET));
	send_packet.blank_flag = 0;
	send_packet.packet_type = PACKET_REQUEST;
	send_packet.packet_length = 4;		

	store_long(send_packet.data_buffer, nPacketNum);

	send_packet.packet_index = g_packet_index;
	send_packet.packet_repeat = g_packet_repeat;

	return packet_send(&send_packet);
}
Exemple #8
0
UINT32 SendDataPacket(UINT32 nPacketNum, unsigned char *szBuffer, UINT32 nLen)
{
	//data in packet = (4B)PacketNum + data
//	PACKET	packet;
	MEMSET(&send_packet, 0, sizeof(PACKET));
	send_packet.blank_flag = IsBlankPacket(szBuffer, nLen);
	send_packet.packet_type = PACKET_DATA;
	send_packet.packet_length = nLen + 4;		

	store_long(send_packet.data_buffer, nPacketNum);
	MEMCPY(send_packet.data_buffer + 4, szBuffer, nLen);

	send_packet.packet_index = g_packet_index;
	send_packet.packet_repeat = g_packet_repeat;

	return packet_send(&send_packet);
}