|
|
View previous topic :: View next topic |
Author |
Message |
cvargcal
Joined: 17 Feb 2015 Posts: 134
|
Send ascii as keyboard |
Posted: Thu Oct 04, 2018 3:37 pm |
|
|
Hi, I have one buffer with this data "04C65D12FF3880CA".
But alway send 04c65d12f380ca, not send complete the array.
Code: | // convert ascii character to USB HID Keyboard scancode.
// realize that there is no difference between 'A'/'a' or '1'/'!', they
// have the same scancode. in order to differentiate between these the SHIFT
// modifier has to be set (see kb_modifier_t).
// see kb_scancode_t for other scancodes that are not ascii.
// bit8 will be set if shift needs to be set (for upper case chars or '!' vs '1')
unsigned int16 ToHidKeyboardScancode(char c)
{
unsigned int16 shift = 0;
if ((c>='A')&&(c<='Z'))
{
c = tolower(c);
shift = 0x100;
}
if ((c>='a')&&(c<='z'))
{
return(((c-='a')+4)|shift);
}
if ((c>='1')&&(c<='9'))
{
return((c-='0')+0x1D);
}
switch(c)
{
case '!': return(0x11E);
case '@': return(0x11F);
case '#': return(0x120);
case '$': return(0x121);
case '%': return(0x122);
case '^': return(0x123);
case '&': return(0x124);
case '*': return(0x125);
case '(': return(0x126);
case ')': return(0x127);
case '0': return(0x27);
case '\n': return(0x28); //enter
case '\r': return(0x28); //enter
case '\b': return(0x2A); //backspace
case '\t': return(0x2B); //tab
case ' ': return(0x2C); //space
case '_': return(0x12D);
case '-': return(0x2D);
case '+': return(0x12E);
case '=': return(0x2E);
case '{': return(0x12F);
case '[': return(0x2F);
case '}': return(0x130);
case ']': return(0x30);
case '|': return(0x131);
case '\\': return(0x31);
case ':': return(0x133);
case ';': return(0x33);
case '"': return(0x134);
case '\'': return(0x34);
case '~': return(0x135);
case '`': return(0x35);
case '<': return(0x136);
case ',': return(0x36);
case '>': return(0x137);
case '.': return(0x37);
case '?': return(0x138);
case '/': return(0x38);
}
}
void usb_keyboard_task(void) {
static int8 tx_msg[7]={0,0,0,0,0,0,0};
unsigned int8 leds;
unsigned int16 scancode;
if ( messageReady){ // I have full the array "04C65D12FF3880CA"
scancode = ToHidKeyboardScancode(moduleResonseBuffer[i++]);
//if(bit_test(scancode, 8)) tx_msg[0] = KB_MODIFIER_LEFT_SHIFT;
tx_msg[2] = scancode;
usb_put_packet(2,tx_msg,sizeof(tx_msg),USB_DTS_TOGGLE);
}
else{
tx_msg[2]=0;
usb_put_packet(2,tx_msg,sizeof(tx_msg),USB_DTS_TOGGLE);
if (moduleResonseBuffer[i]==0x00 ) {
i=0;
messageReady=0;
output_high(LED_CMD); delay_ms(300); output_low(LED_CMD);
}
//receive NUM LOCK, CAPS LOCK, etc LED status from PC. e won't do anything with it.
if (usb_kbhit(2)) usb_get_packet(2, &leds, 1);
} |
What happened, work fine but not send all characters.
04C65D12FF3880CA
04c65d12ff3880ca
I see... no send when the "asccii" is repeated... |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9245 Location: Greensville,Ontario
|
|
Posted: Thu Oct 04, 2018 5:25 pm |
|
|
1) This is not a complete PIC program so I can't see important details like 'fuses'...
2) What is the receiving device ? A PC ? If so, what program is receiving the PIC's data stream ? If I assume a 'terminal program', like RealTerm, perhaps it's not configured properly or the PC is doing 'other stuff'.
Jay |
|
|
cvargcal
Joined: 17 Feb 2015 Posts: 134
|
|
Posted: Thu Oct 04, 2018 5:55 pm |
|
|
I have the soluction... I have send 0 after every press...
Thanks
Its very slow... How I can do more faster? |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9245 Location: Greensville,Ontario
|
|
Posted: Fri Oct 05, 2018 2:43 pm |
|
|
You'd have to show us the whole program not just bits of it. You do show a delay_ms(300); though. THAT would slow it down !
If I'm reading the post correctly, you have a PC keyboard connected to a PIC that then sends the key presses via USB to a PC. If so, it should be FAST ! I did similar project 20 years ago with a 16C84 running at 4MHz. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|