/** @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; }
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; }
/** @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; }
/**************************************************************************** * * 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; } } }