Example #1
0
/********************************************************************
 *	PICライター系コマンド受信と実行.
 ********************************************************************
 *	Cmd0 : 0x10〜0x1F
 */
void cmd_picspx(void)
{
	led_blink(8);

#if	PICAVR_WRITER
	if(		Cmd0==PICSPX_SETCMD16L) {	pic_setcmd16L();	} 
	else if(Cmd0==PICSPX_SETADRS24) {	setaddress24();		} 
	else if(Cmd0==PICSPX_GETDATA8L) {	pic_getdata8L();	} 
	else if(Cmd0==PICSPX_BITBANG)   {	pic_bitbang();      } 
	else if(Cmd0==PICSPX_BITREAD)   {	pic_bitbang();		}
#if	SUPPORT_PIC24F
	else if(Cmd0==PICSPX_WRITE24F) 	{	pic_write24f();		} 
	else if(Cmd0==PICSPX_READ24F) 	{	pic_read24f();		}
#endif
	else 
#endif

#if	INCLUDE_JTAG_CMD
		 if(Cmd0==HIDASP_JTAG_WRITE) {	jtag_command(0);	} 
	else if(Cmd0==HIDASP_JTAG_READ)  {	jtag_command(1);	}
	else if(Cmd0==HIDASP_JTAG_CTRLW) {	jtag_control(0);	}
	else if(Cmd0==HIDASP_JTAG_CTRLR) {	jtag_control(1);	}
#endif

//	else if(Cmd0==PICSPX_SETPGM) 	{pic_setpgm();}

	ToPcRdy = Cmd0 & 1;	// LSBがOnなら返答が必要.
}
int main (void)
{
	type_jtagnode node;
	int const probe_width = 16;
	UCHAR buffer [(probe_width >> 3) + 1];
    int ret = 0, val = 0;
	int k = 0, n = 0;
	int const required_bytes = 100000;
	FILE * f = NULL;
	bool bad_sample = false;
	int next_status = 0;

	f = fopen ("c_probe.bin","wb");
	if (!f) 
	{
		fprintf (stdout,"Unable to write dump file\n");
		return (1);
	}

	ret = jtag_init(0,0,0,0,C_PROBE_ID,0,"jtag_c_probe", 1, &node);
    if (ret < 0) 
	{
        printf("\nfailed to find jtag node");
        return 0;
    }

	fprintf (stdout,"\n\nCapturing %d bytes to c_probe.bin...\n",required_bytes);
	k=0;
	while (k<required_bytes)
	{
		if (k >= next_status)
		{
			fprintf (stdout,"%d pct complete\n",
				k * 100 / required_bytes);
			next_status += 2000;
		}

		// read from probe.  To write reverse 0 and buffer args
		jtag_command(&node, 0, probe_width, 0, buffer);
		if (buffer[1] == 0 && buffer[0] == 0)
		{
			// probe isn't ready
		}
		else 
		{
			bad_sample = false;
			for (n=0; n<2; n++)
			{
				if (buffer[n] >= 'A' && buffer[n] <= 'F')
				{
					buffer[n] = buffer[n] - 'A' + 10;
				}
				else if (buffer[n] >= 'a' && buffer[n] <= 'f')
				{
					buffer[n] = buffer[n] - 'a' + 10;
				}
				else if (buffer[n] >= '0' && buffer[n] <= '9')
				{
					buffer[n] = buffer[n] - '0';
				}
				else
				{
					bad_sample = true;
				}
			}
			if (bad_sample)
			{
				fprintf (stdout,"Read bad sample - link is corrupt?\n");
			}
			else
			{
				val = buffer[1];
				val <<= 4;
				val |= buffer[0];
				fprintf (f,"%c",val);
				k++;
			}
		}
	}
	jtag_close(&node);
	fclose (f);
	fprintf (stdout,"done\n");

	return (0);
             
}