cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 758|回复: 11

[fx-9860/9750] Cahute:卡西欧计算器的通信和文件格式管理工具

[复制链接]
发表于 2024-10-10 22:55:08 | 显示全部楼层 |阅读模式
本帖最后由 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

计划中的内容:
  • 日志记录等级概述

相关链接
官方网站 【预览版】
软件仓库
问题报告指南
成为贡献者

 楼主| 发表于 2024-10-10 22:55:09 | 显示全部楼层

从官方途径安装Cahute

本帖最后由 CalcLoverHK 于 2024-12-20 20:42 编辑

Windows
目前Cahute没有官方Windows安装途径,但是你可以参考此章节编译Windows可执行文件。

macOS / OS X
苹果电脑用户可以使用Homebrew安装Cahute。
安装Homebrew后,请先断开所有计算器与电脑的通信再安装Cahute,否则可能会导致安装失败:
  1. brew install cahute
复制代码

Arch Linux / Manjaro Linux
Arch用户软件仓库(AUR)提供Cahute软件包,根据你喜好的AUR助手安装Cahute,例如paru或pikaur:
  1. paru -S cahute
  2. pikaur -S cahute
复制代码
安装Cahute后,请将自己的用户名加入到uucp群组,以允许Linux与计算器通信:
  1. sudo usermod -a -G uucp <你的用户名>
复制代码

GiteaPC
GiteaPC是一个Python程序工具,实现Planète Casio(卡西欧星球)开发者程序和函数库的自动化安装和更新。
以下指令将安装稳定版本分支(截至2024/10/10,最新稳定版本为0.5):
  1. giteapc install cake/[email protected]
