Cahute:卡西欧计算器的通信和文件格式管理工具
本帖最后由 CalcLoverHK 于 2024-12-21 01:30 编辑Cahute是一系列命令行工具和函数库,处理卡西欧90年代至今计算器相关的串行及USB通信协议和文件格式,由Cakeisalie5基于其前作libp7和p7utils开发。
目前最新版本(0.5)的Cahute能做到:
[*]与fx-9860G系列计算器双向传输文件
[*]共享fx-9860G及fx-CG系列计算器画面
此专案遵循CeCILL 2.1开源协议。
安装Cahute
2楼:从官方途径安装Cahute
11楼:自行编译Cahute:Linux篇
?:自行编译Cahute:Windows篇
?:自行编译Cahute:macOS篇
指令概述
3楼:p7
4楼:p7screen
5楼:p7os
?:xfer9860
?:CaS
快速教程
6楼:快速教程——取得计算器信息
7楼:快速教程——传送文件至计算器存储
8楼:快速教程——从计算器存储取得文件
9楼:快速教程——显示计算器画面
进阶教程
10楼:进阶教程——使用p7os刷写9750/9860系统
12楼:进阶教程——在WSL2上使用usbipd-win
计划中的内容:
[*]日志记录等级概述
相关链接
官方网站 【预览版】
软件仓库
问题报告指南
成为贡献者
从官方途径安装Cahute
本帖最后由 CalcLoverHK 于 2024-12-20 20:42 编辑Windows
目前Cahute没有官方Windows安装途径,但是你可以参考此章节编译Windows可执行文件。
macOS / OS X
苹果电脑用户可以使用Homebrew安装Cahute。
安装Homebrew后,请先断开所有计算器与电脑的通信再安装Cahute,否则可能会导致安装失败:
brew install cahute
Arch Linux / Manjaro Linux
Arch用户软件仓库(AUR)提供Cahute软件包,根据你喜好的AUR助手安装Cahute,例如paru或pikaur:
paru -S cahute
pikaur -S cahute安装Cahute后,请将自己的用户名加入到uucp群组,以允许Linux与计算器通信:
sudo usermod -a -G uucp <你的用户名>
GiteaPC
GiteaPC是一个Python程序工具,实现Planète Casio(卡西欧星球)开发者程序和函数库的自动化安装和更新。
以下指令将安装稳定版本分支(截至2024/10/10,最新稳定版本为0.5):
giteapc install cake/[email protected]如果你想安装开发版本(develop分支),只需将`@0.5`去掉即可。
Cahute的默认日志记录等级为`warning`,即只显示错误信息。想要显示调试信息(即`info`等级),请加上`:contributor`。
由于GiteaPC将udev规则安装在.local目录下,如果你想在整个系统中都能使用Cahute,请移动该规则配置文件到系统目录:
sudo mv ~/.local/lib/udev/rules.d/*.rules /etc/udev/rules.d/然后手动重启udev管理器:
sudo udevadm control --reload将自己的用户名加入到uucp群组,然后重启WSL会话:
sudo usermod -a -G uucp <你的用户名>
p7指令概述
本帖最后由 CalcLoverHK 于 2024-10-16 02:06 编辑完整版(英文):https://next.cahuteproject.org/cli/p7.html
p7命令用于与计算器存储器的交互。
通用参数
适用于所有子命令的选项:
[*]-h, --help:显示p7子命令帮助页面。
[*]-v, --version:显示版本信息及许可证。
[*]-l, --log <等级>:设置日志记录等级。(info,warning,error,fatal,none)
参考此章节以知悉各日志记录等级的用途:
https://next.cahuteproject.org/topics/logging.html
串行相关选项:
[*]--com <串行设备路径>:指定串行设备的位置。如忽略此选项,p7会选取USB模式下的计算器。
[*]--use <波特率><奇偶校验位><停止位元数>:使用串行参数。
<波特率>:通常为9600的倍数。默认为9600。
<奇偶校验位>:O(奇数),E(偶数),N(禁用)
<停止位元数>:1/2
如果没有指定--com选项,此选项将被忽略。
[*]--set <波特率><奇偶校验位><停止位元数>:设置计算器的串行参数。
如果没有指定--com选项,此选项将被忽略。
[*]--reset:重置串行参数至9600N2。
[*]--no-init:当开启连接时禁用起始握手信号。多用于连续执行p7指令。
[*]--no-exit:当关闭连接时禁用终止握手信号。多用于连续执行p7指令。
list-device子命令
p7 list-device显示可用串行设备的路径。
例子:
$ p7 list-devices
Available devices:
- /dev/ttyUSB1
- /dev/ttyUSB2
info子命令
p7 info显示已连接计算器的软硬件信息。
idle子命令
p7 idle不进行任何p7子命令用途,只用于连续执行命令时初始化、终止或更新串行参数。
send子命令
p7 send [选项...] <本地文件位置>传送在当前目录下的文件到计算器上。
可用选项:
[*]-#:显示进度条。
[*]-f, --force:如果计算器有相同名字的文件,强制覆写该文件。默认情况下计算器会提示是否进行覆写操作。
[*]-o, --output <文件名>:指定文件在计算器上的文件名。默认为本地文件位置的基本名称。
[*]-d, --directory <文件夹>:指定计算器的目的地文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)
get子命令
p7 get [选项...] <文件名>取得计算器上的文件。
可用选项:
[*]-#:显示进度条。
[*]-o, --output <文件名>:指定文件在电脑上的文件名。如果当前目录上有相同名字的文件,该文件将会被覆写。默认为计算器文件位置的文件名。
[*]-d, --directory <文件夹>:指定计算器文件所在的文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)
copy子命令
p7 copy [选项...] <文件名> <目的地文件名>复制计算器上的文件到其他位置。
可用选项:
[*]-d, --directory <文件夹>:指定文件名所在的文件夹。默认为计算器的根目录。
[*]-t, --to <目的地文件夹>:指定目的地文件名所在的文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)
delete子命令
p7 delete [选项...] <文件名>删除计算器上的文件。
可用选项:
[*]-d, --directory <文件夹>:指定计算器文件所在的文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)
list子命令
p7 list [选项...]列出计算器上的文件。
可用选项:
[*]-d, --directory:指定计算器的文件夹。默认为计算器的根目录。
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)
reset子命令
p7 reset [选项...]初始化计算器的储存。
可用选项:
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)
optimize子命令
p7 optimize [选项...]优化计算器的储存。
可用选项:
[*]--storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)
p7screen指令概述
本帖最后由 CalcLoverHK 于 2024-10-16 02:00 编辑完整版(英文):https://next.cahuteproject.org/cli/p7screen.html
p7screen指令用于投影计算器画面至电脑。
p7screen <选项...>可用选项:
[*]-h, --help:显示p7screen指令帮助页面。
[*]-v, --version:显示版本信息及许可证。
[*]-l, --log <等级>:设置日志记录等级。(info,warning,error,fatal,none)
参考此章节以知悉各日志记录等级的用途:
https://next.cahuteproject.org/topics/logging.html
[*]--com:指定串行设备的位置。默认情况下p7会选取USB模式下的计算器。
[*]--use:设置串行参数。格式为<波特率><奇偶校验位><停止位元数>:
<波特率>:通常为9600的倍数。默认为9600。
<奇偶校验位>:O(奇数),E(偶数),N(禁用)
<停止位元数>:1/2
如果没有指定--com选项,此选项将被忽略。
[*]--zoom:设置放大倍率,范围为1-16。
p7os指令概述
本帖最后由 CalcLoverHK 于 2024-11-5 15:10 编辑警告:此部分涉及非官方系统固件刷写,可能会导致你的计算器变砖和失去保修。
本人及原作者对于任何损失概不负责!
完整版(英文):https://next.cahuteproject.org/cli/p7os.html
p7os用于与计算器系统的交互和升级系统。
通用参数
[*]-h, --help:显示p7os指令帮助页面。
[*]-v, --version:显示版本信息及许可证。
[*]-l, --log <等级>:设置日志记录等级。(info,warning,error,fatal,none)
参考此章节以知悉各日志记录等级的用途:
https://next.cahuteproject.org/topics/logging.html
[*]-#:显示进度条。
[*]--no-prepare:不要上载Update.EXE,取决于该升级程序是否已经上载并在计算器上运行。
[*]-u, --uexe:使用自定义刷写程序。
如果未指定--no-prepare,必须要指定此选项。
prepare-only子命令
p7os prepare-only上载Update.EXE至计算器,然后不进行任何操作。
flash子命令
p7os flash [--erase-flash] <os.bin>刷写系统固件。
可用选项:
[*]--erase-flash:清除计算器存储。
get子命令
p7os get [-o <os.bin>]备份系统固件(包括所有用户数据和插件)。
可用选项:
[*]-o, --output <文件名>:指定备份固件的名称。
快速教程——取得计算器信息
本帖最后由 CalcLoverHK 于 2024-12-20 19:00 编辑如果你使用USB...
[*]使用mini-B USB电缆连接你的计算器。
[*]在计算器的对话框上选择DataTrans。
[*]执行p7 info指令。
如果你使用串行...
[*]使用SB-88或相容电缆连接你的计算器。
[*]将计算器的电缆类型设置为3PIN,并进入接收模式。
[*]执行p7 list-devices指令找出你的计算器所在的串行设备位置。
[*]执行p7 --com <串行设备位置> info指令。
执行指令后,你应该能得到类似于以下的信息:
Warning: Preprogrammed ROM information looks wiped out!
Warning: Username is not set.
CPU ID (probably out of date): RENESAS SH733701
Environnement ID: Gy363000
Product ID: kpQMLCpq
ROM capacity: 4096KiB
RAM capacity: 128KiB
Bootcode version: 00.10.0010
Bootcode size: 64KiB
OS version: 01.10.0000
OS offset: 0x00010000
OS size: 2496KiB
快速教程——传送文件至计算器存储
本帖最后由 CalcLoverHK 于 2024-12-20 19:01 编辑此教程假设你需要传送一个名为MYADDIN.G1A的文件。
如果你使用USB...
[*]使用mini-B USB电缆连接你的计算器。
[*]在计算器的对话框上选择DataTrans。
[*]执行p7 send MYADDIN.G1A指令将此文件传送至计算器。
如果你使用串行...
[*]使用SB-88或相容电缆连接你的计算器。
[*]将计算器的电缆类型设置为3PIN,并进入接收模式。
[*]执行p7 list-devices指令找出你的计算器所在的串行设备位置。
[*]执行p7 --com <串行设备位置> send MYADDIN.G1A指令将此文件传送至计算器。
如果计算器上有相同名字的文件,p7会询问你是否覆盖此文件。
[*]输入y确定覆盖操作,或;
[*]输入n取消传送文件。
OS 1.x的fx-9860G Slim接上USB电缆时不会显示对话框,而是根据当前Capture设置决定传送模式。要传送文件,请先将该设置设为Memory。
快速教程——从计算器存储取得文件
本帖最后由 CalcLoverHK 于 2024-12-20 19:01 编辑此教程假设你需要从计算器提取一个名为MYADDIN.G1A的文件。
如果你使用USB...
[*]使用mini-B USB电缆连接你的计算器。
[*]在计算器的对话框上选择DataTrans。
[*]执行p7 get MYADDIN.G1A指令将此文件传送至计算器。
如果你使用串行...
[*]使用SB-88或相容电缆连接你的计算器。
[*]将计算器的电缆类型设置为3PIN,并进入接收模式。
[*]执行p7 list-devices指令找出你的计算器所在的串行设备位置。
[*]执行p7 --com <串行设备位置> get MYADDIN.G1A指令将此文件传送至计算器。
OS 1.x的fx-9860G Slim接上USB电缆时不会显示对话框,而是根据当前Capture设置决定传送模式。要提取文件,请先将该设置设为Memory。
快速教程——显示计算器画面
本帖最后由 CalcLoverHK 于 2024-12-20 19:01 编辑如果你使用USB...
[*]使用mini-B USB电缆连接你的计算器。
[*]在计算器的对话框上选择Projector(9860系列)/ScreenR(XP)(CG系列)。
[*]执行p7screen指令。
如果你使用串行...
[*]使用SB-88或相容电缆连接你的计算器。
[*]将计算器的电缆类型设置为3PIN,并将Capture设置设为Projector。
[*]执行p7 list-devices指令找出你的计算器所在的串行设备位置。
[*]执行p7screen --com <串行设备位置>指令。
OS 1.x的fx-9860G Slim接上USB电缆时不会显示对话框,而是根据当前Capture设置决定传送模式。要显示此计算器的画面,请先将该设置设为OHP。
fx-CG系列计算器上有3种用于传送画面的通信协议,分别为:ScreenRecv,ScreenR(XP)及Projector。经测试,ScreenR(XP)的性能最佳,其次为ScreenRecv和Projector。
前往4楼查阅更多p7screen指令用途。
进阶教程——使用p7os刷写9750/9860系统
本帖最后由 CalcLoverHK 于 2024-12-20 19:01 编辑警告:此部分涉及非官方系统固件刷写,可能会导致你的计算器变砖和失去保修。
本人及原作者对于任何损失概不负责!
本教程将逐步示范如何使用p7os刷写系统。
前期知识
本教程将假设你已阅读本论坛的系统升级精华帖:
https://www.cncalc.org/thread-8335-1-1.html
https://www.cncalc.org/thread-11907-1-1.html
p7os的升级原理源自fxRemote,但不需要下载fxRemote刷机工具(仅支持Windows),故能在Linux和macOS平台执行,而且也可以选择不手动调出OS Error画面。
检查计算器的CPU信息
使用USB或串行电缆连接你的计算器,然后执行p7 info指令。你应得到类似于下面的信息:
Warning: Preprogrammed ROM information looks wiped out!
Warning: Username is not set.
CPU ID (probably out of date): RENESAS SH733701
Environnement ID: Gy363000
...CPU ID便是计算器的CPU信息。SH7337/SH7355是SH3处理器,所以仅能刷写SH3的系统版本,而SH7305则是SH4A。
备份系统
执行p7os get备份当前系统,具体用法请参考5楼。
下载系统固件
目前SH3机型的最佳系统版本为02.04.0200,而SH4A机型为02.05.0201。这俩版本的功能最全,其他版本则为了符合国际考试的要求而作出功能上的限制,比如说向量和单位转换。
请注意,由于fx-9860G Slim的键盘布局与其他机型不同,你需要刷写2.04固件的键位修复版才能正常使用。
本帖提供的固件来源于Planète Casio和Ti-Planet。
SH3机型(Slim除外):
Slim:
SH4A机型:
刷写系统
有两种途径:
[*]进入传输模式,然后执行p7os flash <os.bin>。
第一次执行的时候,计算器将会自动进入OS Error画面,这时候请再次执行刚才的指令。
[*]手动进入OS Error画面,具体方法请参照精华帖。SH4A机型用户也可以参考这个教程:
https://www.cncalc.org/forum.php?mod=viewthread&tid=24718
连接你的计算器,然后执行p7os flash <os.bin>。
画面显示刷写完成后,按计算器后面的P按钮重启计算器。
系统稍后会提示是否继续存储优化或初始化(实际上无论选择哪个选项都会初始化整个存储)。
至此大功告成。
自行编译Cahute:Linux篇
本帖最后由 CalcLoverHK 于 2024-12-21 01:30 编辑Cahute的依赖项为:
[*]CMake(3.16+)
[*]Python(3.8+)及toml模块
[*]GNU Make及pkg-config
[*]SDL(2.0+)
[*]libusb
选择以下两种途径之一下载Cahute源代码:
curl -o cahute-0.5.tar.gz https://ftp.cahuteproject.org/releases/cahute-0.5.tar.gz
tar xvaf cahute-0.5.tar.gzgit clone https://gitlab.com/cahuteproject/cahute.git cahute-0.5然后进行系统升级并安装所有依赖项:
[*]Debian系发行版
sudo apt-get update
sudo apt-get install cmake python3 python3-toml libusb-1.0-0-dev libsdl2-dev
[*]Arch Linux系发行版
sudo pacman -Sy cmake python python-toml libusb sdl2
[*]Void Linux系发行版
xbps-install cmake python3 python3-toml libusb-devel sdl2-devel在源代码压缩包的父目录下使用CMake编译Cahute:
cmake -B build -S cahute-0.5 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release如果你想直接安装到系统上,请使用以下指令:
sudo cmake --install build --strip或者安装到指定文件夹里:
DESTDIR=./<文件夹位置> cmake --install build --strip安装Cahute时CMake会自动配置udev规则,这意味着你需要手动重启udev管理器:
sudo udevadm control --reload将自己的用户名加入到uucp群组,然后重启WSL会话:
sudo usermod -a -G uucp <你的用户名>
进阶教程——在WSL2上使用usbipd-win
本帖最后由 CalcLoverHK 于 2024-12-20 20:41 编辑WSL 2原生不支持USB通信,但是可以安装usbipd-win软件以解决这个问题。
由于该项目托管在GitHub上,考虑到此网站在国内的存取问题,本帖会提供其安装包:
微软官网为此软件写了一篇教程,本帖将围绕此文章展开。
使用USB连接你的计算器到电脑,然后以管理员模式打开Powershell(命令提示符也可以)并输入以下指令:
usbipd list显示的列表应包含以下组合之一:07cf:6101 CESG502
07cf:6102 Casio MassStorage Device
07cf:6103 USB Mass Storage Device07cf为卡西欧的厂商识别码,而冒号后面的4位数是其产品识别码。
记下计算器的BUSID,并在WSL实例运行时执行以下指令进行绑定(仅此部分需要管理员权限):
usbipd bind -b <BUSID>最后,同样是在实例运行时执行以下指令将计算器USB设备附加到WSL主机:
usbipd attach -w -b <BUSID>值得留意的是断开再重新连接时需要重复上述步骤。要想始终连接到WSL实例,请在此指令后面加上`-a`选项:
usbipd attach -w -b <BUSID> -a
页:
[1]