예제 #1
0
/** @ingroup MASTER
 * ACM1620 LCD モジュールに文字列を書き出す。
 * - この処理は、一定時間処理をブロックし、IO判定などTIMER_0起点の動作などに影響を及ぼします。
 * - 2つのパラメータを両方とも NULL にすると、画面クリアを行います。
 *
 * @param puUpperRow 上段に書き込む文字列
 * @param puLowerRow 下段に書き込む文字列
 * @return
 */
bool_t bDraw2LinesLcd_ACM1602(const char *puUpperRow,
		const char *puLowerRow) {
	bool_t bOk = TRUE;
	const uint8 *pu8data;
	const uint32 u32delay = 20000;

	// ディスプレーのクリア
	const uint8 au8data[] = { 0x01, 0x38, 0x0c, 0x06, 0x00 };
	pu8data = au8data;
	while (*pu8data) {
		bOk &= bSMBusWrite(0x50, 0x00, 1, (uint8*) pu8data);
		vWait(u32delay);

		pu8data++;
	}

	// 上段への書き込み
	if (puUpperRow) {
		uint8 u8data = 0x80; // 上段のアドレス指定
		int i = 0;

		bOk &= bSMBusWrite(0x50, 0x00, 1, &u8data);
		vWait(u32delay);

		pu8data = (uint8*) puUpperRow;

		while (*pu8data && i < 16) {
			bOk &= bSMBusWrite(0x50, 0x80, 1, (uint8*) pu8data);
			vWait(u32delay);

			pu8data++;
			i++;
		}
	}

	// 下段への書き込み
	if (puLowerRow) {
		uint8 u8data = 0xC0; // 下段のアドレス指定
		int i = 0;

		bOk &= bSMBusWrite(0x50, 0x00, 1, &u8data);
		vWait(u32delay);

		pu8data = (uint8*) puLowerRow;

		while (*pu8data && i < 16) {
			bOk &= bSMBusWrite(0x50, 0x80, 1, (uint8*) pu8data);
			vWait(u32delay);

			pu8data++;
			i++;
		}
	}

	return bOk;
}
예제 #2
0
static bool_t bInit2LinesLcd_AQM0802A() {
	bool_t bOk = TRUE;
	const uint8 *pu8data;
	const uint32 u32delay = 2000;
	const uint8 u8addr = 0x3E;

	// ディスプレーのクリア
	const uint8 au8data[] = { 0x38, 0x39, 0x14, 0x70, 0x56, 0x6c, 0x00 };
	pu8data = au8data;
	while (*pu8data) {
		bOk &= bSMBusWrite(u8addr, 0x00, 1, (uint8*) pu8data);
		vWait(u32delay);

		pu8data++;
	}

	return bOk;
}
예제 #3
0
/** @ingroup MASTER
 * ACM1620 LCD モジュールに文字列を書き出す。
 * - この処理は、一定時間処理をブロックし、IO判定などTIMER_0起点の動作などに影響を及ぼします。
 * - 2つのパラメータを両方とも NULL にすると、画面クリアを行います。
 *
 * @param puUpperRow 上段に書き込む文字列
 * @param puLowerRow 下段に書き込む文字列
 * @return
 */
bool_t bDraw2LinesLcd_AQM0802A(const char *puUpperRow,
		const char *puLowerRow) {
	bool_t bOk = TRUE;
	const uint8 *pu8data;
	const uint32 u32delay = 2000;
	const uint8 u8addr = 0x3E;

	static bool_t bInit;

	// ディスプレーのクリア
	if (!bInit) {
		bOk &= bInit2LinesLcd_AQM0802A();
		vWait(400000);
		bInit = TRUE;
	}

	const uint8 au8data2[] = { 0x38, 0x0c, 0x01, 0x06, 0x00 };
	pu8data = au8data2;
	while (*pu8data) {
		bOk &= bSMBusWrite(u8addr, 0x00, 1, (uint8*) pu8data);
		vWait(u32delay);

		pu8data++;
	}

	// 上段への書き込み
	if (puUpperRow) {
		uint8 u8data = 0x80; // 上段のアドレス指定
		int i = 0;

		bOk &= bSMBusWrite(u8addr, 0x00, 1, &u8data);
		vWait(u32delay);

		pu8data = (uint8*) puUpperRow;

		while (*pu8data && i < 8) {
			bOk &= bSMBusWrite(u8addr, 0x40, 1, (uint8*) pu8data);
			vWait(u32delay);

			pu8data++;
			i++;
		}
	}

	// 下段への書き込み
	if (puLowerRow) {
		uint8 u8data = 0xC0; // 下段のアドレス指定
		int i = 0;

		bOk &= bSMBusWrite(u8addr, 0x00, 1, &u8data);
		vWait(u32delay);

		pu8data = (uint8*) puLowerRow;

		while (*pu8data && i < 8) {
			bOk &= bSMBusWrite(u8addr, 0x40, 1, (uint8*) pu8data);
			vWait(u32delay);

			pu8data++;
			i++;
		}
	}

	return bOk;
}
예제 #4
0
파일: Router.c 프로젝트: tsukuba/osd-i-dev1
/****************************************************************************
 *
 * NAME: vHandleSerialInput
 *
 * DESCRIPTION:
 *
 * PARAMETERS:      Name            RW  Usage
 *
 * RETURNS:
 *
 * NOTES:
 ****************************************************************************/