复制代码
如果你想安装开发版本(develop分支),只需将`@0.5`去掉即可。
Cahute的默认日志记录等级为`warning`,即只显示错误信息。想要显示调试信息(即`info`等级),请加上`:contributor`。
由于GiteaPC将udev规则安装在.local目录下,如果你想在整个系统中都能使用Cahute,请移动该规则配置文件到系统目录:
  1. sudo mv ~/.local/lib/udev/rules.d/*.rules /etc/udev/rules.d/
复制代码
然后手动重启udev管理器:
  1. sudo udevadm control --reload
复制代码
将自己的用户名加入到uucp群组,然后重启WSL会话:
  1. sudo usermod -a -G uucp <你的用户名>
复制代码
 楼主| 发表于 2024-10-10 23:00:41 | 显示全部楼层

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子命令
  1. p7 list-device
复制代码
显示可用串行设备的路径。
例子:
  1. $ p7 list-devices
  2. Available devices:

  3. - /dev/ttyUSB1
  4. - /dev/ttyUSB2
复制代码

info子命令
  1. p7 info
复制代码
显示已连接计算器的软硬件信息。

idle子命令
  1. p7 idle
复制代码
不进行任何p7子命令用途,只用于连续执行命令时初始化、终止或更新串行参数。

send子命令
  1. p7 send [选项...] <本地文件位置>
复制代码
传送在当前目录下的文件到计算器上。
可用选项:
  • -#:显示进度条。
  • -f, --force:如果计算器有相同名字的文件,强制覆写该文件。默认情况下计算器会提示是否进行覆写操作。
  • -o, --output <文件名>:指定文件在计算器上的文件名。默认为本地文件位置的基本名称。
  • -d, --directory <文件夹>:指定计算器的目的地文件夹。默认为计算器的根目录。
  • --storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

get子命令
  1. p7 get [选项...] <文件名>
复制代码
取得计算器上的文件。
可用选项:
  • -#:显示进度条。
  • -o, --output <文件名>:指定文件在电脑上的文件名。如果当前目录上有相同名字的文件,该文件将会被覆写。默认为计算器文件位置的文件名。
  • -d, --directory <文件夹>:指定计算器文件所在的文件夹。默认为计算器的根目录。
  • --storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

copy子命令
  1. p7 copy [选项...] <文件名> <目的地文件名>
复制代码
复制计算器上的文件到其他位置。
可用选项:
  • -d, --directory <文件夹>:指定文件名所在的文件夹。默认为计算器的根目录。
  • -t, --to <目的地文件夹>:指定目的地文件名所在的文件夹。默认为计算器的根目录。
  • --storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

delete子命令
  1. p7 delete [选项...] <文件名>
复制代码
删除计算器上的文件。
可用选项:
  • -d, --directory <文件夹>:指定计算器文件所在的文件夹。默认为计算器的根目录。
  • --storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

list子命令
  1. p7 list [选项...]
复制代码
列出计算器上的文件。
可用选项:
  • -d, --directory:指定计算器的文件夹。默认为计算器的根目录。
  • --storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

reset子命令
  1. p7 reset [选项...]
复制代码
初始化计算器的储存。
可用选项:
  • --storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)

optimize子命令
  1. p7 optimize [选项...]
复制代码
优化计算器的储存。
可用选项:
  • --storage <存储地>:指定存储地。(fls0:存储内存,crd0:SD卡)
 楼主| 发表于 2024-10-10 23:01:16 | 显示全部楼层

p7screen指令概述

本帖最后由 CalcLoverHK 于 2024-10-16 02:00 编辑

完整版(英文):https://next.cahuteproject.org/cli/p7screen.html

p7screen指令用于投影计算器画面至电脑。
  1. 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。
 楼主| 发表于 2024-10-10 23:01:52 | 显示全部楼层

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子命令
  1. p7os prepare-only
复制代码
上载Update.EXE至计算器,然后不进行任何操作。

flash子命令
  1. p7os flash [--erase-flash] <os.bin>
复制代码
刷写系统固件。
可用选项:
  • --erase-flash:清除计算器存储。

get子命令
  1. p7os get [-o <os.bin>]
复制代码
备份系统固件(包括所有用户数据和插件)。
可用选项:
  • -o, --output <文件名>:指定备份固件的名称。

 楼主| 发表于 2024-10-15 18:29:47 | 显示全部楼层

快速教程——取得计算器信息

本帖最后由 CalcLoverHK 于 2024-12-20 19:00 编辑

如果你使用USB...
  • 使用mini-B USB电缆连接你的计算器。
  • 在计算器的对话框上选择DataTrans。
  • 执行p7 info指令。

如果你使用串行...
  • 使用SB-88或相容电缆连接你的计算器。
  • 将计算器的电缆类型设置为3PIN,并进入接收模式。
  • 执行p7 list-devices指令找出你的计算器所在的串行设备位置。
  • 执行p7 --com <串行设备位置> info指令。

执行指令后,你应该能得到类似于以下的信息:
  1. Warning: Preprogrammed ROM information looks wiped out!
  2. Warning: Username is not set.
  3. CPU ID (probably out of date): RENESAS SH733701
  4. Environnement ID: Gy363000
  5. Product ID: kpQMLCpq
  6. ROM capacity: 4096KiB
  7. RAM capacity: 128KiB
  8. Bootcode version: 00.10.0010
  9. Bootcode size: 64KiB
  10. OS version: 01.10.0000
  11. OS offset: 0x00010000
  12. OS size: 2496KiB
复制代码
 楼主| 发表于 2024-10-16 02:35:02 | 显示全部楼层

快速教程——传送文件至计算器存储

本帖最后由 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。
 楼主| 发表于 2024-10-16 11:36:56 | 显示全部楼层

快速教程——从计算器存储取得文件

本帖最后由 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。
 楼主| 发表于 2024-10-16 11:48:57 | 显示全部楼层

快速教程——显示计算器画面

本帖最后由 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指令用途。
 楼主| 发表于 2024-11-5 15:47:39 | 显示全部楼层

进阶教程——使用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指令。你应得到类似于下面的信息:
  1. Warning: Preprogrammed ROM information looks wiped out!
  2. Warning: Username is not set.
  3. CPU ID (probably out of date): RENESAS SH733701
  4. Environnement ID: Gy363000
  5. ...
复制代码
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除外): 2.04-sh3.bin (2.31 MB, 下载次数: 17)
Slim: 2.04-slim.bin (2.44 MB, 下载次数: 18)
SH4A机型: 2.05-sh4a.bin (2.44 MB, 下载次数: 18)

刷写系统
有两种途径:
  • 进入传输模式,然后执行p7os flash <os.bin>。
    第一次执行的时候,计算器将会自动进入OS Error画面,这时候请再次执行刚才的指令。
  • 手动进入OS Error画面,具体方法请参照精华帖。SH4A机型用户也可以参考这个教程:
    https://www.cncalc.org/forum.php?mod=viewthread&tid=24718
    连接你的计算器,然后执行p7os flash <os.bin>。
画面显示刷写完成后,按计算器后面的P按钮重启计算器。
系统稍后会提示是否继续存储优化或初始化(实际上无论选择哪个选项都会初始化整个存储)。

至此大功告成。
 楼主| 发表于 前天 19:04 | 显示全部楼层

自行编译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源代码:
  1. curl -o cahute-0.5.tar.gz [url]https://ftp.cahuteproject.org/releases/cahute-0.5.tar.gz[/url]
  2. tar xvaf cahute-0.5.tar.gz
复制代码
  1. git clone [url]https://gitlab.com/cahuteproject/cahute.git[/url] cahute-0.5
复制代码
然后进行系统升级并安装所有依赖项:
  • Debian系发行版
  1. sudo apt-get update
  2. sudo apt-get install cmake python3 python3-toml libusb-1.0-0-dev libsdl2-dev
复制代码
  • Arch Linux系发行版
  1. sudo pacman -Sy cmake python python-toml libusb sdl2
复制代码
  • Void Linux系发行版
  1. xbps-install cmake python3 python3-toml libusb-devel sdl2-devel
复制代码
在源代码压缩包的父目录下使用CMake编译Cahute:
  1. cmake -B build -S cahute-0.5 -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release
复制代码
如果你想直接安装到系统上,请使用以下指令:
  1. sudo cmake --install build --strip
复制代码
或者安装到指定文件夹里:
  1. DESTDIR=./<文件夹位置> cmake --install build --strip
复制代码
安装Cahute时CMake会自动配置udev规则,这意味着你需要手动重启udev管理器:
  1. sudo udevadm control --reload
复制代码
将自己的用户名加入到uucp群组,然后重启WSL会话:
  1. sudo usermod -a -G uucp <你的用户名>
复制代码
 楼主| 发表于 前天 20:40 | 显示全部楼层

进阶教程——在WSL2上使用usbipd-win

本帖最后由 CalcLoverHK 于 2024-12-20 20:41 编辑

WSL 2原生不支持USB通信,但是可以安装usbipd-win软件以解决这个问题。
由于该项目托管在GitHub上,考虑到此网站在国内的存取问题,本帖会提供其安装包:
usbipd-win_4.3.0.msi (4.55 MB, 下载次数: 0)

微软官网为此软件写了一篇教程,本帖将围绕此文章展开。
使用USB连接你的计算器到电脑,然后以管理员模式打开Powershell(命令提示符也可以)并输入以下指令:
  1. usbipd list
复制代码
显示的列表应包含以下组合之一:
  1. 07cf:6101 CESG502
  2. 07cf:6102 Casio MassStorage Device
  3. 07cf:6103 USB Mass Storage Device
复制代码
07cf为卡西欧的厂商识别码,而冒号后面的4位数是其产品识别码。
记下计算器的BUSID,并在WSL实例运行时执行以下指令进行绑定(仅此部分需要管理员权限):
  1. usbipd bind -b <BUSID>
复制代码
最后,同样是在实例运行时执行以下指令将计算器USB设备附加到WSL主机:
  1. usbipd attach -w -b <BUSID>
复制代码
值得留意的是断开再重新连接时需要重复上述步骤。要想始终连接到WSL实例,请在此指令后面加上`-a`选项:
  1. usbipd attach -w -b <BUSID> -a
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-12-22 00:22 , Processed in 0.051383 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表