Ejemplo n.º 1
0
gn_error enterchar(gn_data *data, struct gn_statemachine *state)
{
	unsigned char ch;
	gn_error error = GN_ERR_NONE;

	gn_data_clear(data);
	console_raw();

	while ((error = GN_ERR_NONE) && (read(0, &ch, 1) > 0)) {
		switch (ch) {
		case '\r':
			break;
		case '\n':
			data->key_code = GN_KEY_MENU;
			presskey(data, state);
			break;
#ifdef WIN32
		case '\033':
#else
		case '\e':
#endif
			data->key_code = GN_KEY_NAMES;
			presskey(data, state);
			break;
		default:
			data->character = ch;
			error = gn_sm_functions(GN_OP_EnterChar, data, state);
			if (error != GN_ERR_NONE)
				fprintf(stderr, _("Error entering char: %s\n"), gn_error_print(error));
			break;
		}
	}

	return error;
}
Ejemplo n.º 2
0
gn_error presskeysequence(gn_data *data, struct gn_statemachine *state)
{
	gn_error error = GN_ERR_NONE;
	unsigned char *syms = "0123456789#*PGR+-UDMN";
	gn_key_code keys[] = {GN_KEY_0, GN_KEY_1, GN_KEY_2, GN_KEY_3,
			      GN_KEY_4, GN_KEY_5, GN_KEY_6, GN_KEY_7,
			      GN_KEY_8, GN_KEY_9, GN_KEY_HASH,
			      GN_KEY_ASTERISK, GN_KEY_POWER, GN_KEY_GREEN,
			      GN_KEY_RED, GN_KEY_INCREASEVOLUME,
			      GN_KEY_DECREASEVOLUME, GN_KEY_UP, GN_KEY_DOWN,
			      GN_KEY_MENU, GN_KEY_NAMES};
	unsigned char ch, *pos;

	gn_data_clear(data);
	console_raw();

	while (read(0, &ch, 1) > 0) {
		if ((pos = strchr(syms, toupper(ch))) != NULL)
			data->key_code = keys[pos - syms];
		else
			continue;
		error = presskey(data, state);
	}

	return error;
}
Ejemplo n.º 3
0
void MainWindow::releasedBtnDown()
{
    if(stateBtnDown_Toggled == false) {
        stateBtnDown_Pushed = false;
    } else {
        stateBtnDown_Pushed = !stateBtnDown_Pushed;
    }

    if(isPushedBtnDown()) {
        btnDown->setText("[D]");
        labelDown->setText("DOWN");
    	presskey( KEY_TYPE_DOWN , KEY_EVT_PRESSED );
    } else {
        btnDown->setText("D");
        labelDown->setText("");
    	presskey( KEY_TYPE_DOWN , KEY_EVT_RELEASED );
    }
}
Ejemplo n.º 4
0
void MainWindow::releasedBtnEnter()
{
    if(stateBtnEnter_Toggled == false) {
        stateBtnEnter_Pushed = false;
    } else {
        stateBtnEnter_Pushed = !stateBtnEnter_Pushed;
    }

    if(isPushedBtnEnter()) {
        btnEnter->setText("[E]");
        labelEnter->setText("ENTER");
    	presskey( KEY_TYPE_ENTER , KEY_EVT_PRESSED );
    } else {
        btnEnter->setText("ENT");
        labelEnter->setText("");
    	presskey( KEY_TYPE_ENTER , KEY_EVT_RELEASED );
    }
}
Ejemplo n.º 5
0
/* ENTERボタン押下処理 */
void MainWindow::pressedBtnEnter()
{
    if(stateBtnEnter_Toggled == false) {
        btnEnter->setText("[E]");
        labelEnter->setText("ENTER");
        stateBtnEnter_Pushed = true;
    	presskey( KEY_TYPE_ENTER , KEY_EVT_PRESSED );
    }
}
Ejemplo n.º 6
0
/* BACKボタン押下処理 */
void MainWindow::pressedBtnBack()
{
    if(stateBtnBack_Toggled == false) {
        btnBack->setText("[B]");
        labelBack->setText(" BACK");
        stateBtnBack_Pushed = true;
    	presskey( KEY_TYPE_CLEAR , KEY_EVT_PRESSED );
    }
}
Ejemplo n.º 7
0
void MainWindow::releasedBtnBack()
{
    if(stateBtnBack_Toggled == false) {
        stateBtnBack_Pushed = false;
    } else {
        stateBtnBack_Pushed = !stateBtnBack_Pushed;
    }

    if(isPushedBtnBack()) {
        btnBack->setText("[B]");
        labelBack->setText(" BACK");
    	presskey( KEY_TYPE_CLEAR , KEY_EVT_PRESSED );
    } else {
        btnBack->setText("BACK");
        labelBack->setText("");
    	presskey( KEY_TYPE_CLEAR , KEY_EVT_RELEASED );
    }
}
Ejemplo n.º 8
0
/* 右ボタン押下処理 */
void MainWindow::pressedBtnRight()
{
    if(stateBtnRight_Toggled == false) {
        btnRight->setText("[R]");
        labelRight->setText("RIGHT");
        stateBtnRight_Pushed = true;
    	presskey( KEY_TYPE_RIGHT , KEY_EVT_PRESSED );
    }
}
Ejemplo n.º 9
0
void MainWindow::releasedBtnRight()
{
    if(stateBtnRight_Toggled == false) {
        stateBtnRight_Pushed = false;
    } else {
        stateBtnRight_Pushed = !stateBtnRight_Pushed;
    }

    if(isPushedBtnRight()) {
        btnRight->setText("[R]");
        labelRight->setText("RIGHT");
    	presskey( KEY_TYPE_RIGHT , KEY_EVT_PRESSED );
    } else {
        btnRight->setText("R");
        labelRight->setText("");
    	presskey( KEY_TYPE_RIGHT , KEY_EVT_RELEASED );
    }
}
Ejemplo n.º 10
0
/* 左ボタン押下処理 */
void MainWindow::pressedBtnLeft()
{
    if(stateBtnLeft_Toggled == false) {
        btnLeft->setText("[L]");
        labelLeft->setText(" LEFT");
        stateBtnLeft_Pushed = true;
    	presskey( KEY_TYPE_LEFT , KEY_EVT_PRESSED );
    }
}
Ejemplo n.º 11
0
void MainWindow::releasedBtnLeft()
{
    if(stateBtnLeft_Toggled == false) {
        stateBtnLeft_Pushed = false;
    } else {
        stateBtnLeft_Pushed = !stateBtnLeft_Pushed;
    }

    if(isPushedBtnLeft()) {
        btnLeft->setText("[L]");
        labelLeft->setText(" LEFT");
    	presskey( KEY_TYPE_LEFT , KEY_EVT_PRESSED );
    } else {
        btnLeft->setText("L");
        labelLeft->setText("");
    	presskey( KEY_TYPE_LEFT , KEY_EVT_RELEASED );
    }
}
Ejemplo n.º 12
0
/* 下ボタン押下処理 */
void MainWindow::pressedBtnDown()
{
    if(stateBtnDown_Toggled == false) {
        btnDown->setText("[D]");
        labelDown->setText("DOWN");
        stateBtnDown_Pushed = true;
    	presskey( KEY_TYPE_DOWN , KEY_EVT_PRESSED );
    }
}
Ejemplo n.º 13
0
void MainWindow::releasedBtnUp()
{
    if(stateBtnUp_Toggled == false) {
        stateBtnUp_Pushed = false;
    } else {
        stateBtnUp_Pushed = !stateBtnUp_Pushed;
    }

    if(isPushedBtnUp()) {
        btnUp->setText("[U]");
        labelUp->setText("  UP");
    	presskey( KEY_TYPE_UP , KEY_EVT_PRESSED );
    } else {
        btnUp->setText("U");
        labelUp->setText("");
    	presskey( KEY_TYPE_UP , KEY_EVT_RELEASED );
    }
}
Ejemplo n.º 14
0
/* 上ボタン押下処理 */
void MainWindow::pressedBtnUp()
{
    if(stateBtnUp_Toggled == false) {
        btnUp->setText("[U]");
        labelUp->setText("  UP");
        stateBtnUp_Pushed = true;
    	presskey( KEY_TYPE_UP , KEY_EVT_PRESSED );
    }
}
Ejemplo n.º 15
0
void pokerMode(){
	while (1) {
		for (r = 0; r < ROWS; r++) {
			pullDownRows(r);
			read_cols(r);
			unselect_rows();
		}
		for (r = 0; r < ROWS; r++) {
			for (c = 0; c < COLS; c++) {
				if (keystate[r][c] > 0x08) {
					if (keytype[r][c] == 0x01) {
						if (FN == 0x00)
							presskey(hexaKeys[r][c]);
						else if (FN == 0x01)
							presskey(hexaKeys2[r][c]);
					} else if (keytype[r][c] == 0x02) {
						pressModifierKeys(hexaKeys[r][c]);
					} else if (keytype[r][c] == 0x04 && FN == 0x00) {
						FN = 0x02;
					}
				} else {
					if (keytype[r][c] == 0x01) {
						if (FN == 0x00)
							releasekey(hexaKeys[r][c]);
						else if (FN == 0x01)
							releasekey(hexaKeys2[r][c]);
					} else if (keytype[r][c] == 0x02) {
						releaseModifierKeys(hexaKeys[r][c]);
					} else if (keytype[r][c] == 0x04 && FN == 0x01) {
						FN = 0x04;
					}
				}

			}
		}
		  if(FN==0x02){FN=0x01;releaseAll();}
		  else if(FN==0x04){FN=0x00;releaseAll();}
		  usb_keyboard_send();
			///////////////////////////////////
		}
}
void usb_keyboard_class::press(uint16_t n)
{
	uint8_t key, mod, msb, modrestore=0;

	msb = n >> 8;
	if (msb >= 0xC2 && msb <= 0xDF) {
		n = (n & 0x3F) | ((uint16_t)(msb & 0x1F) << 6);
	} else
	if (msb == 0x80) {
		presskey(0, n);
		return;
	} else
	if (msb == 0x40) {
		presskey(n, 0);
		return;
	}
	KEYCODE_TYPE keycode = unicode_to_keycode(n);
	if (!keycode) return;
	#ifdef DEADKEYS_MASK
	KEYCODE_TYPE deadkeycode = deadkey_to_keycode(keycode);
	if (deadkeycode) {
		modrestore = keyboard_report_data[0];
		if (modrestore) {
			keyboard_report_data[0] = 0;
			send_now();
		}
		// TODO: test if operating systems recognize
		// deadkey sequences when other keys are held
		mod = keycode_to_modifier(deadkeycode);
		key = keycode_to_key(deadkeycode);
		presskey(key, mod);
		releasekey(key, mod);
	}
	#endif
	mod = keycode_to_modifier(keycode);
	key = keycode_to_key(keycode);
	presskey(key, mod | modrestore);
}
Ejemplo n.º 17
0
Archivo: brk.c Proyecto: nannanwuhui/C
//用sbrk分配内存,brk释放内存比较方便
int main(){
    void* p1 = sbrk(4);//RXXX
    printf("p1 = %p\n",p1);
    void *p2 = sbrk(4);//XXXX RXXX
    printf("p2 = %p\n",p2);
    void *p3 = sbrk(4);//XXXX XXXX RXXX
    printf("p3 = %p\n",p3);
    void *p4 = sbrk(4);//XXXX XXXX XXXX RXXX
    printf("p4 = %p\n",p4);
    void *p5 = sbrk(0);//XXXX XXXX XXXX XXXX R
    printf("p5 = %p\n",p5);
    int* pn = (int*)p1;
    pn[0] = 0;
    pn[1] = 1;
    pn[2] = 2;
    pn[3] = 3;
    pn[1023] = 1023;//1页的最后一个整型
    printf("%d,%d,%d,%d,%d\n",pn[0],pn[1],pn[2],pn[3],pn[1023]);
//    pn[1024] = 1024;//Segmentation fault (core dumped)
    void* p6 = sbrk(-8);//XXXX XXXX ---- ---- R
    printf("p6 = %p\n",p6);//p5
    void *p7 = sbrk(-8);//---- ---- R--- ---- -
    printf("p7 = %p\n",p7);//p3
    printf("------------\n");
    int page = getpagesize();
    printf("%p\n",sbrk(page));
    presskey();
    printf("%p\n",sbrk(1));
    presskey();
    printf("%p\n",sbrk(-1));
    presskey();
    printf("%p\n",sbrk(-page));
    presskey();
    printf("------------\n");
    p1 = sbrk(0);    //R--- ---- ---- ---- -
    printf("p1 = %p\n",p1);
    brk(p2 = p1 + 4);//XXXX S--- ---- ---- -
    printf("p2 = %p\n",p2);
    brk(p3 = p2 + 4);//XXXX XXXX S--- ---- -
    printf("p3 = %p\n",p3);
    brk(p4 = p3 + 4);//XXXX XXXX XXXX S
    printf("p4 = %p\n",p4);
    brk(p5 = p4 + 4);//XXXX XXXX XXXX XXXX S
    printf("p5 = %p\n",p5);
    pn = (int*)p1;
    pn[0] = 0;
    pn[1] = 1;
    pn[2] = 2;
    pn[3] = 3;
    pn[1023] = 1023;//1页的最后一个整型
    printf("%d,%d,%d,%d,%d\n",pn[0],pn[1],pn[2],pn[3],pn[1023]);
//    pn[1024] = 1024;
    brk(p3);//XXXX XXXX S--- ---- -
    brk(p1);//S--- ---- ---- ---- -
//    pn[0] = 0;//已经解除映射了,不能再给pn[0]赋值了
    printf("------------------\n");
    void * begin = sbrk(sizeof(int));
    if((intptr_t)begin == -1){
        perror("sbrk");
        return -1;
    }
    pn = (int*)begin;
    *pn = 1234;
    double *pd = (double*)sbrk(sizeof(double));
    if((intptr_t)pd == -1){
        perror("sbrk");
        return -1;
    }
    *pd = 3.14;
    char* psz = (char*)sbrk(256 * sizeof(char));
    if((intptr_t)psz == -1){
        perror("sbrk");
        return -1;
    }
    sprintf(psz,"Hello, World !");
    printf("%d,%g,%s\n",*pn,*pd,psz);
    brk(begin);
    return 0;
}