I2C hang recover function added
Dependencies: UniGraphic mbed vt100
In this version, check_i2c_pins function was added in edge_mgr.cpp.
プログラムの起動時、I2Cモジュールを初期化する前に、I2Cに使用するピンの電位を確認し
もし一方でも Low に張り付いていた場合、SCL を GPIO 出力に設定して
所定回数 (I2C_UNLOCK_TRIAL_CYCLE) 反転させることにより、疑似リセットクロックを生成します。
その後は、通常の起動手順に復帰し、以降はこれまでと同様の動作をします。
Diff: afLib/Command.h
- Revision:
- 0:d895cd1cd897
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/afLib/Command.h Tue Apr 03 08:30:29 2018 +0000 @@ -0,0 +1,94 @@ +/** + * Copyright 2015 Afero, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef COMMAND_H__ +#define COMMAND_H__ + +#include "mbed.h" //wsugi +#include <string> //wsugi + +using namespace std; //wsugi + +#define SPI_CMD_MAX_LEN 256 + +#define UPDATE_REASON_UNKNOWN 0 +#define UPDATE_REASON_LOCAL_UPDATE 1 +#define UPDATE_REASON_SERVICE_SET 2 +#define UPDATE_REASON_MCU_SET 3 +#define UPDATE_REASON_RELINK 4 +#define UPDATE_REASON_REBOOT 5 + +class Command { +public: + Command(uint16_t len, uint8_t *bytes); + + Command(uint8_t requestId, const char *str); + + Command(uint8_t requestId, uint8_t cmd, uint16_t attrId); + + Command(uint8_t requestId, uint8_t cmd, uint16_t attrId, uint16_t valueLen, uint8_t *value); + + Command(uint8_t requestId, uint8_t cmd, uint16_t attrId, uint8_t status, uint8_t reason, uint16_t valueLen, + uint8_t *value); + + Command(); + + ~Command(); + + uint8_t getCommand(); + + uint8_t getReqId(); + + uint16_t getAttrId(); + + uint16_t getValueLen(); + + void getValue(uint8_t *value); + + uint8_t *getValueP(); + + uint16_t getSize(); + + uint16_t getBytes(uint8_t *bytes); + + bool isValid(); + + void dump(); + + void dumpBytes(); + +private: + uint8_t getVal(char c); + int strToValue(char *valueStr, uint8_t *value); + + uint8_t strToCmd(char *cmdStr); + + uint16_t strToAttrId(char *attrIdStr); + + uint16_t _len; + uint8_t _cmd; + uint8_t _requestId; + uint16_t _attrId; + uint8_t _status; + uint8_t _reason; + uint16_t _valueLen; + uint8_t *_value; + + char _printBuf[256]; + +}; + +#endif // COMMAND_H__