PRIVATE void vHandleSerialInput() {
	// handle UART command
	while (!SERIAL_bRxQueueEmpty(sSerPort.u8SerialPort)) {
		int16 i16Char;

		i16Char = SERIAL_i16RxChar(sSerPort.u8SerialPort);

		// process
		if (i16Char >=0 && i16Char <= 0xFF) {
			uint8 u8res = u8ParseSerCmd(&sSerCmd, (uint8)i16Char);
			if (u8res == E_SERCMD_VERBOSE) {
				vfPrintf(&sSerStream, "\n\rVERBOSE MODE = %s", bSerCmd_VerboseMode ? "ON" : "OFF");
				continue;
			}
			if (!bSerCmd_VerboseMode) continue;

			switch (i16Char) {
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
				sAppData.sFlash.sData.u8Layer = i16Char - '0';
				if (bFlash_Write(&sAppData.sFlash, FLASH_SECTOR_NUMBER - 1, 0)) {
					V_PRINTF( LB "Flash Saved (Router Layer #%d)... RESETTING", sAppData.sFlash.sData.u8Layer);
					vWait(100000);
					vAHI_SwReset();
				} else {
					V_PRINTF( LB "Failed to save flash...");
				}
				break;

			case 'i': // info
				_C {
					tsToCoNet_NwkLyTr_Context *pc = (tsToCoNet_NwkLyTr_Context *)(sAppData.pContextNwk);

					V_PRINTF( LB "Info: la=%d ty=%d ro=%02x st=%02x",
							pc->sInfo.u8Layer, pc->sInfo.u8NwkTypeId, pc->sInfo.u8Role, pc->sInfo.u8State);
					V_PRINTF( LB "Parent: %08x", pc->u32AddrHigherLayer);
					V_PRINTF( LB "LostParent: %d", pc->u8Ct_LostParent);
					V_PRINTF( LB "SecRescan: %d, SecRelocate: %d", pc->u8Ct_Second_To_Rescan, pc->u8Ct_Second_To_Relocate);
				}
				break;

			case '>':
				sToCoNet_AppContext.u8Channel++;
				if (sToCoNet_AppContext.u8Channel > 25)
					sToCoNet_AppContext.u8Channel = 0;
				ToCoNet_vRfConfig();
				V_PRINTF( LB"channel set to %d.", sToCoNet_AppContext.u8Channel);
				break;

			case '<':
				sToCoNet_AppContext.u8Channel--;
				if (sToCoNet_AppContext.u8Channel < 11)
					sToCoNet_AppContext.u8Channel = 25;
				ToCoNet_vRfConfig();
				V_PRINTF( LB"channel set to %d.", sToCoNet_AppContext.u8Channel);
				break;

			case 't':
				SPRINTF_vRewind();
				vfPrintf(SPRINTF_Stream, "TEST FROM ROUTER(#%08X)", ToCoNet_u32GetSerial());
				bTransmitToParent(sAppData.pContextNwk, SPRINTF_pu8GetBuff(), SPRINTF_u16Length());
				break;

			case 'd': case 'D':
				_C {
					static uint8 u8DgbLvl;

					u8DgbLvl++;
					if(u8DgbLvl > 10) u8DgbLvl = 0;
					ToCoNet_vDebugLevel(u8DgbLvl);

					V_PRINTF( LB"set NwkCode debug level to %d.", u8DgbLvl);
				}
				break;

			default:
				break;
			}
		}
	}